From e7a1d6b4d6e2594651dd917401238560e77f0cec Mon Sep 17 00:00:00 2001 From: wanwu Date: Tue, 14 Oct 2025 23:56:20 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=A7=B9=20=E6=B8=85=E7=90=86=E9=87=8D?= =?UTF-8?q?=E5=A4=8D=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 删除根目录中重复的 NestJS 配置文件 - 删除 tsconfig.json, tsconfig.build.json, eslint.config.mjs, .prettierrc - 保留 wwjcloud-nest/ 目录中的完整配置 - 避免配置冲突,确保项目结构清晰 --- .prettierrc | 4 - ARCHITECTURE.md | 116 - README-DOCKER.md | 366 -- {admin => admin-vben}/.browserslistrc | 0 {admin => admin-vben}/.changeset/README.md | 0 {admin => admin-vben}/.changeset/config.json | 0 {admin => admin-vben}/.commitlintrc.js | 0 {admin => admin-vben}/.dockerignore | 0 {admin => admin-vben}/.editorconfig | 0 {admin => admin-vben}/.env.development | 0 {admin => admin-vben}/.env.production | 0 {admin => admin-vben}/.eslintrc.json | 0 {admin => admin-vben}/.gitattributes | 0 {admin => admin-vben}/.gitconfig | 0 {admin => admin-vben}/.github/CODEOWNERS | 0 .../.github/ISSUE_TEMPLATE/bug-report.yml | 0 .../.github/ISSUE_TEMPLATE/docs.yml | 0 .../ISSUE_TEMPLATE/feature-request.yml | 0 .../.github/actions/setup-node/action.yml | 0 .../.github/commit-convention.md | 0 {admin => admin-vben}/.github/config.yml | 0 {admin => admin-vben}/.github/contributing.md | 0 {admin => admin-vben}/.github/dependabot.yml | 0 .../.github/pull_request_template.md | 0 .../.github/release-drafter.yml | 0 {admin => admin-vben}/.github/semantic.yml | 0 .../.github/workflows/build.yml | 0 .../.github/workflows/changeset-version.yml | 0 .../.github/workflows/ci.yml | 0 .../.github/workflows/codeql.yml | 0 .../.github/workflows/deploy.yml | 0 .../.github/workflows/draft.yml | 0 .../.github/workflows/issue-close-require.yml | 0 .../.github/workflows/issue-labeled.yml | 0 .../.github/workflows/lock.yml | 0 .../.github/workflows/release-tag.yml | 0 .../.github/workflows/rerun.yml | 0 .../workflows/semantic-pull-request.yml | 0 .../.github/workflows/stale.yml | 0 {admin => admin-vben}/.gitignore | 0 {admin => admin-vben}/.gitpod.yml | 0 {admin => admin-vben}/.node-version | 0 {admin => admin-vben}/.npmrc | 0 {admin => admin-vben}/.prettierignore | 0 {admin => admin-vben}/.prettierrc.mjs | 0 {admin => admin-vben}/.stylelintignore | 0 {admin => admin-vben}/Dockerfile | 0 {admin => admin-vben}/LICENSE | 0 {admin => admin-vben}/README.ja-JP.md | 0 {admin => admin-vben}/README.md | 0 {admin => admin-vben}/README.zh-CN.md | 0 .../apps/backend-mock/README.md | 0 .../apps/backend-mock/api/auth/codes.ts | 0 .../apps/backend-mock/api/auth/login.post.ts | 0 .../apps/backend-mock/api/auth/logout.post.ts | 0 .../backend-mock/api/auth/refresh.post.ts | 0 .../apps/backend-mock/api/demo/bigint.ts | 0 .../apps/backend-mock/api/menu/all.ts | 0 .../apps/backend-mock/api/status.ts | 0 .../backend-mock/api/system/dept/.post.ts | 0 .../api/system/dept/[id].delete.ts | 0 .../backend-mock/api/system/dept/[id].put.ts | 0 .../apps/backend-mock/api/system/dept/list.ts | 0 .../apps/backend-mock/api/system/menu/list.ts | 0 .../api/system/menu/name-exists.ts | 0 .../api/system/menu/path-exists.ts | 0 .../apps/backend-mock/api/system/role/list.ts | 0 .../apps/backend-mock/api/table/list.ts | 0 .../apps/backend-mock/api/test.get.ts | 0 .../apps/backend-mock/api/test.post.ts | 0 .../apps/backend-mock/api/upload.ts | 0 .../apps/backend-mock/api/user/info.ts | 0 .../apps/backend-mock/error.ts | 0 .../apps/backend-mock/middleware/1.api.ts | 0 .../apps/backend-mock/nitro.config.ts | 0 .../apps/backend-mock/package.json | 0 .../apps/backend-mock/routes/[...].ts | 0 .../apps/backend-mock/tsconfig.build.json | 0 .../apps/backend-mock/tsconfig.json | 0 .../apps/backend-mock/utils/cookie-utils.ts | 0 .../apps/backend-mock/utils/jwt-utils.ts | 0 .../apps/backend-mock/utils/mock-data.ts | 0 .../apps/backend-mock/utils/response.ts | 0 .../apps/web-antd/.env.analyze | 0 .../apps/web-antd/.env.development | 0 .../apps/web-antd/.env.production | 0 .../web-antd/__tests__/e2e/auth-login.spec.ts | 0 .../web-antd/__tests__/e2e/common/auth.ts | 0 .../apps/web-antd/index.html | 0 .../apps/web-antd/package.json | 0 .../apps/web-antd/postcss.config.mjs | 0 .../apps/web-antd/public/favicon.ico | Bin .../web-antd/src/adapter/component/index.ts | 0 .../apps/web-antd/src/adapter/form.ts | 0 .../apps/web-antd/src/adapter/vxe-table.ts | 0 .../web-antd/src/addon/cms/api/article.ts | 0 .../cms/lang/zh-cn/article.category.json | 0 .../addon/cms/lang/zh-cn/article.edit.json | 0 .../addon/cms/lang/zh-cn/article.list.json | 0 .../src/addon/cms/lang/zh-cn/common.json | 0 .../src/addon/cms/views/article/category.vue | 0 .../article/components/edit-category.vue | 0 .../src/addon/cms/views/article/edit.vue | 0 .../src/addon/cms/views/article/list.vue | 0 .../cms/views/diy/components/edit-article.vue | 0 .../src/addon/example/router/index.ts | 0 .../src/addon/example/views/dashboard.vue | 0 .../src/addon/example/views/public.vue | 0 .../apps/web-antd/src/api/core/auth.ts | 0 .../apps/web-antd/src/api/core/index.ts | 0 .../apps/web-antd/src/api/core/menu.ts | 0 .../apps/web-antd/src/api/core/user.ts | 0 .../web-antd/src/api/examples/download.ts | 0 .../apps/web-antd/src/api/examples/index.ts | 0 .../web-antd/src/api/examples/json-bigint.ts | 0 .../apps/web-antd/src/api/examples/params.ts | 0 .../apps/web-antd/src/api/examples/status.ts | 0 .../apps/web-antd/src/api/examples/table.ts | 0 .../apps/web-antd/src/api/examples/upload.ts | 0 .../apps/web-antd/src/api/index.ts | 0 .../apps/web-antd/src/api/request.ts | 0 .../apps/web-antd/src/api/site.ts | 0 .../apps/web-antd/src/api/system/dept.ts | 0 .../apps/web-antd/src/api/system/index.ts | 0 .../apps/web-antd/src/api/system/menu.ts | 0 .../apps/web-antd/src/api/system/role.ts | 0 .../apps/web-antd/src/app.vue | 0 .../apps/web-antd/src/bootstrap.ts | 0 .../apps/web-antd/src/constants/layout.ts | 0 .../apps/web-antd/src/layouts/app/admin.vue | 0 .../apps/web-antd/src/layouts/app/home.vue | 0 .../apps/web-antd/src/layouts/app/site.vue | 0 .../apps/web-antd/src/layouts/auth.vue | 0 .../apps/web-antd/src/layouts/basic.vue | 0 .../apps/web-antd/src/layouts/index.ts | 0 .../apps/web-antd/src/locales/README.md | 0 .../apps/web-antd/src/locales/index.ts | 0 .../src/locales/langs/en-US/demos.json | 0 .../src/locales/langs/en-US/examples.json | 0 .../src/locales/langs/en-US/page.json | 0 .../src/locales/langs/en-US/system.json | 0 .../src/locales/langs/zh-CN/demos.json | 0 .../src/locales/langs/zh-CN/examples.json | 0 .../src/locales/langs/zh-CN/page.json | 0 .../src/locales/langs/zh-CN/system.json | 0 .../apps/web-antd/src/main.ts | 0 .../apps/web-antd/src/preferences.ts | 0 .../apps/web-antd/src/router/access.ts | 0 .../apps/web-antd/src/router/guard.ts | 0 .../apps/web-antd/src/router/index.ts | 0 .../apps/web-antd/src/router/routes/core.ts | 0 .../apps/web-antd/src/router/routes/index.ts | 0 .../router/routes/modules/admin-setting.ts | 0 .../src/router/routes/modules/app-entries.ts | 0 .../src/router/routes/modules/dashboard.ts | 0 .../src/router/routes/modules/demos.ts | 0 .../src/router/routes/modules/examples.ts | 0 .../src/router/routes/modules/site.ts | 0 .../src/router/routes/modules/system.ts | 0 .../src/router/routes/modules/vben.ts | 0 .../apps/web-antd/src/store/auth.ts | 0 .../apps/web-antd/src/store/index.ts | 0 .../apps/web-antd/src/views/_core/README.md | 0 .../web-antd/src/views/_core/about/index.vue | 0 .../views/_core/authentication/code-login.vue | 0 .../_core/authentication/forget-password.vue | 0 .../src/views/_core/authentication/login.vue | 0 .../_core/authentication/qrcode-login.vue | 0 .../views/_core/authentication/register.vue | 0 .../src/views/_core/fallback/coming-soon.vue | 0 .../src/views/_core/fallback/forbidden.vue | 0 .../views/_core/fallback/internal-error.vue | 0 .../src/views/_core/fallback/not-found.vue | 0 .../src/views/_core/fallback/offline.vue | 0 .../src/views/admin/setting/layout/index.vue | 0 .../web-antd/src/views/app/admin/index.vue | 0 .../web-antd/src/views/app/home/index.vue | 0 .../web-antd/src/views/app/site/index.vue | 0 .../dashboard/analytics/analytics-trends.vue | 0 .../analytics/analytics-visits-data.vue | 0 .../analytics/analytics-visits-sales.vue | 0 .../analytics/analytics-visits-source.vue | 0 .../dashboard/analytics/analytics-visits.vue | 0 .../src/views/dashboard/analytics/index.vue | 0 .../src/views/dashboard/workspace/index.vue | 0 .../src/views/demos/access/admin-visible.vue | 0 .../src/views/demos/access/button-control.vue | 0 .../web-antd/src/views/demos/access/index.vue | 0 .../views/demos/access/menu-visible-403.vue | 0 .../src/views/demos/access/super-visible.vue | 0 .../src/views/demos/access/user-visible.vue | 0 .../src/views/demos/active-icon/index.vue | 0 .../web-antd/src/views/demos/badge/index.vue | 0 .../views/demos/breadcrumb/lateral-detail.vue | 0 .../src/views/demos/breadcrumb/lateral.vue | 0 .../views/demos/breadcrumb/level-detail.vue | 0 .../views/demos/features/clipboard/index.vue | 0 .../demos/features/file-download/base64.ts | 0 .../demos/features/file-download/index.vue | 0 .../demos/features/full-screen/index.vue | 0 .../features/hide-menu-children/children.vue | 0 .../features/hide-menu-children/parent.vue | 0 .../src/views/demos/features/icons/index.vue | 0 .../demos/features/json-bigint/index.vue | 0 .../demos/features/login-expired/index.vue | 0 .../views/demos/features/menu-query/index.vue | 0 .../views/demos/features/new-window/index.vue | 0 .../request-params-serializer/index.vue | 0 .../src/views/demos/features/tabs/index.vue | 0 .../views/demos/features/tabs/tab-detail.vue | 0 .../vue-query/concurrency-caching.vue | 0 .../views/demos/features/vue-query/index.vue | 0 .../features/vue-query/infinite-queries.vue | 0 .../features/vue-query/paginated-queries.vue | 0 .../features/vue-query/query-retries.vue | 0 .../views/demos/features/vue-query/typing.ts | 0 .../views/demos/features/watermark/index.vue | 0 .../src/views/demos/nested/menu-1.vue | 0 .../src/views/demos/nested/menu-2-1.vue | 0 .../src/views/demos/nested/menu-3-1.vue | 0 .../src/views/demos/nested/menu-3-2-1.vue | 0 .../src/views/examples/button-group/index.vue | 0 .../captcha/point-selection-captcha.vue | 0 .../views/examples/captcha/slider-captcha.vue | 0 .../captcha/slider-rotate-captcha.vue | 0 .../captcha/slider-translate-captcha.vue | 0 .../src/views/examples/count-to/index.vue | 0 .../src/views/examples/doc-button.vue | 0 .../examples/drawer/auto-height-demo.vue | 0 .../src/views/examples/drawer/base-demo.vue | 0 .../views/examples/drawer/dynamic-demo.vue | 0 .../examples/drawer/form-drawer-demo.vue | 0 .../views/examples/drawer/in-content-demo.vue | 0 .../src/views/examples/drawer/index.vue | 0 .../examples/drawer/shared-data-demo.vue | 0 .../src/views/examples/ellipsis/index.vue | 0 .../web-antd/src/views/examples/form/api.vue | 0 .../src/views/examples/form/basic.vue | 0 .../src/views/examples/form/custom-layout.vue | 0 .../src/views/examples/form/custom.vue | 0 .../src/views/examples/form/dynamic.vue | 0 .../src/views/examples/form/merge.vue | 0 .../examples/form/modules/two-fields.vue | 0 .../src/views/examples/form/query.vue | 0 .../src/views/examples/form/rules.vue | 0 .../examples/form/scroll-to-error-test.vue | 0 .../src/views/examples/json-viewer/data.ts | 0 .../src/views/examples/json-viewer/index.vue | 0 .../src/views/examples/layout/col-page.vue | 0 .../src/views/examples/loading/index.vue | 0 .../views/examples/modal/auto-height-demo.vue | 0 .../src/views/examples/modal/base-demo.vue | 0 .../src/views/examples/modal/blur-demo.vue | 0 .../src/views/examples/modal/drag-demo.vue | 0 .../src/views/examples/modal/dynamic-demo.vue | 0 .../views/examples/modal/form-modal-demo.vue | 0 .../views/examples/modal/in-content-demo.vue | 0 .../src/views/examples/modal/index.vue | 0 .../src/views/examples/modal/nested-demo.vue | 0 .../views/examples/modal/shared-data-demo.vue | 0 .../src/views/examples/motion/index.vue | 0 .../src/views/examples/resize/basic.vue | 0 .../src/views/examples/tippy/index.vue | 0 .../src/views/examples/vxe-table/basic.vue | 0 .../views/examples/vxe-table/custom-cell.vue | 0 .../views/examples/vxe-table/edit-cell.vue | 0 .../src/views/examples/vxe-table/edit-row.vue | 0 .../src/views/examples/vxe-table/fixed.vue | 0 .../src/views/examples/vxe-table/form.vue | 0 .../src/views/examples/vxe-table/remote.vue | 0 .../views/examples/vxe-table/table-data.ts | 0 .../src/views/examples/vxe-table/tree.vue | 0 .../src/views/examples/vxe-table/virtual.vue | 0 .../apps/web-antd/src/views/site/group.vue | 0 .../apps/web-antd/src/views/site/list.vue | 0 .../web-antd/src/views/system/dept/data.ts | 0 .../web-antd/src/views/system/dept/list.vue | 0 .../src/views/system/dept/modules/form.vue | 0 .../web-antd/src/views/system/menu/data.ts | 0 .../web-antd/src/views/system/menu/list.vue | 0 .../src/views/system/menu/modules/form.vue | 0 .../web-antd/src/views/system/role/data.ts | 0 .../web-antd/src/views/system/role/list.vue | 0 .../src/views/system/role/modules/form.vue | 0 .../web-antd/src/views/system/user/list.vue | 0 .../apps/web-antd/tailwind.config.mjs | 0 .../apps/web-antd/tsconfig.json | 0 .../apps/web-antd/tsconfig.node.json | 0 .../apps/web-antd/vite.config.mts | 0 {admin => admin-vben}/auto-imports.d.ts | 0 {admin => admin-vben}/components.d.ts | 0 {admin => admin-vben}/cspell.json | 0 .../.vitepress/components/demo-preview.vue | 0 .../docs/.vitepress/components/index.ts | 0 .../.vitepress/components/preview-group.vue | 0 .../docs/.vitepress/config/en.mts | 0 .../docs/.vitepress/config/index.mts | 0 .../.vitepress/config/plugins/demo-preview.ts | 0 .../docs/.vitepress/config/shared.mts | 0 .../docs/.vitepress/config/zh.mts | 0 .../theme/components/site-layout.vue | 0 .../theme/components/vben-contributors.vue | 0 .../docs/.vitepress/theme/index.ts | 0 .../docs/.vitepress/theme/plugins/hm.ts | 0 .../docs/.vitepress/theme/styles/base.css | 0 .../docs/.vitepress/theme/styles/index.ts | 0 .../.vitepress/theme/styles/variables.css | 0 {admin => admin-vben}/docs/package.json | 0 .../docs/public/logos/logo.png | Bin .../docs/public/logos/mysql.svg | 0 .../docs/public/logos/nestjs.svg | 0 .../docs/public/logos/redis.svg | 0 .../docs/public/logos/typeorm.svg | 0 .../docs/public/logos/wwjcloud.svg | 0 {admin => admin-vben}/docs/scripts/README.md | 0 .../docs/scripts/generate-api-docs.js | 0 .../docs/scripts/sync-api-docs.js | 0 .../docs/src/_env/adapter/component.ts | 0 .../docs/src/_env/adapter/form.ts | 0 .../docs/src/_env/adapter/vxe-table.ts | 0 .../docs/src/_env/node/adapter/form.ts | 0 .../docs/src/_env/node/adapter/vxe-table.ts | 0 .../docs/src/commercial/community.md | 0 .../docs/src/commercial/customized.md | 0 .../docs/src/commercial/technical-support.md | 0 .../src/components/common-ui/vben-alert.md | 0 .../common-ui/vben-api-component.md | 0 .../common-ui/vben-count-to-animator.md | 0 .../src/components/common-ui/vben-drawer.md | 0 .../common-ui/vben-ellipsis-text.md | 0 .../src/components/common-ui/vben-form.md | 0 .../src/components/common-ui/vben-modal.md | 0 .../components/common-ui/vben-vxe-table.md | 0 .../docs/src/components/introduction.md | 0 .../docs/src/components/layout-ui/page.md | 0 .../docs/src/demos/vben-alert/alert/index.vue | 0 .../src/demos/vben-alert/confirm/index.vue | 0 .../src/demos/vben-alert/prompt/index.vue | 0 .../vben-api-component/cascader/index.vue | 0 .../vben-count-to-animator/basic/index.vue | 0 .../vben-count-to-animator/custom/index.vue | 0 .../demos/vben-drawer/auto-height/drawer.vue | 0 .../demos/vben-drawer/auto-height/index.vue | 0 .../src/demos/vben-drawer/basic/index.vue | 0 .../src/demos/vben-drawer/dynamic/drawer.vue | 0 .../src/demos/vben-drawer/dynamic/index.vue | 0 .../src/demos/vben-drawer/extra/drawer.vue | 0 .../src/demos/vben-drawer/extra/index.vue | 0 .../demos/vben-drawer/shared-data/drawer.vue | 0 .../demos/vben-drawer/shared-data/index.vue | 0 .../vben-ellipsis-text/auto-display/index.vue | 0 .../demos/vben-ellipsis-text/expand/index.vue | 0 .../demos/vben-ellipsis-text/line/index.vue | 0 .../vben-ellipsis-text/tooltip/index.vue | 0 .../docs/src/demos/vben-form/api/index.vue | 0 .../docs/src/demos/vben-form/basic/index.vue | 0 .../docs/src/demos/vben-form/custom/index.vue | 0 .../src/demos/vben-form/dynamic/index.vue | 0 .../docs/src/demos/vben-form/query/index.vue | 0 .../docs/src/demos/vben-form/rules/index.vue | 0 .../demos/vben-modal/animation-type/index.vue | 0 .../demos/vben-modal/auto-height/index.vue | 0 .../demos/vben-modal/auto-height/modal.vue | 0 .../docs/src/demos/vben-modal/basic/index.vue | 0 .../src/demos/vben-modal/draggable/index.vue | 0 .../src/demos/vben-modal/draggable/modal.vue | 0 .../src/demos/vben-modal/dynamic/index.vue | 0 .../src/demos/vben-modal/dynamic/modal.vue | 0 .../docs/src/demos/vben-modal/extra/index.vue | 0 .../docs/src/demos/vben-modal/extra/modal.vue | 0 .../demos/vben-modal/shared-data/index.vue | 0 .../demos/vben-modal/shared-data/modal.vue | 0 .../src/demos/vben-vxe-table/basic/index.vue | 0 .../vben-vxe-table/custom-cell/index.vue | 0 .../demos/vben-vxe-table/edit-cell/index.vue | 0 .../demos/vben-vxe-table/edit-row/index.vue | 0 .../src/demos/vben-vxe-table/fixed/index.vue | 0 .../src/demos/vben-vxe-table/form/index.vue | 0 .../docs/src/demos/vben-vxe-table/mock-api.ts | 0 .../src/demos/vben-vxe-table/remote/index.vue | 0 .../src/demos/vben-vxe-table/table-data.ts | 0 .../src/demos/vben-vxe-table/tree/index.vue | 0 .../demos/vben-vxe-table/virtual/index.vue | 0 {admin => admin-vben}/docs/src/en/index.md | 0 .../src/en/veben/guide/essentials/build.md | 0 .../src/en/veben/guide/essentials/concept.md | 0 .../en/veben/guide/essentials/development.md | 0 .../veben/guide/essentials/external-module.md | 0 .../src/en/veben/guide/essentials/icons.md | 0 .../src/en/veben/guide/essentials/route.md | 0 .../src/en/veben/guide/essentials/server.md | 0 .../src/en/veben/guide/essentials/settings.md | 0 .../src/en/veben/guide/essentials/styles.md | 0 .../src/en/veben/guide/in-depth/access.md | 0 .../en/veben/guide/in-depth/check-updates.md | 0 .../src/en/veben/guide/in-depth/features.md | 0 .../src/en/veben/guide/in-depth/layout.md | 0 .../src/en/veben/guide/in-depth/loading.md | 0 .../src/en/veben/guide/in-depth/locale.md | 0 .../docs/src/en/veben/guide/in-depth/login.md | 0 .../docs/src/en/veben/guide/in-depth/theme.md | 0 .../en/veben/guide/in-depth/ui-framework.md | 0 .../en/veben/guide/introduction/changelog.md | 0 .../veben/guide/introduction/quick-start.md | 0 .../en/veben/guide/introduction/roadmap.md | 0 .../src/en/veben/guide/introduction/thin.md | 0 .../src/en/veben/guide/introduction/vben.md | 0 .../src/en/veben/guide/introduction/why.md | 0 .../docs/src/en/veben/guide/other/faq.md | 0 .../en/veben/guide/other/project-update.md | 0 .../src/en/veben/guide/other/remove-code.md | 0 .../src/en/veben/guide/project/changeset.md | 0 .../docs/src/en/veben/guide/project/cli.md | 0 .../docs/src/en/veben/guide/project/dir.md | 0 .../src/en/veben/guide/project/standard.md | 0 .../src/en/veben/guide/project/tailwindcss.md | 0 .../docs/src/en/veben/guide/project/test.md | 0 .../docs/src/en/veben/guide/project/vite.md | 0 .../docs/src/en/veben/index.md | 0 .../docs/src/friend-links/index.md | 0 {admin => admin-vben}/docs/src/index.md | 0 .../docs/src/public/favicon.ico | Bin .../docs/src/public/guide/devtools.png | Bin .../docs/src/public/guide/loading.png | Bin .../docs/src/public/guide/locale.png | Bin .../docs/src/public/guide/login-expired.png | Bin .../docs/src/public/guide/login.png | Bin .../docs/src/public/guide/preferences.png | Bin .../docs/src/public/guide/qq.png | Bin .../docs/src/public/guide/qq_channel.png | Bin .../docs/src/public/guide/report.png | Bin .../docs/src/public/guide/test.png | Bin .../docs/src/public/guide/update-notice.png | Bin .../docs/src/public/logos/nitro.svg | 0 .../docs/src/public/logos/shadcn-ui.svg | 0 .../docs/src/public/logos/turborepo.svg | 0 .../docs/src/public/logos/vite.svg | 0 .../docs/src/sponsor/personal.md | 0 .../docs/src/vben/guide/essentials/build.md | 0 .../docs/src/vben/guide/essentials/concept.md | 0 .../src/vben/guide/essentials/development.md | 0 .../vben/guide/essentials/external-module.md | 0 .../docs/src/vben/guide/essentials/icons.md | 0 .../docs/src/vben/guide/essentials/route.md | 0 .../docs/src/vben/guide/essentials/server.md | 0 .../src/vben/guide/essentials/settings.md | 0 .../docs/src/vben/guide/essentials/styles.md | 0 .../docs/src/vben/guide/in-depth/access.md | 0 .../src/vben/guide/in-depth/check-updates.md | 0 .../docs/src/vben/guide/in-depth/features.md | 0 .../docs/src/vben/guide/in-depth/layout.md | 0 .../docs/src/vben/guide/in-depth/loading.md | 0 .../docs/src/vben/guide/in-depth/locale.md | 0 .../docs/src/vben/guide/in-depth/login.md | 0 .../docs/src/vben/guide/in-depth/theme.md | 0 .../src/vben/guide/in-depth/ui-framework.md | 0 .../docs/src/vben/guide/index.md | 0 .../src/vben/guide/introduction/changelog.md | 0 .../vben/guide/introduction/quick-start.md | 0 .../src/vben/guide/introduction/roadmap.md | 0 .../docs/src/vben/guide/introduction/thin.md | 0 .../docs/src/vben/guide/introduction/vben.md | 0 .../docs/src/vben/guide/introduction/why.md | 0 .../docs/src/vben/guide/other/faq.md | 0 .../src/vben/guide/other/project-update.md | 0 .../docs/src/vben/guide/other/remove-code.md | 0 .../docs/src/vben/guide/project/changeset.md | 0 .../docs/src/vben/guide/project/cli.md | 0 .../docs/src/vben/guide/project/dir.md | 0 .../docs/src/vben/guide/project/standard.md | 0 .../src/vben/guide/project/tailwindcss.md | 0 .../docs/src/vben/guide/project/test.md | 0 .../docs/src/vben/guide/project/vite.md | 0 .../src/wwjcloud/ai/coordination-example.md | 0 .../docs/src/wwjcloud/ai/coordination.md | 0 .../docs/src/wwjcloud/ai/frontend-workflow.md | 0 .../docs/src/wwjcloud/ai/index.md | 0 .../docs/src/wwjcloud/ai/planner.md | 0 .../docs/src/wwjcloud/ai/tooling.md | 0 .../src/wwjcloud/architecture/constraints.md | 0 .../docs/src/wwjcloud/gateway/architecture.md | 0 .../src/wwjcloud/gateway/development-plan.md | 0 .../docs/src/wwjcloud/gateway/index.md | 0 .../docs/src/wwjcloud/gateway/kong/README.md | 0 .../docs/src/wwjcloud/gateway/kong/deck.yaml | 0 .../docs/src/wwjcloud/gateway/overview.md | 0 .../docs/src/wwjcloud/gateway/quick-start.md | 0 .../docs/src/wwjcloud/guide/concepts.md | 0 .../docs/src/wwjcloud/guide/config-center.md | 0 .../docs/src/wwjcloud/guide/introduction.md | 0 .../docs/src/wwjcloud/guide/quick-start.md | 0 .../docs/src/wwjcloud/guide/why.md | 0 .../docs/src/wwjcloud/index.md | 0 .../wwjcloud/openapi/api/adminapi/index.md | 0 .../wwjcloud/openapi/api/frontend/index.md | 0 .../docs/src/wwjcloud/openapi/api/index.md | 0 .../wwjcloud/openapi/standards/error-codes.md | 0 .../wwjcloud/openapi/standards/response.md | 0 .../src/wwjcloud/openapi/standards/restful.md | 0 .../docs/src/wwjcloud/progress.md | 0 .../project/ai-prompts-and-constraints.md | 0 .../docs/src/wwjcloud/project/comparison.md | 0 .../project/data-consistency-and-jobs.md | 0 .../src/wwjcloud/project/deploy-1panel.md | 0 .../src/wwjcloud/project/domain-boundaries.md | 0 .../docs/src/wwjcloud/project/plan.md | 0 .../docs/src/wwjcloud/project/roadmap.md | 0 .../docs/src/wwjcloud/project/selection.md | 0 .../docs/src/wwjcloud/project/vendor.md | 0 .../docs/src/wwjcloud/structure/overview.md | 0 .../docs/tailwind.config.mjs | 0 {admin => admin-vben}/docs/tsconfig.json | 0 {admin => admin-vben}/eslint.config.mjs | 0 {admin => admin-vben}/index.html | 0 .../lint-configs/commitlint-config/index.mjs | 0 .../commitlint-config/package.json | 0 .../eslint-config/build.config.ts | 0 .../lint-configs/eslint-config/package.json | 0 .../eslint-config/src/configs/command.ts | 0 .../eslint-config/src/configs/comments.ts | 0 .../eslint-config/src/configs/disableds.ts | 0 .../eslint-config/src/configs/ignores.ts | 0 .../eslint-config/src/configs/import.ts | 0 .../eslint-config/src/configs/index.ts | 0 .../eslint-config/src/configs/javascript.ts | 0 .../eslint-config/src/configs/jsdoc.ts | 0 .../eslint-config/src/configs/jsonc.ts | 0 .../eslint-config/src/configs/node.ts | 0 .../src/configs/perfectionist.ts | 0 .../eslint-config/src/configs/prettier.ts | 0 .../eslint-config/src/configs/regexp.ts | 0 .../eslint-config/src/configs/test.ts | 0 .../eslint-config/src/configs/turbo.ts | 0 .../eslint-config/src/configs/typescript.ts | 0 .../eslint-config/src/configs/unicorn.ts | 0 .../eslint-config/src/configs/vue.ts | 0 .../eslint-config/src/custom-config.ts | 0 .../lint-configs/eslint-config/src/index.ts | 0 .../lint-configs/eslint-config/src/util.ts | 0 .../lint-configs/eslint-config/tsconfig.json | 0 .../lint-configs/prettier-config/index.mjs | 0 .../lint-configs/prettier-config/package.json | 0 .../lint-configs/stylelint-config/index.mjs | 0 .../stylelint-config/package.json | 0 .../internal/node-utils/build.config.ts | 0 .../internal/node-utils/package.json | 0 .../node-utils/src/__tests__/hash.test.ts | 0 .../node-utils/src/__tests__/path.test.ts | 0 .../internal/node-utils/src/constants.ts | 0 .../internal/node-utils/src/date.ts | 0 .../internal/node-utils/src/fs.ts | 0 .../internal/node-utils/src/git.ts | 0 .../internal/node-utils/src/hash.ts | 0 .../internal/node-utils/src/index.ts | 0 .../internal/node-utils/src/monorepo.ts | 0 .../internal/node-utils/src/path.ts | 0 .../internal/node-utils/src/prettier.ts | 0 .../internal/node-utils/src/spinner.ts | 0 .../internal/node-utils/tsconfig.json | 0 .../internal/tailwind-config/build.config.ts | 0 .../internal/tailwind-config/package.json | 0 .../internal/tailwind-config/src/index.ts | 0 .../internal/tailwind-config/src/module.d.ts | 0 .../tailwind-config/src/plugins/entry.ts | 0 .../tailwind-config/src/postcss.config.ts | 0 .../internal/tailwind-config/tsconfig.json | 0 .../internal/tsconfig/base.json | 0 .../internal/tsconfig/library.json | 0 .../internal/tsconfig/node.json | 0 .../internal/tsconfig/package.json | 0 .../internal/tsconfig/web-app.json | 0 .../internal/tsconfig/web.json | 0 .../internal/vite-config/build.config.ts | 0 .../internal/vite-config/package.json | 0 .../vite-config/src/config/application.ts | 0 .../internal/vite-config/src/config/common.ts | 0 .../internal/vite-config/src/config/index.ts | 0 .../vite-config/src/config/library.ts | 0 .../internal/vite-config/src/index.ts | 0 .../internal/vite-config/src/options.ts | 0 .../vite-config/src/plugins/archiver.ts | 0 .../src/plugins/extra-app-config.ts | 0 .../vite-config/src/plugins/importmap.ts | 0 .../internal/vite-config/src/plugins/index.ts | 0 .../src/plugins/inject-app-loading/README.md | 0 .../default-loading-antd.html | 0 .../inject-app-loading/default-loading.html | 0 .../src/plugins/inject-app-loading/index.ts | 0 .../src/plugins/inject-metadata.ts | 0 .../vite-config/src/plugins/license.ts | 0 .../vite-config/src/plugins/nitro-mock.ts | 0 .../internal/vite-config/src/plugins/print.ts | 0 .../vite-config/src/plugins/vxe-table.ts | 0 .../internal/vite-config/src/typing.ts | 0 .../internal/vite-config/src/utils/env.ts | 0 .../internal/vite-config/tsconfig.json | 0 {admin => admin-vben}/lefthook.yml | 0 {admin => admin-vben}/nginx.conf | 0 {admin => admin-vben}/package.json | 0 .../packages/@core/README.md | 0 .../packages/@core/base/README.md | 0 .../packages/@core/base/design/package.json | 0 .../@core/base/design/src/css/global.css | 0 .../@core/base/design/src/css/nprogress.css | 0 .../@core/base/design/src/css/transition.css | 0 .../packages/@core/base/design/src/css/ui.css | 0 .../base/design/src/design-tokens/dark.css | 0 .../base/design/src/design-tokens/default.css | 0 .../base/design/src/design-tokens/index.ts | 0 .../packages/@core/base/design/src/index.ts | 0 .../@core/base/design/src/scss-bem/bem.scss | 0 .../base/design/src/scss-bem/constants.scss | 0 .../packages/@core/base/design/tsconfig.json | 0 .../@core/base/design/vite.config.mts | 0 .../packages/@core/base/icons/build.config.ts | 0 .../packages/@core/base/icons/package.json | 0 .../@core/base/icons/src/create-icon.ts | 0 .../packages/@core/base/icons/src/index.ts | 0 .../packages/@core/base/icons/src/lucide.ts | 0 .../packages/@core/base/icons/tsconfig.json | 0 .../@core/base/shared/build.config.ts | 0 .../packages/@core/base/shared/package.json | 0 .../cache/__tests__/storage-manager.test.ts | 0 .../@core/base/shared/src/cache/index.ts | 0 .../base/shared/src/cache/storage-manager.ts | 0 .../@core/base/shared/src/cache/types.ts | 0 .../src/color/__tests__/convert.test.ts | 0 .../@core/base/shared/src/color/color.ts | 0 .../@core/base/shared/src/color/convert.ts | 0 .../@core/base/shared/src/color/generator.ts | 0 .../@core/base/shared/src/color/index.ts | 0 .../base/shared/src/constants/globals.ts | 0 .../@core/base/shared/src/constants/index.ts | 0 .../@core/base/shared/src/constants/vben.ts | 0 .../@core/base/shared/src/global-state.ts | 0 .../packages/@core/base/shared/src/store.ts | 0 .../shared/src/utils/__tests__/diff.test.ts | 0 .../shared/src/utils/__tests__/dom.test.ts | 0 .../src/utils/__tests__/inference.test.ts | 0 .../shared/src/utils/__tests__/letter.test.ts | 0 .../src/utils/__tests__/resources.test.ts | 0 .../src/utils/__tests__/state-handler.test.ts | 0 .../shared/src/utils/__tests__/tree.test.ts | 0 .../shared/src/utils/__tests__/unique.test.ts | 0 .../__tests__/update-css-variables.test.ts | 0 .../shared/src/utils/__tests__/util.test.ts | 0 .../shared/src/utils/__tests__/window.test.ts | 0 .../@core/base/shared/src/utils/cn.ts | 0 .../@core/base/shared/src/utils/date.ts | 0 .../@core/base/shared/src/utils/diff.ts | 0 .../@core/base/shared/src/utils/dom.ts | 0 .../@core/base/shared/src/utils/download.ts | 0 .../@core/base/shared/src/utils/index.ts | 0 .../@core/base/shared/src/utils/inference.ts | 0 .../@core/base/shared/src/utils/letter.ts | 0 .../@core/base/shared/src/utils/merge.ts | 0 .../@core/base/shared/src/utils/nprogress.ts | 0 .../@core/base/shared/src/utils/resources.ts | 0 .../base/shared/src/utils/state-handler.ts | 0 .../@core/base/shared/src/utils/to.ts | 0 .../@core/base/shared/src/utils/tree.ts | 0 .../@core/base/shared/src/utils/unique.ts | 0 .../shared/src/utils/update-css-variables.ts | 0 .../@core/base/shared/src/utils/util.ts | 0 .../@core/base/shared/src/utils/window.ts | 0 .../packages/@core/base/shared/tsconfig.json | 0 .../@core/base/typings/build.config.ts | 0 .../packages/@core/base/typings/package.json | 0 .../packages/@core/base/typings/src/app.d.ts | 0 .../@core/base/typings/src/basic.d.ts | 0 .../@core/base/typings/src/helper.d.ts | 0 .../packages/@core/base/typings/src/index.ts | 0 .../@core/base/typings/src/menu-record.ts | 0 .../packages/@core/base/typings/src/tabs.ts | 0 .../@core/base/typings/src/vue-router.d.ts | 0 .../packages/@core/base/typings/tsconfig.json | 0 .../@core/base/typings/vue-router.d.ts | 0 .../@core/composables/build.config.ts | 0 .../packages/@core/composables/package.json | 0 .../src/__tests__/use-sortable.test.ts | 0 .../packages/@core/composables/src/index.ts | 0 .../@core/composables/src/use-is-mobile.ts | 0 .../@core/composables/src/use-layout-style.ts | 0 .../@core/composables/src/use-namespace.ts | 0 .../composables/src/use-priority-value.ts | 0 .../@core/composables/src/use-scroll-lock.ts | 0 .../src/use-simple-locale/README.md | 0 .../src/use-simple-locale/index.ts | 0 .../src/use-simple-locale/messages.ts | 0 .../@core/composables/src/use-sortable.ts | 0 .../packages/@core/composables/tsconfig.json | 0 .../__snapshots__/config.test.ts.snap | 0 .../preferences/__tests__/config.test.ts | 0 .../preferences/__tests__/preferences.test.ts | 0 .../@core/preferences/build.config.ts | 0 .../packages/@core/preferences/package.json | 0 .../packages/@core/preferences/src/config.ts | 0 .../@core/preferences/src/constants.ts | 0 .../packages/@core/preferences/src/index.ts | 0 .../@core/preferences/src/preferences.ts | 0 .../packages/@core/preferences/src/types.ts | 0 .../preferences/src/update-css-variables.ts | 0 .../@core/preferences/src/use-preferences.ts | 0 .../packages/@core/preferences/tsconfig.json | 0 .../packages/@core/ui-kit/README.md | 0 .../ui-kit/form-ui/__tests__/form-api.test.ts | 0 .../@core/ui-kit/form-ui/build.config.ts | 0 .../@core/ui-kit/form-ui/package.json | 0 .../@core/ui-kit/form-ui/postcss.config.mjs | 0 .../form-ui/src/components/form-actions.vue | 0 .../@core/ui-kit/form-ui/src/config.ts | 0 .../@core/ui-kit/form-ui/src/form-api.ts | 0 .../ui-kit/form-ui/src/form-render/context.ts | 0 .../form-ui/src/form-render/dependencies.ts | 0 .../form-ui/src/form-render/expandable.ts | 0 .../form-ui/src/form-render/form-field.vue | 0 .../form-ui/src/form-render/form-label.vue | 0 .../ui-kit/form-ui/src/form-render/form.vue | 0 .../ui-kit/form-ui/src/form-render/helper.ts | 0 .../ui-kit/form-ui/src/form-render/index.ts | 0 .../@core/ui-kit/form-ui/src/index.ts | 0 .../@core/ui-kit/form-ui/src/types.ts | 0 .../ui-kit/form-ui/src/use-form-context.ts | 0 .../@core/ui-kit/form-ui/src/use-vben-form.ts | 0 .../@core/ui-kit/form-ui/src/vben-form.vue | 0 .../ui-kit/form-ui/src/vben-use-form.vue | 0 .../@core/ui-kit/form-ui/tailwind.config.mjs | 0 .../@core/ui-kit/form-ui/tsconfig.json | 0 .../@core/ui-kit/layout-ui/build.config.ts | 0 .../@core/ui-kit/layout-ui/package.json | 0 .../@core/ui-kit/layout-ui/postcss.config.mjs | 0 .../ui-kit/layout-ui/src/components/index.ts | 0 .../src/components/layout-content.vue | 0 .../src/components/layout-footer.vue | 0 .../src/components/layout-header.vue | 0 .../src/components/layout-sidebar.vue | 0 .../src/components/layout-tabbar.vue | 0 .../layout-ui/src/components/widgets/index.ts | 0 .../widgets/sidebar-collapse-button.vue | 0 .../widgets/sidebar-fixed-button.vue | 0 .../ui-kit/layout-ui/src/hooks/use-layout.ts | 0 .../@core/ui-kit/layout-ui/src/index.ts | 0 .../@core/ui-kit/layout-ui/src/vben-layout.ts | 0 .../ui-kit/layout-ui/src/vben-layout.vue | 0 .../ui-kit/layout-ui/tailwind.config.mjs | 0 .../@core/ui-kit/layout-ui/tsconfig.json | 0 .../packages/@core/ui-kit/menu-ui/README.md | 0 .../@core/ui-kit/menu-ui/build.config.ts | 0 .../@core/ui-kit/menu-ui/package.json | 0 .../@core/ui-kit/menu-ui/postcss.config.mjs | 0 .../src/components/collapse-transition.vue | 0 .../ui-kit/menu-ui/src/components/index.ts | 0 .../menu-ui/src/components/menu-badge-dot.vue | 0 .../menu-ui/src/components/menu-badge.vue | 0 .../menu-ui/src/components/menu-item.vue | 0 .../ui-kit/menu-ui/src/components/menu.vue | 0 .../src/components/normal-menu/index.ts | 0 .../src/components/normal-menu/normal-menu.ts | 0 .../components/normal-menu/normal-menu.vue | 0 .../src/components/sub-menu-content.vue | 0 .../menu-ui/src/components/sub-menu.vue | 0 .../@core/ui-kit/menu-ui/src/hooks/index.ts | 0 .../menu-ui/src/hooks/use-menu-context.ts | 0 .../menu-ui/src/hooks/use-menu-scroll.ts | 0 .../ui-kit/menu-ui/src/hooks/use-menu.ts | 0 .../@core/ui-kit/menu-ui/src/index.ts | 0 .../@core/ui-kit/menu-ui/src/menu.vue | 0 .../@core/ui-kit/menu-ui/src/sub-menu.vue | 0 .../@core/ui-kit/menu-ui/src/types.ts | 0 .../@core/ui-kit/menu-ui/src/utils/index.ts | 0 .../@core/ui-kit/menu-ui/tailwind.config.mjs | 0 .../@core/ui-kit/menu-ui/tsconfig.json | 0 .../@core/ui-kit/popup-ui/build.config.ts | 0 .../@core/ui-kit/popup-ui/package.json | 0 .../@core/ui-kit/popup-ui/postcss.config.mjs | 0 .../ui-kit/popup-ui/src/alert/AlertBuilder.ts | 0 .../@core/ui-kit/popup-ui/src/alert/alert.ts | 0 .../@core/ui-kit/popup-ui/src/alert/alert.vue | 0 .../@core/ui-kit/popup-ui/src/alert/index.ts | 0 .../src/drawer/__tests__/drawer-api.test.ts | 0 .../ui-kit/popup-ui/src/drawer/drawer-api.ts | 0 .../ui-kit/popup-ui/src/drawer/drawer.ts | 0 .../ui-kit/popup-ui/src/drawer/drawer.vue | 0 .../@core/ui-kit/popup-ui/src/drawer/index.ts | 0 .../ui-kit/popup-ui/src/drawer/use-drawer.ts | 0 .../@core/ui-kit/popup-ui/src/index.ts | 0 .../src/modal/__tests__/modal-api.test.ts | 0 .../@core/ui-kit/popup-ui/src/modal/index.ts | 0 .../ui-kit/popup-ui/src/modal/modal-api.ts | 0 .../@core/ui-kit/popup-ui/src/modal/modal.ts | 0 .../@core/ui-kit/popup-ui/src/modal/modal.vue | 0 .../popup-ui/src/modal/use-modal-draggable.ts | 0 .../ui-kit/popup-ui/src/modal/use-modal.ts | 0 .../@core/ui-kit/popup-ui/tailwind.config.mjs | 0 .../@core/ui-kit/popup-ui/tsconfig.json | 0 .../@core/ui-kit/shadcn-ui/build.config.ts | 0 .../@core/ui-kit/shadcn-ui/components.json | 0 .../@core/ui-kit/shadcn-ui/package.json | 0 .../@core/ui-kit/shadcn-ui/postcss.config.mjs | 0 .../src/components/avatar/avatar.vue | 0 .../shadcn-ui/src/components/avatar/index.ts | 0 .../src/components/back-top/back-top.vue | 0 .../src/components/back-top/backtop.ts | 0 .../src/components/back-top/index.ts | 0 .../src/components/back-top/use-backtop.ts | 0 .../breadcrumb/breadcrumb-background.vue | 0 .../components/breadcrumb/breadcrumb-view.vue | 0 .../src/components/breadcrumb/breadcrumb.vue | 0 .../src/components/breadcrumb/index.ts | 0 .../src/components/breadcrumb/types.ts | 0 .../src/components/button/button-group.vue | 0 .../shadcn-ui/src/components/button/button.ts | 0 .../src/components/button/button.vue | 0 .../components/button/check-button-group.vue | 0 .../src/components/button/icon-button.vue | 0 .../shadcn-ui/src/components/button/index.ts | 0 .../src/components/checkbox/checkbox.vue | 0 .../src/components/checkbox/index.ts | 0 .../components/context-menu/context-menu.vue | 0 .../src/components/context-menu/index.ts | 0 .../src/components/context-menu/interface.ts | 0 .../count-to-animator/count-to-animator.vue | 0 .../src/components/count-to-animator/index.ts | 0 .../dropdown-menu/dropdown-menu.vue | 0 .../dropdown-menu/dropdown-radio-menu.vue | 0 .../src/components/dropdown-menu/index.ts | 0 .../src/components/dropdown-menu/interface.ts | 0 .../expandable-arrow/expandable-arrow.vue | 0 .../src/components/expandable-arrow/index.ts | 0 .../components/full-screen/full-screen.vue | 0 .../src/components/full-screen/index.ts | 0 .../src/components/hover-card/hover-card.vue | 0 .../src/components/hover-card/index.ts | 0 .../shadcn-ui/src/components/icon/icon.vue | 0 .../shadcn-ui/src/components/icon/index.ts | 0 .../ui-kit/shadcn-ui/src/components/index.ts | 0 .../src/components/input-password/index.ts | 0 .../input-password/input-password.vue | 0 .../input-password/password-strength.vue | 0 .../shadcn-ui/src/components/logo/index.ts | 0 .../shadcn-ui/src/components/logo/logo.vue | 0 .../src/components/pin-input/index.ts | 0 .../src/components/pin-input/input.vue | 0 .../src/components/pin-input/types.ts | 0 .../shadcn-ui/src/components/popover/index.ts | 0 .../src/components/popover/popover.vue | 0 .../src/components/render-content/index.ts | 0 .../render-content/render-content.vue | 0 .../src/components/scrollbar/index.ts | 0 .../src/components/scrollbar/scrollbar.vue | 0 .../src/components/segmented/index.ts | 0 .../src/components/segmented/segmented.vue | 0 .../components/segmented/tabs-indicator.vue | 0 .../src/components/segmented/types.ts | 0 .../shadcn-ui/src/components/select/index.ts | 0 .../src/components/select/select.vue | 0 .../src/components/spine-text/index.ts | 0 .../src/components/spine-text/spine-text.vue | 0 .../shadcn-ui/src/components/spinner/index.ts | 0 .../src/components/spinner/loading.vue | 0 .../src/components/spinner/spinner.vue | 0 .../src/components/tooltip/help-tooltip.vue | 0 .../shadcn-ui/src/components/tooltip/index.ts | 0 .../src/components/tooltip/tooltip.vue | 0 .../@core/ui-kit/shadcn-ui/src/index.ts | 0 .../shadcn-ui/src/ui/accordion/Accordion.vue | 0 .../src/ui/accordion/AccordionContent.vue | 0 .../src/ui/accordion/AccordionItem.vue | 0 .../src/ui/accordion/AccordionTrigger.vue | 0 .../shadcn-ui/src/ui/accordion/index.ts | 0 .../src/ui/alert-dialog/AlertDialog.vue | 0 .../src/ui/alert-dialog/AlertDialogAction.vue | 0 .../src/ui/alert-dialog/AlertDialogCancel.vue | 0 .../ui/alert-dialog/AlertDialogContent.vue | 0 .../alert-dialog/AlertDialogDescription.vue | 0 .../ui/alert-dialog/AlertDialogOverlay.vue | 0 .../src/ui/alert-dialog/AlertDialogTitle.vue | 0 .../shadcn-ui/src/ui/alert-dialog/index.ts | 0 .../ui-kit/shadcn-ui/src/ui/avatar/Avatar.vue | 0 .../src/ui/avatar/AvatarFallback.vue | 0 .../shadcn-ui/src/ui/avatar/AvatarImage.vue | 0 .../ui-kit/shadcn-ui/src/ui/avatar/avatar.ts | 0 .../ui-kit/shadcn-ui/src/ui/avatar/index.ts | 0 .../ui-kit/shadcn-ui/src/ui/badge/Badge.vue | 0 .../ui-kit/shadcn-ui/src/ui/badge/badge.ts | 0 .../ui-kit/shadcn-ui/src/ui/badge/index.ts | 0 .../src/ui/breadcrumb/Breadcrumb.vue | 0 .../src/ui/breadcrumb/BreadcrumbEllipsis.vue | 0 .../src/ui/breadcrumb/BreadcrumbItem.vue | 0 .../src/ui/breadcrumb/BreadcrumbLink.vue | 0 .../src/ui/breadcrumb/BreadcrumbList.vue | 0 .../src/ui/breadcrumb/BreadcrumbPage.vue | 0 .../src/ui/breadcrumb/BreadcrumbSeparator.vue | 0 .../shadcn-ui/src/ui/breadcrumb/index.ts | 0 .../ui-kit/shadcn-ui/src/ui/button/Button.vue | 0 .../ui-kit/shadcn-ui/src/ui/button/button.ts | 0 .../ui-kit/shadcn-ui/src/ui/button/index.ts | 0 .../ui-kit/shadcn-ui/src/ui/button/types.ts | 0 .../ui-kit/shadcn-ui/src/ui/card/Card.vue | 0 .../shadcn-ui/src/ui/card/CardContent.vue | 0 .../shadcn-ui/src/ui/card/CardDescription.vue | 0 .../shadcn-ui/src/ui/card/CardFooter.vue | 0 .../shadcn-ui/src/ui/card/CardHeader.vue | 0 .../shadcn-ui/src/ui/card/CardTitle.vue | 0 .../ui-kit/shadcn-ui/src/ui/card/index.ts | 0 .../shadcn-ui/src/ui/checkbox/Checkbox.vue | 0 .../ui-kit/shadcn-ui/src/ui/checkbox/index.ts | 0 .../src/ui/context-menu/ContextMenu.vue | 0 .../context-menu/ContextMenuCheckboxItem.vue | 0 .../ui/context-menu/ContextMenuContent.vue | 0 .../src/ui/context-menu/ContextMenuGroup.vue | 0 .../src/ui/context-menu/ContextMenuItem.vue | 0 .../src/ui/context-menu/ContextMenuLabel.vue | 0 .../src/ui/context-menu/ContextMenuPortal.vue | 0 .../ui/context-menu/ContextMenuRadioGroup.vue | 0 .../ui/context-menu/ContextMenuRadioItem.vue | 0 .../ui/context-menu/ContextMenuSeparator.vue | 0 .../ui/context-menu/ContextMenuShortcut.vue | 0 .../src/ui/context-menu/ContextMenuSub.vue | 0 .../ui/context-menu/ContextMenuSubContent.vue | 0 .../ui/context-menu/ContextMenuSubTrigger.vue | 0 .../ui/context-menu/ContextMenuTrigger.vue | 0 .../shadcn-ui/src/ui/context-menu/index.ts | 0 .../ui-kit/shadcn-ui/src/ui/dialog/Dialog.vue | 0 .../shadcn-ui/src/ui/dialog/DialogClose.vue | 0 .../shadcn-ui/src/ui/dialog/DialogContent.vue | 0 .../src/ui/dialog/DialogDescription.vue | 0 .../shadcn-ui/src/ui/dialog/DialogFooter.vue | 0 .../shadcn-ui/src/ui/dialog/DialogHeader.vue | 0 .../shadcn-ui/src/ui/dialog/DialogOverlay.vue | 0 .../src/ui/dialog/DialogScrollContent.vue | 0 .../shadcn-ui/src/ui/dialog/DialogTitle.vue | 0 .../shadcn-ui/src/ui/dialog/DialogTrigger.vue | 0 .../ui-kit/shadcn-ui/src/ui/dialog/index.ts | 0 .../src/ui/dropdown-menu/DropdownMenu.vue | 0 .../DropdownMenuCheckboxItem.vue | 0 .../ui/dropdown-menu/DropdownMenuContent.vue | 0 .../ui/dropdown-menu/DropdownMenuGroup.vue | 0 .../src/ui/dropdown-menu/DropdownMenuItem.vue | 0 .../ui/dropdown-menu/DropdownMenuLabel.vue | 0 .../dropdown-menu/DropdownMenuRadioGroup.vue | 0 .../dropdown-menu/DropdownMenuRadioItem.vue | 0 .../dropdown-menu/DropdownMenuSeparator.vue | 0 .../ui/dropdown-menu/DropdownMenuShortcut.vue | 0 .../src/ui/dropdown-menu/DropdownMenuSub.vue | 0 .../dropdown-menu/DropdownMenuSubContent.vue | 0 .../dropdown-menu/DropdownMenuSubTrigger.vue | 0 .../ui/dropdown-menu/DropdownMenuTrigger.vue | 0 .../shadcn-ui/src/ui/dropdown-menu/index.ts | 0 .../shadcn-ui/src/ui/form/FormControl.vue | 0 .../shadcn-ui/src/ui/form/FormDescription.vue | 0 .../ui-kit/shadcn-ui/src/ui/form/FormItem.vue | 0 .../shadcn-ui/src/ui/form/FormLabel.vue | 0 .../shadcn-ui/src/ui/form/FormMessage.vue | 0 .../ui-kit/shadcn-ui/src/ui/form/index.ts | 0 .../shadcn-ui/src/ui/form/injectionKeys.ts | 0 .../shadcn-ui/src/ui/form/useFormField.ts | 0 .../shadcn-ui/src/ui/hover-card/HoverCard.vue | 0 .../src/ui/hover-card/HoverCardContent.vue | 0 .../src/ui/hover-card/HoverCardTrigger.vue | 0 .../shadcn-ui/src/ui/hover-card/index.ts | 0 .../@core/ui-kit/shadcn-ui/src/ui/index.ts | 0 .../ui-kit/shadcn-ui/src/ui/input/Input.vue | 0 .../ui-kit/shadcn-ui/src/ui/input/index.ts | 0 .../ui-kit/shadcn-ui/src/ui/label/Label.vue | 0 .../ui-kit/shadcn-ui/src/ui/label/index.ts | 0 .../src/ui/number-field/NumberField.vue | 0 .../ui/number-field/NumberFieldContent.vue | 0 .../ui/number-field/NumberFieldDecrement.vue | 0 .../ui/number-field/NumberFieldIncrement.vue | 0 .../src/ui/number-field/NumberFieldInput.vue | 0 .../shadcn-ui/src/ui/number-field/index.ts | 0 .../src/ui/pagination/PaginationEllipsis.vue | 0 .../src/ui/pagination/PaginationFirst.vue | 0 .../src/ui/pagination/PaginationLast.vue | 0 .../src/ui/pagination/PaginationNext.vue | 0 .../src/ui/pagination/PaginationPrev.vue | 0 .../shadcn-ui/src/ui/pagination/index.ts | 0 .../shadcn-ui/src/ui/pin-input/PinInput.vue | 0 .../src/ui/pin-input/PinInputGroup.vue | 0 .../src/ui/pin-input/PinInputInput.vue | 0 .../src/ui/pin-input/PinInputSeparator.vue | 0 .../shadcn-ui/src/ui/pin-input/index.ts | 0 .../shadcn-ui/src/ui/popover/Popover.vue | 0 .../src/ui/popover/PopoverContent.vue | 0 .../src/ui/popover/PopoverTrigger.vue | 0 .../ui-kit/shadcn-ui/src/ui/popover/index.ts | 0 .../src/ui/radio-group/RadioGroup.vue | 0 .../src/ui/radio-group/RadioGroupItem.vue | 0 .../shadcn-ui/src/ui/radio-group/index.ts | 0 .../src/ui/resizable/ResizableHandle.vue | 0 .../src/ui/resizable/ResizablePanelGroup.vue | 0 .../shadcn-ui/src/ui/resizable/index.ts | 0 .../src/ui/scroll-area/ScrollArea.vue | 0 .../src/ui/scroll-area/ScrollBar.vue | 0 .../shadcn-ui/src/ui/scroll-area/index.ts | 0 .../ui-kit/shadcn-ui/src/ui/select/Select.vue | 0 .../shadcn-ui/src/ui/select/SelectContent.vue | 0 .../shadcn-ui/src/ui/select/SelectGroup.vue | 0 .../shadcn-ui/src/ui/select/SelectItem.vue | 0 .../src/ui/select/SelectItemText.vue | 0 .../shadcn-ui/src/ui/select/SelectLabel.vue | 0 .../src/ui/select/SelectScrollDownButton.vue | 0 .../src/ui/select/SelectScrollUpButton.vue | 0 .../src/ui/select/SelectSeparator.vue | 0 .../shadcn-ui/src/ui/select/SelectTrigger.vue | 0 .../shadcn-ui/src/ui/select/SelectValue.vue | 0 .../ui-kit/shadcn-ui/src/ui/select/index.ts | 0 .../shadcn-ui/src/ui/separator/Separator.vue | 0 .../shadcn-ui/src/ui/separator/index.ts | 0 .../ui-kit/shadcn-ui/src/ui/sheet/Sheet.vue | 0 .../shadcn-ui/src/ui/sheet/SheetClose.vue | 0 .../shadcn-ui/src/ui/sheet/SheetContent.vue | 0 .../src/ui/sheet/SheetDescription.vue | 0 .../shadcn-ui/src/ui/sheet/SheetFooter.vue | 0 .../shadcn-ui/src/ui/sheet/SheetHeader.vue | 0 .../shadcn-ui/src/ui/sheet/SheetOverlay.vue | 0 .../shadcn-ui/src/ui/sheet/SheetTitle.vue | 0 .../shadcn-ui/src/ui/sheet/SheetTrigger.vue | 0 .../ui-kit/shadcn-ui/src/ui/sheet/index.ts | 0 .../ui-kit/shadcn-ui/src/ui/sheet/sheet.ts | 0 .../ui-kit/shadcn-ui/src/ui/switch/Switch.vue | 0 .../ui-kit/shadcn-ui/src/ui/switch/index.ts | 0 .../ui-kit/shadcn-ui/src/ui/tabs/Tabs.vue | 0 .../shadcn-ui/src/ui/tabs/TabsContent.vue | 0 .../ui-kit/shadcn-ui/src/ui/tabs/TabsList.vue | 0 .../shadcn-ui/src/ui/tabs/TabsTrigger.vue | 0 .../ui-kit/shadcn-ui/src/ui/tabs/index.ts | 0 .../shadcn-ui/src/ui/textarea/Textarea.vue | 0 .../ui-kit/shadcn-ui/src/ui/textarea/index.ts | 0 .../src/ui/toggle-group/ToggleGroup.vue | 0 .../src/ui/toggle-group/ToggleGroupItem.vue | 0 .../shadcn-ui/src/ui/toggle-group/index.ts | 0 .../ui-kit/shadcn-ui/src/ui/toggle/Toggle.vue | 0 .../ui-kit/shadcn-ui/src/ui/toggle/index.ts | 0 .../ui-kit/shadcn-ui/src/ui/toggle/toggle.ts | 0 .../shadcn-ui/src/ui/tooltip/Tooltip.vue | 0 .../src/ui/tooltip/TooltipContent.vue | 0 .../src/ui/tooltip/TooltipProvider.vue | 0 .../src/ui/tooltip/TooltipTrigger.vue | 0 .../ui-kit/shadcn-ui/src/ui/tooltip/index.ts | 0 .../ui-kit/shadcn-ui/src/ui/tree/index.ts | 0 .../ui-kit/shadcn-ui/src/ui/tree/tree.vue | 0 .../ui-kit/shadcn-ui/src/ui/tree/types.ts | 0 .../ui-kit/shadcn-ui/tailwind.config.mjs | 0 .../@core/ui-kit/shadcn-ui/tsconfig.json | 0 .../@core/ui-kit/tabs-ui/build.config.ts | 0 .../@core/ui-kit/tabs-ui/package.json | 0 .../@core/ui-kit/tabs-ui/postcss.config.mjs | 0 .../ui-kit/tabs-ui/src/components/index.ts | 0 .../src/components/tabs-chrome/tabs.vue | 0 .../tabs-ui/src/components/tabs/tabs.vue | 0 .../tabs-ui/src/components/widgets/index.ts | 0 .../src/components/widgets/tool-more.vue | 0 .../src/components/widgets/tool-screen.vue | 0 .../@core/ui-kit/tabs-ui/src/index.ts | 0 .../@core/ui-kit/tabs-ui/src/tabs-view.vue | 0 .../@core/ui-kit/tabs-ui/src/types.ts | 0 .../@core/ui-kit/tabs-ui/src/use-tabs-drag.ts | 0 .../tabs-ui/src/use-tabs-view-scroll.ts | 0 .../@core/ui-kit/tabs-ui/tailwind.config.mjs | 0 .../@core/ui-kit/tabs-ui/tsconfig.json | 0 .../packages/constants/README.md | 0 .../packages/constants/package.json | 0 .../packages/constants/src/core.ts | 0 .../packages/constants/src/index.ts | 0 .../packages/constants/tsconfig.json | 0 .../packages/effects/README.md | 0 .../packages/effects/access/package.json | 0 .../effects/access/src/access-control.vue | 0 .../packages/effects/access/src/accessible.ts | 0 .../packages/effects/access/src/directive.ts | 0 .../packages/effects/access/src/index.ts | 0 .../packages/effects/access/src/use-access.ts | 0 .../packages/effects/access/tsconfig.json | 0 .../packages/effects/common-ui/package.json | 0 .../api-component/api-component.vue | 0 .../src/components/api-component/index.ts | 0 .../captcha/hooks/useCaptchaPoints.ts | 0 .../common-ui/src/components/captcha/index.ts | 0 .../captcha/point-selection-captcha/index.vue | 0 .../point-selection-captcha-card.vue | 0 .../captcha/slider-captcha/index.vue | 0 .../slider-captcha/slider-captcha-action.vue | 0 .../slider-captcha/slider-captcha-bar.vue | 0 .../slider-captcha/slider-captcha-content.vue | 0 .../captcha/slider-rotate-captcha/index.vue | 0 .../slider-translate-captcha/index.vue | 0 .../common-ui/src/components/captcha/types.ts | 0 .../src/components/col-page/col-page.vue | 0 .../src/components/col-page/index.ts | 0 .../src/components/col-page/types.ts | 0 .../src/components/count-to/count-to.vue | 0 .../src/components/count-to/index.ts | 0 .../src/components/count-to/types.ts | 0 .../ellipsis-text/ellipsis-text.vue | 0 .../src/components/ellipsis-text/index.ts | 0 .../components/icon-picker/icon-picker.vue | 0 .../src/components/icon-picker/icons.ts | 0 .../src/components/icon-picker/index.ts | 0 .../effects/common-ui/src/components/index.ts | 0 .../src/components/json-viewer/index.ts | 0 .../src/components/json-viewer/index.vue | 0 .../src/components/json-viewer/style.scss | 0 .../src/components/json-viewer/types.ts | 0 .../src/components/loading/directive.ts | 0 .../common-ui/src/components/loading/index.ts | 0 .../src/components/loading/loading.vue | 0 .../src/components/loading/spinner.vue | 0 .../components/page/__tests__/page.test.ts | 0 .../common-ui/src/components/page/index.ts | 0 .../common-ui/src/components/page/page.vue | 0 .../common-ui/src/components/page/types.ts | 0 .../common-ui/src/components/resize/index.ts | 0 .../src/components/resize/resize.vue | 0 .../src/components/tippy/directive.ts | 0 .../common-ui/src/components/tippy/index.ts | 0 .../packages/effects/common-ui/src/index.ts | 0 .../effects/common-ui/src/ui/about/about.ts | 0 .../effects/common-ui/src/ui/about/about.vue | 0 .../effects/common-ui/src/ui/about/index.ts | 0 .../src/ui/authentication/auth-title.vue | 0 .../src/ui/authentication/code-login.vue | 0 .../src/ui/authentication/dingding-login.vue | 0 .../src/ui/authentication/forget-password.vue | 0 .../common-ui/src/ui/authentication/index.ts | 0 .../ui/authentication/login-expired-modal.vue | 0 .../common-ui/src/ui/authentication/login.vue | 0 .../src/ui/authentication/qrcode-login.vue | 0 .../src/ui/authentication/register.vue | 0 .../ui/authentication/third-party-login.vue | 0 .../common-ui/src/ui/authentication/types.ts | 0 .../analysis/analysis-chart-card.vue | 0 .../analysis/analysis-charts-tabs.vue | 0 .../dashboard/analysis/analysis-overview.vue | 0 .../src/ui/dashboard/analysis/index.ts | 0 .../common-ui/src/ui/dashboard/index.ts | 0 .../common-ui/src/ui/dashboard/typing.ts | 0 .../src/ui/dashboard/workbench/index.ts | 0 .../dashboard/workbench/workbench-header.vue | 0 .../dashboard/workbench/workbench-project.vue | 0 .../workbench/workbench-quick-nav.vue | 0 .../ui/dashboard/workbench/workbench-todo.vue | 0 .../dashboard/workbench/workbench-trends.vue | 0 .../common-ui/src/ui/fallback/fallback.ts | 0 .../common-ui/src/ui/fallback/fallback.vue | 0 .../src/ui/fallback/icons/icon-403.vue | 0 .../src/ui/fallback/icons/icon-404.vue | 0 .../src/ui/fallback/icons/icon-500.vue | 0 .../ui/fallback/icons/icon-coming-soon.vue | 0 .../src/ui/fallback/icons/icon-offline.vue | 0 .../src/ui/fallback/icons/warning.svg | 0 .../common-ui/src/ui/fallback/index.ts | 0 .../effects/common-ui/src/ui/index.ts | 0 .../packages/effects/common-ui/tsconfig.json | 0 .../packages/effects/hooks/README.md | 0 .../packages/effects/hooks/package.json | 0 .../packages/effects/hooks/src/index.ts | 0 .../effects/hooks/src/use-app-config.ts | 0 .../effects/hooks/src/use-content-maximize.ts | 0 .../effects/hooks/src/use-design-tokens.ts | 0 .../effects/hooks/src/use-hover-toggle.ts | 0 .../effects/hooks/src/use-pagination.ts | 0 .../packages/effects/hooks/src/use-refresh.ts | 0 .../packages/effects/hooks/src/use-tabs.ts | 0 .../effects/hooks/src/use-watermark.ts | 0 .../packages/effects/hooks/tsconfig.json | 0 .../packages/effects/layouts/package.json | 0 .../src/authentication/authentication.vue | 0 .../layouts/src/authentication/form.vue | 0 .../src/authentication/icons/slogan.vue | 0 .../layouts/src/authentication/index.ts | 0 .../layouts/src/authentication/toolbar.vue | 0 .../layouts/src/authentication/types.ts | 0 .../effects/layouts/src/basic/README.md | 0 .../src/basic/content/content-spinner.vue | 0 .../layouts/src/basic/content/content.vue | 0 .../layouts/src/basic/content/index.ts | 0 .../src/basic/content/use-content-spinner.ts | 0 .../layouts/src/basic/copyright/copyright.vue | 0 .../layouts/src/basic/copyright/index.ts | 0 .../layouts/src/basic/footer/footer.vue | 0 .../effects/layouts/src/basic/footer/index.ts | 0 .../layouts/src/basic/header/header.vue | 0 .../effects/layouts/src/basic/header/index.ts | 0 .../effects/layouts/src/basic/index.ts | 0 .../effects/layouts/src/basic/layout.vue | 0 .../layouts/src/basic/menu/extra-menu.vue | 0 .../effects/layouts/src/basic/menu/index.ts | 0 .../effects/layouts/src/basic/menu/menu.vue | 0 .../layouts/src/basic/menu/mixed-menu.vue | 0 .../layouts/src/basic/menu/use-extra-menu.ts | 0 .../layouts/src/basic/menu/use-mixed-menu.ts | 0 .../layouts/src/basic/menu/use-navigation.ts | 0 .../effects/layouts/src/basic/tabbar/index.ts | 0 .../layouts/src/basic/tabbar/tabbar.vue | 0 .../layouts/src/basic/tabbar/use-tabbar.ts | 0 .../layouts/src/iframe/iframe-router-view.vue | 0 .../layouts/src/iframe/iframe-view.vue | 0 .../effects/layouts/src/iframe/index.ts | 0 .../packages/effects/layouts/src/index.ts | 0 .../layouts/src/widgets/breadcrumb.vue | 0 .../widgets/check-updates/check-updates.vue | 0 .../src/widgets/check-updates/index.ts | 0 .../layouts/src/widgets/color-toggle.vue | 0 .../widgets/global-search/global-search.vue | 0 .../src/widgets/global-search/index.ts | 0 .../widgets/global-search/search-panel.vue | 0 .../effects/layouts/src/widgets/index.ts | 0 .../layouts/src/widgets/language-toggle.vue | 0 .../layouts/src/widgets/layout-toggle.vue | 0 .../layouts/src/widgets/lock-screen/index.ts | 0 .../widgets/lock-screen/lock-screen-modal.vue | 0 .../src/widgets/lock-screen/lock-screen.vue | 0 .../layouts/src/widgets/notification/index.ts | 0 .../src/widgets/notification/notification.vue | 0 .../layouts/src/widgets/notification/types.ts | 0 .../src/widgets/preferences/blocks/block.vue | 0 .../preferences/blocks/checkbox-item.vue | 0 .../preferences/blocks/general/animation.vue | 0 .../preferences/blocks/general/general.vue | 0 .../src/widgets/preferences/blocks/index.ts | 0 .../widgets/preferences/blocks/input-item.vue | 0 .../preferences/blocks/layout/breadcrumb.vue | 0 .../preferences/blocks/layout/content.vue | 0 .../preferences/blocks/layout/copyright.vue | 0 .../preferences/blocks/layout/footer.vue | 0 .../preferences/blocks/layout/header.vue | 0 .../preferences/blocks/layout/layout.vue | 0 .../preferences/blocks/layout/navigation.vue | 0 .../preferences/blocks/layout/sidebar.vue | 0 .../preferences/blocks/layout/tabbar.vue | 0 .../preferences/blocks/layout/widget.vue | 0 .../preferences/blocks/number-field-item.vue | 0 .../preferences/blocks/select-item.vue | 0 .../blocks/shortcut-keys/global.vue | 0 .../preferences/blocks/switch-item.vue | 0 .../preferences/blocks/theme/builtin.vue | 0 .../preferences/blocks/theme/color-mode.vue | 0 .../preferences/blocks/theme/radius.vue | 0 .../preferences/blocks/theme/theme.vue | 0 .../preferences/blocks/toggle-item.vue | 0 .../preferences/icons/content-compact.vue | 0 .../preferences/icons/full-content.vue | 0 .../preferences/icons/header-mixed-nav.vue | 0 .../widgets/preferences/icons/header-nav.vue | 0 .../preferences/icons/header-sidebar-nav.vue | 0 .../src/widgets/preferences/icons/index.ts | 0 .../widgets/preferences/icons/mixed-nav.vue | 0 .../src/widgets/preferences/icons/setting.vue | 0 .../preferences/icons/sidebar-mixed-nav.vue | 0 .../widgets/preferences/icons/sidebar-nav.vue | 0 .../layouts/src/widgets/preferences/index.ts | 0 .../preferences/preferences-button.vue | 0 .../preferences/preferences-drawer.vue | 0 .../src/widgets/preferences/preferences.vue | 0 .../preferences/use-open-preferences.ts | 0 .../layouts/src/widgets/theme-toggle/index.ts | 0 .../src/widgets/theme-toggle/theme-button.vue | 0 .../src/widgets/theme-toggle/theme-toggle.vue | 0 .../src/widgets/user-dropdown/index.ts | 0 .../widgets/user-dropdown/user-dropdown.vue | 0 .../packages/effects/layouts/tsconfig.json | 0 .../packages/effects/plugins/README.md | 0 .../packages/effects/plugins/package.json | 0 .../plugins/src/echarts/echarts-ui.vue | 0 .../effects/plugins/src/echarts/echarts.ts | 0 .../effects/plugins/src/echarts/index.ts | 0 .../plugins/src/echarts/use-echarts.ts | 0 .../effects/plugins/src/motion/index.ts | 0 .../effects/plugins/src/motion/types.ts | 0 .../effects/plugins/src/vxe-table/api.ts | 0 .../effects/plugins/src/vxe-table/extends.ts | 0 .../effects/plugins/src/vxe-table/index.ts | 0 .../effects/plugins/src/vxe-table/init.ts | 0 .../effects/plugins/src/vxe-table/style.css | 0 .../effects/plugins/src/vxe-table/types.ts | 0 .../plugins/src/vxe-table/use-vxe-grid.ts | 0 .../plugins/src/vxe-table/use-vxe-grid.vue | 0 .../packages/effects/plugins/tsconfig.json | 0 .../packages/effects/request/package.json | 0 .../packages/effects/request/src/index.ts | 0 .../request/src/request-client/index.ts | 0 .../request-client/modules/downloader.test.ts | 0 .../src/request-client/modules/downloader.ts | 0 .../src/request-client/modules/interceptor.ts | 0 .../request-client/modules/uploader.test.ts | 0 .../src/request-client/modules/uploader.ts | 0 .../src/request-client/preset-interceptors.ts | 0 .../src/request-client/request-client.test.ts | 0 .../src/request-client/request-client.ts | 0 .../request/src/request-client/types.ts | 0 .../packages/effects/request/tsconfig.json | 0 .../packages/icons/README.md | 0 .../packages/icons/package.json | 0 .../packages/icons/src/iconify/index.ts | 0 .../packages/icons/src/icons/empty-icon.vue | 0 .../packages/icons/src/index.ts | 0 .../icons/src/svg/icons/antdv-logo.svg | 0 .../packages/icons/src/svg/icons/avatar-1.svg | 0 .../packages/icons/src/svg/icons/avatar-2.svg | 0 .../packages/icons/src/svg/icons/avatar-3.svg | 0 .../packages/icons/src/svg/icons/avatar-4.svg | 0 .../packages/icons/src/svg/icons/bell.svg | 0 .../packages/icons/src/svg/icons/cake.svg | 0 .../packages/icons/src/svg/icons/card.svg | 0 .../packages/icons/src/svg/icons/download.svg | 0 .../packages/icons/src/svg/index.ts | 0 .../packages/icons/src/svg/load.ts | 0 .../packages/icons/tsconfig.json | 0 .../packages/locales/package.json | 0 .../packages/locales/src/i18n.ts | 0 .../packages/locales/src/index.ts | 0 .../src/langs/en-US/authentication.json | 0 .../locales/src/langs/en-US/common.json | 0 .../locales/src/langs/en-US/preferences.json | 0 .../packages/locales/src/langs/en-US/ui.json | 0 .../src/langs/zh-CN/authentication.json | 0 .../locales/src/langs/zh-CN/common.json | 0 .../locales/src/langs/zh-CN/preferences.json | 0 .../packages/locales/src/langs/zh-CN/ui.json | 0 .../packages/locales/src/typing.ts | 0 .../packages/locales/tsconfig.json | 0 .../packages/preferences/package.json | 0 .../packages/preferences/src/index.ts | 0 .../packages/preferences/tsconfig.json | 0 .../packages/stores/package.json | 0 .../packages/stores/shim-pinia.d.ts | 0 .../packages/stores/src/index.ts | 0 .../stores/src/modules/access.test.ts | 0 .../packages/stores/src/modules/access.ts | 0 .../packages/stores/src/modules/index.ts | 0 .../stores/src/modules/tabbar.test.ts | 0 .../packages/stores/src/modules/tabbar.ts | 0 .../packages/stores/src/modules/user.test.ts | 0 .../packages/stores/src/modules/user.ts | 0 .../packages/stores/src/setup.ts | 0 .../packages/stores/tsconfig.json | 0 .../packages/styles/README.md | 0 .../packages/styles/package.json | 0 .../packages/styles/src/antd/index.css | 0 .../packages/styles/src/ele/index.css | 0 .../packages/styles/src/global/index.scss | 0 .../packages/styles/src/index.ts | 0 .../packages/styles/src/naive/index.css | 0 .../packages/styles/tsconfig.json | 0 .../packages/types/README.md | 0 .../packages/types/global.d.ts | 0 .../packages/types/package.json | 0 .../packages/types/src/index.ts | 0 .../packages/types/src/user.ts | 0 .../packages/types/tsconfig.json | 0 .../packages/utils/README.md | 0 .../packages/utils/package.json | 0 .../__tests__/find-menu-by-path.test.ts | 0 .../helpers/__tests__/generate-menus.test.ts | 0 .../generate-routes-frontend.test.ts | 0 .../__tests__/merge-route-modules.test.ts | 0 .../utils/src/helpers/find-menu-by-path.ts | 0 .../utils/src/helpers/generate-menus.ts | 0 .../src/helpers/generate-routes-backend.ts | 0 .../src/helpers/generate-routes-frontend.ts | 0 .../utils/src/helpers/get-popup-container.ts | 0 .../packages/utils/src/helpers/index.ts | 0 .../utils/src/helpers/merge-route-modules.ts | 0 .../utils/src/helpers/reset-routes.ts | 0 .../src/helpers/unmount-global-loading.ts | 0 .../packages/utils/src/index.ts | 0 .../packages/utils/tsconfig.json | 0 {admin => admin-vben}/playground/.env.analyze | 0 .../playground/.env.development | 0 .../playground/.env.production | 0 .../__tests__/e2e/auth-login.spec.ts | 0 .../playground/__tests__/e2e/common/auth.ts | 0 {admin => admin-vben}/playground/index.html | 0 {admin => admin-vben}/playground/package.json | 0 .../playground/playwright.config.ts | 0 .../playground/postcss.config.mjs | 0 .../playground/public/favicon.ico | Bin .../playground/src/adapter/component/index.ts | 0 .../playground/src/adapter/form.ts | 0 .../playground/src/adapter/vxe-table.ts | 0 .../playground/src/api/core/auth.ts | 0 .../playground/src/api/core/index.ts | 0 .../playground/src/api/core/menu.ts | 0 .../playground/src/api/core/user.ts | 0 .../playground/src/api/examples/download.ts | 0 .../playground/src/api/examples/index.ts | 0 .../src/api/examples/json-bigint.ts | 0 .../playground/src/api/examples/params.ts | 0 .../playground/src/api/examples/status.ts | 0 .../playground/src/api/examples/table.ts | 0 .../playground/src/api/examples/upload.ts | 0 .../playground/src/api/index.ts | 0 .../playground/src/api/request.ts | 0 .../playground/src/api/system/dept.ts | 0 .../playground/src/api/system/index.ts | 0 .../playground/src/api/system/menu.ts | 0 .../playground/src/api/system/role.ts | 0 {admin => admin-vben}/playground/src/app.vue | 0 .../playground/src/bootstrap.ts | 0 .../playground/src/layouts/auth.vue | 0 .../playground/src/layouts/basic.vue | 0 .../playground/src/layouts/index.ts | 0 .../playground/src/locales/README.md | 0 .../playground/src/locales/index.ts | 0 .../src/locales/langs/en-US/demos.json | 0 .../src/locales/langs/en-US/examples.json | 0 .../src/locales/langs/en-US/page.json | 0 .../src/locales/langs/en-US/system.json | 0 .../src/locales/langs/zh-CN/demos.json | 0 .../src/locales/langs/zh-CN/examples.json | 0 .../src/locales/langs/zh-CN/page.json | 0 .../src/locales/langs/zh-CN/system.json | 0 {admin => admin-vben}/playground/src/main.ts | 0 .../playground/src/preferences.ts | 0 .../playground/src/router/access.ts | 0 .../playground/src/router/guard.ts | 0 .../playground/src/router/index.ts | 0 .../playground/src/router/routes/core.ts | 0 .../playground/src/router/routes/index.ts | 0 .../src/router/routes/modules/dashboard.ts | 0 .../src/router/routes/modules/demos.ts | 0 .../src/router/routes/modules/examples.ts | 0 .../src/router/routes/modules/system.ts | 0 .../src/router/routes/modules/vben.ts | 0 .../playground/src/store/auth.ts | 0 .../playground/src/store/index.ts | 0 .../playground/src/views/_core/README.md | 0 .../src/views/_core/about/index.vue | 0 .../views/_core/authentication/code-login.vue | 0 .../_core/authentication/forget-password.vue | 0 .../src/views/_core/authentication/login.vue | 0 .../_core/authentication/qrcode-login.vue | 0 .../views/_core/authentication/register.vue | 0 .../src/views/_core/fallback/coming-soon.vue | 0 .../src/views/_core/fallback/forbidden.vue | 0 .../views/_core/fallback/internal-error.vue | 0 .../src/views/_core/fallback/not-found.vue | 0 .../src/views/_core/fallback/offline.vue | 0 .../dashboard/analytics/analytics-trends.vue | 0 .../analytics/analytics-visits-data.vue | 0 .../analytics/analytics-visits-sales.vue | 0 .../analytics/analytics-visits-source.vue | 0 .../dashboard/analytics/analytics-visits.vue | 0 .../src/views/dashboard/analytics/index.vue | 0 .../src/views/dashboard/workspace/index.vue | 0 .../src/views/demos/access/admin-visible.vue | 0 .../src/views/demos/access/button-control.vue | 0 .../src/views/demos/access/index.vue | 0 .../views/demos/access/menu-visible-403.vue | 0 .../src/views/demos/access/super-visible.vue | 0 .../src/views/demos/access/user-visible.vue | 0 .../src/views/demos/active-icon/index.vue | 0 .../src/views/demos/badge/index.vue | 0 .../views/demos/breadcrumb/lateral-detail.vue | 0 .../src/views/demos/breadcrumb/lateral.vue | 0 .../views/demos/breadcrumb/level-detail.vue | 0 .../views/demos/features/clipboard/index.vue | 0 .../demos/features/file-download/base64.ts | 0 .../demos/features/file-download/index.vue | 0 .../demos/features/full-screen/index.vue | 0 .../features/hide-menu-children/children.vue | 0 .../features/hide-menu-children/parent.vue | 0 .../src/views/demos/features/icons/index.vue | 0 .../demos/features/json-bigint/index.vue | 0 .../demos/features/login-expired/index.vue | 0 .../views/demos/features/menu-query/index.vue | 0 .../views/demos/features/new-window/index.vue | 0 .../request-params-serializer/index.vue | 0 .../src/views/demos/features/tabs/index.vue | 0 .../views/demos/features/tabs/tab-detail.vue | 0 .../vue-query/concurrency-caching.vue | 0 .../views/demos/features/vue-query/index.vue | 0 .../features/vue-query/infinite-queries.vue | 0 .../features/vue-query/paginated-queries.vue | 0 .../features/vue-query/query-retries.vue | 0 .../views/demos/features/vue-query/typing.ts | 0 .../views/demos/features/watermark/index.vue | 0 .../src/views/demos/nested/menu-1.vue | 0 .../src/views/demos/nested/menu-2-1.vue | 0 .../src/views/demos/nested/menu-3-1.vue | 0 .../src/views/demos/nested/menu-3-2-1.vue | 0 .../src/views/examples/button-group/index.vue | 0 .../captcha/point-selection-captcha.vue | 0 .../views/examples/captcha/slider-captcha.vue | 0 .../captcha/slider-rotate-captcha.vue | 0 .../captcha/slider-translate-captcha.vue | 0 .../src/views/examples/count-to/index.vue | 0 .../src/views/examples/doc-button.vue | 0 .../examples/drawer/auto-height-demo.vue | 0 .../src/views/examples/drawer/base-demo.vue | 0 .../views/examples/drawer/dynamic-demo.vue | 0 .../examples/drawer/form-drawer-demo.vue | 0 .../views/examples/drawer/in-content-demo.vue | 0 .../src/views/examples/drawer/index.vue | 0 .../examples/drawer/shared-data-demo.vue | 0 .../src/views/examples/ellipsis/index.vue | 0 .../src/views/examples/form/api.vue | 0 .../src/views/examples/form/basic.vue | 0 .../src/views/examples/form/custom-layout.vue | 0 .../src/views/examples/form/custom.vue | 0 .../src/views/examples/form/dynamic.vue | 0 .../src/views/examples/form/merge.vue | 0 .../examples/form/modules/two-fields.vue | 0 .../src/views/examples/form/query.vue | 0 .../src/views/examples/form/rules.vue | 0 .../examples/form/scroll-to-error-test.vue | 0 .../src/views/examples/json-viewer/data.ts | 0 .../src/views/examples/json-viewer/index.vue | 0 .../src/views/examples/layout/col-page.vue | 0 .../src/views/examples/loading/index.vue | 0 .../views/examples/modal/auto-height-demo.vue | 0 .../src/views/examples/modal/base-demo.vue | 0 .../src/views/examples/modal/blur-demo.vue | 0 .../src/views/examples/modal/drag-demo.vue | 0 .../src/views/examples/modal/dynamic-demo.vue | 0 .../views/examples/modal/form-modal-demo.vue | 0 .../views/examples/modal/in-content-demo.vue | 0 .../src/views/examples/modal/index.vue | 0 .../src/views/examples/modal/nested-demo.vue | 0 .../views/examples/modal/shared-data-demo.vue | 0 .../src/views/examples/motion/index.vue | 0 .../src/views/examples/resize/basic.vue | 0 .../src/views/examples/tippy/index.vue | 0 .../src/views/examples/vxe-table/basic.vue | 0 .../views/examples/vxe-table/custom-cell.vue | 0 .../views/examples/vxe-table/edit-cell.vue | 0 .../src/views/examples/vxe-table/edit-row.vue | 0 .../src/views/examples/vxe-table/fixed.vue | 0 .../src/views/examples/vxe-table/form.vue | 0 .../src/views/examples/vxe-table/remote.vue | 0 .../views/examples/vxe-table/table-data.ts | 0 .../src/views/examples/vxe-table/tree.vue | 0 .../src/views/examples/vxe-table/virtual.vue | 0 .../playground/src/views/system/dept/data.ts | 0 .../playground/src/views/system/dept/list.vue | 0 .../src/views/system/dept/modules/form.vue | 0 .../playground/src/views/system/menu/data.ts | 0 .../playground/src/views/system/menu/list.vue | 0 .../src/views/system/menu/modules/form.vue | 0 .../playground/src/views/system/role/data.ts | 0 .../playground/src/views/system/role/list.vue | 0 .../src/views/system/role/modules/form.vue | 0 .../playground/tailwind.config.mjs | 0 .../playground/tsconfig.json | 0 .../playground/tsconfig.node.json | 0 .../playground/vite.config.mts | 0 {admin => admin-vben}/pnpm-lock.yaml | 0 {admin => admin-vben}/pnpm-workspace.yaml | 0 {admin => admin-vben}/postcss.config.cjs | 0 {admin => admin-vben}/public/niucloud.ico | Bin .../public/ueditor/dialogs/anchor/anchor.html | 0 .../ueditor/dialogs/attachment/attachment.css | 0 .../dialogs/attachment/attachment.html | 0 .../ueditor/dialogs/attachment/attachment.js | 0 .../dialogs/attachment/images/alignicon.gif | Bin .../dialogs/attachment/images/alignicon.png | Bin .../ueditor/dialogs/attachment/images/bg.png | Bin .../dialogs/attachment/images/file-icons.gif | Bin .../dialogs/attachment/images/file-icons.png | Bin .../dialogs/attachment/images/icons.gif | Bin .../dialogs/attachment/images/icons.png | Bin .../dialogs/attachment/images/image.png | Bin .../dialogs/attachment/images/progress.png | Bin .../dialogs/attachment/images/success.gif | Bin .../dialogs/attachment/images/success.png | Bin .../public/ueditor/dialogs/audio/audio.css | 0 .../public/ueditor/dialogs/audio/audio.html | 0 .../public/ueditor/dialogs/audio/audio.js | 0 .../ueditor/dialogs/audio/images/bg.png | Bin .../dialogs/audio/images/center_focus.jpg | Bin .../dialogs/audio/images/file-icons.gif | Bin .../dialogs/audio/images/file-icons.png | Bin .../ueditor/dialogs/audio/images/icons.gif | Bin .../ueditor/dialogs/audio/images/icons.png | Bin .../ueditor/dialogs/audio/images/image.png | Bin .../dialogs/audio/images/left_focus.jpg | Bin .../dialogs/audio/images/none_focus.jpg | Bin .../ueditor/dialogs/audio/images/progress.png | Bin .../dialogs/audio/images/right_focus.jpg | Bin .../ueditor/dialogs/audio/images/success.gif | Bin .../ueditor/dialogs/audio/images/success.png | Bin .../ueditor/dialogs/background/background.css | 0 .../dialogs/background/background.html | 0 .../ueditor/dialogs/background/background.js | 0 .../ueditor/dialogs/background/images/bg.png | Bin .../dialogs/background/images/success.png | Bin .../dialogs/contentimport/contentimport.html | 0 .../dialogs/contentimport/contentimport.js | 0 .../ueditor/dialogs/emotion/emotion.css | 0 .../ueditor/dialogs/emotion/emotion.html | 0 .../public/ueditor/dialogs/emotion/emotion.js | 0 .../ueditor/dialogs/emotion/images/0.gif | Bin .../ueditor/dialogs/emotion/images/bface.gif | Bin .../ueditor/dialogs/emotion/images/cface.gif | Bin .../ueditor/dialogs/emotion/images/fface.gif | Bin .../dialogs/emotion/images/jxface2.gif | Bin .../emotion/images/neweditor-tab-bg.png | Bin .../ueditor/dialogs/emotion/images/tface.gif | Bin .../ueditor/dialogs/emotion/images/wface.gif | Bin .../ueditor/dialogs/emotion/images/yface.gif | Bin .../ueditor/dialogs/formula/formula.html | 0 .../public/ueditor/dialogs/formula/formula.js | 0 .../public/ueditor/dialogs/help/help.css | 0 .../public/ueditor/dialogs/help/help.html | 0 .../public/ueditor/dialogs/help/help.js | 0 .../public/ueditor/dialogs/image/image.css | 0 .../public/ueditor/dialogs/image/image.html | 0 .../public/ueditor/dialogs/image/image.js | 0 .../dialogs/image/images/alignicon.jpg | Bin .../ueditor/dialogs/image/images/bg.png | Bin .../ueditor/dialogs/image/images/icons.gif | Bin .../ueditor/dialogs/image/images/icons.png | Bin .../ueditor/dialogs/image/images/image.png | Bin .../ueditor/dialogs/image/images/progress.png | Bin .../ueditor/dialogs/image/images/success.gif | Bin .../ueditor/dialogs/image/images/success.png | Bin .../dialogs/insertframe/insertframe.html | 0 .../public/ueditor/dialogs/internal.js | 0 .../public/ueditor/dialogs/link/link.html | 0 .../ueditor/dialogs/preview/preview.html | 0 .../ueditor/dialogs/scrawl/images/addimg.png | Bin .../ueditor/dialogs/scrawl/images/brush.png | Bin .../ueditor/dialogs/scrawl/images/delimg.png | Bin .../ueditor/dialogs/scrawl/images/delimgH.png | Bin .../ueditor/dialogs/scrawl/images/empty.png | Bin .../ueditor/dialogs/scrawl/images/emptyH.png | Bin .../ueditor/dialogs/scrawl/images/eraser.png | Bin .../ueditor/dialogs/scrawl/images/redo.png | Bin .../ueditor/dialogs/scrawl/images/redoH.png | Bin .../ueditor/dialogs/scrawl/images/scale.png | Bin .../ueditor/dialogs/scrawl/images/scaleH.png | Bin .../ueditor/dialogs/scrawl/images/size.png | Bin .../ueditor/dialogs/scrawl/images/undo.png | Bin .../ueditor/dialogs/scrawl/images/undoH.png | Bin .../public/ueditor/dialogs/scrawl/scrawl.css | 0 .../public/ueditor/dialogs/scrawl/scrawl.html | 0 .../public/ueditor/dialogs/scrawl/scrawl.js | 0 .../dialogs/searchreplace/searchreplace.html | 0 .../dialogs/searchreplace/searchreplace.js | 0 .../ueditor/dialogs/spechars/spechars.html | 0 .../ueditor/dialogs/spechars/spechars.js | 0 .../public/ueditor/dialogs/table/dragicon.png | Bin .../ueditor/dialogs/table/edittable.css | 0 .../ueditor/dialogs/table/edittable.html | 0 .../public/ueditor/dialogs/table/edittable.js | 0 .../public/ueditor/dialogs/table/edittd.html | 0 .../public/ueditor/dialogs/table/edittip.html | 0 .../public/ueditor/dialogs/template/config.js | 0 .../ueditor/dialogs/template/images/bg.gif | Bin .../ueditor/dialogs/template/images/pre0.png | Bin .../ueditor/dialogs/template/images/pre1.png | Bin .../ueditor/dialogs/template/images/pre2.png | Bin .../ueditor/dialogs/template/images/pre3.png | Bin .../ueditor/dialogs/template/images/pre4.png | Bin .../ueditor/dialogs/template/template.css | 0 .../ueditor/dialogs/template/template.html | 0 .../ueditor/dialogs/template/template.js | 0 .../ueditor/dialogs/video/images/bg.png | Bin .../dialogs/video/images/center_focus.jpg | Bin .../dialogs/video/images/file-icons.gif | Bin .../dialogs/video/images/file-icons.png | Bin .../ueditor/dialogs/video/images/icons.gif | Bin .../ueditor/dialogs/video/images/icons.png | Bin .../ueditor/dialogs/video/images/image.png | Bin .../dialogs/video/images/left_focus.jpg | Bin .../dialogs/video/images/none_focus.jpg | Bin .../ueditor/dialogs/video/images/progress.png | Bin .../dialogs/video/images/right_focus.jpg | Bin .../ueditor/dialogs/video/images/success.gif | Bin .../ueditor/dialogs/video/images/success.png | Bin .../public/ueditor/dialogs/video/video.css | 0 .../public/ueditor/dialogs/video/video.html | 0 .../public/ueditor/dialogs/video/video.js | 0 .../ueditor/dialogs/wordimage/wordimage.html | 0 .../ueditor/dialogs/wordimage/wordimage.js | 0 .../public/ueditor/index.html | 0 .../public/ueditor/lang/en/en.js | 0 .../ueditor/lang/en/images/addimage.png | Bin .../lang/en/images/alldeletebtnhoverskin.png | Bin .../lang/en/images/alldeletebtnupskin.png | Bin .../ueditor/lang/en/images/background.png | Bin .../public/ueditor/lang/en/images/button.png | Bin .../public/ueditor/lang/en/images/copy.png | Bin .../ueditor/lang/en/images/deletedisable.png | Bin .../ueditor/lang/en/images/deleteenable.png | Bin .../ueditor/lang/en/images/listbackground.png | Bin .../ueditor/lang/en/images/localimage.png | Bin .../public/ueditor/lang/en/images/music.png | Bin .../lang/en/images/rotateleftdisable.png | Bin .../lang/en/images/rotateleftenable.png | Bin .../lang/en/images/rotaterightdisable.png | Bin .../lang/en/images/rotaterightenable.png | Bin .../public/ueditor/lang/en/images/upload.png | Bin .../public/ueditor/lang/zh-cn/images/copy.png | Bin .../ueditor/lang/zh-cn/images/localimage.png | Bin .../ueditor/lang/zh-cn/images/music.png | Bin .../ueditor/lang/zh-cn/images/upload.png | Bin .../public/ueditor/lang/zh-cn/zh-cn.js | 0 .../public/ueditor/plugins/demo/demo.js | 0 .../ueditor/themes/default/css/ueditor.css | 0 .../public/ueditor/themes/default/dialog.css | 0 .../ueditor/themes/default/dialogbase.css | 0 .../public/ueditor/themes/default/exts/ai.svg | 0 .../ueditor/themes/default/exts/apk.svg | 0 .../ueditor/themes/default/exts/chm.svg | 0 .../ueditor/themes/default/exts/css.svg | 0 .../ueditor/themes/default/exts/doc.svg | 0 .../ueditor/themes/default/exts/docx.svg | 0 .../ueditor/themes/default/exts/dwg.svg | 0 .../ueditor/themes/default/exts/folder.svg | 0 .../ueditor/themes/default/exts/gif.svg | 0 .../ueditor/themes/default/exts/html.svg | 0 .../ueditor/themes/default/exts/jpeg.svg | 0 .../ueditor/themes/default/exts/jpg.svg | 0 .../ueditor/themes/default/exts/log.svg | 0 .../ueditor/themes/default/exts/mp3.svg | 0 .../ueditor/themes/default/exts/mp4.svg | 0 .../ueditor/themes/default/exts/pdf.svg | 0 .../ueditor/themes/default/exts/png.svg | 0 .../ueditor/themes/default/exts/ppt.svg | 0 .../ueditor/themes/default/exts/pptx.svg | 0 .../ueditor/themes/default/exts/psd.svg | 0 .../ueditor/themes/default/exts/rar.svg | 0 .../ueditor/themes/default/exts/svg.svg | 0 .../ueditor/themes/default/exts/torrent.svg | 0 .../ueditor/themes/default/exts/txt.svg | 0 .../ueditor/themes/default/exts/unknown.svg | 0 .../ueditor/themes/default/exts/xls.svg | 0 .../ueditor/themes/default/exts/xlsx.svg | 0 .../ueditor/themes/default/exts/zip.svg | 0 .../ueditor/themes/default/images/anchor.gif | Bin .../ueditor/themes/default/images/arrow.png | Bin .../themes/default/images/arrow_down.png | Bin .../themes/default/images/arrow_up.png | Bin .../themes/default/images/button-bg.gif | Bin .../themes/default/images/cancelbutton.gif | Bin .../ueditor/themes/default/images/charts.png | Bin .../themes/default/images/cursor_h.gif | Bin .../themes/default/images/cursor_h.png | Bin .../themes/default/images/cursor_v.gif | Bin .../themes/default/images/cursor_v.png | Bin .../themes/default/images/dialog-title-bg.png | Bin .../themes/default/images/filescan.png | Bin .../themes/default/images/highlighted.gif | Bin .../themes/default/images/icons-all.gif | Bin .../ueditor/themes/default/images/icons.gif | Bin .../ueditor/themes/default/images/icons.png | Bin .../themes/default/images/img-cracked.png | Bin .../themes/default/images/loaderror.png | Bin .../ueditor/themes/default/images/loading.gif | Bin .../ueditor/themes/default/images/lock.gif | Bin .../default/images/neweditor-tab-bg.png | Bin .../themes/default/images/pagebreak.gif | Bin .../ueditor/themes/default/images/scale.png | Bin .../themes/default/images/sortable.png | Bin .../ueditor/themes/default/images/spacer.gif | Bin .../themes/default/images/sparator_v.png | Bin .../default/images/table-cell-align.png | Bin .../default/images/tangram-colorpicker.png | Bin .../themes/default/images/toolbar_bg.png | Bin .../themes/default/images/unhighlighted.gif | Bin .../ueditor/themes/default/images/upload.png | Bin .../themes/default/images/videologo.gif | Bin .../ueditor/themes/default/images/word.gif | Bin .../themes/default/images/wordpaste.png | Bin .../public/ueditor/themes/iframe.css | 0 .../third-party/SyntaxHighlighter/shCore.js | 0 .../SyntaxHighlighter/shCoreDefault.css | 0 .../third-party/clipboard/clipboard.js | 0 .../third-party/codemirror/codemirror.css | 0 .../third-party/codemirror/codemirror.js | 0 .../ueditor/third-party/jquery-1.10.2.js | 0 .../third-party/webuploader/webuploader.css | 0 .../third-party/webuploader/webuploader.js | 0 .../zeroclipboard/ZeroClipboard.js | 0 .../public/ueditor/ueditor.all.js | 0 .../public/ueditor/ueditor.config.js | 0 .../public/ueditor/ueditor.parse.js | 0 {admin => admin-vben}/publish.cjs | 0 {admin => admin-vben}/scripts/clean.mjs | 0 .../scripts/deploy/Dockerfile | 0 .../deploy/build-local-docker-image.sh | 0 .../scripts/deploy/nginx.conf | 0 .../scripts/turbo-run/README.md | 0 .../scripts/turbo-run/bin/turbo-run.mjs | 0 .../scripts/turbo-run/build.config.ts | 0 .../scripts/turbo-run/package.json | 0 .../scripts/turbo-run/src/index.ts | 0 .../scripts/turbo-run/src/run.ts | 0 .../scripts/turbo-run/tsconfig.json | 0 {admin => admin-vben}/scripts/vsh/README.md | 0 {admin => admin-vben}/scripts/vsh/bin/vsh.mjs | 0 .../scripts/vsh/build.config.ts | 0 .../scripts/vsh/package.json | 0 .../scripts/vsh/src/check-circular/index.ts | 0 .../scripts/vsh/src/check-dep/index.ts | 0 .../scripts/vsh/src/code-workspace/index.ts | 0 .../scripts/vsh/src/index.ts | 0 .../scripts/vsh/src/lint/index.ts | 0 .../scripts/vsh/src/publint/index.ts | 0 .../scripts/vsh/tsconfig.json | 0 {admin => admin-vben}/src/App.vue | 0 {admin => admin-vben}/src/addon/.gitignore | 0 {admin => admin-vben}/src/app/api/addon.ts | 0 {admin => admin-vben}/src/app/api/aliapp.ts | 0 {admin => admin-vben}/src/app/api/app.ts | 0 {admin => admin-vben}/src/app/api/auth.ts | 0 {admin => admin-vben}/src/app/api/cloud.ts | 0 {admin => admin-vben}/src/app/api/dict.ts | 0 {admin => admin-vben}/src/app/api/diy.ts | 0 {admin => admin-vben}/src/app/api/diy_form.ts | 0 {admin => admin-vben}/src/app/api/h5.ts | 0 {admin => admin-vben}/src/app/api/home.ts | 0 {admin => admin-vben}/src/app/api/member.ts | 0 {admin => admin-vben}/src/app/api/module.ts | 0 {admin => admin-vben}/src/app/api/notice.ts | 0 {admin => admin-vben}/src/app/api/pay.ts | 0 {admin => admin-vben}/src/app/api/pc.ts | 0 {admin => admin-vben}/src/app/api/personal.ts | 0 {admin => admin-vben}/src/app/api/poster.ts | 0 {admin => admin-vben}/src/app/api/printer.ts | 0 {admin => admin-vben}/src/app/api/site.ts | 0 {admin => admin-vben}/src/app/api/stat.ts | 0 {admin => admin-vben}/src/app/api/sys.ts | 0 {admin => admin-vben}/src/app/api/tools.ts | 0 {admin => admin-vben}/src/app/api/upgrade.ts | 0 {admin => admin-vben}/src/app/api/user.ts | 0 {admin => admin-vben}/src/app/api/verify.ts | 0 {admin => admin-vben}/src/app/api/weapp.ts | 0 {admin => admin-vben}/src/app/api/wechat.ts | 0 .../src/app/api/wxoplatform.ts | 0 .../src/app/assets/images/SaaS.png | Bin .../src/app/assets/images/app_default.png | Bin .../images/app_store/app_store_default.png | Bin .../assets/images/app_store/local_icon.png | Bin .../images/app_store/local_icon_select.png | Bin .../assets/images/app_store/market_icon.png | Bin .../images/app_store/market_icon_select.png | Bin .../assets/images/app_store/switch_icon_1.png | Bin .../assets/images/app_store/switch_icon_2.png | Bin .../src/app/assets/images/back_login.jpg | Bin .../app/assets/images/category_default.png | Bin .../src/app/assets/images/channel/preview.png | Bin .../src/app/assets/images/creatBg.png | Bin .../src/app/assets/images/default_headimg.png | Bin .../assets/images/default_headimg_square.jpg | Bin .../app/assets/images/diy/head/nav_style1.jpg | Bin .../app/assets/images/diy/head/nav_style2.jpg | Bin .../app/assets/images/diy/head/nav_style3.jpg | Bin .../app/assets/images/diy/head/nav_style4.jpg | Bin .../app/assets/images/diy/head/nav_style5.png | Bin .../app/assets/images/diy/head/nav_style6.jpg | Bin .../app/assets/images/diy/notice/style_1.png | Bin .../app/assets/images/diy/notice/style_2.png | Bin .../src/app/assets/images/diy/text/style1.png | Bin .../src/app/assets/images/diy/text/style2.png | Bin .../assets/images/diy_form/mobile_bottom.png | Bin .../assets/images/diy_form/mobile_line.png | Bin .../assets/images/diy_form/mobile_tabbar.png | Bin .../app/assets/images/diy_preview_head.png | Bin .../src/app/assets/images/error.png | Bin .../src/app/assets/images/error_icon.png | Bin .../src/app/assets/images/goods_default.png | Bin .../src/app/assets/images/gov_icon.png | Bin .../src/app/assets/images/icon-addon-one.png | Bin .../src/app/assets/images/icon-addon.png | Bin .../src/app/assets/images/icon_folder.png | Bin .../src/app/assets/images/icon_preview.png | Bin .../src/app/assets/images/index/add_menu.png | Bin .../app/assets/images/index/administrator.png | Bin .../src/app/assets/images/index/app.png | Bin .../src/app/assets/images/index/app1.png | Bin .../app/assets/images/index/app_default.png | Bin .../src/app/assets/images/index/app_store.png | Bin .../app/assets/images/index/app_store1.png | Bin .../app/assets/images/index/apply_empty.png | Bin .../src/app/assets/images/index/article.png | Bin .../app/assets/images/index/article_list.png | Bin .../src/app/assets/images/index/auth.png | Bin .../src/app/assets/images/index/auth1.png | Bin .../src/app/assets/images/index/balance.png | Bin .../src/app/assets/images/index/banner_1.png | Bin .../src/app/assets/images/index/banner_2.png | Bin .../src/app/assets/images/index/cloud.png | Bin .../src/app/assets/images/index/del_model.png | Bin .../src/app/assets/images/index/edit.png | Bin .../src/app/assets/images/index/fitment.png | Bin .../src/app/assets/images/index/install.png | Bin .../src/app/assets/images/index/low-play.mp4 | Bin .../src/app/assets/images/index/member.png | Bin .../app/assets/images/index/message_empty.png | Bin .../src/app/assets/images/index/model_tag.png | Bin .../src/app/assets/images/index/new_site.png | Bin .../src/app/assets/images/index/new_site1.png | Bin .../app/assets/images/index/not_install.png | Bin .../src/app/assets/images/index/overview.png | Bin .../app/assets/images/index/renovation.png | Bin .../src/app/assets/images/index/site.png | Bin .../src/app/assets/images/index/site1.png | Bin .../src/app/assets/images/index/site2.png | Bin .../src/app/assets/images/index/site3.png | Bin .../src/app/assets/images/index/site_add.png | Bin .../src/app/assets/images/index/site_add1.png | Bin .../src/app/assets/images/index/site_auth.png | Bin .../app/assets/images/index/site_balance.png | Bin .../src/app/assets/images/index/site_bg.png | Bin .../app/assets/images/index/site_class.png | Bin .../app/assets/images/index/site_class1.png | Bin .../src/app/assets/images/index/site_img.png | Bin .../src/app/assets/images/index/site_list.png | Bin .../app/assets/images/index/site_list1.png | Bin .../app/assets/images/index/site_member.png | Bin .../app/assets/images/index/site_normal.png | Bin .../src/app/assets/images/index/site_tc.png | Bin .../src/app/assets/images/index/site_tc1.png | Bin .../src/app/assets/images/index/site_user.png | Bin .../app/assets/images/index/site_user1.png | Bin .../app/assets/images/index/wework_qrcode.png | Bin .../src/app/assets/images/index/wx_qrcode.jpg | Bin .../src/app/assets/images/iphone_bg.png | Bin .../app/assets/images/layout_bussiness.png | Bin .../src/app/assets/images/layout_darkside.png | Bin .../src/app/assets/images/layout_default.png | Bin .../app/assets/images/layout_profession.png | Bin .../src/app/assets/images/login/login_bg.jpg | Bin .../app/assets/images/login/login_icon.png | Bin .../assets/images/login/login_index_bg.jpg | Bin .../assets/images/login/login_index_left.png | Bin .../src/app/assets/images/login/password.png | Bin .../app/assets/images/login/site_login_bg.png | Bin .../src/app/assets/images/login/username.png | Bin .../src/app/assets/images/login_bg.png | Bin .../src/app/assets/images/login_logo.png | Bin .../src/app/assets/images/logo.default.png | Bin .../src/app/assets/images/logo.png | Bin .../src/app/assets/images/member_head.png | Bin .../src/app/assets/images/no_attachment.png | Bin .../src/app/assets/images/no_perms.png | Bin .../src/app/assets/images/one_type.png | Bin .../src/app/assets/images/setting/QRcode.png | Bin .../src/app/assets/images/setting/alipay1.png | Bin .../src/app/assets/images/setting/alipay2.png | Bin .../src/app/assets/images/setting/alipay3.png | Bin .../src/app/assets/images/setting/alipay4.png | Bin .../app/assets/images/setting/alipay4_1.jpg | Bin .../app/assets/images/setting/alipay4_2.jpg | Bin .../app/assets/images/setting/alipay4_3.jpg | Bin .../app/assets/images/setting/alipay4_4.jpg | Bin .../src/app/assets/images/setting/alipay5.png | Bin .../src/app/assets/images/setting/alipay6.png | Bin .../src/app/assets/images/setting/alipay7.png | Bin .../src/app/assets/images/setting/alipay8.png | Bin .../assets/images/setting/app-authorize1.png | Bin .../src/app/assets/images/setting/weapp_1.png | Bin .../src/app/assets/images/setting/weapp_2.png | Bin .../src/app/assets/images/setting/weapp_3.png | Bin .../src/app/assets/images/setting/weapp_4.png | Bin .../app/assets/images/setting/wechat_1.png | Bin .../app/assets/images/setting/wechat_2.png | Bin .../app/assets/images/setting/wechat_3.png | Bin .../app/assets/images/setting/wechat_4.png | Bin .../src/app/assets/images/site_default.png | Bin .../src/app/assets/images/site_empty.png | Bin .../src/app/assets/images/site_login.png | Bin .../src/app/assets/images/site_login_bg.png | Bin .../src/app/assets/images/site_login_logo.png | Bin .../src/app/assets/images/site_logo.png | Bin .../src/app/assets/images/success_icon.png | Bin .../src/app/assets/images/theme_black.png | Bin .../src/app/assets/images/theme_white.png | Bin .../src/app/assets/images/three_type.png | Bin .../app/assets/images/tools/addon_develop.png | Bin .../src/app/assets/images/tools/app_auth.png | Bin .../src/app/assets/images/tools/auth_menu.png | Bin .../src/app/assets/images/tools/authorize.png | Bin .../src/app/assets/images/tools/code.png | Bin .../src/app/assets/images/tools/developer.png | Bin .../assets/images/tools/official_market.png | Bin .../app/assets/images/tools/sys_dict_list.png | Bin .../images/tools/tools_backup_records.png | Bin .../images/tools/tools_check_environment.png | Bin .../images/tools/tools_cloud_compile.png | Bin .../assets/images/tools/tools_schedule.png | Bin .../images/tools/tools_update_cache.png | Bin .../app/assets/images/tools/tools_upgrade.png | Bin .../images/tools/tools_upgrade_records.png | Bin .../src/app/assets/images/tools/upgrade.png | Bin .../src/app/assets/images/two_type.png | Bin .../src/app/assets/images/versions.png | Bin .../app/assets/images/wechat-menu-head-bg.png | Bin .../images/wechat-menu-head-dark-bg.png | Bin .../src/app/assets/images/white_logo.png | Bin .../src/app/assets/images/write.png | Bin .../src/app/components/cloud-build/index.vue | 0 .../src/app/components/upgrade-log/index.vue | 0 .../src/app/components/upgrade/index.vue | 0 .../app/components/user-info-edit/index.vue | 0 .../src/app/lang/en/403.json | 0 .../src/app/lang/en/auth.menu.json | 0 .../src/app/lang/en/index.json | 0 .../src/app/lang/en/login.json | 0 .../src/app/lang/en/member.member.json | 0 .../src/app/lang/en/user.center.json | 0 .../src/app/lang/zh-cn/403.json | 0 .../src/app/lang/zh-cn/app.authorize.json | 0 .../src/app/lang/zh-cn/app.index.json | 0 .../src/app/lang/zh-cn/app.store.json | 0 .../src/app/lang/zh-cn/app.upgrade.json | 0 .../src/app/lang/zh-cn/auth.log.json | 0 .../src/app/lang/zh-cn/auth.menu.json | 0 .../src/app/lang/zh-cn/auth.role.json | 0 .../src/app/lang/zh-cn/auth.site_menu.json | 0 .../src/app/lang/zh-cn/auth.user.json | 0 .../app/lang/zh-cn/channel.aliapp.access.json | 0 .../app/lang/zh-cn/channel.aliapp.config.json | 0 .../app/lang/zh-cn/channel.aliapp.course.json | 0 .../app/lang/zh-cn/channel.app.access.json | 0 .../app/lang/zh-cn/channel.app.config.json | 0 .../app/lang/zh-cn/channel.app.version.json | 0 .../src/app/lang/zh-cn/channel.h5.config.json | 0 .../src/app/lang/zh-cn/channel.pc.config.json | 0 .../app/lang/zh-cn/channel.weapp.access.json | 0 .../app/lang/zh-cn/channel.weapp.code.json | 0 .../app/lang/zh-cn/channel.weapp.config.json | 0 .../app/lang/zh-cn/channel.weapp.course.json | 0 .../lang/zh-cn/channel.weapp.template.json | 0 .../app/lang/zh-cn/channel.wechat.access.json | 0 .../app/lang/zh-cn/channel.wechat.config.json | 0 .../app/lang/zh-cn/channel.wechat.course.json | 0 .../channel.wechat.keyword_reply_edit.json | 0 .../app/lang/zh-cn/channel.wechat.menu.json | 0 .../app/lang/zh-cn/channel.wechat.reply.json | 0 .../lang/zh-cn/channel.wechat.template.json | 0 .../src/app/lang/zh-cn/decorate.preview.json | 0 .../src/app/lang/zh-cn/dict.list.json | 0 .../src/app/lang/zh-cn/diy.edit.json | 0 .../src/app/lang/zh-cn/diy.index.json | 0 .../src/app/lang/zh-cn/diy.list.json | 0 .../src/app/lang/zh-cn/diy.member.json | 0 .../src/app/lang/zh-cn/diy.preview.json | 0 .../src/app/lang/zh-cn/diy.route.json | 0 .../src/app/lang/zh-cn/diy.tabbar.json | 0 .../src/app/lang/zh-cn/diy.tabbar_edit.json | 0 .../src/app/lang/zh-cn/diy_form.edit.json | 0 .../src/app/lang/zh-cn/diy_form.list.json | 0 .../src/app/lang/zh-cn/finance.account.json | 0 .../src/app/lang/zh-cn/finance.cash_out.json | 0 .../app/lang/zh-cn/finance.offlinepay.json | 0 .../app/lang/zh-cn/finance.pay_detail.json | 0 .../app/lang/zh-cn/finance.pay_refund.json | 0 .../app/lang/zh-cn/finance.refund_detail.json | 0 .../src/app/lang/zh-cn/index.app_manage.json | 0 .../src/app/lang/zh-cn/index.index.json | 0 .../src/app/lang/zh-cn/index.preview.json | 0 .../src/app/lang/zh-cn/index.store.json | 0 .../src/app/lang/zh-cn/login.json | 0 .../app/lang/zh-cn/marketing.sign_config.json | 0 .../app/lang/zh-cn/marketing.sign_list.json | 0 .../app/lang/zh-cn/marketing.verifier.json | 0 .../src/app/lang/zh-cn/marketing.verify.json | 0 .../src/app/lang/zh-cn/member.balance.json | 0 .../src/app/lang/zh-cn/member.commission.json | 0 .../src/app/lang/zh-cn/member.growth.json | 0 .../src/app/lang/zh-cn/member.label.edit.json | 0 .../src/app/lang/zh-cn/member.label.json | 0 .../src/app/lang/zh-cn/member.level.json | 0 .../src/app/lang/zh-cn/member.level_edit.json | 0 .../src/app/lang/zh-cn/member.member.json | 0 .../app/lang/zh-cn/member.member_detail.json | 0 .../src/app/lang/zh-cn/member.point.json | 0 .../src/app/lang/zh-cn/poster.edit.json | 0 .../src/app/lang/zh-cn/poster.list.json | 0 .../src/app/lang/zh-cn/printer.edit.json | 0 .../src/app/lang/zh-cn/printer.list.json | 0 .../app/lang/zh-cn/printer.template_edit.json | 0 .../app/lang/zh-cn/printer.template_list.json | 0 .../app/lang/zh-cn/setting.adminlogin.json | 0 .../src/app/lang/zh-cn/setting.agreement.json | 0 .../lang/zh-cn/setting.agreement_edit.json | 0 .../src/app/lang/zh-cn/setting.cash_out.json | 0 .../src/app/lang/zh-cn/setting.copyright.json | 0 .../lang/zh-cn/setting.developer_token.json | 0 .../src/app/lang/zh-cn/setting.export.json | 0 .../app/lang/zh-cn/setting.growth_rule.json | 0 .../src/app/lang/zh-cn/setting.layout.json | 0 .../src/app/lang/zh-cn/setting.login.json | 0 .../src/app/lang/zh-cn/setting.map.json | 0 .../src/app/lang/zh-cn/setting.member.json | 0 .../src/app/lang/zh-cn/setting.notice.json | 0 .../lang/zh-cn/setting.notice_records.json | 0 .../src/app/lang/zh-cn/setting.oplatform.json | 0 .../src/app/lang/zh-cn/setting.pay.json | 0 .../src/app/lang/zh-cn/setting.sms.json | 0 .../app/lang/zh-cn/setting.sms_records.json | 0 .../src/app/lang/zh-cn/setting.storage.json | 0 .../src/app/lang/zh-cn/setting.system.json | 0 .../src/app/lang/zh-cn/setting.transfer.json | 0 .../lang/zh-cn/setting.transfer_scene.json | 0 .../src/app/lang/zh-cn/setting.weapp.json | 0 .../src/app/lang/zh-cn/site.group.json | 0 .../src/app/lang/zh-cn/site.group_edit.json | 0 .../src/app/lang/zh-cn/site.info.json | 0 .../src/app/lang/zh-cn/site.list.json | 0 .../src/app/lang/zh-cn/site.manage.json | 0 .../src/app/lang/zh-cn/site.user.json | 0 .../src/app/lang/zh-cn/site.user_info.json | 0 .../src/app/lang/zh-cn/tools.addon.edit.json | 0 .../src/app/lang/zh-cn/tools.addon.index.json | 0 .../src/app/lang/zh-cn/tools.addon.list.json | 0 .../app/lang/zh-cn/tools.backup_records.json | 0 .../src/app/lang/zh-cn/tools.code.edit.json | 0 .../src/app/lang/zh-cn/tools.code.index.json | 0 .../src/app/lang/zh-cn/tools.code.list.json | 0 .../src/app/lang/zh-cn/tools.detection.json | 0 .../src/app/lang/zh-cn/tools.schedule.json | 0 .../app/lang/zh-cn/tools.schedule_log.json | 0 .../src/app/lang/zh-cn/tools.updatecache.json | 0 .../app/lang/zh-cn/tools.upgrade_records.json | 0 .../src/app/lang/zh-cn/user.center.json | 0 .../src/app/lang/zh-cn/user.edit_center.json | 0 .../app/lang/zh-cn/wxoplatform.setting.json | 0 .../lang/zh-cn/wxoplatform.weapp_version.json | 0 .../src/app/views/app/authorize.vue | 0 .../src/app/views/app/index.vue | 0 .../src/app/views/app/marketing.vue | 0 .../src/app/views/app/upgrade.vue | 0 .../app/views/auth/components/edit-menu.vue | 0 .../app/views/auth/components/edit-role.vue | 0 .../app/views/auth/components/edit-user.vue | 0 .../auth/components/select-menu-item.vue | 0 .../views/auth/components/user-log-detail.vue | 0 .../src/app/views/auth/log.vue | 0 .../src/app/views/auth/menu.vue | 0 .../src/app/views/auth/role.vue | 0 .../src/app/views/auth/site_menu.vue | 0 .../src/app/views/auth/user.vue | 0 .../src/app/views/channel/aliapp/access.vue | 0 .../src/app/views/channel/aliapp/config.vue | 0 .../src/app/views/channel/aliapp/course.vue | 0 .../src/app/views/channel/app/access.vue | 0 .../app/components/app-version-edit.vue | 0 .../app/components/generate-sing-cert.vue | 0 .../src/app/views/channel/app/config.vue | 0 .../src/app/views/channel/app/version.vue | 0 .../src/app/views/channel/h5/config.vue | 0 .../src/app/views/channel/pc/config.vue | 0 .../src/app/views/channel/weapp/access.vue | 0 .../src/app/views/channel/weapp/code.vue | 0 .../weapp/components/modify-domain.vue | 0 .../components/modify-privacy-agreement.vue | 0 .../channel/weapp/components/setting-list.vue | 0 .../src/app/views/channel/weapp/config.vue | 0 .../src/app/views/channel/weapp/course.vue | 0 .../src/app/views/channel/weapp/template.vue | 0 .../src/app/views/channel/wechat/access.vue | 0 .../channel/wechat/components/menu-form.vue | 0 .../channel/wechat/components/news-card.vue | 0 .../channel/wechat/components/reply-form.vue | 0 .../wechat/components/select-wechat-media.vue | 0 .../wechat/components/upload-media.vue | 0 .../src/app/views/channel/wechat/config.vue | 0 .../src/app/views/channel/wechat/course.vue | 0 .../channel/wechat/keyword_reply_edit.vue | 0 .../src/app/views/channel/wechat/menu.vue | 0 .../src/app/views/channel/wechat/reply.vue | 0 .../src/app/views/channel/wechat/template.vue | 0 .../src/app/views/dict/components/dict.vue | 0 .../src/app/views/dict/components/edit.vue | 0 .../src/app/views/dict/list.vue | 0 .../app/views/diy/components/add-theme.vue | 0 .../views/diy/components/edit-active-cube.vue | 0 .../diy/components/edit-carousel-search.vue | 0 .../views/diy/components/edit-float-btn.vue | 0 .../views/diy/components/edit-graphic-nav.vue | 0 .../views/diy/components/edit-horz-blank.vue | 0 .../views/diy/components/edit-horz-line.vue | 0 .../views/diy/components/edit-hot-area.vue | 0 .../views/diy/components/edit-image-ads.vue | 0 .../views/diy/components/edit-member-info.vue | 0 .../diy/components/edit-member-level.vue | 0 .../app/views/diy/components/edit-notice.vue | 0 .../app/views/diy/components/edit-page.vue | 0 .../diy/components/edit-picture-show.vue | 0 .../views/diy/components/edit-rich-text.vue | 0 .../views/diy/components/edit-rubik-cube.vue | 0 .../app/views/diy/components/edit-text.vue | 0 .../app/views/diy/components/edit-theme.vue | 0 .../app/views/diy/components/theme-list.vue | 0 .../src/app/views/diy/edit.vue | 0 .../src/app/views/diy/index.vue | 0 .../src/app/views/diy/list.vue | 0 .../src/app/views/diy/member.vue | 0 .../src/app/views/diy/route.vue | 0 .../src/app/views/diy/tabbar.vue | 0 .../src/app/views/diy/tabbar_edit.vue | 0 .../src/app/views/diy/theme_style.vue | 0 .../diy_form/components/detail-form-image.vue | 0 .../components/detail-form-render.vue | 0 .../diy_form/components/edit-form-address.vue | 0 .../components/edit-form-checkbox.vue | 0 .../components/edit-form-date-scope.vue | 0 .../diy_form/components/edit-form-date.vue | 0 .../diy_form/components/edit-form-email.vue | 0 .../diy_form/components/edit-form-file.vue | 0 .../components/edit-form-identity.vue | 0 .../diy_form/components/edit-form-image.vue | 0 .../diy_form/components/edit-form-input.vue | 0 .../components/edit-form-location.vue | 0 .../diy_form/components/edit-form-mobile.vue | 0 .../diy_form/components/edit-form-number.vue | 0 .../diy_form/components/edit-form-radio.vue | 0 .../diy_form/components/edit-form-submit.vue | 0 .../diy_form/components/edit-form-table.vue | 0 .../components/edit-form-textarea.vue | 0 .../components/edit-form-time-scope.vue | 0 .../diy_form/components/edit-form-time.vue | 0 .../diy_form/components/edit-form-video.vue | 0 .../components/edit-form-wechat-name.vue | 0 .../components/form-select-content.vue | 0 .../diy_form/components/form-submit-popup.vue | 0 .../diy_form/components/form-write-popup.vue | 0 .../src/app/views/diy_form/edit.vue | 0 .../src/app/views/diy_form/list.vue | 0 .../src/app/views/diy_form/records.vue | 0 .../src/app/views/error/404.vue | 0 .../src/app/views/finance/account.vue | 0 .../src/app/views/finance/cash_out.vue | 0 .../finance/components/refund-detail.vue | 0 .../src/app/views/finance/offlinepay.vue | 0 .../src/app/views/finance/pay_detail.vue | 0 .../src/app/views/finance/pay_refund.vue | 0 .../src/app/views/finance/refund_detail.vue | 0 .../src/app/views/home/edit_personal.vue | 0 .../src/app/views/home/index.vue | 0 .../src/app/views/home/personal.vue | 0 .../src/app/views/index/app_manage.vue | 0 .../src/app/views/index/index.vue | 0 .../src/app/views/index/preview.vue | 0 .../src/app/views/index/store.vue | 0 .../src/app/views/index/tools.vue | 0 .../app/views/index/wxoplatform_callback.vue | 0 .../src/app/views/login/index.vue | 0 .../marketing/components/sign-continue.vue | 0 .../views/marketing/components/sign-day.vue | 0 .../marketing/components/verify-detail.vue | 0 .../src/app/views/marketing/sign_config.vue | 0 .../src/app/views/marketing/sign_list.vue | 0 .../src/app/views/marketing/verifier.vue | 0 .../src/app/views/marketing/verify.vue | 0 .../src/app/views/marketing/verify_detail.vue | 0 .../src/app/views/marketing/verify_index.vue | 0 .../src/app/views/member/balance.vue | 0 .../src/app/views/member/commission.vue | 0 .../views/member/components/add-member.vue | 0 .../member/components/benefits-discount.vue | 0 .../views/member/components/detail-member.vue | 0 .../views/member/components/edit-label.vue | 0 .../views/member/components/edit-member.vue | 0 .../views/member/components/gift-balance.vue | 0 .../views/member/components/gift-point.vue | 0 .../components/growth-rule-register.vue | 0 .../member/components/member-balance-edit.vue | 0 .../member/components/member-balance-info.vue | 0 .../member/components/member-benefits.vue | 0 .../components/member-commission-info.vue | 0 .../views/member/components/member-gift.vue | 0 .../member/components/member-money-info.vue | 0 .../member/components/member-point-edit.vue | 0 .../member/components/member-point-info.vue | 0 .../member/components/point-rule-register.vue | 0 .../src/app/views/member/growth.vue | 0 .../src/app/views/member/label.vue | 0 .../src/app/views/member/level.vue | 0 .../src/app/views/member/level_edit.vue | 0 .../src/app/views/member/member.vue | 0 .../src/app/views/member/member_detail.vue | 0 .../src/app/views/member/point.vue | 0 .../app/views/poster/components/edit-draw.vue | 0 .../components/edit-friendspay-message.vue | 0 .../components/edit-friendspay-money.vue | 0 .../views/poster/components/edit-headimg.vue | 0 .../views/poster/components/edit-image.vue | 0 .../views/poster/components/edit-nickname.vue | 0 .../app/views/poster/components/edit-page.vue | 0 .../views/poster/components/edit-qrcode.vue | 0 .../app/views/poster/components/edit-text.vue | 0 .../views/poster/components/preview-draw.vue | 0 .../components/preview-friendspay-message.vue | 0 .../components/preview-friendspay-money.vue | 0 .../poster/components/preview-headimg.vue | 0 .../views/poster/components/preview-image.vue | 0 .../poster/components/preview-nickname.vue | 0 .../poster/components/preview-qrcode.vue | 0 .../views/poster/components/preview-text.vue | 0 .../src/app/views/poster/edit.vue | 0 .../src/app/views/poster/list.vue | 0 .../src/app/views/printer/edit.vue | 0 .../src/app/views/printer/list.vue | 0 .../src/app/views/printer/template_edit.vue | 0 .../src/app/views/printer/template_list.vue | 0 .../src/app/views/setting/adminlogin.vue | 0 .../src/app/views/setting/agreement.vue | 0 .../src/app/views/setting/agreement_edit.vue | 0 .../src/app/views/setting/cash_out.vue | 0 .../views/setting/components/cron-info.vue | 0 .../components/notice-records-info.vue | 0 .../views/setting/components/notice-sms.vue | 0 .../views/setting/components/notice-weapp.vue | 0 .../setting/components/notice-wechat.vue | 0 .../views/setting/components/pay-alipay.vue | 0 .../setting/components/pay-friendspay.vue | 0 .../setting/components/pay-offlinepay.vue | 0 .../setting/components/pay-wechatpay.vue | 0 .../app/views/setting/components/sms-ali.vue | 0 .../app/views/setting/components/sms-niu.vue | 0 .../setting/components/sms-records-info.vue | 0 .../views/setting/components/sms-tencent.vue | 0 .../setting/components/sms_niu_login.vue | 0 .../views/setting/components/sms_recharge.vue | 0 .../components/sms_recharge_record.vue | 0 .../app/views/setting/components/sms_send.vue | 0 .../setting/components/sms_signature.vue | 0 .../views/setting/components/sms_template.vue | 0 .../views/setting/components/storage-ali.vue | 0 .../setting/components/storage-local.vue | 0 .../setting/components/storage-qiniu.vue | 0 .../setting/components/storage-tencent.vue | 0 .../src/app/views/setting/copyright.vue | 0 .../src/app/views/setting/developer_token.vue | 0 .../src/app/views/setting/export.vue | 0 .../src/app/views/setting/growth_rule.vue | 0 .../src/app/views/setting/layout.vue | 0 .../src/app/views/setting/login.vue | 0 .../src/app/views/setting/map.vue | 0 .../src/app/views/setting/member.vue | 0 .../src/app/views/setting/notice.vue | 0 .../src/app/views/setting/notice_records.vue | 0 .../src/app/views/setting/oplatform.vue | 0 .../src/app/views/setting/pay.vue | 0 .../src/app/views/setting/point_rule.vue | 0 .../src/app/views/setting/sms.vue | 0 .../src/app/views/setting/sms_niu.vue | 0 .../app/views/setting/sms_niu_pay_result.vue | 0 .../src/app/views/setting/sms_records.vue | 0 .../src/app/views/setting/storage.vue | 0 .../src/app/views/setting/system.vue | 0 .../src/app/views/setting/transfer.vue | 0 .../src/app/views/setting/transfer_scene.vue | 0 .../src/app/views/setting/weapp.vue | 0 .../site/components/create-site-limit.vue | 0 .../app/views/site/components/edit-site.vue | 0 .../app/views/site/components/user-edit.vue | 0 .../app/views/site/components/user-info.vue | 0 .../src/app/views/site/group.vue | 0 .../src/app/views/site/group_edit.vue | 0 .../src/app/views/site/info.vue | 0 .../src/app/views/site/list.vue | 0 .../src/app/views/site/manage.vue | 0 .../src/app/views/site/user.vue | 0 .../src/app/views/site/user_info.vue | 0 .../src/app/views/tools/addon/edit.vue | 0 .../src/app/views/tools/addon/index.vue | 0 .../src/app/views/tools/addon/list.vue | 0 .../src/app/views/tools/attachment.vue | 0 .../src/app/views/tools/backup_records.vue | 0 .../src/app/views/tools/cloud_compile.vue | 0 .../views/tools/code/components/add-table.vue | 0 .../tools/code/components/edit-associated.vue | 0 .../tools/code/components/edit-verify.vue | 0 .../tools/code/components/edit-view-type.vue | 0 .../src/app/views/tools/code/edit.vue | 0 .../src/app/views/tools/code/index.vue | 0 .../src/app/views/tools/code/list.vue | 0 .../src/app/views/tools/detection.vue | 0 .../src/app/views/tools/schedule.vue | 0 .../src/app/views/tools/schedule_log.vue | 0 .../src/app/views/tools/updatecache.vue | 0 .../src/app/views/tools/upgrade_records.vue | 0 .../src/app/views/wxoplatform/setting.vue | 0 .../app/views/wxoplatform/weapp_version.vue | 0 .../src/components/diy-link/index.vue | 0 .../src/components/diy-page/index.vue | 0 .../src/components/editor/index.vue | 0 .../src/components/export-sure/index.vue | 0 .../src/components/heat-map/index.vue | 0 .../src/components/icon/index.vue | 0 .../src/components/markdown/index.vue | 0 .../src/components/popover-input/index.vue | 0 .../src/components/range-input/index.vue | 0 .../src/components/select-area/index.vue | 0 .../src/components/select-icon/index.vue | 0 .../src/components/spread-popup/index.vue | 0 .../upload-attachment/attachment.vue | 0 .../components/upload-attachment/index.vue | 0 .../src/components/upload-audio/index.vue | 0 .../src/components/upload-file/index.vue | 0 .../src/components/upload-image/index.vue | 0 .../src/components/upload-video/index.vue | 0 .../src/components/verifition/Verify.vue | 0 .../verifition/Verify/VerifyPoints.vue | 0 .../verifition/Verify/VerifySlide.vue | 0 .../src/components/verifition/api/index.js | 0 .../src/components/verifition/utils/ase.js | 0 .../src/components/verifition/utils/axios.js | 0 .../src/components/verifition/utils/util.js | 0 .../src/components/video-player/index.vue | 0 {admin => admin-vben}/src/lang/en/common.json | 0 {admin => admin-vben}/src/lang/i18n.ts | 0 {admin => admin-vben}/src/lang/index.ts | 0 {admin => admin-vben}/src/lang/language.ts | 0 .../src/lang/zh-cn/common.json | 0 .../layout/admin/components/aside/index.vue | 0 .../admin/components/aside/menu-item.vue | 0 .../layout/admin/components/aside/side.vue | 0 .../layout/admin/components/header/index.vue | 0 .../components/header/layout-setting.vue | 0 .../admin/components/header/message.vue | 0 .../admin/components/header/switch-lang.vue | 0 .../admin/components/header/user-info.vue | 0 .../src/layout/admin/components/tabs.vue | 0 .../src/layout/admin/index.vue | 0 .../components/aside/index.vue | 0 .../components/aside/menu-item.vue | 0 .../components/aside/side.vue | 0 .../components/header/index.vue | 0 .../components/header/layout-setting.vue | 0 .../components/header/message.vue | 0 .../components/header/switch-lang.vue | 0 .../components/header/user-info.vue | 0 .../admin_simplicity/components/tabs.vue | 0 .../src/layout/admin_simplicity/index.vue | 0 .../bussiness/components/aside/index.vue | 0 .../bussiness/components/aside/menu-item.vue | 0 .../bussiness/components/aside/side.vue | 0 .../bussiness/components/header/index.vue | 0 .../components/header/layout-setting.vue | 0 .../components/header/switch-lang.vue | 0 .../bussiness/components/header/user-info.vue | 0 .../src/layout/bussiness/components/tabs.vue | 0 .../src/layout/bussiness/index.vue | 0 .../src/layout/bussiness/layout.json | 0 .../darkside/components/aside/index.vue | 0 .../darkside/components/aside/menu-item.vue | 0 .../layout/darkside/components/aside/side.vue | 0 .../darkside/components/header/index.vue | 0 .../components/header/layout-setting.vue | 0 .../components/header/switch-lang.vue | 0 .../darkside/components/header/user-info.vue | 0 .../src/layout/darkside/components/tabs.vue | 0 .../src/layout/darkside/index.vue | 0 .../src/layout/darkside/layout.json | 0 .../src/layout/decorate/index.vue | 0 .../layout/default/components/aside/index.vue | 0 .../default/components/aside/menu-item.vue | 0 .../layout/default/components/aside/side.vue | 0 .../default/components/header/index.vue | 0 .../components/header/layout-setting.vue | 0 .../default/components/header/switch-lang.vue | 0 .../default/components/header/user-info.vue | 0 .../src/layout/default/components/tabs.vue | 0 .../src/layout/default/index.vue | 0 .../src/layout/default/layout.json | 0 {admin => admin-vben}/src/layout/index.vue | 0 .../profession/components/aside/index.vue | 0 .../profession/components/aside/menu-item.vue | 0 .../profession/components/aside/side.vue | 0 .../profession/components/header/index.vue | 0 .../components/header/layout-setting.vue | 0 .../components/header/switch-lang.vue | 0 .../components/header/user-info.vue | 0 .../src/layout/profession/components/tabs.vue | 0 .../src/layout/profession/index.vue | 0 .../src/layout/profession/layout.json | 0 {admin => admin-vben}/src/main.ts | 0 {admin => admin-vben}/src/router/index.ts | 0 {admin => admin-vben}/src/router/routers.ts | 0 {admin => admin-vben}/src/stores/index.ts | 0 .../src/stores/modules/app.ts | 0 .../src/stores/modules/diy.ts | 0 .../src/stores/modules/poster.ts | 0 .../src/stores/modules/style.ts | 0 .../src/stores/modules/system.ts | 0 .../src/stores/modules/tabbar.ts | 0 .../src/stores/modules/user.ts | 0 {admin => admin-vben}/src/styles/common.scss | 0 .../src/styles/element-plus.scss | 0 .../src/styles/font/OPLUSSANS3-REGULAR.TTF | Bin .../src/styles/font/PingFang-Medium.ttf | Bin .../src/styles/icon/addon-iconfont.css | 0 .../src/styles/icon/iconfont.css | 0 .../src/styles/icon/official-iconfont.css | 0 .../src/styles/icon/official-iconfont.json | 0 {admin => admin-vben}/src/styles/index.scss | 0 {admin => admin-vben}/src/styles/tailwind.css | 0 {admin => admin-vben}/src/types/global.d.ts | 0 {admin => admin-vben}/src/utils/common.ts | 0 {admin => admin-vben}/src/utils/directives.ts | 0 {admin => admin-vben}/src/utils/lodop.ts | 0 {admin => admin-vben}/src/utils/qqmap.ts | 0 {admin => admin-vben}/src/utils/request.ts | 0 {admin => admin-vben}/src/utils/storage.ts | 0 {admin => admin-vben}/src/utils/test.ts | 0 {admin => admin-vben}/src/vite-env.d.ts | 0 {admin => admin-vben}/stylelint.config.mjs | 0 {admin => admin-vben}/tailwind.config.cjs | 0 {admin => admin-vben}/tea.yaml | 0 {admin => admin-vben}/tsconfig.json | 0 {admin => admin-vben}/tsconfig.node.json | 0 {admin => admin-vben}/turbo.json | 0 .../vben-admin.code-workspace | 0 {admin => admin-vben}/vite.config.ts | 0 {admin => admin-vben}/vitest.config.ts | 0 {admin => admin-vben}/vitest.workspace.ts | 0 database/schema.sql | 5015 ----------------- docker/Dockerfile | 25 - docker/auto-test.sh | 106 - docker/docker-compose.dev.yml | 66 - docker/docker-compose.yml | 180 - docker/docker-test-migration.sh | 361 -- docker/start-all.sh | 68 - docker/start-dev.sh | 35 - docker/start-prod.sh | 42 - docs/REPOSITORY-STRATEGY.md | 138 + eslint.config.mjs | 34 - nest-cli.json | 8 - package.json | 17 - push_dev.sh | 123 + push_wwjcloud_nest.sh | 123 +- src/app.controller.spec.ts | 22 - src/app.controller.ts | 12 - src/app.module.ts | 33 - src/app.service.ts | 8 - src/common/base/base.entity.ts | 64 - src/common/base/base.module.ts | 16 - src/common/base/base.repository.ts | 114 - src/common/base/base.service.ts | 178 - src/common/cache/cache.interface.ts | 172 - src/common/cache/cache.module.ts | 170 - src/common/cache/cache.service.ts | 328 -- .../cache/decorators/cache-evict.decorator.ts | 120 - .../cache/decorators/cacheable.decorator.ts | 124 - src/common/common.module.ts | 98 - src/common/context/context.module.ts | 13 - src/common/context/context.service.ts | 86 - src/common/database/backup.service.ts | 468 -- src/common/database/database.module.ts | 51 - src/common/event/event.module.ts | 31 - src/common/exception/base.exception.ts | 48 - src/common/exception/business.exception.ts | 105 - src/common/exception/exception.filter.ts | 97 - src/common/exception/exception.interface.ts | 352 -- src/common/exception/exception.module.ts | 94 - src/common/exception/exception.service.ts | 537 -- .../filters/validation-exception.filter.ts | 100 - src/common/init/init.module.ts | 15 - src/common/init/init.service.ts | 125 - .../interceptors/interceptors.module.ts | 14 - .../interceptors/method-call.interceptor.ts | 53 - .../request-parameter.interceptor.ts | 207 - src/common/language/language.example.ts | 116 - src/common/language/language.interface.ts | 94 - src/common/language/language.module.ts | 29 - src/common/language/language.service.ts | 385 -- src/common/libraries/dayjs/dayjs.module.ts | 15 - src/common/libraries/dayjs/dayjs.service.ts | 346 -- src/common/libraries/index.ts | 10 - src/common/libraries/libraries.module.ts | 43 - src/common/libraries/lodash/lodash.module.ts | 15 - src/common/libraries/lodash/lodash.service.ts | 665 --- .../libraries/prometheus/prometheus.module.ts | 26 - .../prometheus/prometheus.service.ts | 428 -- src/common/libraries/redis/redis.module.ts | 26 - src/common/libraries/redis/redis.service.ts | 488 -- src/common/libraries/sentry/sentry.module.ts | 26 - src/common/libraries/sentry/sentry.service.ts | 687 --- src/common/libraries/sharp/sharp.module.ts | 15 - src/common/libraries/sharp/sharp.service.ts | 161 - src/common/libraries/uuid/uuid.module.ts | 15 - src/common/libraries/uuid/uuid.service.ts | 105 - .../libraries/validator/validator.module.ts | 15 - .../libraries/validator/validator.service.ts | 628 --- .../libraries/winston/winston.module.ts | 26 - .../libraries/winston/winston.service.ts | 576 -- src/common/loader/loader.module.ts | 14 - src/common/loader/loader.utils.ts | 244 - src/common/logging/logging.interface.ts | 357 -- src/common/logging/logging.module.ts | 126 - src/common/logging/logging.service.ts | 542 -- src/common/monitoring/monitoring.interface.ts | 249 - src/common/monitoring/monitoring.module.ts | 161 - src/common/monitoring/monitoring.service.ts | 462 -- src/common/pipes/parse-diy-form.pipe.ts | 69 - src/common/pipes/pipes.module.ts | 79 - src/common/plugins/captcha/captcha.module.ts | 14 - src/common/plugins/captcha/captcha.service.ts | 69 - src/common/plugins/index.ts | 4 - src/common/plugins/plugins.module.ts | 17 - src/common/plugins/qrcode/qrcode.module.ts | 14 - src/common/plugins/qrcode/qrcode.service.ts | 144 - src/common/plugins/wechat/wechat.module.ts | 14 - src/common/plugins/wechat/wechat.service.ts | 232 - src/common/queue/queue.module.ts | 42 - src/common/response/page-result.class.ts | 106 - src/common/response/response.decorator.ts | 42 - src/common/response/response.interceptor.ts | 59 - src/common/response/response.module.ts | 19 - src/common/response/result.class.ts | 102 - src/common/response/result.interface.ts | 43 - src/common/scheduler/scheduler.module.ts | 14 - .../security/decorators/public.decorator.ts | 8 - .../security/decorators/roles.decorator.ts | 8 - src/common/security/guards/jwt-auth.guard.ts | 31 - src/common/security/guards/roles.guard.ts | 34 - src/common/security/security.module.ts | 37 - .../security/strategies/jwt.strategy.ts | 38 - .../security/strategies/local.strategy.ts | 36 - src/common/swagger/swagger.module.ts | 15 - src/common/swagger/swagger.service.ts | 78 - src/common/system/system.module.ts | 14 - src/common/system/system.utils.ts | 170 - src/common/tracing/tracing.module.ts | 15 - src/common/tracing/tracing.service.ts | 76 - src/common/utils/clone.util.ts | 157 - src/common/utils/crypto.util.ts | 317 -- src/common/utils/index.ts | 8 - src/common/utils/json.util.ts | 456 -- src/common/utils/object.util.ts | 474 -- src/common/utils/reflect.util.ts | 256 - src/common/utils/request.util.ts | 329 -- src/common/utils/system.util.ts | 488 -- src/common/utils/utils.module.ts | 35 - src/common/validation/base.dto.ts | 99 - src/common/validation/custom-validators.ts | 166 - src/config/app.config.ts | 294 - src/config/app.schema.ts | 128 - src/config/config-center.controller.ts | 260 - src/config/config-center.service.ts | 441 -- src/config/config.module.ts | 99 - src/config/dynamic-bean.service.ts | 265 - src/config/dynamic-config.entity.ts | 41 - src/config/dynamic-config.service.ts | 313 - src/core/addon/addon.module.ts | 9 - .../adminapi/addon-develop.controller.ts | 51 - .../controllers/adminapi/app.controller.ts | 51 - .../controllers/adminapi/backup.controller.ts | 51 - .../adminapi/upgrade.controller.ts | 55 - .../addon/controllers/api/addon.controller.ts | 70 - src/core/addon/dto/AddonDevelopDto.ts | 78 - src/core/addon/entity/addon-log.entity.ts | 25 - src/core/addon/entity/addon.entity.ts | 25 - src/core/addon/enums/addon-dict.enum.ts | 135 - .../services/admin/addon-develop.service.ts | 441 -- .../addon/services/admin/addon.service.ts | 425 -- src/core/addon/services/api/addon.service.ts | 44 - .../services/core/core-addon-base.service.ts | 132 - .../services/core/core-addon-cloud.service.ts | 284 - .../core/core-addon-develop-build.service.ts | 379 -- .../core-addon-develop-download.service.ts | 77 - .../core/core-addon-develop.service.ts | 186 - .../core/core-addon-download.service.ts | 86 - .../core/core-addon-install.service.ts | 1457 ----- .../services/core/core-addon-log.service.ts | 51 - .../addon/services/core/core-addon.service.ts | 613 -- .../services/core/core-depend.service.ts | 176 - .../addon/services/core/wap-trait.service.ts | 185 - src/core/agreement/agreement.module.ts | 9 - .../controllers/api/agreement.controller.ts | 51 - .../services/api/agreement.service.ts | 44 - src/core/aliapp/aliapp.module.ts | 9 - .../controllers/adminapi/config.controller.ts | 108 - .../services/admin/aliapp-config.service.ts | 107 - .../core/core-aliapp-config.service.ts | 100 - src/core/applet/applet.module.ts | 9 - .../adminapi/site-version.controller.ts | 129 - .../adminapi/version-download.controller.ts | 70 - .../adminapi/version.controller.ts | 191 - .../entity/applet-site-version.entity.ts | 25 - .../applet/entity/applet-version.entity.ts | 25 - src/core/applet/enums/appletl-dict.enum.ts | 135 - .../applet/listeners/WeappListenerListener.ts | 41 - .../services/admin/applet-download.service.ts | 46 - .../admin/applet-version-site.service.ts | 142 - .../services/admin/applet-version.service.ts | 420 -- .../core/core-applet-download.service.ts | 123 - .../core/core-applet-site-version.service.ts | 217 - .../core/core-applet-version.service.ts | 99 - src/core/auth/auth.module.ts | 9 - .../controllers/adminapi/auth.controller.ts | 191 - .../auth/services/admin/auth-site.service.ts | 221 - src/core/auth/services/admin/auth.service.ts | 203 - .../auth/services/admin/config.service.ts | 88 - src/core/auth/services/admin/login.service.ts | 161 - src/core/captcha/captcha.module.ts | 9 - .../captcha/services/admin/captcha.service.ts | 92 - .../captcha/services/api/captcha.service.ts | 67 - .../services/core/core-captcha-img.service.ts | 86 - .../services/core/core-captcha.service.ts | 89 - .../cash_out/enums/cash-out-type-dict.enum.ts | 141 - src/core/channel/channel.module.ts | 9 - .../controllers/adminapi/app.controller.ts | 271 - .../controllers/adminapi/h5.controller.ts | 89 - .../controllers/adminapi/pc.controller.ts | 89 - src/core/channel/dto/AliappDto.ts | 83 - src/core/channel/dto/WeappDto.ts | 78 - src/core/channel/dto/WechatDto.ts | 78 - src/core/channel/enums/app-dict.enum.ts | 135 - src/core/channel/enums/cert-dict.enum.ts | 135 - src/core/channel/enums/reply-dict.enum.ts | 135 - src/core/channel/enums/wechat-dict.enum.ts | 135 - .../channel/services/admin/app.service.ts | 385 -- src/core/channel/services/admin/h5.service.ts | 67 - src/core/channel/services/admin/pc.service.ts | 67 - .../services/core/core-app-cloud.service.ts | 337 -- .../channel/services/core/core-app.service.ts | 64 - .../channel/services/core/core-h5.service.ts | 80 - .../channel/services/core/core-pc.service.ts | 46 - src/core/common/enums/channel-dict.enum.ts | 135 - .../common/enums/common-active-dict.enum.ts | 144 - src/core/common/enums/common-dict.enum.ts | 135 - src/core/core.module.ts | 25 - .../controllers/adminapi/dict.controller.ts | 209 - src/core/dict/dict.module.ts | 9 - src/core/dict/entity/dict.entity.ts | 25 - src/core/dict/enums/dict-service.enum.ts | 135 - src/core/dict/enums/dict.enum.ts | 135 - src/core/dict/services/admin/dict.service.ts | 250 - .../controllers/adminapi/config.controller.ts | 113 - .../adminapi/diy-route.controller.ts | 127 - .../controllers/api/diy-form.controller.ts | 69 - .../diy/controllers/api/diy.controller.ts | 133 - src/core/diy/diy.module.ts | 9 - src/core/diy/dto/DiyDto.ts | 92 - src/core/diy/dto/DiyFormDto.ts | 88 - src/core/diy/dto/DiyRouteDto.ts | 87 - src/core/diy/dto/DiyThemeDto.ts | 78 - src/core/diy/entity/diy-route.entity.ts | 25 - src/core/diy/entity/diy-theme.entity.ts | 25 - src/core/diy/entity/diy.entity.ts | 25 - src/core/diy/enums/component-dict.enum.ts | 139 - src/core/diy/enums/link-dict.enum.ts | 135 - src/core/diy/enums/pages-dict.enum.ts | 135 - src/core/diy/enums/template-dict.enum.ts | 135 - .../listeners/ThemeColorListenerListener.ts | 41 - .../diy/services/admin/diy-config.service.ts | 163 - .../diy/services/admin/diy-route.service.ts | 399 -- src/core/diy/services/admin/diy.service.ts | 1243 ---- .../diy/services/api/diy-config.service.ts | 88 - .../diy/services/api/diy-route.service.ts | 66 - src/core/diy/services/api/diy.service.ts | 132 - .../services/core/core-diy-config.service.ts | 135 - .../diy/services/core/core-diy.service.ts | 54 - .../diy_form/entity/diy-form-fields.entity.ts | 25 - .../entity/diy-form-records-fields.entity.ts | 25 - .../entity/diy-form-records.entity.ts | 25 - .../entity/diy-form-submit-config.entity.ts | 25 - .../entity/diy-form-write-config.entity.ts | 25 - src/core/diy_form/entity/diy-form.entity.ts | 25 - .../diy_form/enums/component-dict.enum.ts | 139 - src/core/diy_form/enums/config-dict.enum.ts | 135 - src/core/diy_form/enums/template-dict.enum.ts | 135 - src/core/diy_form/enums/type-dict.enum.ts | 135 - ...iyFormRecordsExportDataListenerListener.ts | 50 - ...iyFormRecordsExportTypeListenerListener.ts | 50 - ...RecordsFieldsExportDataListenerListener.ts | 54 - ...RecordsFieldsExportTypeListenerListener.ts | 54 - ...RecordsMemberExportDataListenerListener.ts | 54 - ...RecordsMemberExportTypeListenerListener.ts | 54 - .../adminapi/generator.controller.ts | 51 - src/core/generator/dto/GeneratorDto.ts | 78 - .../entity/generate-column.entity.ts | 25 - .../generator/entity/generate-table.entity.ts | 25 - src/core/generator/generator.module.ts | 9 - .../services/admin/generate.service.ts | 456 -- .../controllers/adminapi/site.controller.ts | 168 - src/core/home/home.module.ts | 9 - .../home/services/admin/auth-site.service.ts | 278 - .../adminapi/promotion-adv.controller.ts | 74 - src/core/index/index.module.ts | 9 - .../core/core-promotion-adv.service.ts | 42 - .../QueueFailedLoggerListenerListener.ts | 44 - src/core/lang/enums/en-dict.enum.ts | 135 - src/core/lang/enums/zh-cn-dict.enum.ts | 135 - .../decorators/validate-message.decorator.ts | 58 - .../adminapi/captcha.controller.ts | 51 - .../controllers/api/config.controller.ts | 51 - .../login/controllers/api/login.controller.ts | 57 - .../controllers/api/register.controller.ts | 55 - src/core/login/login.module.ts | 9 - src/core/login/services/api/auth.service.ts | 130 - src/core/login/services/api/config.service.ts | 46 - src/core/login/services/api/login.service.ts | 923 --- .../login/services/api/register.service.ts | 204 - .../adminapi/cash-out.controller.ts | 255 - .../controllers/adminapi/config.controller.ts | 253 - .../adminapi/member-label.controller.ts | 168 - .../adminapi/member-level.controller.ts | 168 - .../controllers/api/account.controller.ts | 70 - .../controllers/api/address.controller.ts | 149 - .../api/cash-out-account.controller.ts | 170 - .../controllers/api/level.controller.ts | 51 - .../api/member-cash-out.controller.ts | 188 - .../controllers/api/member-sign.controller.ts | 172 - .../controllers/api/member.controller.ts | 177 - src/core/member/dto/AddressDto.ts | 103 - src/core/member/dto/CashOutAccountDto.ts | 86 - src/core/member/dto/CashOutConfigDto.ts | 93 - src/core/member/dto/CashOutDto.ts | 84 - src/core/member/dto/LoginConfigDto.ts | 88 - src/core/member/dto/MemberConfigDto.ts | 72 - src/core/member/dto/MemberDto.ts | 100 - src/core/member/dto/MemberLabelDto.ts | 81 - src/core/member/dto/MemberLevelDto.ts | 78 - .../entity/member-account-log.entity.ts | 25 - .../member/entity/member-address.entity.ts | 25 - .../entity/member-cash-out-account.entity.ts | 25 - .../member/entity/member-cash-out.entity.ts | 25 - src/core/member/entity/member-label.entity.ts | 25 - src/core/member/entity/member-level.entity.ts | 25 - src/core/member/entity/member-sign.entity.ts | 25 - src/core/member/entity/member.entity.ts | 25 - .../member/enums/account-change-type.enum.ts | 147 - src/core/member/enums/benefits.enum.ts | 135 - src/core/member/enums/gift.enum.ts | 135 - src/core/member/enums/growth-rule.enum.ts | 135 - .../member-account-change-type-dict.enum.ts | 150 - .../enums/member-account-type-dict.enum.ts | 150 - .../member/enums/member-cash-out-dict.enum.ts | 147 - src/core/member/enums/member-dict.enum.ts | 135 - .../member/enums/member-level-dict.enum.ts | 141 - .../enums/member-login-type-dict.enum.ts | 150 - .../member-register-channel-dict.enum.ts | 150 - .../enums/member-register-type-dict.enum.ts | 150 - .../member/enums/member-sign-dict.enum.ts | 141 - .../enums/member-sign-type-dict.enum.ts | 150 - src/core/member/enums/point-rule.enum.ts | 135 - src/core/member/jobs/MemberGiftGrantJob.ts | 86 - src/core/member/jobs/SetMemberNoJob.ts | 86 - .../MemberAccountListenerListener.ts | 41 - .../listeners/MemberLoginListenerListener.ts | 41 - .../MemberRegisterListenerListener.ts | 41 - src/core/member/member.module.ts | 9 - .../member/services/admin/address.service.ts | 119 - .../services/admin/member-account.service.ts | 621 -- .../services/admin/member-cash-out.service.ts | 399 -- .../services/admin/member-config.service.ts | 334 -- .../services/admin/member-label.service.ts | 404 -- .../services/admin/member-level.service.ts | 350 -- .../services/admin/member-sign.service.ts | 105 - .../member/services/admin/member.service.ts | 629 --- .../member/services/api/address.service.ts | 232 - .../services/api/member-account.service.ts | 271 - .../api/member-cash-out-account.service.ts | 339 -- .../services/api/member-cash-out.service.ts | 334 -- .../services/api/member-config.service.ts | 48 - .../services/api/member-level.service.ts | 74 - .../member/services/api/member-log.service.ts | 46 - .../services/api/member-sign.service.ts | 647 --- .../member/services/api/member.service.ts | 382 -- .../core/core-member-account.service.ts | 52 - .../core/core-member-address.service.ts | 193 - .../core-member-cash-out-account.service.ts | 43 - .../core/core-member-cash-out.service.ts | 698 --- .../core/core-member-config.service.ts | 557 -- .../core/core-member-label.service.ts | 76 - .../core/core-member-level.service.ts | 95 - .../services/core/core-member.service.ts | 393 -- .../MemberExportDataListenerListener.ts | 44 - .../MemberExportTypeListenerListener.ts | 44 - src/core/menu/enums/admin.enum.ts | 135 - src/core/menu/enums/site.enum.ts | 135 - .../controllers/adminapi/cloud.controller.ts | 208 - .../controllers/adminapi/module.controller.ts | 169 - src/core/niucloud/dto/ModuleDto.ts | 78 - src/core/niucloud/niucloud.module.ts | 9 - .../services/admin/niucloud.service.ts | 265 - .../services/core/core-auth.service.ts | 44 - .../services/core/core-cloud-base.service.ts | 43 - .../services/core/core-cloud-build.service.ts | 258 - .../services/core/core-module.service.ts | 618 -- .../core/core-niucloud-config.service.ts | 47 - .../services/core/core-notify.service.ts | 48 - .../adminapi/niu-sms.controller.ts | 270 - .../adminapi/notice-log.controller.ts | 89 - .../controllers/adminapi/notice.controller.ts | 195 - .../adminapi/sms-log.controller.ts | 89 - src/core/notice/enums/notice-dict.enum.ts | 135 - .../notice/enums/notice-type-dict.enum.ts | 141 - src/core/notice/enums/notice.enum.ts | 135 - src/core/notice/enums/sms.enum.ts | 135 - src/core/notice/enums/weapp.enum.ts | 135 - src/core/notice/enums/wechat.enum.ts | 135 - src/core/notice/jobs/NoticeJob.ts | 86 - src/core/notice/listeners/SmsListener.ts | 41 - src/core/notice/listeners/WeappListener.ts | 41 - src/core/notice/listeners/WechatListener.ts | 41 - src/core/notice/notice.module.ts | 9 - .../notice/services/admin/niu-sms.service.ts | 1100 ---- .../services/admin/notice-log.service.ts | 65 - .../services/admin/notice-sms-log.service.ts | 65 - .../notice/services/admin/notice.service.ts | 272 - src/core/notice/services/admin/sms.service.ts | 77 - .../services/core/core-niu-sms.service.ts | 1301 ----- .../services/core/core-notice-log.service.ts | 88 - .../core/core-notice-sms-log.service.ts | 225 - .../services/core/core-notice.service.ts | 127 - .../notice/services/core/core-sms.service.ts | 106 - .../notice/services/core/notice.service.ts | 47 - .../listeners/BaseNoticeTemplateListener.ts | 44 - .../listeners/MemberVerifySuccessListener.ts | 44 - .../listeners/VerifyCodeListener.ts | 41 - .../adminapi/pay-channel.controller.ts | 170 - .../adminapi/pay-refund.controller.ts | 145 - .../pay/controllers/api/pay.controller.ts | 76 - .../controllers/api/transfer.controller.ts | 51 - src/core/pay/dto/PayDto.ts | 118 - src/core/pay/dto/PayTemplateDto.ts | 123 - src/core/pay/entity/pay-channel.entity.ts | 25 - src/core/pay/entity/pay.entity.ts | 25 - src/core/pay/entity/refund.entity.ts | 25 - src/core/pay/entity/transfer-scene.entity.ts | 25 - src/core/pay/entity/transfer.entity.ts | 25 - src/core/pay/enums/online-pay-dict.enum.ts | 139 - src/core/pay/enums/online-refund-dict.enum.ts | 144 - src/core/pay/enums/pay-channel-dict.enum.ts | 141 - src/core/pay/enums/pay-dict.enum.ts | 135 - src/core/pay/enums/pay-scene-dict.enum.ts | 135 - src/core/pay/enums/refund-dict.enum.ts | 135 - src/core/pay/enums/transfer-dict.enum.ts | 135 - src/core/pay/jobs/PayReturnToJob.ts | 86 - .../listeners/PayCreateListenerListener.ts | 41 - .../listeners/PayNotifyListenerListener.ts | 41 - .../listeners/PaySuccessListenerListener.ts | 41 - .../RefundSuccessListenerListener.ts | 41 - .../TransferSuccessListenerListener.ts | 44 - src/core/pay/pay.module.ts | 9 - .../pay/services/admin/pay-channel.service.ts | 214 - src/core/pay/services/admin/pay.service.ts | 707 --- src/core/pay/services/admin/refund.service.ts | 114 - .../pay/services/admin/transfer.service.ts | 117 - src/core/pay/services/api/pay.service.ts | 331 -- src/core/pay/services/api/transfer.service.ts | 51 - .../services/core/core-pay-channel.service.ts | 130 - .../services/core/core-pay-event.service.ts | 436 -- .../pay/services/core/core-pay.service.ts | 590 -- .../pay/services/core/core-refund.service.ts | 397 -- .../core/core-transfer-scene.service.ts | 171 - .../services/core/core-transfer.service.ts | 436 -- .../controllers/api/poster.controller.ts | 50 - src/core/poster/enums/component-dict.enum.ts | 139 - src/core/poster/enums/template.enum.ts | 135 - .../listeners/FriendspayPosterListener.ts | 44 - src/core/poster/poster.module.ts | 9 - .../services/core/core-poster.service.ts | 464 -- .../listeners/WeappQrcodeListenerListener.ts | 41 - .../listeners/WechatQrcodeListenerListener.ts | 41 - src/core/scan/enums/scan-dict.enum.ts | 135 - .../scan/listeners/ScanListenerListener.ts | 41 - src/core/schedule/enums/schedule-dict.enum.ts | 135 - .../schedule/enums/schedule-log-dict.enum.ts | 141 - src/core/schedule/enums/schedule.enum.ts | 135 - .../jobs/AutoClearPosterAndQrcodeJob.ts | 108 - .../schedule/jobs/AutoClearScheduleLogJob.ts | 95 - src/core/schedule/jobs/OrderCloseJob.ts | 86 - src/core/schedule/jobs/SiteExpireCloseJob.ts | 86 - src/core/schedule/jobs/SiteStatJob.ts | 86 - .../adminapi/site-account.controller.ts | 126 - .../adminapi/site-group.controller.ts | 187 - .../controllers/adminapi/site.controller.ts | 371 -- .../adminapi/user-log.controller.ts | 108 - .../controllers/adminapi/user.controller.ts | 216 - src/core/site/dto/SiteDto.ts | 86 - src/core/site/dto/SiteGroupDto.ts | 78 - .../site/entity/site-account-log.entity.ts | 25 - src/core/site/entity/site-group.entity.ts | 25 - src/core/site/entity/site.entity.ts | 25 - .../site/enums/site-account-log-dict.enum.ts | 150 - src/core/site/enums/site-dict.enum.ts | 135 - .../admin/site-account-log.service.ts | 109 - .../site/services/admin/site-group.service.ts | 469 -- .../site/services/admin/site-user.service.ts | 264 - src/core/site/services/admin/site.service.ts | 862 --- .../site/services/admin/user-log.service.ts | 142 - .../core/core-site-account.service.ts | 153 - .../site/services/core/core-site.service.ts | 311 - src/core/site/site.module.ts | 9 - .../adminapi/site-stat.controller.ts | 70 - .../controllers/adminapi/stat.controller.ts | 70 - src/core/stat/entity/stat-hour.entity.ts | 25 - .../stat/services/admin/site-stat.service.ts | 54 - src/core/stat/services/admin/stat.service.ts | 109 - .../stat/services/core/core-stat.service.ts | 226 - src/core/stat/stat.module.ts | 9 - .../adminapi/agreement.controller.ts | 115 - .../controllers/adminapi/app.controller.ts | 70 - .../controllers/adminapi/area.controller.ts | 146 - .../adminapi/attachment.controller.ts | 217 - .../adminapi/channel.controller.ts | 68 - .../controllers/adminapi/common.controller.ts | 88 - .../controllers/adminapi/config.controller.ts | 319 -- .../controllers/adminapi/export.controller.ts | 165 - .../controllers/adminapi/menu.controller.ts | 268 - .../controllers/adminapi/poster.controller.ts | 284 - .../adminapi/printer.controller.ts | 409 -- .../controllers/adminapi/role.controller.ts | 187 - .../adminapi/schedule-log.controller.ts | 107 - .../adminapi/schedule.controller.ts | 266 - .../controllers/adminapi/system.controller.ts | 202 - .../adminapi/ueditor.controller.ts | 89 - src/core/sys/dto/AgreementDto.ts | 78 - src/core/sys/dto/AttachmentCategoryDto.ts | 78 - src/core/sys/dto/MenuDto.ts | 97 - src/core/sys/dto/PageDto.ts | 76 - src/core/sys/dto/PrinterDto.ts | 103 - src/core/sys/dto/PrinterTemplateDto.ts | 78 - src/core/sys/dto/RoleDto.ts | 73 - src/core/sys/dto/ScheduleDto.ts | 73 - src/core/sys/dto/UserDto.ts | 83 - src/core/sys/entity/app-version.entity.ts | 25 - .../sys/entity/niu-sms-template.entity.ts | 25 - src/core/sys/entity/poster.entity.ts | 25 - src/core/sys/entity/sys-agreement.entity.ts | 25 - src/core/sys/entity/sys-area.entity.ts | 25 - .../entity/sys-attachment-category.entity.ts | 25 - src/core/sys/entity/sys-attachment.entity.ts | 25 - .../sys/entity/sys-backup-records.entity.ts | 25 - src/core/sys/entity/sys-config.entity.ts | 25 - src/core/sys/entity/sys-export.entity.ts | 25 - src/core/sys/entity/sys-menu.entity.ts | 25 - src/core/sys/entity/sys-notice-log.entity.ts | 25 - .../sys/entity/sys-notice-sms-log.entity.ts | 25 - src/core/sys/entity/sys-notice.entity.ts | 25 - .../sys/entity/sys-printer-template.entity.ts | 25 - src/core/sys/entity/sys-printer.entity.ts | 25 - src/core/sys/entity/sys-role.entity.ts | 25 - .../sys/entity/sys-schedule-log.entity.ts | 25 - src/core/sys/entity/sys-schedule.entity.ts | 25 - .../sys/entity/sys-upgrade-records.entity.ts | 25 - src/core/sys/entity/sys-user-log.entity.ts | 25 - src/core/sys/entity/sys-user-role.entity.ts | 25 - src/core/sys/entity/sys-user.entity.ts | 25 - .../entity/user-create-site-limit.entity.ts | 25 - .../wx-oplatfrom-weapp-version.entity.ts | 25 - src/core/sys/enums/agreement-dict.enum.ts | 139 - src/core/sys/enums/app-type-dict.enum.ts | 135 - src/core/sys/enums/backup-dict.enum.ts | 135 - src/core/sys/enums/cloud-dict.enum.ts | 135 - src/core/sys/enums/config-key-dict.enum.ts | 139 - src/core/sys/enums/date-dict.enum.ts | 135 - src/core/sys/enums/export-dict.enum.ts | 135 - src/core/sys/enums/file-dict.enum.ts | 135 - src/core/sys/enums/menu-dict.enum.ts | 135 - src/core/sys/enums/menu-type-dict.enum.ts | 135 - src/core/sys/enums/method-dict.enum.ts | 135 - src/core/sys/enums/poster-dict.enum.ts | 135 - src/core/sys/enums/printer-dict.enum.ts | 135 - src/core/sys/enums/role-status-dict.enum.ts | 141 - src/core/sys/enums/sms-dict.enum.ts | 135 - src/core/sys/enums/storage-dict.enum.ts | 135 - src/core/sys/enums/upgrade-dict.enum.ts | 135 - src/core/sys/enums/user-dict.enum.ts | 135 - src/core/sys/enums/wechat-media-dict.enum.ts | 141 - src/core/sys/enums/wx-oplatform.enum.ts | 135 - src/core/sys/jobs/AddonInstallJob.ts | 86 - src/core/sys/jobs/CheckDeleteJob.ts | 86 - src/core/sys/jobs/CheckJob.ts | 86 - src/core/sys/jobs/ClearUserLogJob.ts | 86 - src/core/sys/jobs/ExportJob.ts | 86 - .../sys/services/admin/agreement.service.ts | 84 - src/core/sys/services/admin/app.service.ts | 54 - src/core/sys/services/admin/area.service.ts | 183 - .../sys/services/admin/attachment.service.ts | 649 --- src/core/sys/services/admin/config.service.ts | 901 --- src/core/sys/services/admin/export.service.ts | 247 - src/core/sys/services/admin/menu.service.ts | 672 --- src/core/sys/services/admin/poster.service.ts | 714 --- .../admin/printer-template.service.ts | 404 -- .../sys/services/admin/printer.service.ts | 611 -- src/core/sys/services/admin/role.service.ts | 459 -- src/core/sys/services/admin/system.service.ts | 201 - .../services/core/core-agreement.service.ts | 125 - .../sys/services/core/core-area.service.ts | 175 - .../services/core/core-attachment.service.ts | 239 - .../sys/services/core/core-config.service.ts | 122 - .../sys/services/core/core-export.service.ts | 234 - .../services/core/core-sys-config.service.ts | 128 - src/core/sys/sys.module.ts | 22 - .../listeners/AddSiteAfterListenerListener.ts | 41 - .../listeners/AdminIndexListenerListener.ts | 41 - .../listeners/AppInitListenerListener.ts | 41 - .../listeners/AppManageListenerListener.ts | 41 - .../BottomNavigationListenerListener.ts | 44 - src/core/system/listeners/PosterListener.ts | 41 - .../system/listeners/PosterTypeListener.ts | 41 - .../listeners/ShowAppListenerListener.ts | 41 - .../ShowMarketingListenerListener.ts | 41 - .../listeners/SiteIndexListenerListener.ts | 41 - .../listeners/SiteInitListenerListener.ts | 41 - .../system/listeners/SiteLayoutListener.ts | 41 - .../listeners/WeappAuthChangeAfterListener.ts | 44 - .../TransferCashOutListenerListener.ts | 44 - .../jobs/AutoClearUpgradeRecordsJob.ts | 102 - .../services/admin/backup-records.service.ts | 961 ---- .../upgrade/services/admin/backup.service.ts | 62 - .../admin/execute-sql-trait.service.ts | 69 - .../upgrade/services/admin/restore.service.ts | 51 - .../services/admin/upgrade-records.service.ts | 314 -- .../upgrade/services/admin/upgrade.service.ts | 715 --- src/core/upgrade/upgrade.module.ts | 9 - .../adminapi/storage.controller.ts | 51 - .../controllers/api/upload.controller.ts | 57 - .../services/admin/storage-config.service.ts | 92 - .../services/admin/upload-config.service.ts | 73 - .../upload/services/admin/upload.service.ts | 174 - .../upload/services/api/base64.service.ts | 47 - src/core/upload/services/api/fetch.service.ts | 47 - .../upload/services/api/upload.service.ts | 119 - .../services/core/core-base64.service.ts | 51 - .../services/core/core-fetch.service.ts | 54 - .../upload/services/core/core-file.service.ts | 194 - .../services/core/core-image.service.ts | 59 - .../services/core/core-storage.service.ts | 153 - .../core/core-upload-config.service.ts | 71 - .../services/core/core-upload.service.ts | 219 - src/core/upload/upload.module.ts | 9 - .../controllers/adminapi/user.controller.ts | 115 - src/core/user/dto/create-user.dto.ts | 33 - .../user/services/admin/user-role.service.ts | 171 - src/core/user/services/admin/user.service.ts | 152 - src/core/user/user.module.ts | 22 - .../adminapi/verifier.controller.ts | 186 - .../controllers/adminapi/verify.controller.ts | 134 - src/core/verify/entity/verifier.entity.ts | 25 - src/core/verify/entity/verify.entity.ts | 25 - src/core/verify/enums/verify-dict.enum.ts | 135 - .../verify/services/admin/verifier.service.ts | 168 - .../verify/services/admin/verify.service.ts | 114 - .../services/core/core-verify.service.ts | 327 -- src/core/verify/verify.module.ts | 9 - .../controllers/adminapi/config.controller.ts | 148 - .../adminapi/delivery.controller.ts | 70 - .../adminapi/package.controller.ts | 50 - .../adminapi/template.controller.ts | 89 - .../adminapi/version.controller.ts | 127 - .../weapp/controllers/api/serve.controller.ts | 51 - .../weapp/controllers/api/weapp.controller.ts | 55 - src/core/weapp/entity/weapp-version.entity.ts | 25 - .../services/admin/weapp-config.service.ts | 140 - .../services/admin/weapp-delivery.service.ts | 45 - .../services/admin/weapp-package.service.ts | 45 - .../services/admin/weapp-template.service.ts | 96 - .../services/admin/weapp-version.service.ts | 225 - .../weapp/services/api/weapp-auth.service.ts | 162 - .../services/api/weapp-delivery.service.ts | 63 - .../weapp/services/api/weapp-serve.service.ts | 44 - .../services/core/core-weapp-auth.service.ts | 89 - .../services/core/core-weapp-cloud.service.ts | 322 -- .../core/core-weapp-config.service.ts | 184 - .../core/core-weapp-delivery.service.ts | 449 -- .../services/core/core-weapp-serve.service.ts | 43 - .../core/core-weapp-template.service.ts | 135 - .../weapp/services/core/core-weapp.service.ts | 115 - src/core/weapp/weapp.module.ts | 9 - .../controllers/adminapi/config.controller.ts | 108 - .../controllers/adminapi/media.controller.ts | 127 - .../controllers/adminapi/menu.controller.ts | 89 - .../controllers/adminapi/reply.controller.ts | 225 - .../adminapi/template.controller.ts | 89 - .../controllers/api/serve.controller.ts | 51 - .../controllers/api/wechat.controller.ts | 55 - src/core/wechat/entity/wechat-fans.entity.ts | 25 - src/core/wechat/entity/wechat-media.entity.ts | 25 - src/core/wechat/entity/wechat-reply.entity.ts | 25 - .../services/admin/wechat-config.service.ts | 73 - .../services/admin/wechat-event.service.ts | 44 - .../services/admin/wechat-fans.service.ts | 51 - .../services/admin/wechat-media.service.ts | 208 - .../services/admin/wechat-menu.service.ts | 83 - .../services/admin/wechat-reply.service.ts | 460 -- .../services/admin/wechat-template.service.ts | 94 - .../wechat/services/api/wechat-app.service.ts | 156 - .../services/api/wechat-auth.service.ts | 361 -- .../services/api/wechat-serve.service.ts | 44 - .../services/core/core-wechat-api.service.ts | 126 - .../services/core/core-wechat-app.service.ts | 116 - .../core/core-wechat-config.service.ts | 258 - .../services/core/core-wechat-fans.service.ts | 237 - .../core/core-wechat-media.service.ts | 86 - .../core/core-wechat-message.service.ts | 155 - .../core/core-wechat-reply.service.ts | 544 -- .../core/core-wechat-serve.service.ts | 172 - .../core/core-wechat-template.service.ts | 104 - .../services/core/core-wechat.service.ts | 338 -- src/core/wechat/wechat.module.ts | 9 - .../controllers/adminapi/config.controller.ts | 110 - .../adminapi/oplatform.controller.ts | 108 - .../controllers/adminapi/server.controller.ts | 53 - .../adminapi/weapp-version.controller.ts | 188 - .../jobs/GetVersionUploadResultJob.ts | 95 - .../wxoplatform/jobs/SiteWeappCommitJob.ts | 86 - src/core/wxoplatform/jobs/SubmitAuditJob.ts | 86 - .../jobs/VersionUploadSuccessJob.ts | 95 - .../jobs/WeappAuthChangeAfterJob.ts | 95 - src/core/wxoplatform/jobs/WeappCommitJob.ts | 86 - .../jobs/WechatAuthChangeAfterJob.ts | 95 - .../admin/oplatform-config.service.ts | 73 - .../admin/oplatform-server.service.ts | 123 - .../services/admin/oplatform.service.ts | 211 - .../services/admin/weapp-version.service.ts | 472 -- .../core/core-oplatform-config.service.ts | 139 - .../services/core/core-oplatform.service.ts | 2803 --------- src/core/wxoplatform/wxoplatform.module.ts | 9 - src/lang/en_US/common/api.json | 20 - src/lang/en_US/common/dict.json | 29 - src/lang/en_US/common/validate.json | 14 - src/lang/zh_CN/common/api.json | 20 - src/lang/zh_CN/common/dict.json | 159 - src/lang/zh_CN/common/validate.json | 157 - src/lang/zh_CN/order/api.json | 16 - src/lang/zh_CN/order/dict.json | 22 - src/lang/zh_CN/order/validate.json | 11 - src/lang/zh_CN/user/api.json | 18 - src/lang/zh_CN/user/dict.json | 19 - src/lang/zh_CN/user/validate.json | 10 - src/main.ts | 14 - .../notice/interfaces/notice.interface.ts | 74 - src/vendor/notice/notice.module.ts | 51 - src/vendor/notice/notice.service.ts | 143 - .../notice/providers/base-notice.provider.ts | 79 - .../notice/providers/sms-notice.provider.ts | 91 - .../notice/providers/weapp-notice.provider.ts | 91 - .../providers/wechat-notice.provider.ts | 91 - src/vendor/pay/interfaces/pay.interface.ts | 117 - src/vendor/pay/pay.module.ts | 51 - src/vendor/pay/pay.service.ts | 188 - src/vendor/pay/providers/alipay.provider.ts | 257 - .../pay/providers/balance-pay.provider.ts | 130 - src/vendor/pay/providers/base-pay.provider.ts | 110 - .../pay/providers/wechat-pay.provider.ts | 323 -- src/vendor/sms/interfaces/sms.interface.ts | 70 - .../sms/providers/aliyun-sms.provider.ts | 103 - src/vendor/sms/providers/base-sms.provider.ts | 73 - .../sms/providers/tencent-sms.provider.ts | 102 - src/vendor/sms/sms.module.ts | 47 - src/vendor/sms/sms.service.ts | 139 - .../upload/interfaces/upload.interface.ts | 168 - .../providers/aliyun-upload.provider.ts | 316 -- .../upload/providers/base-upload.provider.ts | 160 - .../upload/providers/local-upload.provider.ts | 276 - .../upload/providers/qiniu-upload.provider.ts | 305 - src/vendor/upload/upload.module.ts | 51 - src/vendor/upload/upload.service.ts | 525 -- src/vendor/vendor.module.ts | 41 - test/app.e2e-spec.ts | 62 - test/jest-e2e.json | 15 - tsconfig.build.json | 4 - tsconfig.json | 33 - wwjcloud-nest/docker/start-all.sh | 0 wwjcloud-nest/src/common/common.module.ts | 3 - .../src/common/health/health.controller.ts | 62 - .../src/common/health/health.module.ts | 13 - wwjcloud-nest/src/main.ts | 4 +- 3263 files changed, 356 insertions(+), 112679 deletions(-) delete mode 100644 .prettierrc delete mode 100644 ARCHITECTURE.md delete mode 100644 README-DOCKER.md rename {admin => admin-vben}/.browserslistrc (100%) rename {admin => admin-vben}/.changeset/README.md (100%) rename {admin => admin-vben}/.changeset/config.json (100%) rename {admin => admin-vben}/.commitlintrc.js (100%) rename {admin => admin-vben}/.dockerignore (100%) rename {admin => admin-vben}/.editorconfig (100%) rename {admin => admin-vben}/.env.development (100%) rename {admin => admin-vben}/.env.production (100%) rename {admin => admin-vben}/.eslintrc.json (100%) rename {admin => admin-vben}/.gitattributes (100%) rename {admin => admin-vben}/.gitconfig (100%) rename {admin => admin-vben}/.github/CODEOWNERS (100%) rename {admin => admin-vben}/.github/ISSUE_TEMPLATE/bug-report.yml (100%) rename {admin => admin-vben}/.github/ISSUE_TEMPLATE/docs.yml (100%) rename {admin => admin-vben}/.github/ISSUE_TEMPLATE/feature-request.yml (100%) rename {admin => admin-vben}/.github/actions/setup-node/action.yml (100%) rename {admin => admin-vben}/.github/commit-convention.md (100%) rename {admin => admin-vben}/.github/config.yml (100%) rename {admin => admin-vben}/.github/contributing.md (100%) rename {admin => admin-vben}/.github/dependabot.yml (100%) rename {admin => admin-vben}/.github/pull_request_template.md (100%) rename {admin => admin-vben}/.github/release-drafter.yml (100%) rename {admin => admin-vben}/.github/semantic.yml (100%) rename {admin => admin-vben}/.github/workflows/build.yml (100%) rename {admin => admin-vben}/.github/workflows/changeset-version.yml (100%) rename {admin => admin-vben}/.github/workflows/ci.yml (100%) rename {admin => admin-vben}/.github/workflows/codeql.yml (100%) rename {admin => admin-vben}/.github/workflows/deploy.yml (100%) rename {admin => admin-vben}/.github/workflows/draft.yml (100%) rename {admin => admin-vben}/.github/workflows/issue-close-require.yml (100%) rename {admin => admin-vben}/.github/workflows/issue-labeled.yml (100%) rename {admin => admin-vben}/.github/workflows/lock.yml (100%) rename {admin => admin-vben}/.github/workflows/release-tag.yml (100%) rename {admin => admin-vben}/.github/workflows/rerun.yml (100%) rename {admin => admin-vben}/.github/workflows/semantic-pull-request.yml (100%) rename {admin => admin-vben}/.github/workflows/stale.yml (100%) rename {admin => admin-vben}/.gitignore (100%) rename {admin => admin-vben}/.gitpod.yml (100%) rename {admin => admin-vben}/.node-version (100%) rename {admin => admin-vben}/.npmrc (100%) rename {admin => admin-vben}/.prettierignore (100%) rename {admin => admin-vben}/.prettierrc.mjs (100%) rename {admin => admin-vben}/.stylelintignore (100%) rename {admin => admin-vben}/Dockerfile (100%) rename {admin => admin-vben}/LICENSE (100%) rename {admin => admin-vben}/README.ja-JP.md (100%) rename {admin => admin-vben}/README.md (100%) rename {admin => admin-vben}/README.zh-CN.md (100%) rename {admin => admin-vben}/apps/backend-mock/README.md (100%) rename {admin => admin-vben}/apps/backend-mock/api/auth/codes.ts (100%) rename {admin => admin-vben}/apps/backend-mock/api/auth/login.post.ts (100%) rename {admin => admin-vben}/apps/backend-mock/api/auth/logout.post.ts (100%) rename {admin => admin-vben}/apps/backend-mock/api/auth/refresh.post.ts (100%) rename {admin => admin-vben}/apps/backend-mock/api/demo/bigint.ts (100%) rename {admin => admin-vben}/apps/backend-mock/api/menu/all.ts (100%) rename {admin => admin-vben}/apps/backend-mock/api/status.ts (100%) rename {admin => admin-vben}/apps/backend-mock/api/system/dept/.post.ts (100%) rename {admin => admin-vben}/apps/backend-mock/api/system/dept/[id].delete.ts (100%) rename {admin => admin-vben}/apps/backend-mock/api/system/dept/[id].put.ts (100%) rename {admin => admin-vben}/apps/backend-mock/api/system/dept/list.ts (100%) rename {admin => admin-vben}/apps/backend-mock/api/system/menu/list.ts (100%) rename {admin => admin-vben}/apps/backend-mock/api/system/menu/name-exists.ts (100%) rename {admin => admin-vben}/apps/backend-mock/api/system/menu/path-exists.ts (100%) rename {admin => admin-vben}/apps/backend-mock/api/system/role/list.ts (100%) rename {admin => admin-vben}/apps/backend-mock/api/table/list.ts (100%) rename {admin => admin-vben}/apps/backend-mock/api/test.get.ts (100%) rename {admin => admin-vben}/apps/backend-mock/api/test.post.ts (100%) rename {admin => admin-vben}/apps/backend-mock/api/upload.ts (100%) rename {admin => admin-vben}/apps/backend-mock/api/user/info.ts (100%) rename {admin => admin-vben}/apps/backend-mock/error.ts (100%) rename {admin => admin-vben}/apps/backend-mock/middleware/1.api.ts (100%) rename {admin => admin-vben}/apps/backend-mock/nitro.config.ts (100%) rename {admin => admin-vben}/apps/backend-mock/package.json (100%) rename {admin => admin-vben}/apps/backend-mock/routes/[...].ts (100%) rename {admin => admin-vben}/apps/backend-mock/tsconfig.build.json (100%) rename {admin => admin-vben}/apps/backend-mock/tsconfig.json (100%) rename {admin => admin-vben}/apps/backend-mock/utils/cookie-utils.ts (100%) rename {admin => admin-vben}/apps/backend-mock/utils/jwt-utils.ts (100%) rename {admin => admin-vben}/apps/backend-mock/utils/mock-data.ts (100%) rename {admin => admin-vben}/apps/backend-mock/utils/response.ts (100%) rename {admin => admin-vben}/apps/web-antd/.env.analyze (100%) rename {admin => admin-vben}/apps/web-antd/.env.development (100%) rename {admin => admin-vben}/apps/web-antd/.env.production (100%) rename {admin => admin-vben}/apps/web-antd/__tests__/e2e/auth-login.spec.ts (100%) rename {admin => admin-vben}/apps/web-antd/__tests__/e2e/common/auth.ts (100%) rename {admin => admin-vben}/apps/web-antd/index.html (100%) rename {admin => admin-vben}/apps/web-antd/package.json (100%) rename {admin => admin-vben}/apps/web-antd/postcss.config.mjs (100%) rename {admin => admin-vben}/apps/web-antd/public/favicon.ico (100%) rename {admin => admin-vben}/apps/web-antd/src/adapter/component/index.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/adapter/form.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/adapter/vxe-table.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/addon/cms/api/article.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/addon/cms/lang/zh-cn/article.category.json (100%) rename {admin => admin-vben}/apps/web-antd/src/addon/cms/lang/zh-cn/article.edit.json (100%) rename {admin => admin-vben}/apps/web-antd/src/addon/cms/lang/zh-cn/article.list.json (100%) rename {admin => admin-vben}/apps/web-antd/src/addon/cms/lang/zh-cn/common.json (100%) rename {admin => admin-vben}/apps/web-antd/src/addon/cms/views/article/category.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/addon/cms/views/article/components/edit-category.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/addon/cms/views/article/edit.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/addon/cms/views/article/list.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/addon/cms/views/diy/components/edit-article.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/addon/example/router/index.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/addon/example/views/dashboard.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/addon/example/views/public.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/api/core/auth.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/api/core/index.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/api/core/menu.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/api/core/user.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/api/examples/download.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/api/examples/index.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/api/examples/json-bigint.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/api/examples/params.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/api/examples/status.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/api/examples/table.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/api/examples/upload.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/api/index.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/api/request.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/api/site.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/api/system/dept.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/api/system/index.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/api/system/menu.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/api/system/role.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/app.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/bootstrap.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/constants/layout.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/layouts/app/admin.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/layouts/app/home.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/layouts/app/site.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/layouts/auth.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/layouts/basic.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/layouts/index.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/locales/README.md (100%) rename {admin => admin-vben}/apps/web-antd/src/locales/index.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/locales/langs/en-US/demos.json (100%) rename {admin => admin-vben}/apps/web-antd/src/locales/langs/en-US/examples.json (100%) rename {admin => admin-vben}/apps/web-antd/src/locales/langs/en-US/page.json (100%) rename {admin => admin-vben}/apps/web-antd/src/locales/langs/en-US/system.json (100%) rename {admin => admin-vben}/apps/web-antd/src/locales/langs/zh-CN/demos.json (100%) rename {admin => admin-vben}/apps/web-antd/src/locales/langs/zh-CN/examples.json (100%) rename {admin => admin-vben}/apps/web-antd/src/locales/langs/zh-CN/page.json (100%) rename {admin => admin-vben}/apps/web-antd/src/locales/langs/zh-CN/system.json (100%) rename {admin => admin-vben}/apps/web-antd/src/main.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/preferences.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/router/access.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/router/guard.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/router/index.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/router/routes/core.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/router/routes/index.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/router/routes/modules/admin-setting.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/router/routes/modules/app-entries.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/router/routes/modules/dashboard.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/router/routes/modules/demos.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/router/routes/modules/examples.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/router/routes/modules/site.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/router/routes/modules/system.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/router/routes/modules/vben.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/store/auth.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/store/index.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/views/_core/README.md (100%) rename {admin => admin-vben}/apps/web-antd/src/views/_core/about/index.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/_core/authentication/code-login.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/_core/authentication/forget-password.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/_core/authentication/login.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/_core/authentication/qrcode-login.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/_core/authentication/register.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/_core/fallback/coming-soon.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/_core/fallback/forbidden.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/_core/fallback/internal-error.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/_core/fallback/not-found.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/_core/fallback/offline.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/admin/setting/layout/index.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/app/admin/index.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/app/home/index.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/app/site/index.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/dashboard/analytics/analytics-trends.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/dashboard/analytics/analytics-visits-data.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/dashboard/analytics/analytics-visits-sales.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/dashboard/analytics/analytics-visits-source.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/dashboard/analytics/analytics-visits.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/dashboard/analytics/index.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/dashboard/workspace/index.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/demos/access/admin-visible.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/demos/access/button-control.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/demos/access/index.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/demos/access/menu-visible-403.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/demos/access/super-visible.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/demos/access/user-visible.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/demos/active-icon/index.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/demos/badge/index.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/demos/breadcrumb/lateral-detail.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/demos/breadcrumb/lateral.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/demos/breadcrumb/level-detail.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/demos/features/clipboard/index.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/demos/features/file-download/base64.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/views/demos/features/file-download/index.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/demos/features/full-screen/index.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/demos/features/hide-menu-children/children.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/demos/features/hide-menu-children/parent.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/demos/features/icons/index.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/demos/features/json-bigint/index.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/demos/features/login-expired/index.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/demos/features/menu-query/index.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/demos/features/new-window/index.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/demos/features/request-params-serializer/index.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/demos/features/tabs/index.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/demos/features/tabs/tab-detail.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/demos/features/vue-query/concurrency-caching.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/demos/features/vue-query/index.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/demos/features/vue-query/infinite-queries.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/demos/features/vue-query/paginated-queries.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/demos/features/vue-query/query-retries.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/demos/features/vue-query/typing.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/views/demos/features/watermark/index.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/demos/nested/menu-1.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/demos/nested/menu-2-1.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/demos/nested/menu-3-1.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/demos/nested/menu-3-2-1.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/button-group/index.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/captcha/point-selection-captcha.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/captcha/slider-captcha.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/captcha/slider-rotate-captcha.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/captcha/slider-translate-captcha.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/count-to/index.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/doc-button.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/drawer/auto-height-demo.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/drawer/base-demo.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/drawer/dynamic-demo.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/drawer/form-drawer-demo.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/drawer/in-content-demo.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/drawer/index.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/drawer/shared-data-demo.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/ellipsis/index.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/form/api.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/form/basic.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/form/custom-layout.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/form/custom.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/form/dynamic.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/form/merge.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/form/modules/two-fields.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/form/query.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/form/rules.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/form/scroll-to-error-test.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/json-viewer/data.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/json-viewer/index.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/layout/col-page.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/loading/index.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/modal/auto-height-demo.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/modal/base-demo.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/modal/blur-demo.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/modal/drag-demo.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/modal/dynamic-demo.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/modal/form-modal-demo.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/modal/in-content-demo.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/modal/index.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/modal/nested-demo.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/modal/shared-data-demo.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/motion/index.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/resize/basic.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/tippy/index.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/vxe-table/basic.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/vxe-table/custom-cell.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/vxe-table/edit-cell.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/vxe-table/edit-row.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/vxe-table/fixed.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/vxe-table/form.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/vxe-table/remote.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/vxe-table/table-data.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/vxe-table/tree.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/examples/vxe-table/virtual.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/site/group.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/site/list.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/system/dept/data.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/views/system/dept/list.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/system/dept/modules/form.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/system/menu/data.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/views/system/menu/list.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/system/menu/modules/form.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/system/role/data.ts (100%) rename {admin => admin-vben}/apps/web-antd/src/views/system/role/list.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/system/role/modules/form.vue (100%) rename {admin => admin-vben}/apps/web-antd/src/views/system/user/list.vue (100%) rename {admin => admin-vben}/apps/web-antd/tailwind.config.mjs (100%) rename {admin => admin-vben}/apps/web-antd/tsconfig.json (100%) rename {admin => admin-vben}/apps/web-antd/tsconfig.node.json (100%) rename {admin => admin-vben}/apps/web-antd/vite.config.mts (100%) rename {admin => admin-vben}/auto-imports.d.ts (100%) rename {admin => admin-vben}/components.d.ts (100%) rename {admin => admin-vben}/cspell.json (100%) rename {admin => admin-vben}/docs/.vitepress/components/demo-preview.vue (100%) rename {admin => admin-vben}/docs/.vitepress/components/index.ts (100%) rename {admin => admin-vben}/docs/.vitepress/components/preview-group.vue (100%) rename {admin => admin-vben}/docs/.vitepress/config/en.mts (100%) rename {admin => admin-vben}/docs/.vitepress/config/index.mts (100%) rename {admin => admin-vben}/docs/.vitepress/config/plugins/demo-preview.ts (100%) rename {admin => admin-vben}/docs/.vitepress/config/shared.mts (100%) rename {admin => admin-vben}/docs/.vitepress/config/zh.mts (100%) rename {admin => admin-vben}/docs/.vitepress/theme/components/site-layout.vue (100%) rename {admin => admin-vben}/docs/.vitepress/theme/components/vben-contributors.vue (100%) rename {admin => admin-vben}/docs/.vitepress/theme/index.ts (100%) rename {admin => admin-vben}/docs/.vitepress/theme/plugins/hm.ts (100%) rename {admin => admin-vben}/docs/.vitepress/theme/styles/base.css (100%) rename {admin => admin-vben}/docs/.vitepress/theme/styles/index.ts (100%) rename {admin => admin-vben}/docs/.vitepress/theme/styles/variables.css (100%) rename {admin => admin-vben}/docs/package.json (100%) rename {admin => admin-vben}/docs/public/logos/logo.png (100%) rename {admin => admin-vben}/docs/public/logos/mysql.svg (100%) rename {admin => admin-vben}/docs/public/logos/nestjs.svg (100%) rename {admin => admin-vben}/docs/public/logos/redis.svg (100%) rename {admin => admin-vben}/docs/public/logos/typeorm.svg (100%) rename {admin => admin-vben}/docs/public/logos/wwjcloud.svg (100%) rename {admin => admin-vben}/docs/scripts/README.md (100%) rename {admin => admin-vben}/docs/scripts/generate-api-docs.js (100%) rename {admin => admin-vben}/docs/scripts/sync-api-docs.js (100%) rename {admin => admin-vben}/docs/src/_env/adapter/component.ts (100%) rename {admin => admin-vben}/docs/src/_env/adapter/form.ts (100%) rename {admin => admin-vben}/docs/src/_env/adapter/vxe-table.ts (100%) rename {admin => admin-vben}/docs/src/_env/node/adapter/form.ts (100%) rename {admin => admin-vben}/docs/src/_env/node/adapter/vxe-table.ts (100%) rename {admin => admin-vben}/docs/src/commercial/community.md (100%) rename {admin => admin-vben}/docs/src/commercial/customized.md (100%) rename {admin => admin-vben}/docs/src/commercial/technical-support.md (100%) rename {admin => admin-vben}/docs/src/components/common-ui/vben-alert.md (100%) rename {admin => admin-vben}/docs/src/components/common-ui/vben-api-component.md (100%) rename {admin => admin-vben}/docs/src/components/common-ui/vben-count-to-animator.md (100%) rename {admin => admin-vben}/docs/src/components/common-ui/vben-drawer.md (100%) rename {admin => admin-vben}/docs/src/components/common-ui/vben-ellipsis-text.md (100%) rename {admin => admin-vben}/docs/src/components/common-ui/vben-form.md (100%) rename {admin => admin-vben}/docs/src/components/common-ui/vben-modal.md (100%) rename {admin => admin-vben}/docs/src/components/common-ui/vben-vxe-table.md (100%) rename {admin => admin-vben}/docs/src/components/introduction.md (100%) rename {admin => admin-vben}/docs/src/components/layout-ui/page.md (100%) rename {admin => admin-vben}/docs/src/demos/vben-alert/alert/index.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-alert/confirm/index.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-alert/prompt/index.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-api-component/cascader/index.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-count-to-animator/basic/index.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-count-to-animator/custom/index.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-drawer/auto-height/drawer.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-drawer/auto-height/index.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-drawer/basic/index.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-drawer/dynamic/drawer.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-drawer/dynamic/index.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-drawer/extra/drawer.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-drawer/extra/index.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-drawer/shared-data/drawer.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-drawer/shared-data/index.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-ellipsis-text/auto-display/index.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-ellipsis-text/expand/index.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-ellipsis-text/line/index.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-ellipsis-text/tooltip/index.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-form/api/index.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-form/basic/index.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-form/custom/index.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-form/dynamic/index.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-form/query/index.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-form/rules/index.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-modal/animation-type/index.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-modal/auto-height/index.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-modal/auto-height/modal.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-modal/basic/index.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-modal/draggable/index.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-modal/draggable/modal.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-modal/dynamic/index.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-modal/dynamic/modal.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-modal/extra/index.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-modal/extra/modal.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-modal/shared-data/index.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-modal/shared-data/modal.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-vxe-table/basic/index.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-vxe-table/custom-cell/index.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-vxe-table/edit-cell/index.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-vxe-table/edit-row/index.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-vxe-table/fixed/index.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-vxe-table/form/index.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-vxe-table/mock-api.ts (100%) rename {admin => admin-vben}/docs/src/demos/vben-vxe-table/remote/index.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-vxe-table/table-data.ts (100%) rename {admin => admin-vben}/docs/src/demos/vben-vxe-table/tree/index.vue (100%) rename {admin => admin-vben}/docs/src/demos/vben-vxe-table/virtual/index.vue (100%) rename {admin => admin-vben}/docs/src/en/index.md (100%) rename {admin => admin-vben}/docs/src/en/veben/guide/essentials/build.md (100%) rename {admin => admin-vben}/docs/src/en/veben/guide/essentials/concept.md (100%) rename {admin => admin-vben}/docs/src/en/veben/guide/essentials/development.md (100%) rename {admin => admin-vben}/docs/src/en/veben/guide/essentials/external-module.md (100%) rename {admin => admin-vben}/docs/src/en/veben/guide/essentials/icons.md (100%) rename {admin => admin-vben}/docs/src/en/veben/guide/essentials/route.md (100%) rename {admin => admin-vben}/docs/src/en/veben/guide/essentials/server.md (100%) rename {admin => admin-vben}/docs/src/en/veben/guide/essentials/settings.md (100%) rename {admin => admin-vben}/docs/src/en/veben/guide/essentials/styles.md (100%) rename {admin => admin-vben}/docs/src/en/veben/guide/in-depth/access.md (100%) rename {admin => admin-vben}/docs/src/en/veben/guide/in-depth/check-updates.md (100%) rename {admin => admin-vben}/docs/src/en/veben/guide/in-depth/features.md (100%) rename {admin => admin-vben}/docs/src/en/veben/guide/in-depth/layout.md (100%) rename {admin => admin-vben}/docs/src/en/veben/guide/in-depth/loading.md (100%) rename {admin => admin-vben}/docs/src/en/veben/guide/in-depth/locale.md (100%) rename {admin => admin-vben}/docs/src/en/veben/guide/in-depth/login.md (100%) rename {admin => admin-vben}/docs/src/en/veben/guide/in-depth/theme.md (100%) rename {admin => admin-vben}/docs/src/en/veben/guide/in-depth/ui-framework.md (100%) rename {admin => admin-vben}/docs/src/en/veben/guide/introduction/changelog.md (100%) rename {admin => admin-vben}/docs/src/en/veben/guide/introduction/quick-start.md (100%) rename {admin => admin-vben}/docs/src/en/veben/guide/introduction/roadmap.md (100%) rename {admin => admin-vben}/docs/src/en/veben/guide/introduction/thin.md (100%) rename {admin => admin-vben}/docs/src/en/veben/guide/introduction/vben.md (100%) rename {admin => admin-vben}/docs/src/en/veben/guide/introduction/why.md (100%) rename {admin => admin-vben}/docs/src/en/veben/guide/other/faq.md (100%) rename {admin => admin-vben}/docs/src/en/veben/guide/other/project-update.md (100%) rename {admin => admin-vben}/docs/src/en/veben/guide/other/remove-code.md (100%) rename {admin => admin-vben}/docs/src/en/veben/guide/project/changeset.md (100%) rename {admin => admin-vben}/docs/src/en/veben/guide/project/cli.md (100%) rename {admin => admin-vben}/docs/src/en/veben/guide/project/dir.md (100%) rename {admin => admin-vben}/docs/src/en/veben/guide/project/standard.md (100%) rename {admin => admin-vben}/docs/src/en/veben/guide/project/tailwindcss.md (100%) rename {admin => admin-vben}/docs/src/en/veben/guide/project/test.md (100%) rename {admin => admin-vben}/docs/src/en/veben/guide/project/vite.md (100%) rename {admin => admin-vben}/docs/src/en/veben/index.md (100%) rename {admin => admin-vben}/docs/src/friend-links/index.md (100%) rename {admin => admin-vben}/docs/src/index.md (100%) rename {admin => admin-vben}/docs/src/public/favicon.ico (100%) rename {admin => admin-vben}/docs/src/public/guide/devtools.png (100%) rename {admin => admin-vben}/docs/src/public/guide/loading.png (100%) rename {admin => admin-vben}/docs/src/public/guide/locale.png (100%) rename {admin => admin-vben}/docs/src/public/guide/login-expired.png (100%) rename {admin => admin-vben}/docs/src/public/guide/login.png (100%) rename {admin => admin-vben}/docs/src/public/guide/preferences.png (100%) rename {admin => admin-vben}/docs/src/public/guide/qq.png (100%) rename {admin => admin-vben}/docs/src/public/guide/qq_channel.png (100%) rename {admin => admin-vben}/docs/src/public/guide/report.png (100%) rename {admin => admin-vben}/docs/src/public/guide/test.png (100%) rename {admin => admin-vben}/docs/src/public/guide/update-notice.png (100%) rename {admin => admin-vben}/docs/src/public/logos/nitro.svg (100%) rename {admin => admin-vben}/docs/src/public/logos/shadcn-ui.svg (100%) rename {admin => admin-vben}/docs/src/public/logos/turborepo.svg (100%) rename {admin => admin-vben}/docs/src/public/logos/vite.svg (100%) rename {admin => admin-vben}/docs/src/sponsor/personal.md (100%) rename {admin => admin-vben}/docs/src/vben/guide/essentials/build.md (100%) rename {admin => admin-vben}/docs/src/vben/guide/essentials/concept.md (100%) rename {admin => admin-vben}/docs/src/vben/guide/essentials/development.md (100%) rename {admin => admin-vben}/docs/src/vben/guide/essentials/external-module.md (100%) rename {admin => admin-vben}/docs/src/vben/guide/essentials/icons.md (100%) rename {admin => admin-vben}/docs/src/vben/guide/essentials/route.md (100%) rename {admin => admin-vben}/docs/src/vben/guide/essentials/server.md (100%) rename {admin => admin-vben}/docs/src/vben/guide/essentials/settings.md (100%) rename {admin => admin-vben}/docs/src/vben/guide/essentials/styles.md (100%) rename {admin => admin-vben}/docs/src/vben/guide/in-depth/access.md (100%) rename {admin => admin-vben}/docs/src/vben/guide/in-depth/check-updates.md (100%) rename {admin => admin-vben}/docs/src/vben/guide/in-depth/features.md (100%) rename {admin => admin-vben}/docs/src/vben/guide/in-depth/layout.md (100%) rename {admin => admin-vben}/docs/src/vben/guide/in-depth/loading.md (100%) rename {admin => admin-vben}/docs/src/vben/guide/in-depth/locale.md (100%) rename {admin => admin-vben}/docs/src/vben/guide/in-depth/login.md (100%) rename {admin => admin-vben}/docs/src/vben/guide/in-depth/theme.md (100%) rename {admin => admin-vben}/docs/src/vben/guide/in-depth/ui-framework.md (100%) rename {admin => admin-vben}/docs/src/vben/guide/index.md (100%) rename {admin => admin-vben}/docs/src/vben/guide/introduction/changelog.md (100%) rename {admin => admin-vben}/docs/src/vben/guide/introduction/quick-start.md (100%) rename {admin => admin-vben}/docs/src/vben/guide/introduction/roadmap.md (100%) rename {admin => admin-vben}/docs/src/vben/guide/introduction/thin.md (100%) rename {admin => admin-vben}/docs/src/vben/guide/introduction/vben.md (100%) rename {admin => admin-vben}/docs/src/vben/guide/introduction/why.md (100%) rename {admin => admin-vben}/docs/src/vben/guide/other/faq.md (100%) rename {admin => admin-vben}/docs/src/vben/guide/other/project-update.md (100%) rename {admin => admin-vben}/docs/src/vben/guide/other/remove-code.md (100%) rename {admin => admin-vben}/docs/src/vben/guide/project/changeset.md (100%) rename {admin => admin-vben}/docs/src/vben/guide/project/cli.md (100%) rename {admin => admin-vben}/docs/src/vben/guide/project/dir.md (100%) rename {admin => admin-vben}/docs/src/vben/guide/project/standard.md (100%) rename {admin => admin-vben}/docs/src/vben/guide/project/tailwindcss.md (100%) rename {admin => admin-vben}/docs/src/vben/guide/project/test.md (100%) rename {admin => admin-vben}/docs/src/vben/guide/project/vite.md (100%) rename {admin => admin-vben}/docs/src/wwjcloud/ai/coordination-example.md (100%) rename {admin => admin-vben}/docs/src/wwjcloud/ai/coordination.md (100%) rename {admin => admin-vben}/docs/src/wwjcloud/ai/frontend-workflow.md (100%) rename {admin => admin-vben}/docs/src/wwjcloud/ai/index.md (100%) rename {admin => admin-vben}/docs/src/wwjcloud/ai/planner.md (100%) rename {admin => admin-vben}/docs/src/wwjcloud/ai/tooling.md (100%) rename {admin => admin-vben}/docs/src/wwjcloud/architecture/constraints.md (100%) rename {admin => admin-vben}/docs/src/wwjcloud/gateway/architecture.md (100%) rename {admin => admin-vben}/docs/src/wwjcloud/gateway/development-plan.md (100%) rename {admin => admin-vben}/docs/src/wwjcloud/gateway/index.md (100%) rename {admin => admin-vben}/docs/src/wwjcloud/gateway/kong/README.md (100%) rename {admin => admin-vben}/docs/src/wwjcloud/gateway/kong/deck.yaml (100%) rename {admin => admin-vben}/docs/src/wwjcloud/gateway/overview.md (100%) rename {admin => admin-vben}/docs/src/wwjcloud/gateway/quick-start.md (100%) rename {admin => admin-vben}/docs/src/wwjcloud/guide/concepts.md (100%) rename {admin => admin-vben}/docs/src/wwjcloud/guide/config-center.md (100%) rename {admin => admin-vben}/docs/src/wwjcloud/guide/introduction.md (100%) rename {admin => admin-vben}/docs/src/wwjcloud/guide/quick-start.md (100%) rename {admin => admin-vben}/docs/src/wwjcloud/guide/why.md (100%) rename {admin => admin-vben}/docs/src/wwjcloud/index.md (100%) rename {admin => admin-vben}/docs/src/wwjcloud/openapi/api/adminapi/index.md (100%) rename {admin => admin-vben}/docs/src/wwjcloud/openapi/api/frontend/index.md (100%) rename {admin => admin-vben}/docs/src/wwjcloud/openapi/api/index.md (100%) rename {admin => admin-vben}/docs/src/wwjcloud/openapi/standards/error-codes.md (100%) rename {admin => admin-vben}/docs/src/wwjcloud/openapi/standards/response.md (100%) rename {admin => admin-vben}/docs/src/wwjcloud/openapi/standards/restful.md (100%) rename {admin => admin-vben}/docs/src/wwjcloud/progress.md (100%) rename {admin => admin-vben}/docs/src/wwjcloud/project/ai-prompts-and-constraints.md (100%) rename {admin => admin-vben}/docs/src/wwjcloud/project/comparison.md (100%) rename {admin => admin-vben}/docs/src/wwjcloud/project/data-consistency-and-jobs.md (100%) rename {admin => admin-vben}/docs/src/wwjcloud/project/deploy-1panel.md (100%) rename {admin => admin-vben}/docs/src/wwjcloud/project/domain-boundaries.md (100%) rename {admin => admin-vben}/docs/src/wwjcloud/project/plan.md (100%) rename {admin => admin-vben}/docs/src/wwjcloud/project/roadmap.md (100%) rename {admin => admin-vben}/docs/src/wwjcloud/project/selection.md (100%) rename {admin => admin-vben}/docs/src/wwjcloud/project/vendor.md (100%) rename {admin => admin-vben}/docs/src/wwjcloud/structure/overview.md (100%) rename {admin => admin-vben}/docs/tailwind.config.mjs (100%) rename {admin => admin-vben}/docs/tsconfig.json (100%) rename {admin => admin-vben}/eslint.config.mjs (100%) rename {admin => admin-vben}/index.html (100%) rename {admin => admin-vben}/internal/lint-configs/commitlint-config/index.mjs (100%) rename {admin => admin-vben}/internal/lint-configs/commitlint-config/package.json (100%) rename {admin => admin-vben}/internal/lint-configs/eslint-config/build.config.ts (100%) rename {admin => admin-vben}/internal/lint-configs/eslint-config/package.json (100%) rename {admin => admin-vben}/internal/lint-configs/eslint-config/src/configs/command.ts (100%) rename {admin => admin-vben}/internal/lint-configs/eslint-config/src/configs/comments.ts (100%) rename {admin => admin-vben}/internal/lint-configs/eslint-config/src/configs/disableds.ts (100%) rename {admin => admin-vben}/internal/lint-configs/eslint-config/src/configs/ignores.ts (100%) rename {admin => admin-vben}/internal/lint-configs/eslint-config/src/configs/import.ts (100%) rename {admin => admin-vben}/internal/lint-configs/eslint-config/src/configs/index.ts (100%) rename {admin => admin-vben}/internal/lint-configs/eslint-config/src/configs/javascript.ts (100%) rename {admin => admin-vben}/internal/lint-configs/eslint-config/src/configs/jsdoc.ts (100%) rename {admin => admin-vben}/internal/lint-configs/eslint-config/src/configs/jsonc.ts (100%) rename {admin => admin-vben}/internal/lint-configs/eslint-config/src/configs/node.ts (100%) rename {admin => admin-vben}/internal/lint-configs/eslint-config/src/configs/perfectionist.ts (100%) rename {admin => admin-vben}/internal/lint-configs/eslint-config/src/configs/prettier.ts (100%) rename {admin => admin-vben}/internal/lint-configs/eslint-config/src/configs/regexp.ts (100%) rename {admin => admin-vben}/internal/lint-configs/eslint-config/src/configs/test.ts (100%) rename {admin => admin-vben}/internal/lint-configs/eslint-config/src/configs/turbo.ts (100%) rename {admin => admin-vben}/internal/lint-configs/eslint-config/src/configs/typescript.ts (100%) rename {admin => admin-vben}/internal/lint-configs/eslint-config/src/configs/unicorn.ts (100%) rename {admin => admin-vben}/internal/lint-configs/eslint-config/src/configs/vue.ts (100%) rename {admin => admin-vben}/internal/lint-configs/eslint-config/src/custom-config.ts (100%) rename {admin => admin-vben}/internal/lint-configs/eslint-config/src/index.ts (100%) rename {admin => admin-vben}/internal/lint-configs/eslint-config/src/util.ts (100%) rename {admin => admin-vben}/internal/lint-configs/eslint-config/tsconfig.json (100%) rename {admin => admin-vben}/internal/lint-configs/prettier-config/index.mjs (100%) rename {admin => admin-vben}/internal/lint-configs/prettier-config/package.json (100%) rename {admin => admin-vben}/internal/lint-configs/stylelint-config/index.mjs (100%) rename {admin => admin-vben}/internal/lint-configs/stylelint-config/package.json (100%) rename {admin => admin-vben}/internal/node-utils/build.config.ts (100%) rename {admin => admin-vben}/internal/node-utils/package.json (100%) rename {admin => admin-vben}/internal/node-utils/src/__tests__/hash.test.ts (100%) rename {admin => admin-vben}/internal/node-utils/src/__tests__/path.test.ts (100%) rename {admin => admin-vben}/internal/node-utils/src/constants.ts (100%) rename {admin => admin-vben}/internal/node-utils/src/date.ts (100%) rename {admin => admin-vben}/internal/node-utils/src/fs.ts (100%) rename {admin => admin-vben}/internal/node-utils/src/git.ts (100%) rename {admin => admin-vben}/internal/node-utils/src/hash.ts (100%) rename {admin => admin-vben}/internal/node-utils/src/index.ts (100%) rename {admin => admin-vben}/internal/node-utils/src/monorepo.ts (100%) rename {admin => admin-vben}/internal/node-utils/src/path.ts (100%) rename {admin => admin-vben}/internal/node-utils/src/prettier.ts (100%) rename {admin => admin-vben}/internal/node-utils/src/spinner.ts (100%) rename {admin => admin-vben}/internal/node-utils/tsconfig.json (100%) rename {admin => admin-vben}/internal/tailwind-config/build.config.ts (100%) rename {admin => admin-vben}/internal/tailwind-config/package.json (100%) rename {admin => admin-vben}/internal/tailwind-config/src/index.ts (100%) rename {admin => admin-vben}/internal/tailwind-config/src/module.d.ts (100%) rename {admin => admin-vben}/internal/tailwind-config/src/plugins/entry.ts (100%) rename {admin => admin-vben}/internal/tailwind-config/src/postcss.config.ts (100%) rename {admin => admin-vben}/internal/tailwind-config/tsconfig.json (100%) rename {admin => admin-vben}/internal/tsconfig/base.json (100%) rename {admin => admin-vben}/internal/tsconfig/library.json (100%) rename {admin => admin-vben}/internal/tsconfig/node.json (100%) rename {admin => admin-vben}/internal/tsconfig/package.json (100%) rename {admin => admin-vben}/internal/tsconfig/web-app.json (100%) rename {admin => admin-vben}/internal/tsconfig/web.json (100%) rename {admin => admin-vben}/internal/vite-config/build.config.ts (100%) rename {admin => admin-vben}/internal/vite-config/package.json (100%) rename {admin => admin-vben}/internal/vite-config/src/config/application.ts (100%) rename {admin => admin-vben}/internal/vite-config/src/config/common.ts (100%) rename {admin => admin-vben}/internal/vite-config/src/config/index.ts (100%) rename {admin => admin-vben}/internal/vite-config/src/config/library.ts (100%) rename {admin => admin-vben}/internal/vite-config/src/index.ts (100%) rename {admin => admin-vben}/internal/vite-config/src/options.ts (100%) rename {admin => admin-vben}/internal/vite-config/src/plugins/archiver.ts (100%) rename {admin => admin-vben}/internal/vite-config/src/plugins/extra-app-config.ts (100%) rename {admin => admin-vben}/internal/vite-config/src/plugins/importmap.ts (100%) rename {admin => admin-vben}/internal/vite-config/src/plugins/index.ts (100%) rename {admin => admin-vben}/internal/vite-config/src/plugins/inject-app-loading/README.md (100%) rename {admin => admin-vben}/internal/vite-config/src/plugins/inject-app-loading/default-loading-antd.html (100%) rename {admin => admin-vben}/internal/vite-config/src/plugins/inject-app-loading/default-loading.html (100%) rename {admin => admin-vben}/internal/vite-config/src/plugins/inject-app-loading/index.ts (100%) rename {admin => admin-vben}/internal/vite-config/src/plugins/inject-metadata.ts (100%) rename {admin => admin-vben}/internal/vite-config/src/plugins/license.ts (100%) rename {admin => admin-vben}/internal/vite-config/src/plugins/nitro-mock.ts (100%) rename {admin => admin-vben}/internal/vite-config/src/plugins/print.ts (100%) rename {admin => admin-vben}/internal/vite-config/src/plugins/vxe-table.ts (100%) rename {admin => admin-vben}/internal/vite-config/src/typing.ts (100%) rename {admin => admin-vben}/internal/vite-config/src/utils/env.ts (100%) rename {admin => admin-vben}/internal/vite-config/tsconfig.json (100%) rename {admin => admin-vben}/lefthook.yml (100%) rename {admin => admin-vben}/nginx.conf (100%) rename {admin => admin-vben}/package.json (100%) rename {admin => admin-vben}/packages/@core/README.md (100%) rename {admin => admin-vben}/packages/@core/base/README.md (100%) rename {admin => admin-vben}/packages/@core/base/design/package.json (100%) rename {admin => admin-vben}/packages/@core/base/design/src/css/global.css (100%) rename {admin => admin-vben}/packages/@core/base/design/src/css/nprogress.css (100%) rename {admin => admin-vben}/packages/@core/base/design/src/css/transition.css (100%) rename {admin => admin-vben}/packages/@core/base/design/src/css/ui.css (100%) rename {admin => admin-vben}/packages/@core/base/design/src/design-tokens/dark.css (100%) rename {admin => admin-vben}/packages/@core/base/design/src/design-tokens/default.css (100%) rename {admin => admin-vben}/packages/@core/base/design/src/design-tokens/index.ts (100%) rename {admin => admin-vben}/packages/@core/base/design/src/index.ts (100%) rename {admin => admin-vben}/packages/@core/base/design/src/scss-bem/bem.scss (100%) rename {admin => admin-vben}/packages/@core/base/design/src/scss-bem/constants.scss (100%) rename {admin => admin-vben}/packages/@core/base/design/tsconfig.json (100%) rename {admin => admin-vben}/packages/@core/base/design/vite.config.mts (100%) rename {admin => admin-vben}/packages/@core/base/icons/build.config.ts (100%) rename {admin => admin-vben}/packages/@core/base/icons/package.json (100%) rename {admin => admin-vben}/packages/@core/base/icons/src/create-icon.ts (100%) rename {admin => admin-vben}/packages/@core/base/icons/src/index.ts (100%) rename {admin => admin-vben}/packages/@core/base/icons/src/lucide.ts (100%) rename {admin => admin-vben}/packages/@core/base/icons/tsconfig.json (100%) rename {admin => admin-vben}/packages/@core/base/shared/build.config.ts (100%) rename {admin => admin-vben}/packages/@core/base/shared/package.json (100%) rename {admin => admin-vben}/packages/@core/base/shared/src/cache/__tests__/storage-manager.test.ts (100%) rename {admin => admin-vben}/packages/@core/base/shared/src/cache/index.ts (100%) rename {admin => admin-vben}/packages/@core/base/shared/src/cache/storage-manager.ts (100%) rename {admin => admin-vben}/packages/@core/base/shared/src/cache/types.ts (100%) rename {admin => admin-vben}/packages/@core/base/shared/src/color/__tests__/convert.test.ts (100%) rename {admin => admin-vben}/packages/@core/base/shared/src/color/color.ts (100%) rename {admin => admin-vben}/packages/@core/base/shared/src/color/convert.ts (100%) rename {admin => admin-vben}/packages/@core/base/shared/src/color/generator.ts (100%) rename {admin => admin-vben}/packages/@core/base/shared/src/color/index.ts (100%) rename {admin => admin-vben}/packages/@core/base/shared/src/constants/globals.ts (100%) rename {admin => admin-vben}/packages/@core/base/shared/src/constants/index.ts (100%) rename {admin => admin-vben}/packages/@core/base/shared/src/constants/vben.ts (100%) rename {admin => admin-vben}/packages/@core/base/shared/src/global-state.ts (100%) rename {admin => admin-vben}/packages/@core/base/shared/src/store.ts (100%) rename {admin => admin-vben}/packages/@core/base/shared/src/utils/__tests__/diff.test.ts (100%) rename {admin => admin-vben}/packages/@core/base/shared/src/utils/__tests__/dom.test.ts (100%) rename {admin => admin-vben}/packages/@core/base/shared/src/utils/__tests__/inference.test.ts (100%) rename {admin => admin-vben}/packages/@core/base/shared/src/utils/__tests__/letter.test.ts (100%) rename {admin => admin-vben}/packages/@core/base/shared/src/utils/__tests__/resources.test.ts (100%) rename {admin => admin-vben}/packages/@core/base/shared/src/utils/__tests__/state-handler.test.ts (100%) rename {admin => admin-vben}/packages/@core/base/shared/src/utils/__tests__/tree.test.ts (100%) rename {admin => admin-vben}/packages/@core/base/shared/src/utils/__tests__/unique.test.ts (100%) rename {admin => admin-vben}/packages/@core/base/shared/src/utils/__tests__/update-css-variables.test.ts (100%) rename {admin => admin-vben}/packages/@core/base/shared/src/utils/__tests__/util.test.ts (100%) rename {admin => admin-vben}/packages/@core/base/shared/src/utils/__tests__/window.test.ts (100%) rename {admin => admin-vben}/packages/@core/base/shared/src/utils/cn.ts (100%) rename {admin => admin-vben}/packages/@core/base/shared/src/utils/date.ts (100%) rename {admin => admin-vben}/packages/@core/base/shared/src/utils/diff.ts (100%) rename {admin => admin-vben}/packages/@core/base/shared/src/utils/dom.ts (100%) rename {admin => admin-vben}/packages/@core/base/shared/src/utils/download.ts (100%) rename {admin => admin-vben}/packages/@core/base/shared/src/utils/index.ts (100%) rename {admin => admin-vben}/packages/@core/base/shared/src/utils/inference.ts (100%) rename {admin => admin-vben}/packages/@core/base/shared/src/utils/letter.ts (100%) rename {admin => admin-vben}/packages/@core/base/shared/src/utils/merge.ts (100%) rename {admin => admin-vben}/packages/@core/base/shared/src/utils/nprogress.ts (100%) rename {admin => admin-vben}/packages/@core/base/shared/src/utils/resources.ts (100%) rename {admin => admin-vben}/packages/@core/base/shared/src/utils/state-handler.ts (100%) rename {admin => admin-vben}/packages/@core/base/shared/src/utils/to.ts (100%) rename {admin => admin-vben}/packages/@core/base/shared/src/utils/tree.ts (100%) rename {admin => admin-vben}/packages/@core/base/shared/src/utils/unique.ts (100%) rename {admin => admin-vben}/packages/@core/base/shared/src/utils/update-css-variables.ts (100%) rename {admin => admin-vben}/packages/@core/base/shared/src/utils/util.ts (100%) rename {admin => admin-vben}/packages/@core/base/shared/src/utils/window.ts (100%) rename {admin => admin-vben}/packages/@core/base/shared/tsconfig.json (100%) rename {admin => admin-vben}/packages/@core/base/typings/build.config.ts (100%) rename {admin => admin-vben}/packages/@core/base/typings/package.json (100%) rename {admin => admin-vben}/packages/@core/base/typings/src/app.d.ts (100%) rename {admin => admin-vben}/packages/@core/base/typings/src/basic.d.ts (100%) rename {admin => admin-vben}/packages/@core/base/typings/src/helper.d.ts (100%) rename {admin => admin-vben}/packages/@core/base/typings/src/index.ts (100%) rename {admin => admin-vben}/packages/@core/base/typings/src/menu-record.ts (100%) rename {admin => admin-vben}/packages/@core/base/typings/src/tabs.ts (100%) rename {admin => admin-vben}/packages/@core/base/typings/src/vue-router.d.ts (100%) rename {admin => admin-vben}/packages/@core/base/typings/tsconfig.json (100%) rename {admin => admin-vben}/packages/@core/base/typings/vue-router.d.ts (100%) rename {admin => admin-vben}/packages/@core/composables/build.config.ts (100%) rename {admin => admin-vben}/packages/@core/composables/package.json (100%) rename {admin => admin-vben}/packages/@core/composables/src/__tests__/use-sortable.test.ts (100%) rename {admin => admin-vben}/packages/@core/composables/src/index.ts (100%) rename {admin => admin-vben}/packages/@core/composables/src/use-is-mobile.ts (100%) rename {admin => admin-vben}/packages/@core/composables/src/use-layout-style.ts (100%) rename {admin => admin-vben}/packages/@core/composables/src/use-namespace.ts (100%) rename {admin => admin-vben}/packages/@core/composables/src/use-priority-value.ts (100%) rename {admin => admin-vben}/packages/@core/composables/src/use-scroll-lock.ts (100%) rename {admin => admin-vben}/packages/@core/composables/src/use-simple-locale/README.md (100%) rename {admin => admin-vben}/packages/@core/composables/src/use-simple-locale/index.ts (100%) rename {admin => admin-vben}/packages/@core/composables/src/use-simple-locale/messages.ts (100%) rename {admin => admin-vben}/packages/@core/composables/src/use-sortable.ts (100%) rename {admin => admin-vben}/packages/@core/composables/tsconfig.json (100%) rename {admin => admin-vben}/packages/@core/preferences/__tests__/__snapshots__/config.test.ts.snap (100%) rename {admin => admin-vben}/packages/@core/preferences/__tests__/config.test.ts (100%) rename {admin => admin-vben}/packages/@core/preferences/__tests__/preferences.test.ts (100%) rename {admin => admin-vben}/packages/@core/preferences/build.config.ts (100%) rename {admin => admin-vben}/packages/@core/preferences/package.json (100%) rename {admin => admin-vben}/packages/@core/preferences/src/config.ts (100%) rename {admin => admin-vben}/packages/@core/preferences/src/constants.ts (100%) rename {admin => admin-vben}/packages/@core/preferences/src/index.ts (100%) rename {admin => admin-vben}/packages/@core/preferences/src/preferences.ts (100%) rename {admin => admin-vben}/packages/@core/preferences/src/types.ts (100%) rename {admin => admin-vben}/packages/@core/preferences/src/update-css-variables.ts (100%) rename {admin => admin-vben}/packages/@core/preferences/src/use-preferences.ts (100%) rename {admin => admin-vben}/packages/@core/preferences/tsconfig.json (100%) rename {admin => admin-vben}/packages/@core/ui-kit/README.md (100%) rename {admin => admin-vben}/packages/@core/ui-kit/form-ui/__tests__/form-api.test.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/form-ui/build.config.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/form-ui/package.json (100%) rename {admin => admin-vben}/packages/@core/ui-kit/form-ui/postcss.config.mjs (100%) rename {admin => admin-vben}/packages/@core/ui-kit/form-ui/src/components/form-actions.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/form-ui/src/config.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/form-ui/src/form-api.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/form-ui/src/form-render/context.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/form-ui/src/form-render/dependencies.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/form-ui/src/form-render/expandable.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/form-ui/src/form-render/form-field.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/form-ui/src/form-render/form-label.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/form-ui/src/form-render/form.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/form-ui/src/form-render/helper.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/form-ui/src/form-render/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/form-ui/src/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/form-ui/src/types.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/form-ui/src/use-form-context.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/form-ui/src/use-vben-form.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/form-ui/src/vben-form.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/form-ui/src/vben-use-form.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/form-ui/tailwind.config.mjs (100%) rename {admin => admin-vben}/packages/@core/ui-kit/form-ui/tsconfig.json (100%) rename {admin => admin-vben}/packages/@core/ui-kit/layout-ui/build.config.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/layout-ui/package.json (100%) rename {admin => admin-vben}/packages/@core/ui-kit/layout-ui/postcss.config.mjs (100%) rename {admin => admin-vben}/packages/@core/ui-kit/layout-ui/src/components/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/layout-ui/src/components/layout-content.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/layout-ui/src/components/layout-footer.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/layout-ui/src/components/layout-header.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/layout-ui/src/components/layout-sidebar.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/layout-ui/src/components/layout-tabbar.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/layout-ui/src/components/widgets/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/layout-ui/src/components/widgets/sidebar-collapse-button.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/layout-ui/src/components/widgets/sidebar-fixed-button.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/layout-ui/src/hooks/use-layout.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/layout-ui/src/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/layout-ui/src/vben-layout.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/layout-ui/src/vben-layout.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/layout-ui/tailwind.config.mjs (100%) rename {admin => admin-vben}/packages/@core/ui-kit/layout-ui/tsconfig.json (100%) rename {admin => admin-vben}/packages/@core/ui-kit/menu-ui/README.md (100%) rename {admin => admin-vben}/packages/@core/ui-kit/menu-ui/build.config.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/menu-ui/package.json (100%) rename {admin => admin-vben}/packages/@core/ui-kit/menu-ui/postcss.config.mjs (100%) rename {admin => admin-vben}/packages/@core/ui-kit/menu-ui/src/components/collapse-transition.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/menu-ui/src/components/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/menu-ui/src/components/menu-badge-dot.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/menu-ui/src/components/menu-badge.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/menu-ui/src/components/menu-item.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/menu-ui/src/components/menu.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/menu-ui/src/components/normal-menu/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/menu-ui/src/components/normal-menu/normal-menu.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/menu-ui/src/components/normal-menu/normal-menu.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/menu-ui/src/components/sub-menu-content.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/menu-ui/src/components/sub-menu.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/menu-ui/src/hooks/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/menu-ui/src/hooks/use-menu-context.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/menu-ui/src/hooks/use-menu-scroll.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/menu-ui/src/hooks/use-menu.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/menu-ui/src/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/menu-ui/src/menu.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/menu-ui/src/sub-menu.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/menu-ui/src/types.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/menu-ui/src/utils/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/menu-ui/tailwind.config.mjs (100%) rename {admin => admin-vben}/packages/@core/ui-kit/menu-ui/tsconfig.json (100%) rename {admin => admin-vben}/packages/@core/ui-kit/popup-ui/build.config.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/popup-ui/package.json (100%) rename {admin => admin-vben}/packages/@core/ui-kit/popup-ui/postcss.config.mjs (100%) rename {admin => admin-vben}/packages/@core/ui-kit/popup-ui/src/alert/AlertBuilder.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/popup-ui/src/alert/alert.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/popup-ui/src/alert/alert.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/popup-ui/src/alert/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/popup-ui/src/drawer/__tests__/drawer-api.test.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/popup-ui/src/drawer/drawer-api.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/popup-ui/src/drawer/drawer.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/popup-ui/src/drawer/drawer.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/popup-ui/src/drawer/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/popup-ui/src/drawer/use-drawer.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/popup-ui/src/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/popup-ui/src/modal/__tests__/modal-api.test.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/popup-ui/src/modal/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/popup-ui/src/modal/modal-api.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/popup-ui/src/modal/modal.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/popup-ui/src/modal/modal.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/popup-ui/src/modal/use-modal-draggable.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/popup-ui/src/modal/use-modal.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/popup-ui/tailwind.config.mjs (100%) rename {admin => admin-vben}/packages/@core/ui-kit/popup-ui/tsconfig.json (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/build.config.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/components.json (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/package.json (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/postcss.config.mjs (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/avatar/avatar.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/avatar/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/back-top/back-top.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/back-top/backtop.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/back-top/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/back-top/use-backtop.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/breadcrumb/breadcrumb-background.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/breadcrumb/breadcrumb-view.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/breadcrumb/breadcrumb.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/breadcrumb/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/breadcrumb/types.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/button/button-group.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/button/button.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/button/button.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/button/check-button-group.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/button/icon-button.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/button/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/checkbox/checkbox.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/checkbox/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/context-menu/context-menu.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/context-menu/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/context-menu/interface.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/count-to-animator/count-to-animator.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/count-to-animator/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/dropdown-menu/dropdown-menu.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/dropdown-menu/dropdown-radio-menu.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/dropdown-menu/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/dropdown-menu/interface.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/expandable-arrow/expandable-arrow.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/expandable-arrow/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/full-screen/full-screen.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/full-screen/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/hover-card/hover-card.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/hover-card/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/icon/icon.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/icon/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/input-password/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/input-password/input-password.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/input-password/password-strength.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/logo/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/logo/logo.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/pin-input/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/pin-input/input.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/pin-input/types.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/popover/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/popover/popover.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/render-content/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/render-content/render-content.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/scrollbar/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/scrollbar/scrollbar.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/segmented/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/segmented/segmented.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/segmented/tabs-indicator.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/segmented/types.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/select/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/select/select.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/spine-text/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/spine-text/spine-text.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/spinner/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/spinner/loading.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/spinner/spinner.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/tooltip/help-tooltip.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/tooltip/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/components/tooltip/tooltip.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/accordion/Accordion.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/accordion/AccordionContent.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/accordion/AccordionItem.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/accordion/AccordionTrigger.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/accordion/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialog.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogAction.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogCancel.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogContent.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogDescription.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogOverlay.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogTitle.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/avatar/Avatar.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/avatar/AvatarFallback.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/avatar/AvatarImage.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/avatar/avatar.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/avatar/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/badge/Badge.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/badge/badge.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/badge/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/Breadcrumb.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbEllipsis.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbItem.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbLink.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbList.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbPage.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbSeparator.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/button/Button.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/button/button.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/button/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/button/types.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/card/Card.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/card/CardContent.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/card/CardDescription.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/card/CardFooter.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/card/CardHeader.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/card/CardTitle.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/card/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/checkbox/Checkbox.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/checkbox/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenu.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuCheckboxItem.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuContent.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuGroup.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuItem.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuLabel.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuPortal.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuRadioGroup.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuRadioItem.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuSeparator.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuShortcut.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuSub.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuSubContent.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuSubTrigger.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuTrigger.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/Dialog.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogClose.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogContent.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogDescription.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogFooter.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogHeader.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogOverlay.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogScrollContent.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogTitle.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogTrigger.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenu.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuCheckboxItem.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuContent.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuGroup.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuItem.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuLabel.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuRadioGroup.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuRadioItem.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuSeparator.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuShortcut.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuSub.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuSubContent.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuSubTrigger.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuTrigger.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/form/FormControl.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/form/FormDescription.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/form/FormItem.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/form/FormLabel.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/form/FormMessage.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/form/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/form/injectionKeys.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/form/useFormField.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/hover-card/HoverCard.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/hover-card/HoverCardContent.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/hover-card/HoverCardTrigger.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/hover-card/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/input/Input.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/input/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/label/Label.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/label/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/number-field/NumberField.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/number-field/NumberFieldContent.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/number-field/NumberFieldDecrement.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/number-field/NumberFieldIncrement.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/number-field/NumberFieldInput.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/number-field/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/pagination/PaginationEllipsis.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/pagination/PaginationFirst.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/pagination/PaginationLast.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/pagination/PaginationNext.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/pagination/PaginationPrev.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/pagination/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/pin-input/PinInput.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/pin-input/PinInputGroup.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/pin-input/PinInputInput.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/pin-input/PinInputSeparator.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/pin-input/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/popover/Popover.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/popover/PopoverContent.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/popover/PopoverTrigger.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/popover/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/radio-group/RadioGroup.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/radio-group/RadioGroupItem.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/radio-group/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/resizable/ResizableHandle.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/resizable/ResizablePanelGroup.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/resizable/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/scroll-area/ScrollArea.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/scroll-area/ScrollBar.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/scroll-area/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/select/Select.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectContent.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectGroup.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectItem.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectItemText.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectLabel.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectScrollDownButton.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectScrollUpButton.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectSeparator.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectTrigger.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectValue.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/select/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/separator/Separator.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/separator/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/Sheet.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetClose.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetContent.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetDescription.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetFooter.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetHeader.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetOverlay.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetTitle.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetTrigger.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/sheet.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/switch/Switch.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/switch/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/tabs/Tabs.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/tabs/TabsContent.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/tabs/TabsList.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/tabs/TabsTrigger.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/tabs/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/textarea/Textarea.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/textarea/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/toggle-group/ToggleGroup.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/toggle-group/ToggleGroupItem.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/toggle-group/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/toggle/Toggle.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/toggle/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/toggle/toggle.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/tooltip/Tooltip.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/tooltip/TooltipContent.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/tooltip/TooltipProvider.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/tooltip/TooltipTrigger.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/tooltip/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/tree/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/tree/tree.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/src/ui/tree/types.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/tailwind.config.mjs (100%) rename {admin => admin-vben}/packages/@core/ui-kit/shadcn-ui/tsconfig.json (100%) rename {admin => admin-vben}/packages/@core/ui-kit/tabs-ui/build.config.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/tabs-ui/package.json (100%) rename {admin => admin-vben}/packages/@core/ui-kit/tabs-ui/postcss.config.mjs (100%) rename {admin => admin-vben}/packages/@core/ui-kit/tabs-ui/src/components/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/tabs-ui/src/components/tabs-chrome/tabs.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/tabs-ui/src/components/tabs/tabs.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/tabs-ui/src/components/widgets/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/tabs-ui/src/components/widgets/tool-more.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/tabs-ui/src/components/widgets/tool-screen.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/tabs-ui/src/index.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/tabs-ui/src/tabs-view.vue (100%) rename {admin => admin-vben}/packages/@core/ui-kit/tabs-ui/src/types.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/tabs-ui/src/use-tabs-drag.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/tabs-ui/src/use-tabs-view-scroll.ts (100%) rename {admin => admin-vben}/packages/@core/ui-kit/tabs-ui/tailwind.config.mjs (100%) rename {admin => admin-vben}/packages/@core/ui-kit/tabs-ui/tsconfig.json (100%) rename {admin => admin-vben}/packages/constants/README.md (100%) rename {admin => admin-vben}/packages/constants/package.json (100%) rename {admin => admin-vben}/packages/constants/src/core.ts (100%) rename {admin => admin-vben}/packages/constants/src/index.ts (100%) rename {admin => admin-vben}/packages/constants/tsconfig.json (100%) rename {admin => admin-vben}/packages/effects/README.md (100%) rename {admin => admin-vben}/packages/effects/access/package.json (100%) rename {admin => admin-vben}/packages/effects/access/src/access-control.vue (100%) rename {admin => admin-vben}/packages/effects/access/src/accessible.ts (100%) rename {admin => admin-vben}/packages/effects/access/src/directive.ts (100%) rename {admin => admin-vben}/packages/effects/access/src/index.ts (100%) rename {admin => admin-vben}/packages/effects/access/src/use-access.ts (100%) rename {admin => admin-vben}/packages/effects/access/tsconfig.json (100%) rename {admin => admin-vben}/packages/effects/common-ui/package.json (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/components/api-component/api-component.vue (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/components/api-component/index.ts (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/components/captcha/hooks/useCaptchaPoints.ts (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/components/captcha/index.ts (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/components/captcha/point-selection-captcha/index.vue (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/components/captcha/point-selection-captcha/point-selection-captcha-card.vue (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/components/captcha/slider-captcha/index.vue (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/components/captcha/slider-captcha/slider-captcha-action.vue (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/components/captcha/slider-captcha/slider-captcha-bar.vue (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/components/captcha/slider-captcha/slider-captcha-content.vue (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/components/captcha/slider-rotate-captcha/index.vue (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/components/captcha/slider-translate-captcha/index.vue (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/components/captcha/types.ts (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/components/col-page/col-page.vue (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/components/col-page/index.ts (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/components/col-page/types.ts (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/components/count-to/count-to.vue (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/components/count-to/index.ts (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/components/count-to/types.ts (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/components/ellipsis-text/ellipsis-text.vue (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/components/ellipsis-text/index.ts (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/components/icon-picker/icon-picker.vue (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/components/icon-picker/icons.ts (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/components/icon-picker/index.ts (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/components/index.ts (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/components/json-viewer/index.ts (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/components/json-viewer/index.vue (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/components/json-viewer/style.scss (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/components/json-viewer/types.ts (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/components/loading/directive.ts (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/components/loading/index.ts (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/components/loading/loading.vue (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/components/loading/spinner.vue (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/components/page/__tests__/page.test.ts (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/components/page/index.ts (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/components/page/page.vue (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/components/page/types.ts (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/components/resize/index.ts (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/components/resize/resize.vue (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/components/tippy/directive.ts (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/components/tippy/index.ts (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/index.ts (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/ui/about/about.ts (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/ui/about/about.vue (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/ui/about/index.ts (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/ui/authentication/auth-title.vue (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/ui/authentication/code-login.vue (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/ui/authentication/dingding-login.vue (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/ui/authentication/forget-password.vue (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/ui/authentication/index.ts (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/ui/authentication/login-expired-modal.vue (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/ui/authentication/login.vue (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/ui/authentication/qrcode-login.vue (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/ui/authentication/register.vue (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/ui/authentication/third-party-login.vue (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/ui/authentication/types.ts (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/ui/dashboard/analysis/analysis-chart-card.vue (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/ui/dashboard/analysis/analysis-charts-tabs.vue (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/ui/dashboard/analysis/analysis-overview.vue (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/ui/dashboard/analysis/index.ts (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/ui/dashboard/index.ts (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/ui/dashboard/typing.ts (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/ui/dashboard/workbench/index.ts (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/ui/dashboard/workbench/workbench-header.vue (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/ui/dashboard/workbench/workbench-project.vue (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/ui/dashboard/workbench/workbench-quick-nav.vue (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/ui/dashboard/workbench/workbench-todo.vue (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/ui/dashboard/workbench/workbench-trends.vue (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/ui/fallback/fallback.ts (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/ui/fallback/fallback.vue (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/ui/fallback/icons/icon-403.vue (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/ui/fallback/icons/icon-404.vue (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/ui/fallback/icons/icon-500.vue (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/ui/fallback/icons/icon-coming-soon.vue (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/ui/fallback/icons/icon-offline.vue (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/ui/fallback/icons/warning.svg (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/ui/fallback/index.ts (100%) rename {admin => admin-vben}/packages/effects/common-ui/src/ui/index.ts (100%) rename {admin => admin-vben}/packages/effects/common-ui/tsconfig.json (100%) rename {admin => admin-vben}/packages/effects/hooks/README.md (100%) rename {admin => admin-vben}/packages/effects/hooks/package.json (100%) rename {admin => admin-vben}/packages/effects/hooks/src/index.ts (100%) rename {admin => admin-vben}/packages/effects/hooks/src/use-app-config.ts (100%) rename {admin => admin-vben}/packages/effects/hooks/src/use-content-maximize.ts (100%) rename {admin => admin-vben}/packages/effects/hooks/src/use-design-tokens.ts (100%) rename {admin => admin-vben}/packages/effects/hooks/src/use-hover-toggle.ts (100%) rename {admin => admin-vben}/packages/effects/hooks/src/use-pagination.ts (100%) rename {admin => admin-vben}/packages/effects/hooks/src/use-refresh.ts (100%) rename {admin => admin-vben}/packages/effects/hooks/src/use-tabs.ts (100%) rename {admin => admin-vben}/packages/effects/hooks/src/use-watermark.ts (100%) rename {admin => admin-vben}/packages/effects/hooks/tsconfig.json (100%) rename {admin => admin-vben}/packages/effects/layouts/package.json (100%) rename {admin => admin-vben}/packages/effects/layouts/src/authentication/authentication.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/authentication/form.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/authentication/icons/slogan.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/authentication/index.ts (100%) rename {admin => admin-vben}/packages/effects/layouts/src/authentication/toolbar.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/authentication/types.ts (100%) rename {admin => admin-vben}/packages/effects/layouts/src/basic/README.md (100%) rename {admin => admin-vben}/packages/effects/layouts/src/basic/content/content-spinner.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/basic/content/content.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/basic/content/index.ts (100%) rename {admin => admin-vben}/packages/effects/layouts/src/basic/content/use-content-spinner.ts (100%) rename {admin => admin-vben}/packages/effects/layouts/src/basic/copyright/copyright.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/basic/copyright/index.ts (100%) rename {admin => admin-vben}/packages/effects/layouts/src/basic/footer/footer.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/basic/footer/index.ts (100%) rename {admin => admin-vben}/packages/effects/layouts/src/basic/header/header.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/basic/header/index.ts (100%) rename {admin => admin-vben}/packages/effects/layouts/src/basic/index.ts (100%) rename {admin => admin-vben}/packages/effects/layouts/src/basic/layout.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/basic/menu/extra-menu.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/basic/menu/index.ts (100%) rename {admin => admin-vben}/packages/effects/layouts/src/basic/menu/menu.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/basic/menu/mixed-menu.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/basic/menu/use-extra-menu.ts (100%) rename {admin => admin-vben}/packages/effects/layouts/src/basic/menu/use-mixed-menu.ts (100%) rename {admin => admin-vben}/packages/effects/layouts/src/basic/menu/use-navigation.ts (100%) rename {admin => admin-vben}/packages/effects/layouts/src/basic/tabbar/index.ts (100%) rename {admin => admin-vben}/packages/effects/layouts/src/basic/tabbar/tabbar.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/basic/tabbar/use-tabbar.ts (100%) rename {admin => admin-vben}/packages/effects/layouts/src/iframe/iframe-router-view.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/iframe/iframe-view.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/iframe/index.ts (100%) rename {admin => admin-vben}/packages/effects/layouts/src/index.ts (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/breadcrumb.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/check-updates/check-updates.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/check-updates/index.ts (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/color-toggle.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/global-search/global-search.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/global-search/index.ts (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/global-search/search-panel.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/index.ts (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/language-toggle.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/layout-toggle.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/lock-screen/index.ts (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/lock-screen/lock-screen-modal.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/lock-screen/lock-screen.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/notification/index.ts (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/notification/notification.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/notification/types.ts (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/preferences/blocks/block.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/preferences/blocks/checkbox-item.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/preferences/blocks/general/animation.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/preferences/blocks/general/general.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/preferences/blocks/index.ts (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/preferences/blocks/input-item.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/preferences/blocks/layout/breadcrumb.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/preferences/blocks/layout/content.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/preferences/blocks/layout/copyright.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/preferences/blocks/layout/footer.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/preferences/blocks/layout/header.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/preferences/blocks/layout/layout.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/preferences/blocks/layout/navigation.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/preferences/blocks/layout/sidebar.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/preferences/blocks/layout/tabbar.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/preferences/blocks/layout/widget.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/preferences/blocks/number-field-item.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/preferences/blocks/select-item.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/preferences/blocks/shortcut-keys/global.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/preferences/blocks/switch-item.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/preferences/blocks/theme/builtin.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/preferences/blocks/theme/color-mode.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/preferences/blocks/theme/radius.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/preferences/blocks/theme/theme.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/preferences/blocks/toggle-item.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/preferences/icons/content-compact.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/preferences/icons/full-content.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/preferences/icons/header-mixed-nav.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/preferences/icons/header-nav.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/preferences/icons/header-sidebar-nav.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/preferences/icons/index.ts (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/preferences/icons/mixed-nav.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/preferences/icons/setting.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/preferences/icons/sidebar-mixed-nav.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/preferences/icons/sidebar-nav.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/preferences/index.ts (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/preferences/preferences-button.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/preferences/preferences-drawer.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/preferences/preferences.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/preferences/use-open-preferences.ts (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/theme-toggle/index.ts (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/theme-toggle/theme-button.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/theme-toggle/theme-toggle.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/user-dropdown/index.ts (100%) rename {admin => admin-vben}/packages/effects/layouts/src/widgets/user-dropdown/user-dropdown.vue (100%) rename {admin => admin-vben}/packages/effects/layouts/tsconfig.json (100%) rename {admin => admin-vben}/packages/effects/plugins/README.md (100%) rename {admin => admin-vben}/packages/effects/plugins/package.json (100%) rename {admin => admin-vben}/packages/effects/plugins/src/echarts/echarts-ui.vue (100%) rename {admin => admin-vben}/packages/effects/plugins/src/echarts/echarts.ts (100%) rename {admin => admin-vben}/packages/effects/plugins/src/echarts/index.ts (100%) rename {admin => admin-vben}/packages/effects/plugins/src/echarts/use-echarts.ts (100%) rename {admin => admin-vben}/packages/effects/plugins/src/motion/index.ts (100%) rename {admin => admin-vben}/packages/effects/plugins/src/motion/types.ts (100%) rename {admin => admin-vben}/packages/effects/plugins/src/vxe-table/api.ts (100%) rename {admin => admin-vben}/packages/effects/plugins/src/vxe-table/extends.ts (100%) rename {admin => admin-vben}/packages/effects/plugins/src/vxe-table/index.ts (100%) rename {admin => admin-vben}/packages/effects/plugins/src/vxe-table/init.ts (100%) rename {admin => admin-vben}/packages/effects/plugins/src/vxe-table/style.css (100%) rename {admin => admin-vben}/packages/effects/plugins/src/vxe-table/types.ts (100%) rename {admin => admin-vben}/packages/effects/plugins/src/vxe-table/use-vxe-grid.ts (100%) rename {admin => admin-vben}/packages/effects/plugins/src/vxe-table/use-vxe-grid.vue (100%) rename {admin => admin-vben}/packages/effects/plugins/tsconfig.json (100%) rename {admin => admin-vben}/packages/effects/request/package.json (100%) rename {admin => admin-vben}/packages/effects/request/src/index.ts (100%) rename {admin => admin-vben}/packages/effects/request/src/request-client/index.ts (100%) rename {admin => admin-vben}/packages/effects/request/src/request-client/modules/downloader.test.ts (100%) rename {admin => admin-vben}/packages/effects/request/src/request-client/modules/downloader.ts (100%) rename {admin => admin-vben}/packages/effects/request/src/request-client/modules/interceptor.ts (100%) rename {admin => admin-vben}/packages/effects/request/src/request-client/modules/uploader.test.ts (100%) rename {admin => admin-vben}/packages/effects/request/src/request-client/modules/uploader.ts (100%) rename {admin => admin-vben}/packages/effects/request/src/request-client/preset-interceptors.ts (100%) rename {admin => admin-vben}/packages/effects/request/src/request-client/request-client.test.ts (100%) rename {admin => admin-vben}/packages/effects/request/src/request-client/request-client.ts (100%) rename {admin => admin-vben}/packages/effects/request/src/request-client/types.ts (100%) rename {admin => admin-vben}/packages/effects/request/tsconfig.json (100%) rename {admin => admin-vben}/packages/icons/README.md (100%) rename {admin => admin-vben}/packages/icons/package.json (100%) rename {admin => admin-vben}/packages/icons/src/iconify/index.ts (100%) rename {admin => admin-vben}/packages/icons/src/icons/empty-icon.vue (100%) rename {admin => admin-vben}/packages/icons/src/index.ts (100%) rename {admin => admin-vben}/packages/icons/src/svg/icons/antdv-logo.svg (100%) rename {admin => admin-vben}/packages/icons/src/svg/icons/avatar-1.svg (100%) rename {admin => admin-vben}/packages/icons/src/svg/icons/avatar-2.svg (100%) rename {admin => admin-vben}/packages/icons/src/svg/icons/avatar-3.svg (100%) rename {admin => admin-vben}/packages/icons/src/svg/icons/avatar-4.svg (100%) rename {admin => admin-vben}/packages/icons/src/svg/icons/bell.svg (100%) rename {admin => admin-vben}/packages/icons/src/svg/icons/cake.svg (100%) rename {admin => admin-vben}/packages/icons/src/svg/icons/card.svg (100%) rename {admin => admin-vben}/packages/icons/src/svg/icons/download.svg (100%) rename {admin => admin-vben}/packages/icons/src/svg/index.ts (100%) rename {admin => admin-vben}/packages/icons/src/svg/load.ts (100%) rename {admin => admin-vben}/packages/icons/tsconfig.json (100%) rename {admin => admin-vben}/packages/locales/package.json (100%) rename {admin => admin-vben}/packages/locales/src/i18n.ts (100%) rename {admin => admin-vben}/packages/locales/src/index.ts (100%) rename {admin => admin-vben}/packages/locales/src/langs/en-US/authentication.json (100%) rename {admin => admin-vben}/packages/locales/src/langs/en-US/common.json (100%) rename {admin => admin-vben}/packages/locales/src/langs/en-US/preferences.json (100%) rename {admin => admin-vben}/packages/locales/src/langs/en-US/ui.json (100%) rename {admin => admin-vben}/packages/locales/src/langs/zh-CN/authentication.json (100%) rename {admin => admin-vben}/packages/locales/src/langs/zh-CN/common.json (100%) rename {admin => admin-vben}/packages/locales/src/langs/zh-CN/preferences.json (100%) rename {admin => admin-vben}/packages/locales/src/langs/zh-CN/ui.json (100%) rename {admin => admin-vben}/packages/locales/src/typing.ts (100%) rename {admin => admin-vben}/packages/locales/tsconfig.json (100%) rename {admin => admin-vben}/packages/preferences/package.json (100%) rename {admin => admin-vben}/packages/preferences/src/index.ts (100%) rename {admin => admin-vben}/packages/preferences/tsconfig.json (100%) rename {admin => admin-vben}/packages/stores/package.json (100%) rename {admin => admin-vben}/packages/stores/shim-pinia.d.ts (100%) rename {admin => admin-vben}/packages/stores/src/index.ts (100%) rename {admin => admin-vben}/packages/stores/src/modules/access.test.ts (100%) rename {admin => admin-vben}/packages/stores/src/modules/access.ts (100%) rename {admin => admin-vben}/packages/stores/src/modules/index.ts (100%) rename {admin => admin-vben}/packages/stores/src/modules/tabbar.test.ts (100%) rename {admin => admin-vben}/packages/stores/src/modules/tabbar.ts (100%) rename {admin => admin-vben}/packages/stores/src/modules/user.test.ts (100%) rename {admin => admin-vben}/packages/stores/src/modules/user.ts (100%) rename {admin => admin-vben}/packages/stores/src/setup.ts (100%) rename {admin => admin-vben}/packages/stores/tsconfig.json (100%) rename {admin => admin-vben}/packages/styles/README.md (100%) rename {admin => admin-vben}/packages/styles/package.json (100%) rename {admin => admin-vben}/packages/styles/src/antd/index.css (100%) rename {admin => admin-vben}/packages/styles/src/ele/index.css (100%) rename {admin => admin-vben}/packages/styles/src/global/index.scss (100%) rename {admin => admin-vben}/packages/styles/src/index.ts (100%) rename {admin => admin-vben}/packages/styles/src/naive/index.css (100%) rename {admin => admin-vben}/packages/styles/tsconfig.json (100%) rename {admin => admin-vben}/packages/types/README.md (100%) rename {admin => admin-vben}/packages/types/global.d.ts (100%) rename {admin => admin-vben}/packages/types/package.json (100%) rename {admin => admin-vben}/packages/types/src/index.ts (100%) rename {admin => admin-vben}/packages/types/src/user.ts (100%) rename {admin => admin-vben}/packages/types/tsconfig.json (100%) rename {admin => admin-vben}/packages/utils/README.md (100%) rename {admin => admin-vben}/packages/utils/package.json (100%) rename {admin => admin-vben}/packages/utils/src/helpers/__tests__/find-menu-by-path.test.ts (100%) rename {admin => admin-vben}/packages/utils/src/helpers/__tests__/generate-menus.test.ts (100%) rename {admin => admin-vben}/packages/utils/src/helpers/__tests__/generate-routes-frontend.test.ts (100%) rename {admin => admin-vben}/packages/utils/src/helpers/__tests__/merge-route-modules.test.ts (100%) rename {admin => admin-vben}/packages/utils/src/helpers/find-menu-by-path.ts (100%) rename {admin => admin-vben}/packages/utils/src/helpers/generate-menus.ts (100%) rename {admin => admin-vben}/packages/utils/src/helpers/generate-routes-backend.ts (100%) rename {admin => admin-vben}/packages/utils/src/helpers/generate-routes-frontend.ts (100%) rename {admin => admin-vben}/packages/utils/src/helpers/get-popup-container.ts (100%) rename {admin => admin-vben}/packages/utils/src/helpers/index.ts (100%) rename {admin => admin-vben}/packages/utils/src/helpers/merge-route-modules.ts (100%) rename {admin => admin-vben}/packages/utils/src/helpers/reset-routes.ts (100%) rename {admin => admin-vben}/packages/utils/src/helpers/unmount-global-loading.ts (100%) rename {admin => admin-vben}/packages/utils/src/index.ts (100%) rename {admin => admin-vben}/packages/utils/tsconfig.json (100%) rename {admin => admin-vben}/playground/.env.analyze (100%) rename {admin => admin-vben}/playground/.env.development (100%) rename {admin => admin-vben}/playground/.env.production (100%) rename {admin => admin-vben}/playground/__tests__/e2e/auth-login.spec.ts (100%) rename {admin => admin-vben}/playground/__tests__/e2e/common/auth.ts (100%) rename {admin => admin-vben}/playground/index.html (100%) rename {admin => admin-vben}/playground/package.json (100%) rename {admin => admin-vben}/playground/playwright.config.ts (100%) rename {admin => admin-vben}/playground/postcss.config.mjs (100%) rename {admin => admin-vben}/playground/public/favicon.ico (100%) rename {admin => admin-vben}/playground/src/adapter/component/index.ts (100%) rename {admin => admin-vben}/playground/src/adapter/form.ts (100%) rename {admin => admin-vben}/playground/src/adapter/vxe-table.ts (100%) rename {admin => admin-vben}/playground/src/api/core/auth.ts (100%) rename {admin => admin-vben}/playground/src/api/core/index.ts (100%) rename {admin => admin-vben}/playground/src/api/core/menu.ts (100%) rename {admin => admin-vben}/playground/src/api/core/user.ts (100%) rename {admin => admin-vben}/playground/src/api/examples/download.ts (100%) rename {admin => admin-vben}/playground/src/api/examples/index.ts (100%) rename {admin => admin-vben}/playground/src/api/examples/json-bigint.ts (100%) rename {admin => admin-vben}/playground/src/api/examples/params.ts (100%) rename {admin => admin-vben}/playground/src/api/examples/status.ts (100%) rename {admin => admin-vben}/playground/src/api/examples/table.ts (100%) rename {admin => admin-vben}/playground/src/api/examples/upload.ts (100%) rename {admin => admin-vben}/playground/src/api/index.ts (100%) rename {admin => admin-vben}/playground/src/api/request.ts (100%) rename {admin => admin-vben}/playground/src/api/system/dept.ts (100%) rename {admin => admin-vben}/playground/src/api/system/index.ts (100%) rename {admin => admin-vben}/playground/src/api/system/menu.ts (100%) rename {admin => admin-vben}/playground/src/api/system/role.ts (100%) rename {admin => admin-vben}/playground/src/app.vue (100%) rename {admin => admin-vben}/playground/src/bootstrap.ts (100%) rename {admin => admin-vben}/playground/src/layouts/auth.vue (100%) rename {admin => admin-vben}/playground/src/layouts/basic.vue (100%) rename {admin => admin-vben}/playground/src/layouts/index.ts (100%) rename {admin => admin-vben}/playground/src/locales/README.md (100%) rename {admin => admin-vben}/playground/src/locales/index.ts (100%) rename {admin => admin-vben}/playground/src/locales/langs/en-US/demos.json (100%) rename {admin => admin-vben}/playground/src/locales/langs/en-US/examples.json (100%) rename {admin => admin-vben}/playground/src/locales/langs/en-US/page.json (100%) rename {admin => admin-vben}/playground/src/locales/langs/en-US/system.json (100%) rename {admin => admin-vben}/playground/src/locales/langs/zh-CN/demos.json (100%) rename {admin => admin-vben}/playground/src/locales/langs/zh-CN/examples.json (100%) rename {admin => admin-vben}/playground/src/locales/langs/zh-CN/page.json (100%) rename {admin => admin-vben}/playground/src/locales/langs/zh-CN/system.json (100%) rename {admin => admin-vben}/playground/src/main.ts (100%) rename {admin => admin-vben}/playground/src/preferences.ts (100%) rename {admin => admin-vben}/playground/src/router/access.ts (100%) rename {admin => admin-vben}/playground/src/router/guard.ts (100%) rename {admin => admin-vben}/playground/src/router/index.ts (100%) rename {admin => admin-vben}/playground/src/router/routes/core.ts (100%) rename {admin => admin-vben}/playground/src/router/routes/index.ts (100%) rename {admin => admin-vben}/playground/src/router/routes/modules/dashboard.ts (100%) rename {admin => admin-vben}/playground/src/router/routes/modules/demos.ts (100%) rename {admin => admin-vben}/playground/src/router/routes/modules/examples.ts (100%) rename {admin => admin-vben}/playground/src/router/routes/modules/system.ts (100%) rename {admin => admin-vben}/playground/src/router/routes/modules/vben.ts (100%) rename {admin => admin-vben}/playground/src/store/auth.ts (100%) rename {admin => admin-vben}/playground/src/store/index.ts (100%) rename {admin => admin-vben}/playground/src/views/_core/README.md (100%) rename {admin => admin-vben}/playground/src/views/_core/about/index.vue (100%) rename {admin => admin-vben}/playground/src/views/_core/authentication/code-login.vue (100%) rename {admin => admin-vben}/playground/src/views/_core/authentication/forget-password.vue (100%) rename {admin => admin-vben}/playground/src/views/_core/authentication/login.vue (100%) rename {admin => admin-vben}/playground/src/views/_core/authentication/qrcode-login.vue (100%) rename {admin => admin-vben}/playground/src/views/_core/authentication/register.vue (100%) rename {admin => admin-vben}/playground/src/views/_core/fallback/coming-soon.vue (100%) rename {admin => admin-vben}/playground/src/views/_core/fallback/forbidden.vue (100%) rename {admin => admin-vben}/playground/src/views/_core/fallback/internal-error.vue (100%) rename {admin => admin-vben}/playground/src/views/_core/fallback/not-found.vue (100%) rename {admin => admin-vben}/playground/src/views/_core/fallback/offline.vue (100%) rename {admin => admin-vben}/playground/src/views/dashboard/analytics/analytics-trends.vue (100%) rename {admin => admin-vben}/playground/src/views/dashboard/analytics/analytics-visits-data.vue (100%) rename {admin => admin-vben}/playground/src/views/dashboard/analytics/analytics-visits-sales.vue (100%) rename {admin => admin-vben}/playground/src/views/dashboard/analytics/analytics-visits-source.vue (100%) rename {admin => admin-vben}/playground/src/views/dashboard/analytics/analytics-visits.vue (100%) rename {admin => admin-vben}/playground/src/views/dashboard/analytics/index.vue (100%) rename {admin => admin-vben}/playground/src/views/dashboard/workspace/index.vue (100%) rename {admin => admin-vben}/playground/src/views/demos/access/admin-visible.vue (100%) rename {admin => admin-vben}/playground/src/views/demos/access/button-control.vue (100%) rename {admin => admin-vben}/playground/src/views/demos/access/index.vue (100%) rename {admin => admin-vben}/playground/src/views/demos/access/menu-visible-403.vue (100%) rename {admin => admin-vben}/playground/src/views/demos/access/super-visible.vue (100%) rename {admin => admin-vben}/playground/src/views/demos/access/user-visible.vue (100%) rename {admin => admin-vben}/playground/src/views/demos/active-icon/index.vue (100%) rename {admin => admin-vben}/playground/src/views/demos/badge/index.vue (100%) rename {admin => admin-vben}/playground/src/views/demos/breadcrumb/lateral-detail.vue (100%) rename {admin => admin-vben}/playground/src/views/demos/breadcrumb/lateral.vue (100%) rename {admin => admin-vben}/playground/src/views/demos/breadcrumb/level-detail.vue (100%) rename {admin => admin-vben}/playground/src/views/demos/features/clipboard/index.vue (100%) rename {admin => admin-vben}/playground/src/views/demos/features/file-download/base64.ts (100%) rename {admin => admin-vben}/playground/src/views/demos/features/file-download/index.vue (100%) rename {admin => admin-vben}/playground/src/views/demos/features/full-screen/index.vue (100%) rename {admin => admin-vben}/playground/src/views/demos/features/hide-menu-children/children.vue (100%) rename {admin => admin-vben}/playground/src/views/demos/features/hide-menu-children/parent.vue (100%) rename {admin => admin-vben}/playground/src/views/demos/features/icons/index.vue (100%) rename {admin => admin-vben}/playground/src/views/demos/features/json-bigint/index.vue (100%) rename {admin => admin-vben}/playground/src/views/demos/features/login-expired/index.vue (100%) rename {admin => admin-vben}/playground/src/views/demos/features/menu-query/index.vue (100%) rename {admin => admin-vben}/playground/src/views/demos/features/new-window/index.vue (100%) rename {admin => admin-vben}/playground/src/views/demos/features/request-params-serializer/index.vue (100%) rename {admin => admin-vben}/playground/src/views/demos/features/tabs/index.vue (100%) rename {admin => admin-vben}/playground/src/views/demos/features/tabs/tab-detail.vue (100%) rename {admin => admin-vben}/playground/src/views/demos/features/vue-query/concurrency-caching.vue (100%) rename {admin => admin-vben}/playground/src/views/demos/features/vue-query/index.vue (100%) rename {admin => admin-vben}/playground/src/views/demos/features/vue-query/infinite-queries.vue (100%) rename {admin => admin-vben}/playground/src/views/demos/features/vue-query/paginated-queries.vue (100%) rename {admin => admin-vben}/playground/src/views/demos/features/vue-query/query-retries.vue (100%) rename {admin => admin-vben}/playground/src/views/demos/features/vue-query/typing.ts (100%) rename {admin => admin-vben}/playground/src/views/demos/features/watermark/index.vue (100%) rename {admin => admin-vben}/playground/src/views/demos/nested/menu-1.vue (100%) rename {admin => admin-vben}/playground/src/views/demos/nested/menu-2-1.vue (100%) rename {admin => admin-vben}/playground/src/views/demos/nested/menu-3-1.vue (100%) rename {admin => admin-vben}/playground/src/views/demos/nested/menu-3-2-1.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/button-group/index.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/captcha/point-selection-captcha.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/captcha/slider-captcha.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/captcha/slider-rotate-captcha.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/captcha/slider-translate-captcha.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/count-to/index.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/doc-button.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/drawer/auto-height-demo.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/drawer/base-demo.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/drawer/dynamic-demo.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/drawer/form-drawer-demo.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/drawer/in-content-demo.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/drawer/index.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/drawer/shared-data-demo.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/ellipsis/index.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/form/api.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/form/basic.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/form/custom-layout.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/form/custom.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/form/dynamic.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/form/merge.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/form/modules/two-fields.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/form/query.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/form/rules.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/form/scroll-to-error-test.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/json-viewer/data.ts (100%) rename {admin => admin-vben}/playground/src/views/examples/json-viewer/index.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/layout/col-page.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/loading/index.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/modal/auto-height-demo.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/modal/base-demo.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/modal/blur-demo.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/modal/drag-demo.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/modal/dynamic-demo.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/modal/form-modal-demo.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/modal/in-content-demo.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/modal/index.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/modal/nested-demo.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/modal/shared-data-demo.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/motion/index.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/resize/basic.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/tippy/index.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/vxe-table/basic.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/vxe-table/custom-cell.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/vxe-table/edit-cell.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/vxe-table/edit-row.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/vxe-table/fixed.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/vxe-table/form.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/vxe-table/remote.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/vxe-table/table-data.ts (100%) rename {admin => admin-vben}/playground/src/views/examples/vxe-table/tree.vue (100%) rename {admin => admin-vben}/playground/src/views/examples/vxe-table/virtual.vue (100%) rename {admin => admin-vben}/playground/src/views/system/dept/data.ts (100%) rename {admin => admin-vben}/playground/src/views/system/dept/list.vue (100%) rename {admin => admin-vben}/playground/src/views/system/dept/modules/form.vue (100%) rename {admin => admin-vben}/playground/src/views/system/menu/data.ts (100%) rename {admin => admin-vben}/playground/src/views/system/menu/list.vue (100%) rename {admin => admin-vben}/playground/src/views/system/menu/modules/form.vue (100%) rename {admin => admin-vben}/playground/src/views/system/role/data.ts (100%) rename {admin => admin-vben}/playground/src/views/system/role/list.vue (100%) rename {admin => admin-vben}/playground/src/views/system/role/modules/form.vue (100%) rename {admin => admin-vben}/playground/tailwind.config.mjs (100%) rename {admin => admin-vben}/playground/tsconfig.json (100%) rename {admin => admin-vben}/playground/tsconfig.node.json (100%) rename {admin => admin-vben}/playground/vite.config.mts (100%) rename {admin => admin-vben}/pnpm-lock.yaml (100%) rename {admin => admin-vben}/pnpm-workspace.yaml (100%) rename {admin => admin-vben}/postcss.config.cjs (100%) rename {admin => admin-vben}/public/niucloud.ico (100%) rename {admin => admin-vben}/public/ueditor/dialogs/anchor/anchor.html (100%) rename {admin => admin-vben}/public/ueditor/dialogs/attachment/attachment.css (100%) rename {admin => admin-vben}/public/ueditor/dialogs/attachment/attachment.html (100%) rename {admin => admin-vben}/public/ueditor/dialogs/attachment/attachment.js (100%) rename {admin => admin-vben}/public/ueditor/dialogs/attachment/images/alignicon.gif (100%) rename {admin => admin-vben}/public/ueditor/dialogs/attachment/images/alignicon.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/attachment/images/bg.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/attachment/images/file-icons.gif (100%) rename {admin => admin-vben}/public/ueditor/dialogs/attachment/images/file-icons.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/attachment/images/icons.gif (100%) rename {admin => admin-vben}/public/ueditor/dialogs/attachment/images/icons.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/attachment/images/image.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/attachment/images/progress.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/attachment/images/success.gif (100%) rename {admin => admin-vben}/public/ueditor/dialogs/attachment/images/success.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/audio/audio.css (100%) rename {admin => admin-vben}/public/ueditor/dialogs/audio/audio.html (100%) rename {admin => admin-vben}/public/ueditor/dialogs/audio/audio.js (100%) rename {admin => admin-vben}/public/ueditor/dialogs/audio/images/bg.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/audio/images/center_focus.jpg (100%) rename {admin => admin-vben}/public/ueditor/dialogs/audio/images/file-icons.gif (100%) rename {admin => admin-vben}/public/ueditor/dialogs/audio/images/file-icons.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/audio/images/icons.gif (100%) rename {admin => admin-vben}/public/ueditor/dialogs/audio/images/icons.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/audio/images/image.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/audio/images/left_focus.jpg (100%) rename {admin => admin-vben}/public/ueditor/dialogs/audio/images/none_focus.jpg (100%) rename {admin => admin-vben}/public/ueditor/dialogs/audio/images/progress.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/audio/images/right_focus.jpg (100%) rename {admin => admin-vben}/public/ueditor/dialogs/audio/images/success.gif (100%) rename {admin => admin-vben}/public/ueditor/dialogs/audio/images/success.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/background/background.css (100%) rename {admin => admin-vben}/public/ueditor/dialogs/background/background.html (100%) rename {admin => admin-vben}/public/ueditor/dialogs/background/background.js (100%) rename {admin => admin-vben}/public/ueditor/dialogs/background/images/bg.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/background/images/success.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/contentimport/contentimport.html (100%) rename {admin => admin-vben}/public/ueditor/dialogs/contentimport/contentimport.js (100%) rename {admin => admin-vben}/public/ueditor/dialogs/emotion/emotion.css (100%) rename {admin => admin-vben}/public/ueditor/dialogs/emotion/emotion.html (100%) rename {admin => admin-vben}/public/ueditor/dialogs/emotion/emotion.js (100%) rename {admin => admin-vben}/public/ueditor/dialogs/emotion/images/0.gif (100%) rename {admin => admin-vben}/public/ueditor/dialogs/emotion/images/bface.gif (100%) rename {admin => admin-vben}/public/ueditor/dialogs/emotion/images/cface.gif (100%) rename {admin => admin-vben}/public/ueditor/dialogs/emotion/images/fface.gif (100%) rename {admin => admin-vben}/public/ueditor/dialogs/emotion/images/jxface2.gif (100%) rename {admin => admin-vben}/public/ueditor/dialogs/emotion/images/neweditor-tab-bg.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/emotion/images/tface.gif (100%) rename {admin => admin-vben}/public/ueditor/dialogs/emotion/images/wface.gif (100%) rename {admin => admin-vben}/public/ueditor/dialogs/emotion/images/yface.gif (100%) rename {admin => admin-vben}/public/ueditor/dialogs/formula/formula.html (100%) rename {admin => admin-vben}/public/ueditor/dialogs/formula/formula.js (100%) rename {admin => admin-vben}/public/ueditor/dialogs/help/help.css (100%) rename {admin => admin-vben}/public/ueditor/dialogs/help/help.html (100%) rename {admin => admin-vben}/public/ueditor/dialogs/help/help.js (100%) rename {admin => admin-vben}/public/ueditor/dialogs/image/image.css (100%) rename {admin => admin-vben}/public/ueditor/dialogs/image/image.html (100%) rename {admin => admin-vben}/public/ueditor/dialogs/image/image.js (100%) rename {admin => admin-vben}/public/ueditor/dialogs/image/images/alignicon.jpg (100%) rename {admin => admin-vben}/public/ueditor/dialogs/image/images/bg.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/image/images/icons.gif (100%) rename {admin => admin-vben}/public/ueditor/dialogs/image/images/icons.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/image/images/image.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/image/images/progress.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/image/images/success.gif (100%) rename {admin => admin-vben}/public/ueditor/dialogs/image/images/success.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/insertframe/insertframe.html (100%) rename {admin => admin-vben}/public/ueditor/dialogs/internal.js (100%) rename {admin => admin-vben}/public/ueditor/dialogs/link/link.html (100%) rename {admin => admin-vben}/public/ueditor/dialogs/preview/preview.html (100%) rename {admin => admin-vben}/public/ueditor/dialogs/scrawl/images/addimg.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/scrawl/images/brush.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/scrawl/images/delimg.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/scrawl/images/delimgH.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/scrawl/images/empty.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/scrawl/images/emptyH.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/scrawl/images/eraser.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/scrawl/images/redo.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/scrawl/images/redoH.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/scrawl/images/scale.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/scrawl/images/scaleH.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/scrawl/images/size.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/scrawl/images/undo.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/scrawl/images/undoH.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/scrawl/scrawl.css (100%) rename {admin => admin-vben}/public/ueditor/dialogs/scrawl/scrawl.html (100%) rename {admin => admin-vben}/public/ueditor/dialogs/scrawl/scrawl.js (100%) rename {admin => admin-vben}/public/ueditor/dialogs/searchreplace/searchreplace.html (100%) rename {admin => admin-vben}/public/ueditor/dialogs/searchreplace/searchreplace.js (100%) rename {admin => admin-vben}/public/ueditor/dialogs/spechars/spechars.html (100%) rename {admin => admin-vben}/public/ueditor/dialogs/spechars/spechars.js (100%) rename {admin => admin-vben}/public/ueditor/dialogs/table/dragicon.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/table/edittable.css (100%) rename {admin => admin-vben}/public/ueditor/dialogs/table/edittable.html (100%) rename {admin => admin-vben}/public/ueditor/dialogs/table/edittable.js (100%) rename {admin => admin-vben}/public/ueditor/dialogs/table/edittd.html (100%) rename {admin => admin-vben}/public/ueditor/dialogs/table/edittip.html (100%) rename {admin => admin-vben}/public/ueditor/dialogs/template/config.js (100%) rename {admin => admin-vben}/public/ueditor/dialogs/template/images/bg.gif (100%) rename {admin => admin-vben}/public/ueditor/dialogs/template/images/pre0.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/template/images/pre1.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/template/images/pre2.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/template/images/pre3.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/template/images/pre4.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/template/template.css (100%) rename {admin => admin-vben}/public/ueditor/dialogs/template/template.html (100%) rename {admin => admin-vben}/public/ueditor/dialogs/template/template.js (100%) rename {admin => admin-vben}/public/ueditor/dialogs/video/images/bg.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/video/images/center_focus.jpg (100%) rename {admin => admin-vben}/public/ueditor/dialogs/video/images/file-icons.gif (100%) rename {admin => admin-vben}/public/ueditor/dialogs/video/images/file-icons.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/video/images/icons.gif (100%) rename {admin => admin-vben}/public/ueditor/dialogs/video/images/icons.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/video/images/image.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/video/images/left_focus.jpg (100%) rename {admin => admin-vben}/public/ueditor/dialogs/video/images/none_focus.jpg (100%) rename {admin => admin-vben}/public/ueditor/dialogs/video/images/progress.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/video/images/right_focus.jpg (100%) rename {admin => admin-vben}/public/ueditor/dialogs/video/images/success.gif (100%) rename {admin => admin-vben}/public/ueditor/dialogs/video/images/success.png (100%) rename {admin => admin-vben}/public/ueditor/dialogs/video/video.css (100%) rename {admin => admin-vben}/public/ueditor/dialogs/video/video.html (100%) rename {admin => admin-vben}/public/ueditor/dialogs/video/video.js (100%) rename {admin => admin-vben}/public/ueditor/dialogs/wordimage/wordimage.html (100%) rename {admin => admin-vben}/public/ueditor/dialogs/wordimage/wordimage.js (100%) rename {admin => admin-vben}/public/ueditor/index.html (100%) rename {admin => admin-vben}/public/ueditor/lang/en/en.js (100%) rename {admin => admin-vben}/public/ueditor/lang/en/images/addimage.png (100%) rename {admin => admin-vben}/public/ueditor/lang/en/images/alldeletebtnhoverskin.png (100%) rename {admin => admin-vben}/public/ueditor/lang/en/images/alldeletebtnupskin.png (100%) rename {admin => admin-vben}/public/ueditor/lang/en/images/background.png (100%) rename {admin => admin-vben}/public/ueditor/lang/en/images/button.png (100%) rename {admin => admin-vben}/public/ueditor/lang/en/images/copy.png (100%) rename {admin => admin-vben}/public/ueditor/lang/en/images/deletedisable.png (100%) rename {admin => admin-vben}/public/ueditor/lang/en/images/deleteenable.png (100%) rename {admin => admin-vben}/public/ueditor/lang/en/images/listbackground.png (100%) rename {admin => admin-vben}/public/ueditor/lang/en/images/localimage.png (100%) rename {admin => admin-vben}/public/ueditor/lang/en/images/music.png (100%) rename {admin => admin-vben}/public/ueditor/lang/en/images/rotateleftdisable.png (100%) rename {admin => admin-vben}/public/ueditor/lang/en/images/rotateleftenable.png (100%) rename {admin => admin-vben}/public/ueditor/lang/en/images/rotaterightdisable.png (100%) rename {admin => admin-vben}/public/ueditor/lang/en/images/rotaterightenable.png (100%) rename {admin => admin-vben}/public/ueditor/lang/en/images/upload.png (100%) rename {admin => admin-vben}/public/ueditor/lang/zh-cn/images/copy.png (100%) rename {admin => admin-vben}/public/ueditor/lang/zh-cn/images/localimage.png (100%) rename {admin => admin-vben}/public/ueditor/lang/zh-cn/images/music.png (100%) rename {admin => admin-vben}/public/ueditor/lang/zh-cn/images/upload.png (100%) rename {admin => admin-vben}/public/ueditor/lang/zh-cn/zh-cn.js (100%) rename {admin => admin-vben}/public/ueditor/plugins/demo/demo.js (100%) rename {admin => admin-vben}/public/ueditor/themes/default/css/ueditor.css (100%) rename {admin => admin-vben}/public/ueditor/themes/default/dialog.css (100%) rename {admin => admin-vben}/public/ueditor/themes/default/dialogbase.css (100%) rename {admin => admin-vben}/public/ueditor/themes/default/exts/ai.svg (100%) rename {admin => admin-vben}/public/ueditor/themes/default/exts/apk.svg (100%) rename {admin => admin-vben}/public/ueditor/themes/default/exts/chm.svg (100%) rename {admin => admin-vben}/public/ueditor/themes/default/exts/css.svg (100%) rename {admin => admin-vben}/public/ueditor/themes/default/exts/doc.svg (100%) rename {admin => admin-vben}/public/ueditor/themes/default/exts/docx.svg (100%) rename {admin => admin-vben}/public/ueditor/themes/default/exts/dwg.svg (100%) rename {admin => admin-vben}/public/ueditor/themes/default/exts/folder.svg (100%) rename {admin => admin-vben}/public/ueditor/themes/default/exts/gif.svg (100%) rename {admin => admin-vben}/public/ueditor/themes/default/exts/html.svg (100%) rename {admin => admin-vben}/public/ueditor/themes/default/exts/jpeg.svg (100%) rename {admin => admin-vben}/public/ueditor/themes/default/exts/jpg.svg (100%) rename {admin => admin-vben}/public/ueditor/themes/default/exts/log.svg (100%) rename {admin => admin-vben}/public/ueditor/themes/default/exts/mp3.svg (100%) rename {admin => admin-vben}/public/ueditor/themes/default/exts/mp4.svg (100%) rename {admin => admin-vben}/public/ueditor/themes/default/exts/pdf.svg (100%) rename {admin => admin-vben}/public/ueditor/themes/default/exts/png.svg (100%) rename {admin => admin-vben}/public/ueditor/themes/default/exts/ppt.svg (100%) rename {admin => admin-vben}/public/ueditor/themes/default/exts/pptx.svg (100%) rename {admin => admin-vben}/public/ueditor/themes/default/exts/psd.svg (100%) rename {admin => admin-vben}/public/ueditor/themes/default/exts/rar.svg (100%) rename {admin => admin-vben}/public/ueditor/themes/default/exts/svg.svg (100%) rename {admin => admin-vben}/public/ueditor/themes/default/exts/torrent.svg (100%) rename {admin => admin-vben}/public/ueditor/themes/default/exts/txt.svg (100%) rename {admin => admin-vben}/public/ueditor/themes/default/exts/unknown.svg (100%) rename {admin => admin-vben}/public/ueditor/themes/default/exts/xls.svg (100%) rename {admin => admin-vben}/public/ueditor/themes/default/exts/xlsx.svg (100%) rename {admin => admin-vben}/public/ueditor/themes/default/exts/zip.svg (100%) rename {admin => admin-vben}/public/ueditor/themes/default/images/anchor.gif (100%) rename {admin => admin-vben}/public/ueditor/themes/default/images/arrow.png (100%) rename {admin => admin-vben}/public/ueditor/themes/default/images/arrow_down.png (100%) rename {admin => admin-vben}/public/ueditor/themes/default/images/arrow_up.png (100%) rename {admin => admin-vben}/public/ueditor/themes/default/images/button-bg.gif (100%) rename {admin => admin-vben}/public/ueditor/themes/default/images/cancelbutton.gif (100%) rename {admin => admin-vben}/public/ueditor/themes/default/images/charts.png (100%) rename {admin => admin-vben}/public/ueditor/themes/default/images/cursor_h.gif (100%) rename {admin => admin-vben}/public/ueditor/themes/default/images/cursor_h.png (100%) rename {admin => admin-vben}/public/ueditor/themes/default/images/cursor_v.gif (100%) rename {admin => admin-vben}/public/ueditor/themes/default/images/cursor_v.png (100%) rename {admin => admin-vben}/public/ueditor/themes/default/images/dialog-title-bg.png (100%) rename {admin => admin-vben}/public/ueditor/themes/default/images/filescan.png (100%) rename {admin => admin-vben}/public/ueditor/themes/default/images/highlighted.gif (100%) rename {admin => admin-vben}/public/ueditor/themes/default/images/icons-all.gif (100%) rename {admin => admin-vben}/public/ueditor/themes/default/images/icons.gif (100%) rename {admin => admin-vben}/public/ueditor/themes/default/images/icons.png (100%) rename {admin => admin-vben}/public/ueditor/themes/default/images/img-cracked.png (100%) rename {admin => admin-vben}/public/ueditor/themes/default/images/loaderror.png (100%) rename {admin => admin-vben}/public/ueditor/themes/default/images/loading.gif (100%) rename {admin => admin-vben}/public/ueditor/themes/default/images/lock.gif (100%) rename {admin => admin-vben}/public/ueditor/themes/default/images/neweditor-tab-bg.png (100%) rename {admin => admin-vben}/public/ueditor/themes/default/images/pagebreak.gif (100%) rename {admin => admin-vben}/public/ueditor/themes/default/images/scale.png (100%) rename {admin => admin-vben}/public/ueditor/themes/default/images/sortable.png (100%) rename {admin => admin-vben}/public/ueditor/themes/default/images/spacer.gif (100%) rename {admin => admin-vben}/public/ueditor/themes/default/images/sparator_v.png (100%) rename {admin => admin-vben}/public/ueditor/themes/default/images/table-cell-align.png (100%) rename {admin => admin-vben}/public/ueditor/themes/default/images/tangram-colorpicker.png (100%) rename {admin => admin-vben}/public/ueditor/themes/default/images/toolbar_bg.png (100%) rename {admin => admin-vben}/public/ueditor/themes/default/images/unhighlighted.gif (100%) rename {admin => admin-vben}/public/ueditor/themes/default/images/upload.png (100%) rename {admin => admin-vben}/public/ueditor/themes/default/images/videologo.gif (100%) rename {admin => admin-vben}/public/ueditor/themes/default/images/word.gif (100%) rename {admin => admin-vben}/public/ueditor/themes/default/images/wordpaste.png (100%) rename {admin => admin-vben}/public/ueditor/themes/iframe.css (100%) rename {admin => admin-vben}/public/ueditor/third-party/SyntaxHighlighter/shCore.js (100%) rename {admin => admin-vben}/public/ueditor/third-party/SyntaxHighlighter/shCoreDefault.css (100%) rename {admin => admin-vben}/public/ueditor/third-party/clipboard/clipboard.js (100%) rename {admin => admin-vben}/public/ueditor/third-party/codemirror/codemirror.css (100%) rename {admin => admin-vben}/public/ueditor/third-party/codemirror/codemirror.js (100%) rename {admin => admin-vben}/public/ueditor/third-party/jquery-1.10.2.js (100%) rename {admin => admin-vben}/public/ueditor/third-party/webuploader/webuploader.css (100%) rename {admin => admin-vben}/public/ueditor/third-party/webuploader/webuploader.js (100%) rename {admin => admin-vben}/public/ueditor/third-party/zeroclipboard/ZeroClipboard.js (100%) rename {admin => admin-vben}/public/ueditor/ueditor.all.js (100%) rename {admin => admin-vben}/public/ueditor/ueditor.config.js (100%) rename {admin => admin-vben}/public/ueditor/ueditor.parse.js (100%) rename {admin => admin-vben}/publish.cjs (100%) rename {admin => admin-vben}/scripts/clean.mjs (100%) rename {admin => admin-vben}/scripts/deploy/Dockerfile (100%) rename {admin => admin-vben}/scripts/deploy/build-local-docker-image.sh (100%) rename {admin => admin-vben}/scripts/deploy/nginx.conf (100%) rename {admin => admin-vben}/scripts/turbo-run/README.md (100%) rename {admin => admin-vben}/scripts/turbo-run/bin/turbo-run.mjs (100%) rename {admin => admin-vben}/scripts/turbo-run/build.config.ts (100%) rename {admin => admin-vben}/scripts/turbo-run/package.json (100%) rename {admin => admin-vben}/scripts/turbo-run/src/index.ts (100%) rename {admin => admin-vben}/scripts/turbo-run/src/run.ts (100%) rename {admin => admin-vben}/scripts/turbo-run/tsconfig.json (100%) rename {admin => admin-vben}/scripts/vsh/README.md (100%) rename {admin => admin-vben}/scripts/vsh/bin/vsh.mjs (100%) rename {admin => admin-vben}/scripts/vsh/build.config.ts (100%) rename {admin => admin-vben}/scripts/vsh/package.json (100%) rename {admin => admin-vben}/scripts/vsh/src/check-circular/index.ts (100%) rename {admin => admin-vben}/scripts/vsh/src/check-dep/index.ts (100%) rename {admin => admin-vben}/scripts/vsh/src/code-workspace/index.ts (100%) rename {admin => admin-vben}/scripts/vsh/src/index.ts (100%) rename {admin => admin-vben}/scripts/vsh/src/lint/index.ts (100%) rename {admin => admin-vben}/scripts/vsh/src/publint/index.ts (100%) rename {admin => admin-vben}/scripts/vsh/tsconfig.json (100%) rename {admin => admin-vben}/src/App.vue (100%) rename {admin => admin-vben}/src/addon/.gitignore (100%) rename {admin => admin-vben}/src/app/api/addon.ts (100%) rename {admin => admin-vben}/src/app/api/aliapp.ts (100%) rename {admin => admin-vben}/src/app/api/app.ts (100%) rename {admin => admin-vben}/src/app/api/auth.ts (100%) rename {admin => admin-vben}/src/app/api/cloud.ts (100%) rename {admin => admin-vben}/src/app/api/dict.ts (100%) rename {admin => admin-vben}/src/app/api/diy.ts (100%) rename {admin => admin-vben}/src/app/api/diy_form.ts (100%) rename {admin => admin-vben}/src/app/api/h5.ts (100%) rename {admin => admin-vben}/src/app/api/home.ts (100%) rename {admin => admin-vben}/src/app/api/member.ts (100%) rename {admin => admin-vben}/src/app/api/module.ts (100%) rename {admin => admin-vben}/src/app/api/notice.ts (100%) rename {admin => admin-vben}/src/app/api/pay.ts (100%) rename {admin => admin-vben}/src/app/api/pc.ts (100%) rename {admin => admin-vben}/src/app/api/personal.ts (100%) rename {admin => admin-vben}/src/app/api/poster.ts (100%) rename {admin => admin-vben}/src/app/api/printer.ts (100%) rename {admin => admin-vben}/src/app/api/site.ts (100%) rename {admin => admin-vben}/src/app/api/stat.ts (100%) rename {admin => admin-vben}/src/app/api/sys.ts (100%) rename {admin => admin-vben}/src/app/api/tools.ts (100%) rename {admin => admin-vben}/src/app/api/upgrade.ts (100%) rename {admin => admin-vben}/src/app/api/user.ts (100%) rename {admin => admin-vben}/src/app/api/verify.ts (100%) rename {admin => admin-vben}/src/app/api/weapp.ts (100%) rename {admin => admin-vben}/src/app/api/wechat.ts (100%) rename {admin => admin-vben}/src/app/api/wxoplatform.ts (100%) rename {admin => admin-vben}/src/app/assets/images/SaaS.png (100%) rename {admin => admin-vben}/src/app/assets/images/app_default.png (100%) rename {admin => admin-vben}/src/app/assets/images/app_store/app_store_default.png (100%) rename {admin => admin-vben}/src/app/assets/images/app_store/local_icon.png (100%) rename {admin => admin-vben}/src/app/assets/images/app_store/local_icon_select.png (100%) rename {admin => admin-vben}/src/app/assets/images/app_store/market_icon.png (100%) rename {admin => admin-vben}/src/app/assets/images/app_store/market_icon_select.png (100%) rename {admin => admin-vben}/src/app/assets/images/app_store/switch_icon_1.png (100%) rename {admin => admin-vben}/src/app/assets/images/app_store/switch_icon_2.png (100%) rename {admin => admin-vben}/src/app/assets/images/back_login.jpg (100%) rename {admin => admin-vben}/src/app/assets/images/category_default.png (100%) rename {admin => admin-vben}/src/app/assets/images/channel/preview.png (100%) rename {admin => admin-vben}/src/app/assets/images/creatBg.png (100%) rename {admin => admin-vben}/src/app/assets/images/default_headimg.png (100%) rename {admin => admin-vben}/src/app/assets/images/default_headimg_square.jpg (100%) rename {admin => admin-vben}/src/app/assets/images/diy/head/nav_style1.jpg (100%) rename {admin => admin-vben}/src/app/assets/images/diy/head/nav_style2.jpg (100%) rename {admin => admin-vben}/src/app/assets/images/diy/head/nav_style3.jpg (100%) rename {admin => admin-vben}/src/app/assets/images/diy/head/nav_style4.jpg (100%) rename {admin => admin-vben}/src/app/assets/images/diy/head/nav_style5.png (100%) rename {admin => admin-vben}/src/app/assets/images/diy/head/nav_style6.jpg (100%) rename {admin => admin-vben}/src/app/assets/images/diy/notice/style_1.png (100%) rename {admin => admin-vben}/src/app/assets/images/diy/notice/style_2.png (100%) rename {admin => admin-vben}/src/app/assets/images/diy/text/style1.png (100%) rename {admin => admin-vben}/src/app/assets/images/diy/text/style2.png (100%) rename {admin => admin-vben}/src/app/assets/images/diy_form/mobile_bottom.png (100%) rename {admin => admin-vben}/src/app/assets/images/diy_form/mobile_line.png (100%) rename {admin => admin-vben}/src/app/assets/images/diy_form/mobile_tabbar.png (100%) rename {admin => admin-vben}/src/app/assets/images/diy_preview_head.png (100%) rename {admin => admin-vben}/src/app/assets/images/error.png (100%) rename {admin => admin-vben}/src/app/assets/images/error_icon.png (100%) rename {admin => admin-vben}/src/app/assets/images/goods_default.png (100%) rename {admin => admin-vben}/src/app/assets/images/gov_icon.png (100%) rename {admin => admin-vben}/src/app/assets/images/icon-addon-one.png (100%) rename {admin => admin-vben}/src/app/assets/images/icon-addon.png (100%) rename {admin => admin-vben}/src/app/assets/images/icon_folder.png (100%) rename {admin => admin-vben}/src/app/assets/images/icon_preview.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/add_menu.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/administrator.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/app.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/app1.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/app_default.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/app_store.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/app_store1.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/apply_empty.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/article.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/article_list.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/auth.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/auth1.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/balance.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/banner_1.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/banner_2.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/cloud.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/del_model.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/edit.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/fitment.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/install.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/low-play.mp4 (100%) rename {admin => admin-vben}/src/app/assets/images/index/member.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/message_empty.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/model_tag.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/new_site.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/new_site1.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/not_install.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/overview.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/renovation.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/site.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/site1.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/site2.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/site3.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/site_add.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/site_add1.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/site_auth.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/site_balance.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/site_bg.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/site_class.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/site_class1.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/site_img.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/site_list.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/site_list1.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/site_member.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/site_normal.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/site_tc.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/site_tc1.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/site_user.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/site_user1.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/wework_qrcode.png (100%) rename {admin => admin-vben}/src/app/assets/images/index/wx_qrcode.jpg (100%) rename {admin => admin-vben}/src/app/assets/images/iphone_bg.png (100%) rename {admin => admin-vben}/src/app/assets/images/layout_bussiness.png (100%) rename {admin => admin-vben}/src/app/assets/images/layout_darkside.png (100%) rename {admin => admin-vben}/src/app/assets/images/layout_default.png (100%) rename {admin => admin-vben}/src/app/assets/images/layout_profession.png (100%) rename {admin => admin-vben}/src/app/assets/images/login/login_bg.jpg (100%) rename {admin => admin-vben}/src/app/assets/images/login/login_icon.png (100%) rename {admin => admin-vben}/src/app/assets/images/login/login_index_bg.jpg (100%) rename {admin => admin-vben}/src/app/assets/images/login/login_index_left.png (100%) rename {admin => admin-vben}/src/app/assets/images/login/password.png (100%) rename {admin => admin-vben}/src/app/assets/images/login/site_login_bg.png (100%) rename {admin => admin-vben}/src/app/assets/images/login/username.png (100%) rename {admin => admin-vben}/src/app/assets/images/login_bg.png (100%) rename {admin => admin-vben}/src/app/assets/images/login_logo.png (100%) rename {admin => admin-vben}/src/app/assets/images/logo.default.png (100%) rename {admin => admin-vben}/src/app/assets/images/logo.png (100%) rename {admin => admin-vben}/src/app/assets/images/member_head.png (100%) rename {admin => admin-vben}/src/app/assets/images/no_attachment.png (100%) rename {admin => admin-vben}/src/app/assets/images/no_perms.png (100%) rename {admin => admin-vben}/src/app/assets/images/one_type.png (100%) rename {admin => admin-vben}/src/app/assets/images/setting/QRcode.png (100%) rename {admin => admin-vben}/src/app/assets/images/setting/alipay1.png (100%) rename {admin => admin-vben}/src/app/assets/images/setting/alipay2.png (100%) rename {admin => admin-vben}/src/app/assets/images/setting/alipay3.png (100%) rename {admin => admin-vben}/src/app/assets/images/setting/alipay4.png (100%) rename {admin => admin-vben}/src/app/assets/images/setting/alipay4_1.jpg (100%) rename {admin => admin-vben}/src/app/assets/images/setting/alipay4_2.jpg (100%) rename {admin => admin-vben}/src/app/assets/images/setting/alipay4_3.jpg (100%) rename {admin => admin-vben}/src/app/assets/images/setting/alipay4_4.jpg (100%) rename {admin => admin-vben}/src/app/assets/images/setting/alipay5.png (100%) rename {admin => admin-vben}/src/app/assets/images/setting/alipay6.png (100%) rename {admin => admin-vben}/src/app/assets/images/setting/alipay7.png (100%) rename {admin => admin-vben}/src/app/assets/images/setting/alipay8.png (100%) rename {admin => admin-vben}/src/app/assets/images/setting/app-authorize1.png (100%) rename {admin => admin-vben}/src/app/assets/images/setting/weapp_1.png (100%) rename {admin => admin-vben}/src/app/assets/images/setting/weapp_2.png (100%) rename {admin => admin-vben}/src/app/assets/images/setting/weapp_3.png (100%) rename {admin => admin-vben}/src/app/assets/images/setting/weapp_4.png (100%) rename {admin => admin-vben}/src/app/assets/images/setting/wechat_1.png (100%) rename {admin => admin-vben}/src/app/assets/images/setting/wechat_2.png (100%) rename {admin => admin-vben}/src/app/assets/images/setting/wechat_3.png (100%) rename {admin => admin-vben}/src/app/assets/images/setting/wechat_4.png (100%) rename {admin => admin-vben}/src/app/assets/images/site_default.png (100%) rename {admin => admin-vben}/src/app/assets/images/site_empty.png (100%) rename {admin => admin-vben}/src/app/assets/images/site_login.png (100%) rename {admin => admin-vben}/src/app/assets/images/site_login_bg.png (100%) rename {admin => admin-vben}/src/app/assets/images/site_login_logo.png (100%) rename {admin => admin-vben}/src/app/assets/images/site_logo.png (100%) rename {admin => admin-vben}/src/app/assets/images/success_icon.png (100%) rename {admin => admin-vben}/src/app/assets/images/theme_black.png (100%) rename {admin => admin-vben}/src/app/assets/images/theme_white.png (100%) rename {admin => admin-vben}/src/app/assets/images/three_type.png (100%) rename {admin => admin-vben}/src/app/assets/images/tools/addon_develop.png (100%) rename {admin => admin-vben}/src/app/assets/images/tools/app_auth.png (100%) rename {admin => admin-vben}/src/app/assets/images/tools/auth_menu.png (100%) rename {admin => admin-vben}/src/app/assets/images/tools/authorize.png (100%) rename {admin => admin-vben}/src/app/assets/images/tools/code.png (100%) rename {admin => admin-vben}/src/app/assets/images/tools/developer.png (100%) rename {admin => admin-vben}/src/app/assets/images/tools/official_market.png (100%) rename {admin => admin-vben}/src/app/assets/images/tools/sys_dict_list.png (100%) rename {admin => admin-vben}/src/app/assets/images/tools/tools_backup_records.png (100%) rename {admin => admin-vben}/src/app/assets/images/tools/tools_check_environment.png (100%) rename {admin => admin-vben}/src/app/assets/images/tools/tools_cloud_compile.png (100%) rename {admin => admin-vben}/src/app/assets/images/tools/tools_schedule.png (100%) rename {admin => admin-vben}/src/app/assets/images/tools/tools_update_cache.png (100%) rename {admin => admin-vben}/src/app/assets/images/tools/tools_upgrade.png (100%) rename {admin => admin-vben}/src/app/assets/images/tools/tools_upgrade_records.png (100%) rename {admin => admin-vben}/src/app/assets/images/tools/upgrade.png (100%) rename {admin => admin-vben}/src/app/assets/images/two_type.png (100%) rename {admin => admin-vben}/src/app/assets/images/versions.png (100%) rename {admin => admin-vben}/src/app/assets/images/wechat-menu-head-bg.png (100%) rename {admin => admin-vben}/src/app/assets/images/wechat-menu-head-dark-bg.png (100%) rename {admin => admin-vben}/src/app/assets/images/white_logo.png (100%) rename {admin => admin-vben}/src/app/assets/images/write.png (100%) rename {admin => admin-vben}/src/app/components/cloud-build/index.vue (100%) rename {admin => admin-vben}/src/app/components/upgrade-log/index.vue (100%) rename {admin => admin-vben}/src/app/components/upgrade/index.vue (100%) rename {admin => admin-vben}/src/app/components/user-info-edit/index.vue (100%) rename {admin => admin-vben}/src/app/lang/en/403.json (100%) rename {admin => admin-vben}/src/app/lang/en/auth.menu.json (100%) rename {admin => admin-vben}/src/app/lang/en/index.json (100%) rename {admin => admin-vben}/src/app/lang/en/login.json (100%) rename {admin => admin-vben}/src/app/lang/en/member.member.json (100%) rename {admin => admin-vben}/src/app/lang/en/user.center.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/403.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/app.authorize.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/app.index.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/app.store.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/app.upgrade.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/auth.log.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/auth.menu.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/auth.role.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/auth.site_menu.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/auth.user.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/channel.aliapp.access.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/channel.aliapp.config.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/channel.aliapp.course.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/channel.app.access.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/channel.app.config.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/channel.app.version.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/channel.h5.config.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/channel.pc.config.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/channel.weapp.access.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/channel.weapp.code.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/channel.weapp.config.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/channel.weapp.course.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/channel.weapp.template.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/channel.wechat.access.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/channel.wechat.config.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/channel.wechat.course.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/channel.wechat.keyword_reply_edit.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/channel.wechat.menu.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/channel.wechat.reply.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/channel.wechat.template.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/decorate.preview.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/dict.list.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/diy.edit.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/diy.index.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/diy.list.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/diy.member.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/diy.preview.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/diy.route.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/diy.tabbar.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/diy.tabbar_edit.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/diy_form.edit.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/diy_form.list.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/finance.account.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/finance.cash_out.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/finance.offlinepay.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/finance.pay_detail.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/finance.pay_refund.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/finance.refund_detail.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/index.app_manage.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/index.index.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/index.preview.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/index.store.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/login.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/marketing.sign_config.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/marketing.sign_list.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/marketing.verifier.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/marketing.verify.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/member.balance.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/member.commission.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/member.growth.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/member.label.edit.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/member.label.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/member.level.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/member.level_edit.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/member.member.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/member.member_detail.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/member.point.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/poster.edit.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/poster.list.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/printer.edit.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/printer.list.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/printer.template_edit.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/printer.template_list.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/setting.adminlogin.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/setting.agreement.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/setting.agreement_edit.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/setting.cash_out.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/setting.copyright.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/setting.developer_token.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/setting.export.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/setting.growth_rule.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/setting.layout.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/setting.login.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/setting.map.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/setting.member.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/setting.notice.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/setting.notice_records.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/setting.oplatform.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/setting.pay.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/setting.sms.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/setting.sms_records.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/setting.storage.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/setting.system.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/setting.transfer.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/setting.transfer_scene.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/setting.weapp.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/site.group.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/site.group_edit.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/site.info.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/site.list.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/site.manage.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/site.user.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/site.user_info.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/tools.addon.edit.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/tools.addon.index.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/tools.addon.list.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/tools.backup_records.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/tools.code.edit.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/tools.code.index.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/tools.code.list.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/tools.detection.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/tools.schedule.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/tools.schedule_log.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/tools.updatecache.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/tools.upgrade_records.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/user.center.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/user.edit_center.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/wxoplatform.setting.json (100%) rename {admin => admin-vben}/src/app/lang/zh-cn/wxoplatform.weapp_version.json (100%) rename {admin => admin-vben}/src/app/views/app/authorize.vue (100%) rename {admin => admin-vben}/src/app/views/app/index.vue (100%) rename {admin => admin-vben}/src/app/views/app/marketing.vue (100%) rename {admin => admin-vben}/src/app/views/app/upgrade.vue (100%) rename {admin => admin-vben}/src/app/views/auth/components/edit-menu.vue (100%) rename {admin => admin-vben}/src/app/views/auth/components/edit-role.vue (100%) rename {admin => admin-vben}/src/app/views/auth/components/edit-user.vue (100%) rename {admin => admin-vben}/src/app/views/auth/components/select-menu-item.vue (100%) rename {admin => admin-vben}/src/app/views/auth/components/user-log-detail.vue (100%) rename {admin => admin-vben}/src/app/views/auth/log.vue (100%) rename {admin => admin-vben}/src/app/views/auth/menu.vue (100%) rename {admin => admin-vben}/src/app/views/auth/role.vue (100%) rename {admin => admin-vben}/src/app/views/auth/site_menu.vue (100%) rename {admin => admin-vben}/src/app/views/auth/user.vue (100%) rename {admin => admin-vben}/src/app/views/channel/aliapp/access.vue (100%) rename {admin => admin-vben}/src/app/views/channel/aliapp/config.vue (100%) rename {admin => admin-vben}/src/app/views/channel/aliapp/course.vue (100%) rename {admin => admin-vben}/src/app/views/channel/app/access.vue (100%) rename {admin => admin-vben}/src/app/views/channel/app/components/app-version-edit.vue (100%) rename {admin => admin-vben}/src/app/views/channel/app/components/generate-sing-cert.vue (100%) rename {admin => admin-vben}/src/app/views/channel/app/config.vue (100%) rename {admin => admin-vben}/src/app/views/channel/app/version.vue (100%) rename {admin => admin-vben}/src/app/views/channel/h5/config.vue (100%) rename {admin => admin-vben}/src/app/views/channel/pc/config.vue (100%) rename {admin => admin-vben}/src/app/views/channel/weapp/access.vue (100%) rename {admin => admin-vben}/src/app/views/channel/weapp/code.vue (100%) rename {admin => admin-vben}/src/app/views/channel/weapp/components/modify-domain.vue (100%) rename {admin => admin-vben}/src/app/views/channel/weapp/components/modify-privacy-agreement.vue (100%) rename {admin => admin-vben}/src/app/views/channel/weapp/components/setting-list.vue (100%) rename {admin => admin-vben}/src/app/views/channel/weapp/config.vue (100%) rename {admin => admin-vben}/src/app/views/channel/weapp/course.vue (100%) rename {admin => admin-vben}/src/app/views/channel/weapp/template.vue (100%) rename {admin => admin-vben}/src/app/views/channel/wechat/access.vue (100%) rename {admin => admin-vben}/src/app/views/channel/wechat/components/menu-form.vue (100%) rename {admin => admin-vben}/src/app/views/channel/wechat/components/news-card.vue (100%) rename {admin => admin-vben}/src/app/views/channel/wechat/components/reply-form.vue (100%) rename {admin => admin-vben}/src/app/views/channel/wechat/components/select-wechat-media.vue (100%) rename {admin => admin-vben}/src/app/views/channel/wechat/components/upload-media.vue (100%) rename {admin => admin-vben}/src/app/views/channel/wechat/config.vue (100%) rename {admin => admin-vben}/src/app/views/channel/wechat/course.vue (100%) rename {admin => admin-vben}/src/app/views/channel/wechat/keyword_reply_edit.vue (100%) rename {admin => admin-vben}/src/app/views/channel/wechat/menu.vue (100%) rename {admin => admin-vben}/src/app/views/channel/wechat/reply.vue (100%) rename {admin => admin-vben}/src/app/views/channel/wechat/template.vue (100%) rename {admin => admin-vben}/src/app/views/dict/components/dict.vue (100%) rename {admin => admin-vben}/src/app/views/dict/components/edit.vue (100%) rename {admin => admin-vben}/src/app/views/dict/list.vue (100%) rename {admin => admin-vben}/src/app/views/diy/components/add-theme.vue (100%) rename {admin => admin-vben}/src/app/views/diy/components/edit-active-cube.vue (100%) rename {admin => admin-vben}/src/app/views/diy/components/edit-carousel-search.vue (100%) rename {admin => admin-vben}/src/app/views/diy/components/edit-float-btn.vue (100%) rename {admin => admin-vben}/src/app/views/diy/components/edit-graphic-nav.vue (100%) rename {admin => admin-vben}/src/app/views/diy/components/edit-horz-blank.vue (100%) rename {admin => admin-vben}/src/app/views/diy/components/edit-horz-line.vue (100%) rename {admin => admin-vben}/src/app/views/diy/components/edit-hot-area.vue (100%) rename {admin => admin-vben}/src/app/views/diy/components/edit-image-ads.vue (100%) rename {admin => admin-vben}/src/app/views/diy/components/edit-member-info.vue (100%) rename {admin => admin-vben}/src/app/views/diy/components/edit-member-level.vue (100%) rename {admin => admin-vben}/src/app/views/diy/components/edit-notice.vue (100%) rename {admin => admin-vben}/src/app/views/diy/components/edit-page.vue (100%) rename {admin => admin-vben}/src/app/views/diy/components/edit-picture-show.vue (100%) rename {admin => admin-vben}/src/app/views/diy/components/edit-rich-text.vue (100%) rename {admin => admin-vben}/src/app/views/diy/components/edit-rubik-cube.vue (100%) rename {admin => admin-vben}/src/app/views/diy/components/edit-text.vue (100%) rename {admin => admin-vben}/src/app/views/diy/components/edit-theme.vue (100%) rename {admin => admin-vben}/src/app/views/diy/components/theme-list.vue (100%) rename {admin => admin-vben}/src/app/views/diy/edit.vue (100%) rename {admin => admin-vben}/src/app/views/diy/index.vue (100%) rename {admin => admin-vben}/src/app/views/diy/list.vue (100%) rename {admin => admin-vben}/src/app/views/diy/member.vue (100%) rename {admin => admin-vben}/src/app/views/diy/route.vue (100%) rename {admin => admin-vben}/src/app/views/diy/tabbar.vue (100%) rename {admin => admin-vben}/src/app/views/diy/tabbar_edit.vue (100%) rename {admin => admin-vben}/src/app/views/diy/theme_style.vue (100%) rename {admin => admin-vben}/src/app/views/diy_form/components/detail-form-image.vue (100%) rename {admin => admin-vben}/src/app/views/diy_form/components/detail-form-render.vue (100%) rename {admin => admin-vben}/src/app/views/diy_form/components/edit-form-address.vue (100%) rename {admin => admin-vben}/src/app/views/diy_form/components/edit-form-checkbox.vue (100%) rename {admin => admin-vben}/src/app/views/diy_form/components/edit-form-date-scope.vue (100%) rename {admin => admin-vben}/src/app/views/diy_form/components/edit-form-date.vue (100%) rename {admin => admin-vben}/src/app/views/diy_form/components/edit-form-email.vue (100%) rename {admin => admin-vben}/src/app/views/diy_form/components/edit-form-file.vue (100%) rename {admin => admin-vben}/src/app/views/diy_form/components/edit-form-identity.vue (100%) rename {admin => admin-vben}/src/app/views/diy_form/components/edit-form-image.vue (100%) rename {admin => admin-vben}/src/app/views/diy_form/components/edit-form-input.vue (100%) rename {admin => admin-vben}/src/app/views/diy_form/components/edit-form-location.vue (100%) rename {admin => admin-vben}/src/app/views/diy_form/components/edit-form-mobile.vue (100%) rename {admin => admin-vben}/src/app/views/diy_form/components/edit-form-number.vue (100%) rename {admin => admin-vben}/src/app/views/diy_form/components/edit-form-radio.vue (100%) rename {admin => admin-vben}/src/app/views/diy_form/components/edit-form-submit.vue (100%) rename {admin => admin-vben}/src/app/views/diy_form/components/edit-form-table.vue (100%) rename {admin => admin-vben}/src/app/views/diy_form/components/edit-form-textarea.vue (100%) rename {admin => admin-vben}/src/app/views/diy_form/components/edit-form-time-scope.vue (100%) rename {admin => admin-vben}/src/app/views/diy_form/components/edit-form-time.vue (100%) rename {admin => admin-vben}/src/app/views/diy_form/components/edit-form-video.vue (100%) rename {admin => admin-vben}/src/app/views/diy_form/components/edit-form-wechat-name.vue (100%) rename {admin => admin-vben}/src/app/views/diy_form/components/form-select-content.vue (100%) rename {admin => admin-vben}/src/app/views/diy_form/components/form-submit-popup.vue (100%) rename {admin => admin-vben}/src/app/views/diy_form/components/form-write-popup.vue (100%) rename {admin => admin-vben}/src/app/views/diy_form/edit.vue (100%) rename {admin => admin-vben}/src/app/views/diy_form/list.vue (100%) rename {admin => admin-vben}/src/app/views/diy_form/records.vue (100%) rename {admin => admin-vben}/src/app/views/error/404.vue (100%) rename {admin => admin-vben}/src/app/views/finance/account.vue (100%) rename {admin => admin-vben}/src/app/views/finance/cash_out.vue (100%) rename {admin => admin-vben}/src/app/views/finance/components/refund-detail.vue (100%) rename {admin => admin-vben}/src/app/views/finance/offlinepay.vue (100%) rename {admin => admin-vben}/src/app/views/finance/pay_detail.vue (100%) rename {admin => admin-vben}/src/app/views/finance/pay_refund.vue (100%) rename {admin => admin-vben}/src/app/views/finance/refund_detail.vue (100%) rename {admin => admin-vben}/src/app/views/home/edit_personal.vue (100%) rename {admin => admin-vben}/src/app/views/home/index.vue (100%) rename {admin => admin-vben}/src/app/views/home/personal.vue (100%) rename {admin => admin-vben}/src/app/views/index/app_manage.vue (100%) rename {admin => admin-vben}/src/app/views/index/index.vue (100%) rename {admin => admin-vben}/src/app/views/index/preview.vue (100%) rename {admin => admin-vben}/src/app/views/index/store.vue (100%) rename {admin => admin-vben}/src/app/views/index/tools.vue (100%) rename {admin => admin-vben}/src/app/views/index/wxoplatform_callback.vue (100%) rename {admin => admin-vben}/src/app/views/login/index.vue (100%) rename {admin => admin-vben}/src/app/views/marketing/components/sign-continue.vue (100%) rename {admin => admin-vben}/src/app/views/marketing/components/sign-day.vue (100%) rename {admin => admin-vben}/src/app/views/marketing/components/verify-detail.vue (100%) rename {admin => admin-vben}/src/app/views/marketing/sign_config.vue (100%) rename {admin => admin-vben}/src/app/views/marketing/sign_list.vue (100%) rename {admin => admin-vben}/src/app/views/marketing/verifier.vue (100%) rename {admin => admin-vben}/src/app/views/marketing/verify.vue (100%) rename {admin => admin-vben}/src/app/views/marketing/verify_detail.vue (100%) rename {admin => admin-vben}/src/app/views/marketing/verify_index.vue (100%) rename {admin => admin-vben}/src/app/views/member/balance.vue (100%) rename {admin => admin-vben}/src/app/views/member/commission.vue (100%) rename {admin => admin-vben}/src/app/views/member/components/add-member.vue (100%) rename {admin => admin-vben}/src/app/views/member/components/benefits-discount.vue (100%) rename {admin => admin-vben}/src/app/views/member/components/detail-member.vue (100%) rename {admin => admin-vben}/src/app/views/member/components/edit-label.vue (100%) rename {admin => admin-vben}/src/app/views/member/components/edit-member.vue (100%) rename {admin => admin-vben}/src/app/views/member/components/gift-balance.vue (100%) rename {admin => admin-vben}/src/app/views/member/components/gift-point.vue (100%) rename {admin => admin-vben}/src/app/views/member/components/growth-rule-register.vue (100%) rename {admin => admin-vben}/src/app/views/member/components/member-balance-edit.vue (100%) rename {admin => admin-vben}/src/app/views/member/components/member-balance-info.vue (100%) rename {admin => admin-vben}/src/app/views/member/components/member-benefits.vue (100%) rename {admin => admin-vben}/src/app/views/member/components/member-commission-info.vue (100%) rename {admin => admin-vben}/src/app/views/member/components/member-gift.vue (100%) rename {admin => admin-vben}/src/app/views/member/components/member-money-info.vue (100%) rename {admin => admin-vben}/src/app/views/member/components/member-point-edit.vue (100%) rename {admin => admin-vben}/src/app/views/member/components/member-point-info.vue (100%) rename {admin => admin-vben}/src/app/views/member/components/point-rule-register.vue (100%) rename {admin => admin-vben}/src/app/views/member/growth.vue (100%) rename {admin => admin-vben}/src/app/views/member/label.vue (100%) rename {admin => admin-vben}/src/app/views/member/level.vue (100%) rename {admin => admin-vben}/src/app/views/member/level_edit.vue (100%) rename {admin => admin-vben}/src/app/views/member/member.vue (100%) rename {admin => admin-vben}/src/app/views/member/member_detail.vue (100%) rename {admin => admin-vben}/src/app/views/member/point.vue (100%) rename {admin => admin-vben}/src/app/views/poster/components/edit-draw.vue (100%) rename {admin => admin-vben}/src/app/views/poster/components/edit-friendspay-message.vue (100%) rename {admin => admin-vben}/src/app/views/poster/components/edit-friendspay-money.vue (100%) rename {admin => admin-vben}/src/app/views/poster/components/edit-headimg.vue (100%) rename {admin => admin-vben}/src/app/views/poster/components/edit-image.vue (100%) rename {admin => admin-vben}/src/app/views/poster/components/edit-nickname.vue (100%) rename {admin => admin-vben}/src/app/views/poster/components/edit-page.vue (100%) rename {admin => admin-vben}/src/app/views/poster/components/edit-qrcode.vue (100%) rename {admin => admin-vben}/src/app/views/poster/components/edit-text.vue (100%) rename {admin => admin-vben}/src/app/views/poster/components/preview-draw.vue (100%) rename {admin => admin-vben}/src/app/views/poster/components/preview-friendspay-message.vue (100%) rename {admin => admin-vben}/src/app/views/poster/components/preview-friendspay-money.vue (100%) rename {admin => admin-vben}/src/app/views/poster/components/preview-headimg.vue (100%) rename {admin => admin-vben}/src/app/views/poster/components/preview-image.vue (100%) rename {admin => admin-vben}/src/app/views/poster/components/preview-nickname.vue (100%) rename {admin => admin-vben}/src/app/views/poster/components/preview-qrcode.vue (100%) rename {admin => admin-vben}/src/app/views/poster/components/preview-text.vue (100%) rename {admin => admin-vben}/src/app/views/poster/edit.vue (100%) rename {admin => admin-vben}/src/app/views/poster/list.vue (100%) rename {admin => admin-vben}/src/app/views/printer/edit.vue (100%) rename {admin => admin-vben}/src/app/views/printer/list.vue (100%) rename {admin => admin-vben}/src/app/views/printer/template_edit.vue (100%) rename {admin => admin-vben}/src/app/views/printer/template_list.vue (100%) rename {admin => admin-vben}/src/app/views/setting/adminlogin.vue (100%) rename {admin => admin-vben}/src/app/views/setting/agreement.vue (100%) rename {admin => admin-vben}/src/app/views/setting/agreement_edit.vue (100%) rename {admin => admin-vben}/src/app/views/setting/cash_out.vue (100%) rename {admin => admin-vben}/src/app/views/setting/components/cron-info.vue (100%) rename {admin => admin-vben}/src/app/views/setting/components/notice-records-info.vue (100%) rename {admin => admin-vben}/src/app/views/setting/components/notice-sms.vue (100%) rename {admin => admin-vben}/src/app/views/setting/components/notice-weapp.vue (100%) rename {admin => admin-vben}/src/app/views/setting/components/notice-wechat.vue (100%) rename {admin => admin-vben}/src/app/views/setting/components/pay-alipay.vue (100%) rename {admin => admin-vben}/src/app/views/setting/components/pay-friendspay.vue (100%) rename {admin => admin-vben}/src/app/views/setting/components/pay-offlinepay.vue (100%) rename {admin => admin-vben}/src/app/views/setting/components/pay-wechatpay.vue (100%) rename {admin => admin-vben}/src/app/views/setting/components/sms-ali.vue (100%) rename {admin => admin-vben}/src/app/views/setting/components/sms-niu.vue (100%) rename {admin => admin-vben}/src/app/views/setting/components/sms-records-info.vue (100%) rename {admin => admin-vben}/src/app/views/setting/components/sms-tencent.vue (100%) rename {admin => admin-vben}/src/app/views/setting/components/sms_niu_login.vue (100%) rename {admin => admin-vben}/src/app/views/setting/components/sms_recharge.vue (100%) rename {admin => admin-vben}/src/app/views/setting/components/sms_recharge_record.vue (100%) rename {admin => admin-vben}/src/app/views/setting/components/sms_send.vue (100%) rename {admin => admin-vben}/src/app/views/setting/components/sms_signature.vue (100%) rename {admin => admin-vben}/src/app/views/setting/components/sms_template.vue (100%) rename {admin => admin-vben}/src/app/views/setting/components/storage-ali.vue (100%) rename {admin => admin-vben}/src/app/views/setting/components/storage-local.vue (100%) rename {admin => admin-vben}/src/app/views/setting/components/storage-qiniu.vue (100%) rename {admin => admin-vben}/src/app/views/setting/components/storage-tencent.vue (100%) rename {admin => admin-vben}/src/app/views/setting/copyright.vue (100%) rename {admin => admin-vben}/src/app/views/setting/developer_token.vue (100%) rename {admin => admin-vben}/src/app/views/setting/export.vue (100%) rename {admin => admin-vben}/src/app/views/setting/growth_rule.vue (100%) rename {admin => admin-vben}/src/app/views/setting/layout.vue (100%) rename {admin => admin-vben}/src/app/views/setting/login.vue (100%) rename {admin => admin-vben}/src/app/views/setting/map.vue (100%) rename {admin => admin-vben}/src/app/views/setting/member.vue (100%) rename {admin => admin-vben}/src/app/views/setting/notice.vue (100%) rename {admin => admin-vben}/src/app/views/setting/notice_records.vue (100%) rename {admin => admin-vben}/src/app/views/setting/oplatform.vue (100%) rename {admin => admin-vben}/src/app/views/setting/pay.vue (100%) rename {admin => admin-vben}/src/app/views/setting/point_rule.vue (100%) rename {admin => admin-vben}/src/app/views/setting/sms.vue (100%) rename {admin => admin-vben}/src/app/views/setting/sms_niu.vue (100%) rename {admin => admin-vben}/src/app/views/setting/sms_niu_pay_result.vue (100%) rename {admin => admin-vben}/src/app/views/setting/sms_records.vue (100%) rename {admin => admin-vben}/src/app/views/setting/storage.vue (100%) rename {admin => admin-vben}/src/app/views/setting/system.vue (100%) rename {admin => admin-vben}/src/app/views/setting/transfer.vue (100%) rename {admin => admin-vben}/src/app/views/setting/transfer_scene.vue (100%) rename {admin => admin-vben}/src/app/views/setting/weapp.vue (100%) rename {admin => admin-vben}/src/app/views/site/components/create-site-limit.vue (100%) rename {admin => admin-vben}/src/app/views/site/components/edit-site.vue (100%) rename {admin => admin-vben}/src/app/views/site/components/user-edit.vue (100%) rename {admin => admin-vben}/src/app/views/site/components/user-info.vue (100%) rename {admin => admin-vben}/src/app/views/site/group.vue (100%) rename {admin => admin-vben}/src/app/views/site/group_edit.vue (100%) rename {admin => admin-vben}/src/app/views/site/info.vue (100%) rename {admin => admin-vben}/src/app/views/site/list.vue (100%) rename {admin => admin-vben}/src/app/views/site/manage.vue (100%) rename {admin => admin-vben}/src/app/views/site/user.vue (100%) rename {admin => admin-vben}/src/app/views/site/user_info.vue (100%) rename {admin => admin-vben}/src/app/views/tools/addon/edit.vue (100%) rename {admin => admin-vben}/src/app/views/tools/addon/index.vue (100%) rename {admin => admin-vben}/src/app/views/tools/addon/list.vue (100%) rename {admin => admin-vben}/src/app/views/tools/attachment.vue (100%) rename {admin => admin-vben}/src/app/views/tools/backup_records.vue (100%) rename {admin => admin-vben}/src/app/views/tools/cloud_compile.vue (100%) rename {admin => admin-vben}/src/app/views/tools/code/components/add-table.vue (100%) rename {admin => admin-vben}/src/app/views/tools/code/components/edit-associated.vue (100%) rename {admin => admin-vben}/src/app/views/tools/code/components/edit-verify.vue (100%) rename {admin => admin-vben}/src/app/views/tools/code/components/edit-view-type.vue (100%) rename {admin => admin-vben}/src/app/views/tools/code/edit.vue (100%) rename {admin => admin-vben}/src/app/views/tools/code/index.vue (100%) rename {admin => admin-vben}/src/app/views/tools/code/list.vue (100%) rename {admin => admin-vben}/src/app/views/tools/detection.vue (100%) rename {admin => admin-vben}/src/app/views/tools/schedule.vue (100%) rename {admin => admin-vben}/src/app/views/tools/schedule_log.vue (100%) rename {admin => admin-vben}/src/app/views/tools/updatecache.vue (100%) rename {admin => admin-vben}/src/app/views/tools/upgrade_records.vue (100%) rename {admin => admin-vben}/src/app/views/wxoplatform/setting.vue (100%) rename {admin => admin-vben}/src/app/views/wxoplatform/weapp_version.vue (100%) rename {admin => admin-vben}/src/components/diy-link/index.vue (100%) rename {admin => admin-vben}/src/components/diy-page/index.vue (100%) rename {admin => admin-vben}/src/components/editor/index.vue (100%) rename {admin => admin-vben}/src/components/export-sure/index.vue (100%) rename {admin => admin-vben}/src/components/heat-map/index.vue (100%) rename {admin => admin-vben}/src/components/icon/index.vue (100%) rename {admin => admin-vben}/src/components/markdown/index.vue (100%) rename {admin => admin-vben}/src/components/popover-input/index.vue (100%) rename {admin => admin-vben}/src/components/range-input/index.vue (100%) rename {admin => admin-vben}/src/components/select-area/index.vue (100%) rename {admin => admin-vben}/src/components/select-icon/index.vue (100%) rename {admin => admin-vben}/src/components/spread-popup/index.vue (100%) rename {admin => admin-vben}/src/components/upload-attachment/attachment.vue (100%) rename {admin => admin-vben}/src/components/upload-attachment/index.vue (100%) rename {admin => admin-vben}/src/components/upload-audio/index.vue (100%) rename {admin => admin-vben}/src/components/upload-file/index.vue (100%) rename {admin => admin-vben}/src/components/upload-image/index.vue (100%) rename {admin => admin-vben}/src/components/upload-video/index.vue (100%) rename {admin => admin-vben}/src/components/verifition/Verify.vue (100%) rename {admin => admin-vben}/src/components/verifition/Verify/VerifyPoints.vue (100%) rename {admin => admin-vben}/src/components/verifition/Verify/VerifySlide.vue (100%) rename {admin => admin-vben}/src/components/verifition/api/index.js (100%) rename {admin => admin-vben}/src/components/verifition/utils/ase.js (100%) rename {admin => admin-vben}/src/components/verifition/utils/axios.js (100%) rename {admin => admin-vben}/src/components/verifition/utils/util.js (100%) rename {admin => admin-vben}/src/components/video-player/index.vue (100%) rename {admin => admin-vben}/src/lang/en/common.json (100%) rename {admin => admin-vben}/src/lang/i18n.ts (100%) rename {admin => admin-vben}/src/lang/index.ts (100%) rename {admin => admin-vben}/src/lang/language.ts (100%) rename {admin => admin-vben}/src/lang/zh-cn/common.json (100%) rename {admin => admin-vben}/src/layout/admin/components/aside/index.vue (100%) rename {admin => admin-vben}/src/layout/admin/components/aside/menu-item.vue (100%) rename {admin => admin-vben}/src/layout/admin/components/aside/side.vue (100%) rename {admin => admin-vben}/src/layout/admin/components/header/index.vue (100%) rename {admin => admin-vben}/src/layout/admin/components/header/layout-setting.vue (100%) rename {admin => admin-vben}/src/layout/admin/components/header/message.vue (100%) rename {admin => admin-vben}/src/layout/admin/components/header/switch-lang.vue (100%) rename {admin => admin-vben}/src/layout/admin/components/header/user-info.vue (100%) rename {admin => admin-vben}/src/layout/admin/components/tabs.vue (100%) rename {admin => admin-vben}/src/layout/admin/index.vue (100%) rename {admin => admin-vben}/src/layout/admin_simplicity/components/aside/index.vue (100%) rename {admin => admin-vben}/src/layout/admin_simplicity/components/aside/menu-item.vue (100%) rename {admin => admin-vben}/src/layout/admin_simplicity/components/aside/side.vue (100%) rename {admin => admin-vben}/src/layout/admin_simplicity/components/header/index.vue (100%) rename {admin => admin-vben}/src/layout/admin_simplicity/components/header/layout-setting.vue (100%) rename {admin => admin-vben}/src/layout/admin_simplicity/components/header/message.vue (100%) rename {admin => admin-vben}/src/layout/admin_simplicity/components/header/switch-lang.vue (100%) rename {admin => admin-vben}/src/layout/admin_simplicity/components/header/user-info.vue (100%) rename {admin => admin-vben}/src/layout/admin_simplicity/components/tabs.vue (100%) rename {admin => admin-vben}/src/layout/admin_simplicity/index.vue (100%) rename {admin => admin-vben}/src/layout/bussiness/components/aside/index.vue (100%) rename {admin => admin-vben}/src/layout/bussiness/components/aside/menu-item.vue (100%) rename {admin => admin-vben}/src/layout/bussiness/components/aside/side.vue (100%) rename {admin => admin-vben}/src/layout/bussiness/components/header/index.vue (100%) rename {admin => admin-vben}/src/layout/bussiness/components/header/layout-setting.vue (100%) rename {admin => admin-vben}/src/layout/bussiness/components/header/switch-lang.vue (100%) rename {admin => admin-vben}/src/layout/bussiness/components/header/user-info.vue (100%) rename {admin => admin-vben}/src/layout/bussiness/components/tabs.vue (100%) rename {admin => admin-vben}/src/layout/bussiness/index.vue (100%) rename {admin => admin-vben}/src/layout/bussiness/layout.json (100%) rename {admin => admin-vben}/src/layout/darkside/components/aside/index.vue (100%) rename {admin => admin-vben}/src/layout/darkside/components/aside/menu-item.vue (100%) rename {admin => admin-vben}/src/layout/darkside/components/aside/side.vue (100%) rename {admin => admin-vben}/src/layout/darkside/components/header/index.vue (100%) rename {admin => admin-vben}/src/layout/darkside/components/header/layout-setting.vue (100%) rename {admin => admin-vben}/src/layout/darkside/components/header/switch-lang.vue (100%) rename {admin => admin-vben}/src/layout/darkside/components/header/user-info.vue (100%) rename {admin => admin-vben}/src/layout/darkside/components/tabs.vue (100%) rename {admin => admin-vben}/src/layout/darkside/index.vue (100%) rename {admin => admin-vben}/src/layout/darkside/layout.json (100%) rename {admin => admin-vben}/src/layout/decorate/index.vue (100%) rename {admin => admin-vben}/src/layout/default/components/aside/index.vue (100%) rename {admin => admin-vben}/src/layout/default/components/aside/menu-item.vue (100%) rename {admin => admin-vben}/src/layout/default/components/aside/side.vue (100%) rename {admin => admin-vben}/src/layout/default/components/header/index.vue (100%) rename {admin => admin-vben}/src/layout/default/components/header/layout-setting.vue (100%) rename {admin => admin-vben}/src/layout/default/components/header/switch-lang.vue (100%) rename {admin => admin-vben}/src/layout/default/components/header/user-info.vue (100%) rename {admin => admin-vben}/src/layout/default/components/tabs.vue (100%) rename {admin => admin-vben}/src/layout/default/index.vue (100%) rename {admin => admin-vben}/src/layout/default/layout.json (100%) rename {admin => admin-vben}/src/layout/index.vue (100%) rename {admin => admin-vben}/src/layout/profession/components/aside/index.vue (100%) rename {admin => admin-vben}/src/layout/profession/components/aside/menu-item.vue (100%) rename {admin => admin-vben}/src/layout/profession/components/aside/side.vue (100%) rename {admin => admin-vben}/src/layout/profession/components/header/index.vue (100%) rename {admin => admin-vben}/src/layout/profession/components/header/layout-setting.vue (100%) rename {admin => admin-vben}/src/layout/profession/components/header/switch-lang.vue (100%) rename {admin => admin-vben}/src/layout/profession/components/header/user-info.vue (100%) rename {admin => admin-vben}/src/layout/profession/components/tabs.vue (100%) rename {admin => admin-vben}/src/layout/profession/index.vue (100%) rename {admin => admin-vben}/src/layout/profession/layout.json (100%) rename {admin => admin-vben}/src/main.ts (100%) rename {admin => admin-vben}/src/router/index.ts (100%) rename {admin => admin-vben}/src/router/routers.ts (100%) rename {admin => admin-vben}/src/stores/index.ts (100%) rename {admin => admin-vben}/src/stores/modules/app.ts (100%) rename {admin => admin-vben}/src/stores/modules/diy.ts (100%) rename {admin => admin-vben}/src/stores/modules/poster.ts (100%) rename {admin => admin-vben}/src/stores/modules/style.ts (100%) rename {admin => admin-vben}/src/stores/modules/system.ts (100%) rename {admin => admin-vben}/src/stores/modules/tabbar.ts (100%) rename {admin => admin-vben}/src/stores/modules/user.ts (100%) rename {admin => admin-vben}/src/styles/common.scss (100%) rename {admin => admin-vben}/src/styles/element-plus.scss (100%) rename {admin => admin-vben}/src/styles/font/OPLUSSANS3-REGULAR.TTF (100%) rename {admin => admin-vben}/src/styles/font/PingFang-Medium.ttf (100%) rename {admin => admin-vben}/src/styles/icon/addon-iconfont.css (100%) rename {admin => admin-vben}/src/styles/icon/iconfont.css (100%) rename {admin => admin-vben}/src/styles/icon/official-iconfont.css (100%) rename {admin => admin-vben}/src/styles/icon/official-iconfont.json (100%) rename {admin => admin-vben}/src/styles/index.scss (100%) rename {admin => admin-vben}/src/styles/tailwind.css (100%) rename {admin => admin-vben}/src/types/global.d.ts (100%) rename {admin => admin-vben}/src/utils/common.ts (100%) rename {admin => admin-vben}/src/utils/directives.ts (100%) rename {admin => admin-vben}/src/utils/lodop.ts (100%) rename {admin => admin-vben}/src/utils/qqmap.ts (100%) rename {admin => admin-vben}/src/utils/request.ts (100%) rename {admin => admin-vben}/src/utils/storage.ts (100%) rename {admin => admin-vben}/src/utils/test.ts (100%) rename {admin => admin-vben}/src/vite-env.d.ts (100%) rename {admin => admin-vben}/stylelint.config.mjs (100%) rename {admin => admin-vben}/tailwind.config.cjs (100%) rename {admin => admin-vben}/tea.yaml (100%) rename {admin => admin-vben}/tsconfig.json (100%) rename {admin => admin-vben}/tsconfig.node.json (100%) rename {admin => admin-vben}/turbo.json (100%) rename {admin => admin-vben}/vben-admin.code-workspace (100%) rename {admin => admin-vben}/vite.config.ts (100%) rename {admin => admin-vben}/vitest.config.ts (100%) rename {admin => admin-vben}/vitest.workspace.ts (100%) delete mode 100644 database/schema.sql delete mode 100644 docker/Dockerfile delete mode 100755 docker/auto-test.sh delete mode 100644 docker/docker-compose.dev.yml delete mode 100644 docker/docker-compose.yml delete mode 100755 docker/docker-test-migration.sh delete mode 100644 docker/start-all.sh delete mode 100755 docker/start-dev.sh delete mode 100755 docker/start-prod.sh create mode 100644 docs/REPOSITORY-STRATEGY.md delete mode 100644 eslint.config.mjs delete mode 100644 nest-cli.json delete mode 100644 package.json create mode 100755 push_dev.sh mode change 100644 => 100755 push_wwjcloud_nest.sh delete mode 100644 src/app.controller.spec.ts delete mode 100644 src/app.controller.ts delete mode 100644 src/app.module.ts delete mode 100644 src/app.service.ts delete mode 100644 src/common/base/base.entity.ts delete mode 100644 src/common/base/base.module.ts delete mode 100644 src/common/base/base.repository.ts delete mode 100644 src/common/base/base.service.ts delete mode 100644 src/common/cache/cache.interface.ts delete mode 100644 src/common/cache/cache.module.ts delete mode 100644 src/common/cache/cache.service.ts delete mode 100644 src/common/cache/decorators/cache-evict.decorator.ts delete mode 100644 src/common/cache/decorators/cacheable.decorator.ts delete mode 100644 src/common/common.module.ts delete mode 100644 src/common/context/context.module.ts delete mode 100644 src/common/context/context.service.ts delete mode 100644 src/common/database/backup.service.ts delete mode 100644 src/common/database/database.module.ts delete mode 100644 src/common/event/event.module.ts delete mode 100644 src/common/exception/base.exception.ts delete mode 100644 src/common/exception/business.exception.ts delete mode 100644 src/common/exception/exception.filter.ts delete mode 100644 src/common/exception/exception.interface.ts delete mode 100644 src/common/exception/exception.module.ts delete mode 100644 src/common/exception/exception.service.ts delete mode 100644 src/common/filters/validation-exception.filter.ts delete mode 100644 src/common/init/init.module.ts delete mode 100644 src/common/init/init.service.ts delete mode 100644 src/common/interceptors/interceptors.module.ts delete mode 100644 src/common/interceptors/method-call.interceptor.ts delete mode 100644 src/common/interceptors/request-parameter.interceptor.ts delete mode 100644 src/common/language/language.example.ts delete mode 100644 src/common/language/language.interface.ts delete mode 100644 src/common/language/language.module.ts delete mode 100644 src/common/language/language.service.ts delete mode 100644 src/common/libraries/dayjs/dayjs.module.ts delete mode 100644 src/common/libraries/dayjs/dayjs.service.ts delete mode 100644 src/common/libraries/index.ts delete mode 100644 src/common/libraries/libraries.module.ts delete mode 100644 src/common/libraries/lodash/lodash.module.ts delete mode 100644 src/common/libraries/lodash/lodash.service.ts delete mode 100644 src/common/libraries/prometheus/prometheus.module.ts delete mode 100644 src/common/libraries/prometheus/prometheus.service.ts delete mode 100644 src/common/libraries/redis/redis.module.ts delete mode 100644 src/common/libraries/redis/redis.service.ts delete mode 100644 src/common/libraries/sentry/sentry.module.ts delete mode 100644 src/common/libraries/sentry/sentry.service.ts delete mode 100644 src/common/libraries/sharp/sharp.module.ts delete mode 100644 src/common/libraries/sharp/sharp.service.ts delete mode 100644 src/common/libraries/uuid/uuid.module.ts delete mode 100644 src/common/libraries/uuid/uuid.service.ts delete mode 100644 src/common/libraries/validator/validator.module.ts delete mode 100644 src/common/libraries/validator/validator.service.ts delete mode 100644 src/common/libraries/winston/winston.module.ts delete mode 100644 src/common/libraries/winston/winston.service.ts delete mode 100644 src/common/loader/loader.module.ts delete mode 100644 src/common/loader/loader.utils.ts delete mode 100644 src/common/logging/logging.interface.ts delete mode 100644 src/common/logging/logging.module.ts delete mode 100644 src/common/logging/logging.service.ts delete mode 100644 src/common/monitoring/monitoring.interface.ts delete mode 100644 src/common/monitoring/monitoring.module.ts delete mode 100644 src/common/monitoring/monitoring.service.ts delete mode 100644 src/common/pipes/parse-diy-form.pipe.ts delete mode 100644 src/common/pipes/pipes.module.ts delete mode 100644 src/common/plugins/captcha/captcha.module.ts delete mode 100644 src/common/plugins/captcha/captcha.service.ts delete mode 100644 src/common/plugins/index.ts delete mode 100644 src/common/plugins/plugins.module.ts delete mode 100644 src/common/plugins/qrcode/qrcode.module.ts delete mode 100644 src/common/plugins/qrcode/qrcode.service.ts delete mode 100644 src/common/plugins/wechat/wechat.module.ts delete mode 100644 src/common/plugins/wechat/wechat.service.ts delete mode 100644 src/common/queue/queue.module.ts delete mode 100644 src/common/response/page-result.class.ts delete mode 100644 src/common/response/response.decorator.ts delete mode 100644 src/common/response/response.interceptor.ts delete mode 100644 src/common/response/response.module.ts delete mode 100644 src/common/response/result.class.ts delete mode 100644 src/common/response/result.interface.ts delete mode 100644 src/common/scheduler/scheduler.module.ts delete mode 100644 src/common/security/decorators/public.decorator.ts delete mode 100644 src/common/security/decorators/roles.decorator.ts delete mode 100644 src/common/security/guards/jwt-auth.guard.ts delete mode 100644 src/common/security/guards/roles.guard.ts delete mode 100644 src/common/security/security.module.ts delete mode 100644 src/common/security/strategies/jwt.strategy.ts delete mode 100644 src/common/security/strategies/local.strategy.ts delete mode 100644 src/common/swagger/swagger.module.ts delete mode 100644 src/common/swagger/swagger.service.ts delete mode 100644 src/common/system/system.module.ts delete mode 100644 src/common/system/system.utils.ts delete mode 100644 src/common/tracing/tracing.module.ts delete mode 100644 src/common/tracing/tracing.service.ts delete mode 100644 src/common/utils/clone.util.ts delete mode 100644 src/common/utils/crypto.util.ts delete mode 100644 src/common/utils/index.ts delete mode 100644 src/common/utils/json.util.ts delete mode 100644 src/common/utils/object.util.ts delete mode 100644 src/common/utils/reflect.util.ts delete mode 100644 src/common/utils/request.util.ts delete mode 100644 src/common/utils/system.util.ts delete mode 100644 src/common/utils/utils.module.ts delete mode 100644 src/common/validation/base.dto.ts delete mode 100644 src/common/validation/custom-validators.ts delete mode 100644 src/config/app.config.ts delete mode 100644 src/config/app.schema.ts delete mode 100644 src/config/config-center.controller.ts delete mode 100644 src/config/config-center.service.ts delete mode 100644 src/config/config.module.ts delete mode 100644 src/config/dynamic-bean.service.ts delete mode 100644 src/config/dynamic-config.entity.ts delete mode 100644 src/config/dynamic-config.service.ts delete mode 100644 src/core/addon/addon.module.ts delete mode 100644 src/core/addon/controllers/adminapi/addon-develop.controller.ts delete mode 100644 src/core/addon/controllers/adminapi/app.controller.ts delete mode 100644 src/core/addon/controllers/adminapi/backup.controller.ts delete mode 100644 src/core/addon/controllers/adminapi/upgrade.controller.ts delete mode 100644 src/core/addon/controllers/api/addon.controller.ts delete mode 100644 src/core/addon/dto/AddonDevelopDto.ts delete mode 100644 src/core/addon/entity/addon-log.entity.ts delete mode 100644 src/core/addon/entity/addon.entity.ts delete mode 100644 src/core/addon/enums/addon-dict.enum.ts delete mode 100644 src/core/addon/services/admin/addon-develop.service.ts delete mode 100644 src/core/addon/services/admin/addon.service.ts delete mode 100644 src/core/addon/services/api/addon.service.ts delete mode 100644 src/core/addon/services/core/core-addon-base.service.ts delete mode 100644 src/core/addon/services/core/core-addon-cloud.service.ts delete mode 100644 src/core/addon/services/core/core-addon-develop-build.service.ts delete mode 100644 src/core/addon/services/core/core-addon-develop-download.service.ts delete mode 100644 src/core/addon/services/core/core-addon-develop.service.ts delete mode 100644 src/core/addon/services/core/core-addon-download.service.ts delete mode 100644 src/core/addon/services/core/core-addon-install.service.ts delete mode 100644 src/core/addon/services/core/core-addon-log.service.ts delete mode 100644 src/core/addon/services/core/core-addon.service.ts delete mode 100644 src/core/addon/services/core/core-depend.service.ts delete mode 100644 src/core/addon/services/core/wap-trait.service.ts delete mode 100644 src/core/agreement/agreement.module.ts delete mode 100644 src/core/agreement/controllers/api/agreement.controller.ts delete mode 100644 src/core/agreement/services/api/agreement.service.ts delete mode 100644 src/core/aliapp/aliapp.module.ts delete mode 100644 src/core/aliapp/controllers/adminapi/config.controller.ts delete mode 100644 src/core/aliapp/services/admin/aliapp-config.service.ts delete mode 100644 src/core/aliapp/services/core/core-aliapp-config.service.ts delete mode 100644 src/core/applet/applet.module.ts delete mode 100644 src/core/applet/controllers/adminapi/site-version.controller.ts delete mode 100644 src/core/applet/controllers/adminapi/version-download.controller.ts delete mode 100644 src/core/applet/controllers/adminapi/version.controller.ts delete mode 100644 src/core/applet/entity/applet-site-version.entity.ts delete mode 100644 src/core/applet/entity/applet-version.entity.ts delete mode 100644 src/core/applet/enums/appletl-dict.enum.ts delete mode 100644 src/core/applet/listeners/WeappListenerListener.ts delete mode 100644 src/core/applet/services/admin/applet-download.service.ts delete mode 100644 src/core/applet/services/admin/applet-version-site.service.ts delete mode 100644 src/core/applet/services/admin/applet-version.service.ts delete mode 100644 src/core/applet/services/core/core-applet-download.service.ts delete mode 100644 src/core/applet/services/core/core-applet-site-version.service.ts delete mode 100644 src/core/applet/services/core/core-applet-version.service.ts delete mode 100644 src/core/auth/auth.module.ts delete mode 100644 src/core/auth/controllers/adminapi/auth.controller.ts delete mode 100644 src/core/auth/services/admin/auth-site.service.ts delete mode 100644 src/core/auth/services/admin/auth.service.ts delete mode 100644 src/core/auth/services/admin/config.service.ts delete mode 100644 src/core/auth/services/admin/login.service.ts delete mode 100644 src/core/captcha/captcha.module.ts delete mode 100644 src/core/captcha/services/admin/captcha.service.ts delete mode 100644 src/core/captcha/services/api/captcha.service.ts delete mode 100644 src/core/captcha/services/core/core-captcha-img.service.ts delete mode 100644 src/core/captcha/services/core/core-captcha.service.ts delete mode 100644 src/core/cash_out/enums/cash-out-type-dict.enum.ts delete mode 100644 src/core/channel/channel.module.ts delete mode 100644 src/core/channel/controllers/adminapi/app.controller.ts delete mode 100644 src/core/channel/controllers/adminapi/h5.controller.ts delete mode 100644 src/core/channel/controllers/adminapi/pc.controller.ts delete mode 100644 src/core/channel/dto/AliappDto.ts delete mode 100644 src/core/channel/dto/WeappDto.ts delete mode 100644 src/core/channel/dto/WechatDto.ts delete mode 100644 src/core/channel/enums/app-dict.enum.ts delete mode 100644 src/core/channel/enums/cert-dict.enum.ts delete mode 100644 src/core/channel/enums/reply-dict.enum.ts delete mode 100644 src/core/channel/enums/wechat-dict.enum.ts delete mode 100644 src/core/channel/services/admin/app.service.ts delete mode 100644 src/core/channel/services/admin/h5.service.ts delete mode 100644 src/core/channel/services/admin/pc.service.ts delete mode 100644 src/core/channel/services/core/core-app-cloud.service.ts delete mode 100644 src/core/channel/services/core/core-app.service.ts delete mode 100644 src/core/channel/services/core/core-h5.service.ts delete mode 100644 src/core/channel/services/core/core-pc.service.ts delete mode 100644 src/core/common/enums/channel-dict.enum.ts delete mode 100644 src/core/common/enums/common-active-dict.enum.ts delete mode 100644 src/core/common/enums/common-dict.enum.ts delete mode 100644 src/core/core.module.ts delete mode 100644 src/core/dict/controllers/adminapi/dict.controller.ts delete mode 100644 src/core/dict/dict.module.ts delete mode 100644 src/core/dict/entity/dict.entity.ts delete mode 100644 src/core/dict/enums/dict-service.enum.ts delete mode 100644 src/core/dict/enums/dict.enum.ts delete mode 100644 src/core/dict/services/admin/dict.service.ts delete mode 100644 src/core/diy/controllers/adminapi/config.controller.ts delete mode 100644 src/core/diy/controllers/adminapi/diy-route.controller.ts delete mode 100644 src/core/diy/controllers/api/diy-form.controller.ts delete mode 100644 src/core/diy/controllers/api/diy.controller.ts delete mode 100644 src/core/diy/diy.module.ts delete mode 100644 src/core/diy/dto/DiyDto.ts delete mode 100644 src/core/diy/dto/DiyFormDto.ts delete mode 100644 src/core/diy/dto/DiyRouteDto.ts delete mode 100644 src/core/diy/dto/DiyThemeDto.ts delete mode 100644 src/core/diy/entity/diy-route.entity.ts delete mode 100644 src/core/diy/entity/diy-theme.entity.ts delete mode 100644 src/core/diy/entity/diy.entity.ts delete mode 100644 src/core/diy/enums/component-dict.enum.ts delete mode 100644 src/core/diy/enums/link-dict.enum.ts delete mode 100644 src/core/diy/enums/pages-dict.enum.ts delete mode 100644 src/core/diy/enums/template-dict.enum.ts delete mode 100644 src/core/diy/listeners/ThemeColorListenerListener.ts delete mode 100644 src/core/diy/services/admin/diy-config.service.ts delete mode 100644 src/core/diy/services/admin/diy-route.service.ts delete mode 100644 src/core/diy/services/admin/diy.service.ts delete mode 100644 src/core/diy/services/api/diy-config.service.ts delete mode 100644 src/core/diy/services/api/diy-route.service.ts delete mode 100644 src/core/diy/services/api/diy.service.ts delete mode 100644 src/core/diy/services/core/core-diy-config.service.ts delete mode 100644 src/core/diy/services/core/core-diy.service.ts delete mode 100644 src/core/diy_form/entity/diy-form-fields.entity.ts delete mode 100644 src/core/diy_form/entity/diy-form-records-fields.entity.ts delete mode 100644 src/core/diy_form/entity/diy-form-records.entity.ts delete mode 100644 src/core/diy_form/entity/diy-form-submit-config.entity.ts delete mode 100644 src/core/diy_form/entity/diy-form-write-config.entity.ts delete mode 100644 src/core/diy_form/entity/diy-form.entity.ts delete mode 100644 src/core/diy_form/enums/component-dict.enum.ts delete mode 100644 src/core/diy_form/enums/config-dict.enum.ts delete mode 100644 src/core/diy_form/enums/template-dict.enum.ts delete mode 100644 src/core/diy_form/enums/type-dict.enum.ts delete mode 100644 src/core/diy_form_export/listeners/DiyFormRecordsExportDataListenerListener.ts delete mode 100644 src/core/diy_form_export/listeners/DiyFormRecordsExportTypeListenerListener.ts delete mode 100644 src/core/diy_form_export/listeners/DiyFormRecordsFieldsExportDataListenerListener.ts delete mode 100644 src/core/diy_form_export/listeners/DiyFormRecordsFieldsExportTypeListenerListener.ts delete mode 100644 src/core/diy_form_export/listeners/DiyFormRecordsMemberExportDataListenerListener.ts delete mode 100644 src/core/diy_form_export/listeners/DiyFormRecordsMemberExportTypeListenerListener.ts delete mode 100644 src/core/generator/controllers/adminapi/generator.controller.ts delete mode 100644 src/core/generator/dto/GeneratorDto.ts delete mode 100644 src/core/generator/entity/generate-column.entity.ts delete mode 100644 src/core/generator/entity/generate-table.entity.ts delete mode 100644 src/core/generator/generator.module.ts delete mode 100644 src/core/generator/services/admin/generate.service.ts delete mode 100644 src/core/home/controllers/adminapi/site.controller.ts delete mode 100644 src/core/home/home.module.ts delete mode 100644 src/core/home/services/admin/auth-site.service.ts delete mode 100644 src/core/index/controllers/adminapi/promotion-adv.controller.ts delete mode 100644 src/core/index/index.module.ts delete mode 100644 src/core/index/services/core/core-promotion-adv.service.ts delete mode 100644 src/core/job/listeners/QueueFailedLoggerListenerListener.ts delete mode 100644 src/core/lang/enums/en-dict.enum.ts delete mode 100644 src/core/lang/enums/zh-cn-dict.enum.ts delete mode 100644 src/core/language/decorators/validate-message.decorator.ts delete mode 100644 src/core/login/controllers/adminapi/captcha.controller.ts delete mode 100644 src/core/login/controllers/api/config.controller.ts delete mode 100644 src/core/login/controllers/api/login.controller.ts delete mode 100644 src/core/login/controllers/api/register.controller.ts delete mode 100644 src/core/login/login.module.ts delete mode 100644 src/core/login/services/api/auth.service.ts delete mode 100644 src/core/login/services/api/config.service.ts delete mode 100644 src/core/login/services/api/login.service.ts delete mode 100644 src/core/login/services/api/register.service.ts delete mode 100644 src/core/member/controllers/adminapi/cash-out.controller.ts delete mode 100644 src/core/member/controllers/adminapi/config.controller.ts delete mode 100644 src/core/member/controllers/adminapi/member-label.controller.ts delete mode 100644 src/core/member/controllers/adminapi/member-level.controller.ts delete mode 100644 src/core/member/controllers/api/account.controller.ts delete mode 100644 src/core/member/controllers/api/address.controller.ts delete mode 100644 src/core/member/controllers/api/cash-out-account.controller.ts delete mode 100644 src/core/member/controllers/api/level.controller.ts delete mode 100644 src/core/member/controllers/api/member-cash-out.controller.ts delete mode 100644 src/core/member/controllers/api/member-sign.controller.ts delete mode 100644 src/core/member/controllers/api/member.controller.ts delete mode 100644 src/core/member/dto/AddressDto.ts delete mode 100644 src/core/member/dto/CashOutAccountDto.ts delete mode 100644 src/core/member/dto/CashOutConfigDto.ts delete mode 100644 src/core/member/dto/CashOutDto.ts delete mode 100644 src/core/member/dto/LoginConfigDto.ts delete mode 100644 src/core/member/dto/MemberConfigDto.ts delete mode 100644 src/core/member/dto/MemberDto.ts delete mode 100644 src/core/member/dto/MemberLabelDto.ts delete mode 100644 src/core/member/dto/MemberLevelDto.ts delete mode 100644 src/core/member/entity/member-account-log.entity.ts delete mode 100644 src/core/member/entity/member-address.entity.ts delete mode 100644 src/core/member/entity/member-cash-out-account.entity.ts delete mode 100644 src/core/member/entity/member-cash-out.entity.ts delete mode 100644 src/core/member/entity/member-label.entity.ts delete mode 100644 src/core/member/entity/member-level.entity.ts delete mode 100644 src/core/member/entity/member-sign.entity.ts delete mode 100644 src/core/member/entity/member.entity.ts delete mode 100644 src/core/member/enums/account-change-type.enum.ts delete mode 100644 src/core/member/enums/benefits.enum.ts delete mode 100644 src/core/member/enums/gift.enum.ts delete mode 100644 src/core/member/enums/growth-rule.enum.ts delete mode 100644 src/core/member/enums/member-account-change-type-dict.enum.ts delete mode 100644 src/core/member/enums/member-account-type-dict.enum.ts delete mode 100644 src/core/member/enums/member-cash-out-dict.enum.ts delete mode 100644 src/core/member/enums/member-dict.enum.ts delete mode 100644 src/core/member/enums/member-level-dict.enum.ts delete mode 100644 src/core/member/enums/member-login-type-dict.enum.ts delete mode 100644 src/core/member/enums/member-register-channel-dict.enum.ts delete mode 100644 src/core/member/enums/member-register-type-dict.enum.ts delete mode 100644 src/core/member/enums/member-sign-dict.enum.ts delete mode 100644 src/core/member/enums/member-sign-type-dict.enum.ts delete mode 100644 src/core/member/enums/point-rule.enum.ts delete mode 100644 src/core/member/jobs/MemberGiftGrantJob.ts delete mode 100644 src/core/member/jobs/SetMemberNoJob.ts delete mode 100644 src/core/member/listeners/MemberAccountListenerListener.ts delete mode 100644 src/core/member/listeners/MemberLoginListenerListener.ts delete mode 100644 src/core/member/listeners/MemberRegisterListenerListener.ts delete mode 100644 src/core/member/member.module.ts delete mode 100644 src/core/member/services/admin/address.service.ts delete mode 100644 src/core/member/services/admin/member-account.service.ts delete mode 100644 src/core/member/services/admin/member-cash-out.service.ts delete mode 100644 src/core/member/services/admin/member-config.service.ts delete mode 100644 src/core/member/services/admin/member-label.service.ts delete mode 100644 src/core/member/services/admin/member-level.service.ts delete mode 100644 src/core/member/services/admin/member-sign.service.ts delete mode 100644 src/core/member/services/admin/member.service.ts delete mode 100644 src/core/member/services/api/address.service.ts delete mode 100644 src/core/member/services/api/member-account.service.ts delete mode 100644 src/core/member/services/api/member-cash-out-account.service.ts delete mode 100644 src/core/member/services/api/member-cash-out.service.ts delete mode 100644 src/core/member/services/api/member-config.service.ts delete mode 100644 src/core/member/services/api/member-level.service.ts delete mode 100644 src/core/member/services/api/member-log.service.ts delete mode 100644 src/core/member/services/api/member-sign.service.ts delete mode 100644 src/core/member/services/api/member.service.ts delete mode 100644 src/core/member/services/core/core-member-account.service.ts delete mode 100644 src/core/member/services/core/core-member-address.service.ts delete mode 100644 src/core/member/services/core/core-member-cash-out-account.service.ts delete mode 100644 src/core/member/services/core/core-member-cash-out.service.ts delete mode 100644 src/core/member/services/core/core-member-config.service.ts delete mode 100644 src/core/member/services/core/core-member-label.service.ts delete mode 100644 src/core/member/services/core/core-member-level.service.ts delete mode 100644 src/core/member/services/core/core-member.service.ts delete mode 100644 src/core/member_export/listeners/MemberExportDataListenerListener.ts delete mode 100644 src/core/member_export/listeners/MemberExportTypeListenerListener.ts delete mode 100644 src/core/menu/enums/admin.enum.ts delete mode 100644 src/core/menu/enums/site.enum.ts delete mode 100644 src/core/niucloud/controllers/adminapi/cloud.controller.ts delete mode 100644 src/core/niucloud/controllers/adminapi/module.controller.ts delete mode 100644 src/core/niucloud/dto/ModuleDto.ts delete mode 100644 src/core/niucloud/niucloud.module.ts delete mode 100644 src/core/niucloud/services/admin/niucloud.service.ts delete mode 100644 src/core/niucloud/services/core/core-auth.service.ts delete mode 100644 src/core/niucloud/services/core/core-cloud-base.service.ts delete mode 100644 src/core/niucloud/services/core/core-cloud-build.service.ts delete mode 100644 src/core/niucloud/services/core/core-module.service.ts delete mode 100644 src/core/niucloud/services/core/core-niucloud-config.service.ts delete mode 100644 src/core/niucloud/services/core/core-notify.service.ts delete mode 100644 src/core/notice/controllers/adminapi/niu-sms.controller.ts delete mode 100644 src/core/notice/controllers/adminapi/notice-log.controller.ts delete mode 100644 src/core/notice/controllers/adminapi/notice.controller.ts delete mode 100644 src/core/notice/controllers/adminapi/sms-log.controller.ts delete mode 100644 src/core/notice/enums/notice-dict.enum.ts delete mode 100644 src/core/notice/enums/notice-type-dict.enum.ts delete mode 100644 src/core/notice/enums/notice.enum.ts delete mode 100644 src/core/notice/enums/sms.enum.ts delete mode 100644 src/core/notice/enums/weapp.enum.ts delete mode 100644 src/core/notice/enums/wechat.enum.ts delete mode 100644 src/core/notice/jobs/NoticeJob.ts delete mode 100644 src/core/notice/listeners/SmsListener.ts delete mode 100644 src/core/notice/listeners/WeappListener.ts delete mode 100644 src/core/notice/listeners/WechatListener.ts delete mode 100644 src/core/notice/notice.module.ts delete mode 100644 src/core/notice/services/admin/niu-sms.service.ts delete mode 100644 src/core/notice/services/admin/notice-log.service.ts delete mode 100644 src/core/notice/services/admin/notice-sms-log.service.ts delete mode 100644 src/core/notice/services/admin/notice.service.ts delete mode 100644 src/core/notice/services/admin/sms.service.ts delete mode 100644 src/core/notice/services/core/core-niu-sms.service.ts delete mode 100644 src/core/notice/services/core/core-notice-log.service.ts delete mode 100644 src/core/notice/services/core/core-notice-sms-log.service.ts delete mode 100644 src/core/notice/services/core/core-notice.service.ts delete mode 100644 src/core/notice/services/core/core-sms.service.ts delete mode 100644 src/core/notice/services/core/notice.service.ts delete mode 100644 src/core/notice_template/listeners/BaseNoticeTemplateListener.ts delete mode 100644 src/core/notice_template/listeners/MemberVerifySuccessListener.ts delete mode 100644 src/core/notice_template/listeners/VerifyCodeListener.ts delete mode 100644 src/core/pay/controllers/adminapi/pay-channel.controller.ts delete mode 100644 src/core/pay/controllers/adminapi/pay-refund.controller.ts delete mode 100644 src/core/pay/controllers/api/pay.controller.ts delete mode 100644 src/core/pay/controllers/api/transfer.controller.ts delete mode 100644 src/core/pay/dto/PayDto.ts delete mode 100644 src/core/pay/dto/PayTemplateDto.ts delete mode 100644 src/core/pay/entity/pay-channel.entity.ts delete mode 100644 src/core/pay/entity/pay.entity.ts delete mode 100644 src/core/pay/entity/refund.entity.ts delete mode 100644 src/core/pay/entity/transfer-scene.entity.ts delete mode 100644 src/core/pay/entity/transfer.entity.ts delete mode 100644 src/core/pay/enums/online-pay-dict.enum.ts delete mode 100644 src/core/pay/enums/online-refund-dict.enum.ts delete mode 100644 src/core/pay/enums/pay-channel-dict.enum.ts delete mode 100644 src/core/pay/enums/pay-dict.enum.ts delete mode 100644 src/core/pay/enums/pay-scene-dict.enum.ts delete mode 100644 src/core/pay/enums/refund-dict.enum.ts delete mode 100644 src/core/pay/enums/transfer-dict.enum.ts delete mode 100644 src/core/pay/jobs/PayReturnToJob.ts delete mode 100644 src/core/pay/listeners/PayCreateListenerListener.ts delete mode 100644 src/core/pay/listeners/PayNotifyListenerListener.ts delete mode 100644 src/core/pay/listeners/PaySuccessListenerListener.ts delete mode 100644 src/core/pay/listeners/RefundSuccessListenerListener.ts delete mode 100644 src/core/pay/listeners/TransferSuccessListenerListener.ts delete mode 100644 src/core/pay/pay.module.ts delete mode 100644 src/core/pay/services/admin/pay-channel.service.ts delete mode 100644 src/core/pay/services/admin/pay.service.ts delete mode 100644 src/core/pay/services/admin/refund.service.ts delete mode 100644 src/core/pay/services/admin/transfer.service.ts delete mode 100644 src/core/pay/services/api/pay.service.ts delete mode 100644 src/core/pay/services/api/transfer.service.ts delete mode 100644 src/core/pay/services/core/core-pay-channel.service.ts delete mode 100644 src/core/pay/services/core/core-pay-event.service.ts delete mode 100644 src/core/pay/services/core/core-pay.service.ts delete mode 100644 src/core/pay/services/core/core-refund.service.ts delete mode 100644 src/core/pay/services/core/core-transfer-scene.service.ts delete mode 100644 src/core/pay/services/core/core-transfer.service.ts delete mode 100644 src/core/poster/controllers/api/poster.controller.ts delete mode 100644 src/core/poster/enums/component-dict.enum.ts delete mode 100644 src/core/poster/enums/template.enum.ts delete mode 100644 src/core/poster/listeners/FriendspayPosterListener.ts delete mode 100644 src/core/poster/poster.module.ts delete mode 100644 src/core/poster/services/core/core-poster.service.ts delete mode 100644 src/core/qrcode/listeners/WeappQrcodeListenerListener.ts delete mode 100644 src/core/qrcode/listeners/WechatQrcodeListenerListener.ts delete mode 100644 src/core/scan/enums/scan-dict.enum.ts delete mode 100644 src/core/scan/listeners/ScanListenerListener.ts delete mode 100644 src/core/schedule/enums/schedule-dict.enum.ts delete mode 100644 src/core/schedule/enums/schedule-log-dict.enum.ts delete mode 100644 src/core/schedule/enums/schedule.enum.ts delete mode 100644 src/core/schedule/jobs/AutoClearPosterAndQrcodeJob.ts delete mode 100644 src/core/schedule/jobs/AutoClearScheduleLogJob.ts delete mode 100644 src/core/schedule/jobs/OrderCloseJob.ts delete mode 100644 src/core/schedule/jobs/SiteExpireCloseJob.ts delete mode 100644 src/core/schedule/jobs/SiteStatJob.ts delete mode 100644 src/core/site/controllers/adminapi/site-account.controller.ts delete mode 100644 src/core/site/controllers/adminapi/site-group.controller.ts delete mode 100644 src/core/site/controllers/adminapi/site.controller.ts delete mode 100644 src/core/site/controllers/adminapi/user-log.controller.ts delete mode 100644 src/core/site/controllers/adminapi/user.controller.ts delete mode 100644 src/core/site/dto/SiteDto.ts delete mode 100644 src/core/site/dto/SiteGroupDto.ts delete mode 100644 src/core/site/entity/site-account-log.entity.ts delete mode 100644 src/core/site/entity/site-group.entity.ts delete mode 100644 src/core/site/entity/site.entity.ts delete mode 100644 src/core/site/enums/site-account-log-dict.enum.ts delete mode 100644 src/core/site/enums/site-dict.enum.ts delete mode 100644 src/core/site/services/admin/site-account-log.service.ts delete mode 100644 src/core/site/services/admin/site-group.service.ts delete mode 100644 src/core/site/services/admin/site-user.service.ts delete mode 100644 src/core/site/services/admin/site.service.ts delete mode 100644 src/core/site/services/admin/user-log.service.ts delete mode 100644 src/core/site/services/core/core-site-account.service.ts delete mode 100644 src/core/site/services/core/core-site.service.ts delete mode 100644 src/core/site/site.module.ts delete mode 100644 src/core/stat/controllers/adminapi/site-stat.controller.ts delete mode 100644 src/core/stat/controllers/adminapi/stat.controller.ts delete mode 100644 src/core/stat/entity/stat-hour.entity.ts delete mode 100644 src/core/stat/services/admin/site-stat.service.ts delete mode 100644 src/core/stat/services/admin/stat.service.ts delete mode 100644 src/core/stat/services/core/core-stat.service.ts delete mode 100644 src/core/stat/stat.module.ts delete mode 100644 src/core/sys/controllers/adminapi/agreement.controller.ts delete mode 100644 src/core/sys/controllers/adminapi/app.controller.ts delete mode 100644 src/core/sys/controllers/adminapi/area.controller.ts delete mode 100644 src/core/sys/controllers/adminapi/attachment.controller.ts delete mode 100644 src/core/sys/controllers/adminapi/channel.controller.ts delete mode 100644 src/core/sys/controllers/adminapi/common.controller.ts delete mode 100644 src/core/sys/controllers/adminapi/config.controller.ts delete mode 100644 src/core/sys/controllers/adminapi/export.controller.ts delete mode 100644 src/core/sys/controllers/adminapi/menu.controller.ts delete mode 100644 src/core/sys/controllers/adminapi/poster.controller.ts delete mode 100644 src/core/sys/controllers/adminapi/printer.controller.ts delete mode 100644 src/core/sys/controllers/adminapi/role.controller.ts delete mode 100644 src/core/sys/controllers/adminapi/schedule-log.controller.ts delete mode 100644 src/core/sys/controllers/adminapi/schedule.controller.ts delete mode 100644 src/core/sys/controllers/adminapi/system.controller.ts delete mode 100644 src/core/sys/controllers/adminapi/ueditor.controller.ts delete mode 100644 src/core/sys/dto/AgreementDto.ts delete mode 100644 src/core/sys/dto/AttachmentCategoryDto.ts delete mode 100644 src/core/sys/dto/MenuDto.ts delete mode 100644 src/core/sys/dto/PageDto.ts delete mode 100644 src/core/sys/dto/PrinterDto.ts delete mode 100644 src/core/sys/dto/PrinterTemplateDto.ts delete mode 100644 src/core/sys/dto/RoleDto.ts delete mode 100644 src/core/sys/dto/ScheduleDto.ts delete mode 100644 src/core/sys/dto/UserDto.ts delete mode 100644 src/core/sys/entity/app-version.entity.ts delete mode 100644 src/core/sys/entity/niu-sms-template.entity.ts delete mode 100644 src/core/sys/entity/poster.entity.ts delete mode 100644 src/core/sys/entity/sys-agreement.entity.ts delete mode 100644 src/core/sys/entity/sys-area.entity.ts delete mode 100644 src/core/sys/entity/sys-attachment-category.entity.ts delete mode 100644 src/core/sys/entity/sys-attachment.entity.ts delete mode 100644 src/core/sys/entity/sys-backup-records.entity.ts delete mode 100644 src/core/sys/entity/sys-config.entity.ts delete mode 100644 src/core/sys/entity/sys-export.entity.ts delete mode 100644 src/core/sys/entity/sys-menu.entity.ts delete mode 100644 src/core/sys/entity/sys-notice-log.entity.ts delete mode 100644 src/core/sys/entity/sys-notice-sms-log.entity.ts delete mode 100644 src/core/sys/entity/sys-notice.entity.ts delete mode 100644 src/core/sys/entity/sys-printer-template.entity.ts delete mode 100644 src/core/sys/entity/sys-printer.entity.ts delete mode 100644 src/core/sys/entity/sys-role.entity.ts delete mode 100644 src/core/sys/entity/sys-schedule-log.entity.ts delete mode 100644 src/core/sys/entity/sys-schedule.entity.ts delete mode 100644 src/core/sys/entity/sys-upgrade-records.entity.ts delete mode 100644 src/core/sys/entity/sys-user-log.entity.ts delete mode 100644 src/core/sys/entity/sys-user-role.entity.ts delete mode 100644 src/core/sys/entity/sys-user.entity.ts delete mode 100644 src/core/sys/entity/user-create-site-limit.entity.ts delete mode 100644 src/core/sys/entity/wx-oplatfrom-weapp-version.entity.ts delete mode 100644 src/core/sys/enums/agreement-dict.enum.ts delete mode 100644 src/core/sys/enums/app-type-dict.enum.ts delete mode 100644 src/core/sys/enums/backup-dict.enum.ts delete mode 100644 src/core/sys/enums/cloud-dict.enum.ts delete mode 100644 src/core/sys/enums/config-key-dict.enum.ts delete mode 100644 src/core/sys/enums/date-dict.enum.ts delete mode 100644 src/core/sys/enums/export-dict.enum.ts delete mode 100644 src/core/sys/enums/file-dict.enum.ts delete mode 100644 src/core/sys/enums/menu-dict.enum.ts delete mode 100644 src/core/sys/enums/menu-type-dict.enum.ts delete mode 100644 src/core/sys/enums/method-dict.enum.ts delete mode 100644 src/core/sys/enums/poster-dict.enum.ts delete mode 100644 src/core/sys/enums/printer-dict.enum.ts delete mode 100644 src/core/sys/enums/role-status-dict.enum.ts delete mode 100644 src/core/sys/enums/sms-dict.enum.ts delete mode 100644 src/core/sys/enums/storage-dict.enum.ts delete mode 100644 src/core/sys/enums/upgrade-dict.enum.ts delete mode 100644 src/core/sys/enums/user-dict.enum.ts delete mode 100644 src/core/sys/enums/wechat-media-dict.enum.ts delete mode 100644 src/core/sys/enums/wx-oplatform.enum.ts delete mode 100644 src/core/sys/jobs/AddonInstallJob.ts delete mode 100644 src/core/sys/jobs/CheckDeleteJob.ts delete mode 100644 src/core/sys/jobs/CheckJob.ts delete mode 100644 src/core/sys/jobs/ClearUserLogJob.ts delete mode 100644 src/core/sys/jobs/ExportJob.ts delete mode 100644 src/core/sys/services/admin/agreement.service.ts delete mode 100644 src/core/sys/services/admin/app.service.ts delete mode 100644 src/core/sys/services/admin/area.service.ts delete mode 100644 src/core/sys/services/admin/attachment.service.ts delete mode 100644 src/core/sys/services/admin/config.service.ts delete mode 100644 src/core/sys/services/admin/export.service.ts delete mode 100644 src/core/sys/services/admin/menu.service.ts delete mode 100644 src/core/sys/services/admin/poster.service.ts delete mode 100644 src/core/sys/services/admin/printer-template.service.ts delete mode 100644 src/core/sys/services/admin/printer.service.ts delete mode 100644 src/core/sys/services/admin/role.service.ts delete mode 100644 src/core/sys/services/admin/system.service.ts delete mode 100644 src/core/sys/services/core/core-agreement.service.ts delete mode 100644 src/core/sys/services/core/core-area.service.ts delete mode 100644 src/core/sys/services/core/core-attachment.service.ts delete mode 100644 src/core/sys/services/core/core-config.service.ts delete mode 100644 src/core/sys/services/core/core-export.service.ts delete mode 100644 src/core/sys/services/core/core-sys-config.service.ts delete mode 100644 src/core/sys/sys.module.ts delete mode 100644 src/core/system/listeners/AddSiteAfterListenerListener.ts delete mode 100644 src/core/system/listeners/AdminIndexListenerListener.ts delete mode 100644 src/core/system/listeners/AppInitListenerListener.ts delete mode 100644 src/core/system/listeners/AppManageListenerListener.ts delete mode 100644 src/core/system/listeners/BottomNavigationListenerListener.ts delete mode 100644 src/core/system/listeners/PosterListener.ts delete mode 100644 src/core/system/listeners/PosterTypeListener.ts delete mode 100644 src/core/system/listeners/ShowAppListenerListener.ts delete mode 100644 src/core/system/listeners/ShowMarketingListenerListener.ts delete mode 100644 src/core/system/listeners/SiteIndexListenerListener.ts delete mode 100644 src/core/system/listeners/SiteInitListenerListener.ts delete mode 100644 src/core/system/listeners/SiteLayoutListener.ts delete mode 100644 src/core/system/listeners/WeappAuthChangeAfterListener.ts delete mode 100644 src/core/transfer/listeners/TransferCashOutListenerListener.ts delete mode 100644 src/core/upgrade/jobs/AutoClearUpgradeRecordsJob.ts delete mode 100644 src/core/upgrade/services/admin/backup-records.service.ts delete mode 100644 src/core/upgrade/services/admin/backup.service.ts delete mode 100644 src/core/upgrade/services/admin/execute-sql-trait.service.ts delete mode 100644 src/core/upgrade/services/admin/restore.service.ts delete mode 100644 src/core/upgrade/services/admin/upgrade-records.service.ts delete mode 100644 src/core/upgrade/services/admin/upgrade.service.ts delete mode 100644 src/core/upgrade/upgrade.module.ts delete mode 100644 src/core/upload/controllers/adminapi/storage.controller.ts delete mode 100644 src/core/upload/controllers/api/upload.controller.ts delete mode 100644 src/core/upload/services/admin/storage-config.service.ts delete mode 100644 src/core/upload/services/admin/upload-config.service.ts delete mode 100644 src/core/upload/services/admin/upload.service.ts delete mode 100644 src/core/upload/services/api/base64.service.ts delete mode 100644 src/core/upload/services/api/fetch.service.ts delete mode 100644 src/core/upload/services/api/upload.service.ts delete mode 100644 src/core/upload/services/core/core-base64.service.ts delete mode 100644 src/core/upload/services/core/core-fetch.service.ts delete mode 100644 src/core/upload/services/core/core-file.service.ts delete mode 100644 src/core/upload/services/core/core-image.service.ts delete mode 100644 src/core/upload/services/core/core-storage.service.ts delete mode 100644 src/core/upload/services/core/core-upload-config.service.ts delete mode 100644 src/core/upload/services/core/core-upload.service.ts delete mode 100644 src/core/upload/upload.module.ts delete mode 100644 src/core/user/controllers/adminapi/user.controller.ts delete mode 100644 src/core/user/dto/create-user.dto.ts delete mode 100644 src/core/user/services/admin/user-role.service.ts delete mode 100644 src/core/user/services/admin/user.service.ts delete mode 100644 src/core/user/user.module.ts delete mode 100644 src/core/verify/controllers/adminapi/verifier.controller.ts delete mode 100644 src/core/verify/controllers/adminapi/verify.controller.ts delete mode 100644 src/core/verify/entity/verifier.entity.ts delete mode 100644 src/core/verify/entity/verify.entity.ts delete mode 100644 src/core/verify/enums/verify-dict.enum.ts delete mode 100644 src/core/verify/services/admin/verifier.service.ts delete mode 100644 src/core/verify/services/admin/verify.service.ts delete mode 100644 src/core/verify/services/core/core-verify.service.ts delete mode 100644 src/core/verify/verify.module.ts delete mode 100644 src/core/weapp/controllers/adminapi/config.controller.ts delete mode 100644 src/core/weapp/controllers/adminapi/delivery.controller.ts delete mode 100644 src/core/weapp/controllers/adminapi/package.controller.ts delete mode 100644 src/core/weapp/controllers/adminapi/template.controller.ts delete mode 100644 src/core/weapp/controllers/adminapi/version.controller.ts delete mode 100644 src/core/weapp/controllers/api/serve.controller.ts delete mode 100644 src/core/weapp/controllers/api/weapp.controller.ts delete mode 100644 src/core/weapp/entity/weapp-version.entity.ts delete mode 100644 src/core/weapp/services/admin/weapp-config.service.ts delete mode 100644 src/core/weapp/services/admin/weapp-delivery.service.ts delete mode 100644 src/core/weapp/services/admin/weapp-package.service.ts delete mode 100644 src/core/weapp/services/admin/weapp-template.service.ts delete mode 100644 src/core/weapp/services/admin/weapp-version.service.ts delete mode 100644 src/core/weapp/services/api/weapp-auth.service.ts delete mode 100644 src/core/weapp/services/api/weapp-delivery.service.ts delete mode 100644 src/core/weapp/services/api/weapp-serve.service.ts delete mode 100644 src/core/weapp/services/core/core-weapp-auth.service.ts delete mode 100644 src/core/weapp/services/core/core-weapp-cloud.service.ts delete mode 100644 src/core/weapp/services/core/core-weapp-config.service.ts delete mode 100644 src/core/weapp/services/core/core-weapp-delivery.service.ts delete mode 100644 src/core/weapp/services/core/core-weapp-serve.service.ts delete mode 100644 src/core/weapp/services/core/core-weapp-template.service.ts delete mode 100644 src/core/weapp/services/core/core-weapp.service.ts delete mode 100644 src/core/weapp/weapp.module.ts delete mode 100644 src/core/wechat/controllers/adminapi/config.controller.ts delete mode 100644 src/core/wechat/controllers/adminapi/media.controller.ts delete mode 100644 src/core/wechat/controllers/adminapi/menu.controller.ts delete mode 100644 src/core/wechat/controllers/adminapi/reply.controller.ts delete mode 100644 src/core/wechat/controllers/adminapi/template.controller.ts delete mode 100644 src/core/wechat/controllers/api/serve.controller.ts delete mode 100644 src/core/wechat/controllers/api/wechat.controller.ts delete mode 100644 src/core/wechat/entity/wechat-fans.entity.ts delete mode 100644 src/core/wechat/entity/wechat-media.entity.ts delete mode 100644 src/core/wechat/entity/wechat-reply.entity.ts delete mode 100644 src/core/wechat/services/admin/wechat-config.service.ts delete mode 100644 src/core/wechat/services/admin/wechat-event.service.ts delete mode 100644 src/core/wechat/services/admin/wechat-fans.service.ts delete mode 100644 src/core/wechat/services/admin/wechat-media.service.ts delete mode 100644 src/core/wechat/services/admin/wechat-menu.service.ts delete mode 100644 src/core/wechat/services/admin/wechat-reply.service.ts delete mode 100644 src/core/wechat/services/admin/wechat-template.service.ts delete mode 100644 src/core/wechat/services/api/wechat-app.service.ts delete mode 100644 src/core/wechat/services/api/wechat-auth.service.ts delete mode 100644 src/core/wechat/services/api/wechat-serve.service.ts delete mode 100644 src/core/wechat/services/core/core-wechat-api.service.ts delete mode 100644 src/core/wechat/services/core/core-wechat-app.service.ts delete mode 100644 src/core/wechat/services/core/core-wechat-config.service.ts delete mode 100644 src/core/wechat/services/core/core-wechat-fans.service.ts delete mode 100644 src/core/wechat/services/core/core-wechat-media.service.ts delete mode 100644 src/core/wechat/services/core/core-wechat-message.service.ts delete mode 100644 src/core/wechat/services/core/core-wechat-reply.service.ts delete mode 100644 src/core/wechat/services/core/core-wechat-serve.service.ts delete mode 100644 src/core/wechat/services/core/core-wechat-template.service.ts delete mode 100644 src/core/wechat/services/core/core-wechat.service.ts delete mode 100644 src/core/wechat/wechat.module.ts delete mode 100644 src/core/wxoplatform/controllers/adminapi/config.controller.ts delete mode 100644 src/core/wxoplatform/controllers/adminapi/oplatform.controller.ts delete mode 100644 src/core/wxoplatform/controllers/adminapi/server.controller.ts delete mode 100644 src/core/wxoplatform/controllers/adminapi/weapp-version.controller.ts delete mode 100644 src/core/wxoplatform/jobs/GetVersionUploadResultJob.ts delete mode 100644 src/core/wxoplatform/jobs/SiteWeappCommitJob.ts delete mode 100644 src/core/wxoplatform/jobs/SubmitAuditJob.ts delete mode 100644 src/core/wxoplatform/jobs/VersionUploadSuccessJob.ts delete mode 100644 src/core/wxoplatform/jobs/WeappAuthChangeAfterJob.ts delete mode 100644 src/core/wxoplatform/jobs/WeappCommitJob.ts delete mode 100644 src/core/wxoplatform/jobs/WechatAuthChangeAfterJob.ts delete mode 100644 src/core/wxoplatform/services/admin/oplatform-config.service.ts delete mode 100644 src/core/wxoplatform/services/admin/oplatform-server.service.ts delete mode 100644 src/core/wxoplatform/services/admin/oplatform.service.ts delete mode 100644 src/core/wxoplatform/services/admin/weapp-version.service.ts delete mode 100644 src/core/wxoplatform/services/core/core-oplatform-config.service.ts delete mode 100644 src/core/wxoplatform/services/core/core-oplatform.service.ts delete mode 100644 src/core/wxoplatform/wxoplatform.module.ts delete mode 100644 src/lang/en_US/common/api.json delete mode 100644 src/lang/en_US/common/dict.json delete mode 100644 src/lang/en_US/common/validate.json delete mode 100644 src/lang/zh_CN/common/api.json delete mode 100644 src/lang/zh_CN/common/dict.json delete mode 100644 src/lang/zh_CN/common/validate.json delete mode 100644 src/lang/zh_CN/order/api.json delete mode 100644 src/lang/zh_CN/order/dict.json delete mode 100644 src/lang/zh_CN/order/validate.json delete mode 100644 src/lang/zh_CN/user/api.json delete mode 100644 src/lang/zh_CN/user/dict.json delete mode 100644 src/lang/zh_CN/user/validate.json delete mode 100644 src/main.ts delete mode 100644 src/vendor/notice/interfaces/notice.interface.ts delete mode 100644 src/vendor/notice/notice.module.ts delete mode 100644 src/vendor/notice/notice.service.ts delete mode 100644 src/vendor/notice/providers/base-notice.provider.ts delete mode 100644 src/vendor/notice/providers/sms-notice.provider.ts delete mode 100644 src/vendor/notice/providers/weapp-notice.provider.ts delete mode 100644 src/vendor/notice/providers/wechat-notice.provider.ts delete mode 100644 src/vendor/pay/interfaces/pay.interface.ts delete mode 100644 src/vendor/pay/pay.module.ts delete mode 100644 src/vendor/pay/pay.service.ts delete mode 100644 src/vendor/pay/providers/alipay.provider.ts delete mode 100644 src/vendor/pay/providers/balance-pay.provider.ts delete mode 100644 src/vendor/pay/providers/base-pay.provider.ts delete mode 100644 src/vendor/pay/providers/wechat-pay.provider.ts delete mode 100644 src/vendor/sms/interfaces/sms.interface.ts delete mode 100644 src/vendor/sms/providers/aliyun-sms.provider.ts delete mode 100644 src/vendor/sms/providers/base-sms.provider.ts delete mode 100644 src/vendor/sms/providers/tencent-sms.provider.ts delete mode 100644 src/vendor/sms/sms.module.ts delete mode 100644 src/vendor/sms/sms.service.ts delete mode 100644 src/vendor/upload/interfaces/upload.interface.ts delete mode 100644 src/vendor/upload/providers/aliyun-upload.provider.ts delete mode 100644 src/vendor/upload/providers/base-upload.provider.ts delete mode 100644 src/vendor/upload/providers/local-upload.provider.ts delete mode 100644 src/vendor/upload/providers/qiniu-upload.provider.ts delete mode 100644 src/vendor/upload/upload.module.ts delete mode 100644 src/vendor/upload/upload.service.ts delete mode 100644 src/vendor/vendor.module.ts delete mode 100644 test/app.e2e-spec.ts delete mode 100644 test/jest-e2e.json delete mode 100644 tsconfig.build.json delete mode 100644 tsconfig.json mode change 100755 => 100644 wwjcloud-nest/docker/start-all.sh delete mode 100644 wwjcloud-nest/src/common/health/health.controller.ts delete mode 100644 wwjcloud-nest/src/common/health/health.module.ts diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index dcb72794..00000000 --- a/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "singleQuote": true, - "trailingComma": "all" -} \ No newline at end of file diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md deleted file mode 100644 index e54cbe7b..00000000 --- a/ARCHITECTURE.md +++ /dev/null @@ -1,116 +0,0 @@ -# WWJCloud 架构设计 - -## 架构概述 - -WWJCloud 基于 NestJS 框架设计,采用分层架构模式,参考 NiuCloud Java 和 PHP 版本的真实代码结构。 - -## 分层架构 - -### 1. Config 层 - 框架配置中心 -**职责**: 提供框架级配置管理 -- 环境变量管理 -- 配置验证 -- 配置热更新 -- 框架级配置项 - -**位置**: `src/config/` -**特点**: 纯配置管理,不包含业务逻辑 - -### 2. Common 层 - 基础设施层 -**职责**: 提供纯基础设施能力 -- 安全认证和授权 -- 链路追踪 -- 缓存服务 -- 队列服务 -- 事件服务 -- 定时任务调度 -- 初始化管理 -- 上下文管理 -- API文档管理 - -**位置**: `src/common/` -**特点**: 纯基础设施,不包含业务逻辑 - -### 3. Core 层 - 核心业务逻辑层 -**职责**: 提供核心业务能力 -- 认证授权业务 -- 系统管理业务 -- 会员管理业务 -- 支付业务 -- 上传业务 -- 通知业务 -- 数据字典业务 -- 多语言业务 - -**位置**: `src/core/` -**特点**: 核心业务逻辑,可被多个应用复用 - -### 4. Vendor 层 - 第三方集成层 -**职责**: 提供第三方服务集成能力 -- 支付服务集成 -- 短信服务集成 -- 通知服务集成 -- 上传服务集成 -- 存储服务集成 - -**位置**: `src/vendor/` -**特点**: 第三方服务适配器,支持动态切换 - -### 5. App 层 - 具体业务应用层 -**职责**: 具体业务应用实现 -- 特定业务逻辑 -- 业务特定的控制器 -- 业务特定的服务 - -**位置**: `src/app/` -**特点**: 具体业务实现,依赖其他层 - -## 依赖关系 - -``` -App Layer - ↓ -Core Layer ← Vendor Layer - ↓ -Common Layer - ↓ -Config Layer -``` - -## 与 NiuCloud 的对应关系 - -### Java 版本对应 -- `niucloud-core/common/config/` → `src/config/` (框架配置) -- `niucloud-core/common/component/` → `src/common/` (基础设施) -- `niucloud-core/service/core/` → `src/core/` (核心业务) -- `niucloud-core/common/component/pay|sms|upload/` → `src/vendor/` (第三方集成) - -### PHP 版本对应 -- `core/dict/Config.php` → `src/config/` (框架配置) -- `core/base/` → `src/common/` (基础设施) -- `core/dict/` → `src/core/` (核心业务) -- `core/pay|sms|upload/` → `src/vendor/` (第三方集成) - -## 设计原则 - -1. **单一职责**: 每层只负责自己的职责 -2. **依赖倒置**: 上层依赖下层,下层不依赖上层 -3. **开闭原则**: 对扩展开放,对修改关闭 -4. **接口隔离**: 使用接口定义契约 -5. **配置驱动**: 通过配置驱动行为 - -## 微服务演进 - -未来可拆分为: -- **Config 微服务**: 配置中心 -- **Common+Vendor 微服务**: 基础设施服务 -- **Core 微服务**: 核心业务服务 -- **App 微服务**: 具体业务服务 - -## 开发规范 - -1. **命名规范**: 遵循 NestJS 和业务对齐原则 -2. **目录结构**: 按功能模块组织 -3. **依赖管理**: 明确层间依赖关系 -4. **配置管理**: 统一使用 Config 层 -5. **错误处理**: 统一异常处理机制 diff --git a/README-DOCKER.md b/README-DOCKER.md deleted file mode 100644 index a465cf4a..00000000 --- a/README-DOCKER.md +++ /dev/null @@ -1,366 +0,0 @@ -# 🐳 WWJCloud Docker 部署指南 - -## 📋 目录结构 - -``` -wwjcloud-nsetjs/ -├── docker-compose.yml # 生产环境配置 -├── docker-compose.dev.yml # 开发环境配置(仅MySQL+Redis) -├── wwjcloud-nest/ -│ ├── Dockerfile # NestJS后端镜像 -│ ├── .dockerignore # Docker忽略文件 -│ └── admin/ -│ ├── Dockerfile # Admin前端镜像 -│ ├── nginx.conf # Nginx配置 -│ └── .dockerignore # Docker忽略文件 -└── sql/ - └── wwjcloud.sql # 数据库初始化脚本 -``` - -## 🚀 快速开始 - -### 方式1:完整部署(推荐用于测试) - -启动所有服务(MySQL + Redis + NestJS + Admin): - -```bash -# 构建并启动所有服务 -docker-compose up -d --build - -# 查看服务状态 -docker-compose ps - -# 查看日志 -docker-compose logs -f - -# 停止所有服务 -docker-compose down - -# 停止并删除数据卷(⚠️ 会清空数据库) -docker-compose down -v -``` - -访问地址: -- **Admin管理面板**: http://localhost -- **NestJS API**: http://localhost:3000 -- **MySQL**: localhost:3306 -- **Redis**: localhost:6379 - -### 方式2:开发模式(仅基础设施) - -只启动MySQL和Redis,本地运行NestJS和Admin: - -```bash -# 启动MySQL和Redis -docker-compose -f docker-compose.dev.yml up -d - -# 本地启动NestJS -cd wwjcloud-nest -npm install -npm run start:dev - -# 本地启动Admin(新终端) -cd wwjcloud-nest/admin -npm install -npm run dev -``` - -访问地址: -- **Admin管理面板**: http://localhost:5173 -- **NestJS API**: http://localhost:3000 - -## 📊 服务详情 - -### 1. MySQL 数据库 - -```yaml -容器名: wwjcloud-mysql -端口: 3306 -数据库: wwjcloud -用户: wwjcloud -密码: wwjcloud123 -Root密码: root123456 -``` - -**连接字符串**: -``` -mysql://wwjcloud:wwjcloud123@localhost:3306/wwjcloud -``` - -### 2. Redis 缓存 - -```yaml -容器名: wwjcloud-redis -端口: 6379 -密码: redis123456 -``` - -**连接字符串**: -``` -redis://:redis123456@localhost:6379 -``` - -### 3. NestJS 后端 - -```yaml -容器名: wwjcloud-nestjs -端口: 3000 -健康检查: http://localhost:3000/health -``` - -**环境变量**: -- `NODE_ENV`: production -- `DB_HOST`: mysql -- `DB_PORT`: 3306 -- `REDIS_HOST`: redis -- `REDIS_PORT`: 6379 - -### 4. Admin 前端 - -```yaml -容器名: wwjcloud-admin -端口: 80 -Web服务器: Nginx -``` - -**特性**: -- Vue Router History模式 -- API自动代理到NestJS后端 -- Gzip压缩 -- 静态资源缓存 - -## 🔧 常用命令 - -### 查看日志 - -```bash -# 查看所有服务日志 -docker-compose logs -f - -# 查看特定服务日志 -docker-compose logs -f nestjs-backend -docker-compose logs -f admin-frontend -docker-compose logs -f mysql -docker-compose logs -f redis - -# 查看最近100行日志 -docker-compose logs --tail=100 nestjs-backend -``` - -### 重启服务 - -```bash -# 重启所有服务 -docker-compose restart - -# 重启特定服务 -docker-compose restart nestjs-backend -docker-compose restart admin-frontend -``` - -### 进入容器 - -```bash -# 进入NestJS容器 -docker-compose exec nestjs-backend sh - -# 进入MySQL容器 -docker-compose exec mysql bash -docker-compose exec mysql mysql -u wwjcloud -pwwjcloud123 wwjcloud - -# 进入Redis容器 -docker-compose exec redis redis-cli -a redis123456 -``` - -### 清理资源 - -```bash -# 停止所有服务 -docker-compose down - -# 停止并删除数据卷(⚠️ 会清空数据库) -docker-compose down -v - -# 删除所有镜像 -docker-compose down --rmi all - -# 清理所有Docker资源 -docker system prune -a -``` - -## 🐛 故障排查 - -### 1. 服务启动失败 - -```bash -# 查看服务状态 -docker-compose ps - -# 查看详细日志 -docker-compose logs nestjs-backend - -# 检查健康状态 -docker inspect wwjcloud-nestjs | grep -A 10 Health -``` - -### 2. 数据库连接失败 - -```bash -# 检查MySQL是否就绪 -docker-compose exec mysql mysqladmin ping -h localhost -u root -proot123456 - -# 查看MySQL日志 -docker-compose logs mysql - -# 手动连接测试 -docker-compose exec mysql mysql -u wwjcloud -pwwjcloud123 -e "SHOW DATABASES;" -``` - -### 3. Redis连接失败 - -```bash -# 检查Redis是否就绪 -docker-compose exec redis redis-cli -a redis123456 ping - -# 查看Redis日志 -docker-compose logs redis -``` - -### 4. 前端无法访问后端API - -```bash -# 检查Nginx配置 -docker-compose exec admin-frontend cat /etc/nginx/conf.d/default.conf - -# 测试API代理 -curl http://localhost/adminapi/health - -# 检查网络连接 -docker-compose exec admin-frontend ping nestjs-backend -``` - -## 🔒 安全配置 - -### 生产环境建议 - -1. **修改默认密码**: - -编辑 `docker-compose.yml`: -```yaml -environment: - MYSQL_ROOT_PASSWORD: your-strong-password - MYSQL_PASSWORD: your-strong-password - REDIS_PASSWORD: your-strong-password - JWT_SECRET: your-super-secret-jwt-key -``` - -2. **使用环境变量文件**: - -创建 `.env` 文件: -```env -MYSQL_ROOT_PASSWORD=your-strong-password -MYSQL_PASSWORD=your-strong-password -REDIS_PASSWORD=your-strong-password -JWT_SECRET=your-super-secret-jwt-key -``` - -3. **启用HTTPS**: - -修改 `nginx.conf` 添加SSL配置。 - -4. **限制网络访问**: - -```yaml -services: - mysql: - expose: - - "3306" - # 不使用 ports,只在内部网络暴露 -``` - -## 📈 性能优化 - -### 1. 资源限制 - -```yaml -services: - nestjs-backend: - deploy: - resources: - limits: - cpus: '2' - memory: 2G - reservations: - cpus: '1' - memory: 1G -``` - -### 2. 数据库优化 - -```bash -# 连接到MySQL -docker-compose exec mysql mysql -u root -proot123456 - -# 查看慢查询 -SHOW VARIABLES LIKE 'slow_query%'; - -# 优化表 -OPTIMIZE TABLE your_table; -``` - -### 3. Redis优化 - -```bash -# 查看Redis信息 -docker-compose exec redis redis-cli -a redis123456 INFO - -# 查看内存使用 -docker-compose exec redis redis-cli -a redis123456 INFO memory -``` - -## 📦 数据备份与恢复 - -### 备份数据库 - -```bash -# 备份MySQL -docker-compose exec mysql mysqldump -u root -proot123456 wwjcloud > backup_$(date +%Y%m%d).sql - -# 备份Redis -docker-compose exec redis redis-cli -a redis123456 SAVE -docker cp wwjcloud-redis:/data/dump.rdb ./redis_backup_$(date +%Y%m%d).rdb -``` - -### 恢复数据库 - -```bash -# 恢复MySQL -docker-compose exec -T mysql mysql -u root -proot123456 wwjcloud < backup_20241004.sql - -# 恢复Redis -docker cp redis_backup_20241004.rdb wwjcloud-redis:/data/dump.rdb -docker-compose restart redis -``` - -## 🎯 测试checklist - -- [ ] MySQL容器启动成功 -- [ ] Redis容器启动成功 -- [ ] NestJS容器启动成功 -- [ ] Admin容器启动成功 -- [ ] 所有健康检查通过 -- [ ] 可以访问Admin管理面板 (http://localhost) -- [ ] 可以访问NestJS API (http://localhost:3000) -- [ ] Admin可以调用后端API -- [ ] 登录功能正常 -- [ ] 数据库连接正常 -- [ ] Redis缓存正常 - -## 📞 获取帮助 - -如遇问题,请检查: -1. Docker和Docker Compose版本 -2. 端口占用情况 (80, 3000, 3306, 6379) -3. 容器日志 (`docker-compose logs`) -4. 健康检查状态 (`docker-compose ps`) - diff --git a/admin/.browserslistrc b/admin-vben/.browserslistrc similarity index 100% rename from admin/.browserslistrc rename to admin-vben/.browserslistrc diff --git a/admin/.changeset/README.md b/admin-vben/.changeset/README.md similarity index 100% rename from admin/.changeset/README.md rename to admin-vben/.changeset/README.md diff --git a/admin/.changeset/config.json b/admin-vben/.changeset/config.json similarity index 100% rename from admin/.changeset/config.json rename to admin-vben/.changeset/config.json diff --git a/admin/.commitlintrc.js b/admin-vben/.commitlintrc.js similarity index 100% rename from admin/.commitlintrc.js rename to admin-vben/.commitlintrc.js diff --git a/admin/.dockerignore b/admin-vben/.dockerignore similarity index 100% rename from admin/.dockerignore rename to admin-vben/.dockerignore diff --git a/admin/.editorconfig b/admin-vben/.editorconfig similarity index 100% rename from admin/.editorconfig rename to admin-vben/.editorconfig diff --git a/admin/.env.development b/admin-vben/.env.development similarity index 100% rename from admin/.env.development rename to admin-vben/.env.development diff --git a/admin/.env.production b/admin-vben/.env.production similarity index 100% rename from admin/.env.production rename to admin-vben/.env.production diff --git a/admin/.eslintrc.json b/admin-vben/.eslintrc.json similarity index 100% rename from admin/.eslintrc.json rename to admin-vben/.eslintrc.json diff --git a/admin/.gitattributes b/admin-vben/.gitattributes similarity index 100% rename from admin/.gitattributes rename to admin-vben/.gitattributes diff --git a/admin/.gitconfig b/admin-vben/.gitconfig similarity index 100% rename from admin/.gitconfig rename to admin-vben/.gitconfig diff --git a/admin/.github/CODEOWNERS b/admin-vben/.github/CODEOWNERS similarity index 100% rename from admin/.github/CODEOWNERS rename to admin-vben/.github/CODEOWNERS diff --git a/admin/.github/ISSUE_TEMPLATE/bug-report.yml b/admin-vben/.github/ISSUE_TEMPLATE/bug-report.yml similarity index 100% rename from admin/.github/ISSUE_TEMPLATE/bug-report.yml rename to admin-vben/.github/ISSUE_TEMPLATE/bug-report.yml diff --git a/admin/.github/ISSUE_TEMPLATE/docs.yml b/admin-vben/.github/ISSUE_TEMPLATE/docs.yml similarity index 100% rename from admin/.github/ISSUE_TEMPLATE/docs.yml rename to admin-vben/.github/ISSUE_TEMPLATE/docs.yml diff --git a/admin/.github/ISSUE_TEMPLATE/feature-request.yml b/admin-vben/.github/ISSUE_TEMPLATE/feature-request.yml similarity index 100% rename from admin/.github/ISSUE_TEMPLATE/feature-request.yml rename to admin-vben/.github/ISSUE_TEMPLATE/feature-request.yml diff --git a/admin/.github/actions/setup-node/action.yml b/admin-vben/.github/actions/setup-node/action.yml similarity index 100% rename from admin/.github/actions/setup-node/action.yml rename to admin-vben/.github/actions/setup-node/action.yml diff --git a/admin/.github/commit-convention.md b/admin-vben/.github/commit-convention.md similarity index 100% rename from admin/.github/commit-convention.md rename to admin-vben/.github/commit-convention.md diff --git a/admin/.github/config.yml b/admin-vben/.github/config.yml similarity index 100% rename from admin/.github/config.yml rename to admin-vben/.github/config.yml diff --git a/admin/.github/contributing.md b/admin-vben/.github/contributing.md similarity index 100% rename from admin/.github/contributing.md rename to admin-vben/.github/contributing.md diff --git a/admin/.github/dependabot.yml b/admin-vben/.github/dependabot.yml similarity index 100% rename from admin/.github/dependabot.yml rename to admin-vben/.github/dependabot.yml diff --git a/admin/.github/pull_request_template.md b/admin-vben/.github/pull_request_template.md similarity index 100% rename from admin/.github/pull_request_template.md rename to admin-vben/.github/pull_request_template.md diff --git a/admin/.github/release-drafter.yml b/admin-vben/.github/release-drafter.yml similarity index 100% rename from admin/.github/release-drafter.yml rename to admin-vben/.github/release-drafter.yml diff --git a/admin/.github/semantic.yml b/admin-vben/.github/semantic.yml similarity index 100% rename from admin/.github/semantic.yml rename to admin-vben/.github/semantic.yml diff --git a/admin/.github/workflows/build.yml b/admin-vben/.github/workflows/build.yml similarity index 100% rename from admin/.github/workflows/build.yml rename to admin-vben/.github/workflows/build.yml diff --git a/admin/.github/workflows/changeset-version.yml b/admin-vben/.github/workflows/changeset-version.yml similarity index 100% rename from admin/.github/workflows/changeset-version.yml rename to admin-vben/.github/workflows/changeset-version.yml diff --git a/admin/.github/workflows/ci.yml b/admin-vben/.github/workflows/ci.yml similarity index 100% rename from admin/.github/workflows/ci.yml rename to admin-vben/.github/workflows/ci.yml diff --git a/admin/.github/workflows/codeql.yml b/admin-vben/.github/workflows/codeql.yml similarity index 100% rename from admin/.github/workflows/codeql.yml rename to admin-vben/.github/workflows/codeql.yml diff --git a/admin/.github/workflows/deploy.yml b/admin-vben/.github/workflows/deploy.yml similarity index 100% rename from admin/.github/workflows/deploy.yml rename to admin-vben/.github/workflows/deploy.yml diff --git a/admin/.github/workflows/draft.yml b/admin-vben/.github/workflows/draft.yml similarity index 100% rename from admin/.github/workflows/draft.yml rename to admin-vben/.github/workflows/draft.yml diff --git a/admin/.github/workflows/issue-close-require.yml b/admin-vben/.github/workflows/issue-close-require.yml similarity index 100% rename from admin/.github/workflows/issue-close-require.yml rename to admin-vben/.github/workflows/issue-close-require.yml diff --git a/admin/.github/workflows/issue-labeled.yml b/admin-vben/.github/workflows/issue-labeled.yml similarity index 100% rename from admin/.github/workflows/issue-labeled.yml rename to admin-vben/.github/workflows/issue-labeled.yml diff --git a/admin/.github/workflows/lock.yml b/admin-vben/.github/workflows/lock.yml similarity index 100% rename from admin/.github/workflows/lock.yml rename to admin-vben/.github/workflows/lock.yml diff --git a/admin/.github/workflows/release-tag.yml b/admin-vben/.github/workflows/release-tag.yml similarity index 100% rename from admin/.github/workflows/release-tag.yml rename to admin-vben/.github/workflows/release-tag.yml diff --git a/admin/.github/workflows/rerun.yml b/admin-vben/.github/workflows/rerun.yml similarity index 100% rename from admin/.github/workflows/rerun.yml rename to admin-vben/.github/workflows/rerun.yml diff --git a/admin/.github/workflows/semantic-pull-request.yml b/admin-vben/.github/workflows/semantic-pull-request.yml similarity index 100% rename from admin/.github/workflows/semantic-pull-request.yml rename to admin-vben/.github/workflows/semantic-pull-request.yml diff --git a/admin/.github/workflows/stale.yml b/admin-vben/.github/workflows/stale.yml similarity index 100% rename from admin/.github/workflows/stale.yml rename to admin-vben/.github/workflows/stale.yml diff --git a/admin/.gitignore b/admin-vben/.gitignore similarity index 100% rename from admin/.gitignore rename to admin-vben/.gitignore diff --git a/admin/.gitpod.yml b/admin-vben/.gitpod.yml similarity index 100% rename from admin/.gitpod.yml rename to admin-vben/.gitpod.yml diff --git a/admin/.node-version b/admin-vben/.node-version similarity index 100% rename from admin/.node-version rename to admin-vben/.node-version diff --git a/admin/.npmrc b/admin-vben/.npmrc similarity index 100% rename from admin/.npmrc rename to admin-vben/.npmrc diff --git a/admin/.prettierignore b/admin-vben/.prettierignore similarity index 100% rename from admin/.prettierignore rename to admin-vben/.prettierignore diff --git a/admin/.prettierrc.mjs b/admin-vben/.prettierrc.mjs similarity index 100% rename from admin/.prettierrc.mjs rename to admin-vben/.prettierrc.mjs diff --git a/admin/.stylelintignore b/admin-vben/.stylelintignore similarity index 100% rename from admin/.stylelintignore rename to admin-vben/.stylelintignore diff --git a/admin/Dockerfile b/admin-vben/Dockerfile similarity index 100% rename from admin/Dockerfile rename to admin-vben/Dockerfile diff --git a/admin/LICENSE b/admin-vben/LICENSE similarity index 100% rename from admin/LICENSE rename to admin-vben/LICENSE diff --git a/admin/README.ja-JP.md b/admin-vben/README.ja-JP.md similarity index 100% rename from admin/README.ja-JP.md rename to admin-vben/README.ja-JP.md diff --git a/admin/README.md b/admin-vben/README.md similarity index 100% rename from admin/README.md rename to admin-vben/README.md diff --git a/admin/README.zh-CN.md b/admin-vben/README.zh-CN.md similarity index 100% rename from admin/README.zh-CN.md rename to admin-vben/README.zh-CN.md diff --git a/admin/apps/backend-mock/README.md b/admin-vben/apps/backend-mock/README.md similarity index 100% rename from admin/apps/backend-mock/README.md rename to admin-vben/apps/backend-mock/README.md diff --git a/admin/apps/backend-mock/api/auth/codes.ts b/admin-vben/apps/backend-mock/api/auth/codes.ts similarity index 100% rename from admin/apps/backend-mock/api/auth/codes.ts rename to admin-vben/apps/backend-mock/api/auth/codes.ts diff --git a/admin/apps/backend-mock/api/auth/login.post.ts b/admin-vben/apps/backend-mock/api/auth/login.post.ts similarity index 100% rename from admin/apps/backend-mock/api/auth/login.post.ts rename to admin-vben/apps/backend-mock/api/auth/login.post.ts diff --git a/admin/apps/backend-mock/api/auth/logout.post.ts b/admin-vben/apps/backend-mock/api/auth/logout.post.ts similarity index 100% rename from admin/apps/backend-mock/api/auth/logout.post.ts rename to admin-vben/apps/backend-mock/api/auth/logout.post.ts diff --git a/admin/apps/backend-mock/api/auth/refresh.post.ts b/admin-vben/apps/backend-mock/api/auth/refresh.post.ts similarity index 100% rename from admin/apps/backend-mock/api/auth/refresh.post.ts rename to admin-vben/apps/backend-mock/api/auth/refresh.post.ts diff --git a/admin/apps/backend-mock/api/demo/bigint.ts b/admin-vben/apps/backend-mock/api/demo/bigint.ts similarity index 100% rename from admin/apps/backend-mock/api/demo/bigint.ts rename to admin-vben/apps/backend-mock/api/demo/bigint.ts diff --git a/admin/apps/backend-mock/api/menu/all.ts b/admin-vben/apps/backend-mock/api/menu/all.ts similarity index 100% rename from admin/apps/backend-mock/api/menu/all.ts rename to admin-vben/apps/backend-mock/api/menu/all.ts diff --git a/admin/apps/backend-mock/api/status.ts b/admin-vben/apps/backend-mock/api/status.ts similarity index 100% rename from admin/apps/backend-mock/api/status.ts rename to admin-vben/apps/backend-mock/api/status.ts diff --git a/admin/apps/backend-mock/api/system/dept/.post.ts b/admin-vben/apps/backend-mock/api/system/dept/.post.ts similarity index 100% rename from admin/apps/backend-mock/api/system/dept/.post.ts rename to admin-vben/apps/backend-mock/api/system/dept/.post.ts diff --git a/admin/apps/backend-mock/api/system/dept/[id].delete.ts b/admin-vben/apps/backend-mock/api/system/dept/[id].delete.ts similarity index 100% rename from admin/apps/backend-mock/api/system/dept/[id].delete.ts rename to admin-vben/apps/backend-mock/api/system/dept/[id].delete.ts diff --git a/admin/apps/backend-mock/api/system/dept/[id].put.ts b/admin-vben/apps/backend-mock/api/system/dept/[id].put.ts similarity index 100% rename from admin/apps/backend-mock/api/system/dept/[id].put.ts rename to admin-vben/apps/backend-mock/api/system/dept/[id].put.ts diff --git a/admin/apps/backend-mock/api/system/dept/list.ts b/admin-vben/apps/backend-mock/api/system/dept/list.ts similarity index 100% rename from admin/apps/backend-mock/api/system/dept/list.ts rename to admin-vben/apps/backend-mock/api/system/dept/list.ts diff --git a/admin/apps/backend-mock/api/system/menu/list.ts b/admin-vben/apps/backend-mock/api/system/menu/list.ts similarity index 100% rename from admin/apps/backend-mock/api/system/menu/list.ts rename to admin-vben/apps/backend-mock/api/system/menu/list.ts diff --git a/admin/apps/backend-mock/api/system/menu/name-exists.ts b/admin-vben/apps/backend-mock/api/system/menu/name-exists.ts similarity index 100% rename from admin/apps/backend-mock/api/system/menu/name-exists.ts rename to admin-vben/apps/backend-mock/api/system/menu/name-exists.ts diff --git a/admin/apps/backend-mock/api/system/menu/path-exists.ts b/admin-vben/apps/backend-mock/api/system/menu/path-exists.ts similarity index 100% rename from admin/apps/backend-mock/api/system/menu/path-exists.ts rename to admin-vben/apps/backend-mock/api/system/menu/path-exists.ts diff --git a/admin/apps/backend-mock/api/system/role/list.ts b/admin-vben/apps/backend-mock/api/system/role/list.ts similarity index 100% rename from admin/apps/backend-mock/api/system/role/list.ts rename to admin-vben/apps/backend-mock/api/system/role/list.ts diff --git a/admin/apps/backend-mock/api/table/list.ts b/admin-vben/apps/backend-mock/api/table/list.ts similarity index 100% rename from admin/apps/backend-mock/api/table/list.ts rename to admin-vben/apps/backend-mock/api/table/list.ts diff --git a/admin/apps/backend-mock/api/test.get.ts b/admin-vben/apps/backend-mock/api/test.get.ts similarity index 100% rename from admin/apps/backend-mock/api/test.get.ts rename to admin-vben/apps/backend-mock/api/test.get.ts diff --git a/admin/apps/backend-mock/api/test.post.ts b/admin-vben/apps/backend-mock/api/test.post.ts similarity index 100% rename from admin/apps/backend-mock/api/test.post.ts rename to admin-vben/apps/backend-mock/api/test.post.ts diff --git a/admin/apps/backend-mock/api/upload.ts b/admin-vben/apps/backend-mock/api/upload.ts similarity index 100% rename from admin/apps/backend-mock/api/upload.ts rename to admin-vben/apps/backend-mock/api/upload.ts diff --git a/admin/apps/backend-mock/api/user/info.ts b/admin-vben/apps/backend-mock/api/user/info.ts similarity index 100% rename from admin/apps/backend-mock/api/user/info.ts rename to admin-vben/apps/backend-mock/api/user/info.ts diff --git a/admin/apps/backend-mock/error.ts b/admin-vben/apps/backend-mock/error.ts similarity index 100% rename from admin/apps/backend-mock/error.ts rename to admin-vben/apps/backend-mock/error.ts diff --git a/admin/apps/backend-mock/middleware/1.api.ts b/admin-vben/apps/backend-mock/middleware/1.api.ts similarity index 100% rename from admin/apps/backend-mock/middleware/1.api.ts rename to admin-vben/apps/backend-mock/middleware/1.api.ts diff --git a/admin/apps/backend-mock/nitro.config.ts b/admin-vben/apps/backend-mock/nitro.config.ts similarity index 100% rename from admin/apps/backend-mock/nitro.config.ts rename to admin-vben/apps/backend-mock/nitro.config.ts diff --git a/admin/apps/backend-mock/package.json b/admin-vben/apps/backend-mock/package.json similarity index 100% rename from admin/apps/backend-mock/package.json rename to admin-vben/apps/backend-mock/package.json diff --git a/admin/apps/backend-mock/routes/[...].ts b/admin-vben/apps/backend-mock/routes/[...].ts similarity index 100% rename from admin/apps/backend-mock/routes/[...].ts rename to admin-vben/apps/backend-mock/routes/[...].ts diff --git a/admin/apps/backend-mock/tsconfig.build.json b/admin-vben/apps/backend-mock/tsconfig.build.json similarity index 100% rename from admin/apps/backend-mock/tsconfig.build.json rename to admin-vben/apps/backend-mock/tsconfig.build.json diff --git a/admin/apps/backend-mock/tsconfig.json b/admin-vben/apps/backend-mock/tsconfig.json similarity index 100% rename from admin/apps/backend-mock/tsconfig.json rename to admin-vben/apps/backend-mock/tsconfig.json diff --git a/admin/apps/backend-mock/utils/cookie-utils.ts b/admin-vben/apps/backend-mock/utils/cookie-utils.ts similarity index 100% rename from admin/apps/backend-mock/utils/cookie-utils.ts rename to admin-vben/apps/backend-mock/utils/cookie-utils.ts diff --git a/admin/apps/backend-mock/utils/jwt-utils.ts b/admin-vben/apps/backend-mock/utils/jwt-utils.ts similarity index 100% rename from admin/apps/backend-mock/utils/jwt-utils.ts rename to admin-vben/apps/backend-mock/utils/jwt-utils.ts diff --git a/admin/apps/backend-mock/utils/mock-data.ts b/admin-vben/apps/backend-mock/utils/mock-data.ts similarity index 100% rename from admin/apps/backend-mock/utils/mock-data.ts rename to admin-vben/apps/backend-mock/utils/mock-data.ts diff --git a/admin/apps/backend-mock/utils/response.ts b/admin-vben/apps/backend-mock/utils/response.ts similarity index 100% rename from admin/apps/backend-mock/utils/response.ts rename to admin-vben/apps/backend-mock/utils/response.ts diff --git a/admin/apps/web-antd/.env.analyze b/admin-vben/apps/web-antd/.env.analyze similarity index 100% rename from admin/apps/web-antd/.env.analyze rename to admin-vben/apps/web-antd/.env.analyze diff --git a/admin/apps/web-antd/.env.development b/admin-vben/apps/web-antd/.env.development similarity index 100% rename from admin/apps/web-antd/.env.development rename to admin-vben/apps/web-antd/.env.development diff --git a/admin/apps/web-antd/.env.production b/admin-vben/apps/web-antd/.env.production similarity index 100% rename from admin/apps/web-antd/.env.production rename to admin-vben/apps/web-antd/.env.production diff --git a/admin/apps/web-antd/__tests__/e2e/auth-login.spec.ts b/admin-vben/apps/web-antd/__tests__/e2e/auth-login.spec.ts similarity index 100% rename from admin/apps/web-antd/__tests__/e2e/auth-login.spec.ts rename to admin-vben/apps/web-antd/__tests__/e2e/auth-login.spec.ts diff --git a/admin/apps/web-antd/__tests__/e2e/common/auth.ts b/admin-vben/apps/web-antd/__tests__/e2e/common/auth.ts similarity index 100% rename from admin/apps/web-antd/__tests__/e2e/common/auth.ts rename to admin-vben/apps/web-antd/__tests__/e2e/common/auth.ts diff --git a/admin/apps/web-antd/index.html b/admin-vben/apps/web-antd/index.html similarity index 100% rename from admin/apps/web-antd/index.html rename to admin-vben/apps/web-antd/index.html diff --git a/admin/apps/web-antd/package.json b/admin-vben/apps/web-antd/package.json similarity index 100% rename from admin/apps/web-antd/package.json rename to admin-vben/apps/web-antd/package.json diff --git a/admin/apps/web-antd/postcss.config.mjs b/admin-vben/apps/web-antd/postcss.config.mjs similarity index 100% rename from admin/apps/web-antd/postcss.config.mjs rename to admin-vben/apps/web-antd/postcss.config.mjs diff --git a/admin/apps/web-antd/public/favicon.ico b/admin-vben/apps/web-antd/public/favicon.ico similarity index 100% rename from admin/apps/web-antd/public/favicon.ico rename to admin-vben/apps/web-antd/public/favicon.ico diff --git a/admin/apps/web-antd/src/adapter/component/index.ts b/admin-vben/apps/web-antd/src/adapter/component/index.ts similarity index 100% rename from admin/apps/web-antd/src/adapter/component/index.ts rename to admin-vben/apps/web-antd/src/adapter/component/index.ts diff --git a/admin/apps/web-antd/src/adapter/form.ts b/admin-vben/apps/web-antd/src/adapter/form.ts similarity index 100% rename from admin/apps/web-antd/src/adapter/form.ts rename to admin-vben/apps/web-antd/src/adapter/form.ts diff --git a/admin/apps/web-antd/src/adapter/vxe-table.ts b/admin-vben/apps/web-antd/src/adapter/vxe-table.ts similarity index 100% rename from admin/apps/web-antd/src/adapter/vxe-table.ts rename to admin-vben/apps/web-antd/src/adapter/vxe-table.ts diff --git a/admin/apps/web-antd/src/addon/cms/api/article.ts b/admin-vben/apps/web-antd/src/addon/cms/api/article.ts similarity index 100% rename from admin/apps/web-antd/src/addon/cms/api/article.ts rename to admin-vben/apps/web-antd/src/addon/cms/api/article.ts diff --git a/admin/apps/web-antd/src/addon/cms/lang/zh-cn/article.category.json b/admin-vben/apps/web-antd/src/addon/cms/lang/zh-cn/article.category.json similarity index 100% rename from admin/apps/web-antd/src/addon/cms/lang/zh-cn/article.category.json rename to admin-vben/apps/web-antd/src/addon/cms/lang/zh-cn/article.category.json diff --git a/admin/apps/web-antd/src/addon/cms/lang/zh-cn/article.edit.json b/admin-vben/apps/web-antd/src/addon/cms/lang/zh-cn/article.edit.json similarity index 100% rename from admin/apps/web-antd/src/addon/cms/lang/zh-cn/article.edit.json rename to admin-vben/apps/web-antd/src/addon/cms/lang/zh-cn/article.edit.json diff --git a/admin/apps/web-antd/src/addon/cms/lang/zh-cn/article.list.json b/admin-vben/apps/web-antd/src/addon/cms/lang/zh-cn/article.list.json similarity index 100% rename from admin/apps/web-antd/src/addon/cms/lang/zh-cn/article.list.json rename to admin-vben/apps/web-antd/src/addon/cms/lang/zh-cn/article.list.json diff --git a/admin/apps/web-antd/src/addon/cms/lang/zh-cn/common.json b/admin-vben/apps/web-antd/src/addon/cms/lang/zh-cn/common.json similarity index 100% rename from admin/apps/web-antd/src/addon/cms/lang/zh-cn/common.json rename to admin-vben/apps/web-antd/src/addon/cms/lang/zh-cn/common.json diff --git a/admin/apps/web-antd/src/addon/cms/views/article/category.vue b/admin-vben/apps/web-antd/src/addon/cms/views/article/category.vue similarity index 100% rename from admin/apps/web-antd/src/addon/cms/views/article/category.vue rename to admin-vben/apps/web-antd/src/addon/cms/views/article/category.vue diff --git a/admin/apps/web-antd/src/addon/cms/views/article/components/edit-category.vue b/admin-vben/apps/web-antd/src/addon/cms/views/article/components/edit-category.vue similarity index 100% rename from admin/apps/web-antd/src/addon/cms/views/article/components/edit-category.vue rename to admin-vben/apps/web-antd/src/addon/cms/views/article/components/edit-category.vue diff --git a/admin/apps/web-antd/src/addon/cms/views/article/edit.vue b/admin-vben/apps/web-antd/src/addon/cms/views/article/edit.vue similarity index 100% rename from admin/apps/web-antd/src/addon/cms/views/article/edit.vue rename to admin-vben/apps/web-antd/src/addon/cms/views/article/edit.vue diff --git a/admin/apps/web-antd/src/addon/cms/views/article/list.vue b/admin-vben/apps/web-antd/src/addon/cms/views/article/list.vue similarity index 100% rename from admin/apps/web-antd/src/addon/cms/views/article/list.vue rename to admin-vben/apps/web-antd/src/addon/cms/views/article/list.vue diff --git a/admin/apps/web-antd/src/addon/cms/views/diy/components/edit-article.vue b/admin-vben/apps/web-antd/src/addon/cms/views/diy/components/edit-article.vue similarity index 100% rename from admin/apps/web-antd/src/addon/cms/views/diy/components/edit-article.vue rename to admin-vben/apps/web-antd/src/addon/cms/views/diy/components/edit-article.vue diff --git a/admin/apps/web-antd/src/addon/example/router/index.ts b/admin-vben/apps/web-antd/src/addon/example/router/index.ts similarity index 100% rename from admin/apps/web-antd/src/addon/example/router/index.ts rename to admin-vben/apps/web-antd/src/addon/example/router/index.ts diff --git a/admin/apps/web-antd/src/addon/example/views/dashboard.vue b/admin-vben/apps/web-antd/src/addon/example/views/dashboard.vue similarity index 100% rename from admin/apps/web-antd/src/addon/example/views/dashboard.vue rename to admin-vben/apps/web-antd/src/addon/example/views/dashboard.vue diff --git a/admin/apps/web-antd/src/addon/example/views/public.vue b/admin-vben/apps/web-antd/src/addon/example/views/public.vue similarity index 100% rename from admin/apps/web-antd/src/addon/example/views/public.vue rename to admin-vben/apps/web-antd/src/addon/example/views/public.vue diff --git a/admin/apps/web-antd/src/api/core/auth.ts b/admin-vben/apps/web-antd/src/api/core/auth.ts similarity index 100% rename from admin/apps/web-antd/src/api/core/auth.ts rename to admin-vben/apps/web-antd/src/api/core/auth.ts diff --git a/admin/apps/web-antd/src/api/core/index.ts b/admin-vben/apps/web-antd/src/api/core/index.ts similarity index 100% rename from admin/apps/web-antd/src/api/core/index.ts rename to admin-vben/apps/web-antd/src/api/core/index.ts diff --git a/admin/apps/web-antd/src/api/core/menu.ts b/admin-vben/apps/web-antd/src/api/core/menu.ts similarity index 100% rename from admin/apps/web-antd/src/api/core/menu.ts rename to admin-vben/apps/web-antd/src/api/core/menu.ts diff --git a/admin/apps/web-antd/src/api/core/user.ts b/admin-vben/apps/web-antd/src/api/core/user.ts similarity index 100% rename from admin/apps/web-antd/src/api/core/user.ts rename to admin-vben/apps/web-antd/src/api/core/user.ts diff --git a/admin/apps/web-antd/src/api/examples/download.ts b/admin-vben/apps/web-antd/src/api/examples/download.ts similarity index 100% rename from admin/apps/web-antd/src/api/examples/download.ts rename to admin-vben/apps/web-antd/src/api/examples/download.ts diff --git a/admin/apps/web-antd/src/api/examples/index.ts b/admin-vben/apps/web-antd/src/api/examples/index.ts similarity index 100% rename from admin/apps/web-antd/src/api/examples/index.ts rename to admin-vben/apps/web-antd/src/api/examples/index.ts diff --git a/admin/apps/web-antd/src/api/examples/json-bigint.ts b/admin-vben/apps/web-antd/src/api/examples/json-bigint.ts similarity index 100% rename from admin/apps/web-antd/src/api/examples/json-bigint.ts rename to admin-vben/apps/web-antd/src/api/examples/json-bigint.ts diff --git a/admin/apps/web-antd/src/api/examples/params.ts b/admin-vben/apps/web-antd/src/api/examples/params.ts similarity index 100% rename from admin/apps/web-antd/src/api/examples/params.ts rename to admin-vben/apps/web-antd/src/api/examples/params.ts diff --git a/admin/apps/web-antd/src/api/examples/status.ts b/admin-vben/apps/web-antd/src/api/examples/status.ts similarity index 100% rename from admin/apps/web-antd/src/api/examples/status.ts rename to admin-vben/apps/web-antd/src/api/examples/status.ts diff --git a/admin/apps/web-antd/src/api/examples/table.ts b/admin-vben/apps/web-antd/src/api/examples/table.ts similarity index 100% rename from admin/apps/web-antd/src/api/examples/table.ts rename to admin-vben/apps/web-antd/src/api/examples/table.ts diff --git a/admin/apps/web-antd/src/api/examples/upload.ts b/admin-vben/apps/web-antd/src/api/examples/upload.ts similarity index 100% rename from admin/apps/web-antd/src/api/examples/upload.ts rename to admin-vben/apps/web-antd/src/api/examples/upload.ts diff --git a/admin/apps/web-antd/src/api/index.ts b/admin-vben/apps/web-antd/src/api/index.ts similarity index 100% rename from admin/apps/web-antd/src/api/index.ts rename to admin-vben/apps/web-antd/src/api/index.ts diff --git a/admin/apps/web-antd/src/api/request.ts b/admin-vben/apps/web-antd/src/api/request.ts similarity index 100% rename from admin/apps/web-antd/src/api/request.ts rename to admin-vben/apps/web-antd/src/api/request.ts diff --git a/admin/apps/web-antd/src/api/site.ts b/admin-vben/apps/web-antd/src/api/site.ts similarity index 100% rename from admin/apps/web-antd/src/api/site.ts rename to admin-vben/apps/web-antd/src/api/site.ts diff --git a/admin/apps/web-antd/src/api/system/dept.ts b/admin-vben/apps/web-antd/src/api/system/dept.ts similarity index 100% rename from admin/apps/web-antd/src/api/system/dept.ts rename to admin-vben/apps/web-antd/src/api/system/dept.ts diff --git a/admin/apps/web-antd/src/api/system/index.ts b/admin-vben/apps/web-antd/src/api/system/index.ts similarity index 100% rename from admin/apps/web-antd/src/api/system/index.ts rename to admin-vben/apps/web-antd/src/api/system/index.ts diff --git a/admin/apps/web-antd/src/api/system/menu.ts b/admin-vben/apps/web-antd/src/api/system/menu.ts similarity index 100% rename from admin/apps/web-antd/src/api/system/menu.ts rename to admin-vben/apps/web-antd/src/api/system/menu.ts diff --git a/admin/apps/web-antd/src/api/system/role.ts b/admin-vben/apps/web-antd/src/api/system/role.ts similarity index 100% rename from admin/apps/web-antd/src/api/system/role.ts rename to admin-vben/apps/web-antd/src/api/system/role.ts diff --git a/admin/apps/web-antd/src/app.vue b/admin-vben/apps/web-antd/src/app.vue similarity index 100% rename from admin/apps/web-antd/src/app.vue rename to admin-vben/apps/web-antd/src/app.vue diff --git a/admin/apps/web-antd/src/bootstrap.ts b/admin-vben/apps/web-antd/src/bootstrap.ts similarity index 100% rename from admin/apps/web-antd/src/bootstrap.ts rename to admin-vben/apps/web-antd/src/bootstrap.ts diff --git a/admin/apps/web-antd/src/constants/layout.ts b/admin-vben/apps/web-antd/src/constants/layout.ts similarity index 100% rename from admin/apps/web-antd/src/constants/layout.ts rename to admin-vben/apps/web-antd/src/constants/layout.ts diff --git a/admin/apps/web-antd/src/layouts/app/admin.vue b/admin-vben/apps/web-antd/src/layouts/app/admin.vue similarity index 100% rename from admin/apps/web-antd/src/layouts/app/admin.vue rename to admin-vben/apps/web-antd/src/layouts/app/admin.vue diff --git a/admin/apps/web-antd/src/layouts/app/home.vue b/admin-vben/apps/web-antd/src/layouts/app/home.vue similarity index 100% rename from admin/apps/web-antd/src/layouts/app/home.vue rename to admin-vben/apps/web-antd/src/layouts/app/home.vue diff --git a/admin/apps/web-antd/src/layouts/app/site.vue b/admin-vben/apps/web-antd/src/layouts/app/site.vue similarity index 100% rename from admin/apps/web-antd/src/layouts/app/site.vue rename to admin-vben/apps/web-antd/src/layouts/app/site.vue diff --git a/admin/apps/web-antd/src/layouts/auth.vue b/admin-vben/apps/web-antd/src/layouts/auth.vue similarity index 100% rename from admin/apps/web-antd/src/layouts/auth.vue rename to admin-vben/apps/web-antd/src/layouts/auth.vue diff --git a/admin/apps/web-antd/src/layouts/basic.vue b/admin-vben/apps/web-antd/src/layouts/basic.vue similarity index 100% rename from admin/apps/web-antd/src/layouts/basic.vue rename to admin-vben/apps/web-antd/src/layouts/basic.vue diff --git a/admin/apps/web-antd/src/layouts/index.ts b/admin-vben/apps/web-antd/src/layouts/index.ts similarity index 100% rename from admin/apps/web-antd/src/layouts/index.ts rename to admin-vben/apps/web-antd/src/layouts/index.ts diff --git a/admin/apps/web-antd/src/locales/README.md b/admin-vben/apps/web-antd/src/locales/README.md similarity index 100% rename from admin/apps/web-antd/src/locales/README.md rename to admin-vben/apps/web-antd/src/locales/README.md diff --git a/admin/apps/web-antd/src/locales/index.ts b/admin-vben/apps/web-antd/src/locales/index.ts similarity index 100% rename from admin/apps/web-antd/src/locales/index.ts rename to admin-vben/apps/web-antd/src/locales/index.ts diff --git a/admin/apps/web-antd/src/locales/langs/en-US/demos.json b/admin-vben/apps/web-antd/src/locales/langs/en-US/demos.json similarity index 100% rename from admin/apps/web-antd/src/locales/langs/en-US/demos.json rename to admin-vben/apps/web-antd/src/locales/langs/en-US/demos.json diff --git a/admin/apps/web-antd/src/locales/langs/en-US/examples.json b/admin-vben/apps/web-antd/src/locales/langs/en-US/examples.json similarity index 100% rename from admin/apps/web-antd/src/locales/langs/en-US/examples.json rename to admin-vben/apps/web-antd/src/locales/langs/en-US/examples.json diff --git a/admin/apps/web-antd/src/locales/langs/en-US/page.json b/admin-vben/apps/web-antd/src/locales/langs/en-US/page.json similarity index 100% rename from admin/apps/web-antd/src/locales/langs/en-US/page.json rename to admin-vben/apps/web-antd/src/locales/langs/en-US/page.json diff --git a/admin/apps/web-antd/src/locales/langs/en-US/system.json b/admin-vben/apps/web-antd/src/locales/langs/en-US/system.json similarity index 100% rename from admin/apps/web-antd/src/locales/langs/en-US/system.json rename to admin-vben/apps/web-antd/src/locales/langs/en-US/system.json diff --git a/admin/apps/web-antd/src/locales/langs/zh-CN/demos.json b/admin-vben/apps/web-antd/src/locales/langs/zh-CN/demos.json similarity index 100% rename from admin/apps/web-antd/src/locales/langs/zh-CN/demos.json rename to admin-vben/apps/web-antd/src/locales/langs/zh-CN/demos.json diff --git a/admin/apps/web-antd/src/locales/langs/zh-CN/examples.json b/admin-vben/apps/web-antd/src/locales/langs/zh-CN/examples.json similarity index 100% rename from admin/apps/web-antd/src/locales/langs/zh-CN/examples.json rename to admin-vben/apps/web-antd/src/locales/langs/zh-CN/examples.json diff --git a/admin/apps/web-antd/src/locales/langs/zh-CN/page.json b/admin-vben/apps/web-antd/src/locales/langs/zh-CN/page.json similarity index 100% rename from admin/apps/web-antd/src/locales/langs/zh-CN/page.json rename to admin-vben/apps/web-antd/src/locales/langs/zh-CN/page.json diff --git a/admin/apps/web-antd/src/locales/langs/zh-CN/system.json b/admin-vben/apps/web-antd/src/locales/langs/zh-CN/system.json similarity index 100% rename from admin/apps/web-antd/src/locales/langs/zh-CN/system.json rename to admin-vben/apps/web-antd/src/locales/langs/zh-CN/system.json diff --git a/admin/apps/web-antd/src/main.ts b/admin-vben/apps/web-antd/src/main.ts similarity index 100% rename from admin/apps/web-antd/src/main.ts rename to admin-vben/apps/web-antd/src/main.ts diff --git a/admin/apps/web-antd/src/preferences.ts b/admin-vben/apps/web-antd/src/preferences.ts similarity index 100% rename from admin/apps/web-antd/src/preferences.ts rename to admin-vben/apps/web-antd/src/preferences.ts diff --git a/admin/apps/web-antd/src/router/access.ts b/admin-vben/apps/web-antd/src/router/access.ts similarity index 100% rename from admin/apps/web-antd/src/router/access.ts rename to admin-vben/apps/web-antd/src/router/access.ts diff --git a/admin/apps/web-antd/src/router/guard.ts b/admin-vben/apps/web-antd/src/router/guard.ts similarity index 100% rename from admin/apps/web-antd/src/router/guard.ts rename to admin-vben/apps/web-antd/src/router/guard.ts diff --git a/admin/apps/web-antd/src/router/index.ts b/admin-vben/apps/web-antd/src/router/index.ts similarity index 100% rename from admin/apps/web-antd/src/router/index.ts rename to admin-vben/apps/web-antd/src/router/index.ts diff --git a/admin/apps/web-antd/src/router/routes/core.ts b/admin-vben/apps/web-antd/src/router/routes/core.ts similarity index 100% rename from admin/apps/web-antd/src/router/routes/core.ts rename to admin-vben/apps/web-antd/src/router/routes/core.ts diff --git a/admin/apps/web-antd/src/router/routes/index.ts b/admin-vben/apps/web-antd/src/router/routes/index.ts similarity index 100% rename from admin/apps/web-antd/src/router/routes/index.ts rename to admin-vben/apps/web-antd/src/router/routes/index.ts diff --git a/admin/apps/web-antd/src/router/routes/modules/admin-setting.ts b/admin-vben/apps/web-antd/src/router/routes/modules/admin-setting.ts similarity index 100% rename from admin/apps/web-antd/src/router/routes/modules/admin-setting.ts rename to admin-vben/apps/web-antd/src/router/routes/modules/admin-setting.ts diff --git a/admin/apps/web-antd/src/router/routes/modules/app-entries.ts b/admin-vben/apps/web-antd/src/router/routes/modules/app-entries.ts similarity index 100% rename from admin/apps/web-antd/src/router/routes/modules/app-entries.ts rename to admin-vben/apps/web-antd/src/router/routes/modules/app-entries.ts diff --git a/admin/apps/web-antd/src/router/routes/modules/dashboard.ts b/admin-vben/apps/web-antd/src/router/routes/modules/dashboard.ts similarity index 100% rename from admin/apps/web-antd/src/router/routes/modules/dashboard.ts rename to admin-vben/apps/web-antd/src/router/routes/modules/dashboard.ts diff --git a/admin/apps/web-antd/src/router/routes/modules/demos.ts b/admin-vben/apps/web-antd/src/router/routes/modules/demos.ts similarity index 100% rename from admin/apps/web-antd/src/router/routes/modules/demos.ts rename to admin-vben/apps/web-antd/src/router/routes/modules/demos.ts diff --git a/admin/apps/web-antd/src/router/routes/modules/examples.ts b/admin-vben/apps/web-antd/src/router/routes/modules/examples.ts similarity index 100% rename from admin/apps/web-antd/src/router/routes/modules/examples.ts rename to admin-vben/apps/web-antd/src/router/routes/modules/examples.ts diff --git a/admin/apps/web-antd/src/router/routes/modules/site.ts b/admin-vben/apps/web-antd/src/router/routes/modules/site.ts similarity index 100% rename from admin/apps/web-antd/src/router/routes/modules/site.ts rename to admin-vben/apps/web-antd/src/router/routes/modules/site.ts diff --git a/admin/apps/web-antd/src/router/routes/modules/system.ts b/admin-vben/apps/web-antd/src/router/routes/modules/system.ts similarity index 100% rename from admin/apps/web-antd/src/router/routes/modules/system.ts rename to admin-vben/apps/web-antd/src/router/routes/modules/system.ts diff --git a/admin/apps/web-antd/src/router/routes/modules/vben.ts b/admin-vben/apps/web-antd/src/router/routes/modules/vben.ts similarity index 100% rename from admin/apps/web-antd/src/router/routes/modules/vben.ts rename to admin-vben/apps/web-antd/src/router/routes/modules/vben.ts diff --git a/admin/apps/web-antd/src/store/auth.ts b/admin-vben/apps/web-antd/src/store/auth.ts similarity index 100% rename from admin/apps/web-antd/src/store/auth.ts rename to admin-vben/apps/web-antd/src/store/auth.ts diff --git a/admin/apps/web-antd/src/store/index.ts b/admin-vben/apps/web-antd/src/store/index.ts similarity index 100% rename from admin/apps/web-antd/src/store/index.ts rename to admin-vben/apps/web-antd/src/store/index.ts diff --git a/admin/apps/web-antd/src/views/_core/README.md b/admin-vben/apps/web-antd/src/views/_core/README.md similarity index 100% rename from admin/apps/web-antd/src/views/_core/README.md rename to admin-vben/apps/web-antd/src/views/_core/README.md diff --git a/admin/apps/web-antd/src/views/_core/about/index.vue b/admin-vben/apps/web-antd/src/views/_core/about/index.vue similarity index 100% rename from admin/apps/web-antd/src/views/_core/about/index.vue rename to admin-vben/apps/web-antd/src/views/_core/about/index.vue diff --git a/admin/apps/web-antd/src/views/_core/authentication/code-login.vue b/admin-vben/apps/web-antd/src/views/_core/authentication/code-login.vue similarity index 100% rename from admin/apps/web-antd/src/views/_core/authentication/code-login.vue rename to admin-vben/apps/web-antd/src/views/_core/authentication/code-login.vue diff --git a/admin/apps/web-antd/src/views/_core/authentication/forget-password.vue b/admin-vben/apps/web-antd/src/views/_core/authentication/forget-password.vue similarity index 100% rename from admin/apps/web-antd/src/views/_core/authentication/forget-password.vue rename to admin-vben/apps/web-antd/src/views/_core/authentication/forget-password.vue diff --git a/admin/apps/web-antd/src/views/_core/authentication/login.vue b/admin-vben/apps/web-antd/src/views/_core/authentication/login.vue similarity index 100% rename from admin/apps/web-antd/src/views/_core/authentication/login.vue rename to admin-vben/apps/web-antd/src/views/_core/authentication/login.vue diff --git a/admin/apps/web-antd/src/views/_core/authentication/qrcode-login.vue b/admin-vben/apps/web-antd/src/views/_core/authentication/qrcode-login.vue similarity index 100% rename from admin/apps/web-antd/src/views/_core/authentication/qrcode-login.vue rename to admin-vben/apps/web-antd/src/views/_core/authentication/qrcode-login.vue diff --git a/admin/apps/web-antd/src/views/_core/authentication/register.vue b/admin-vben/apps/web-antd/src/views/_core/authentication/register.vue similarity index 100% rename from admin/apps/web-antd/src/views/_core/authentication/register.vue rename to admin-vben/apps/web-antd/src/views/_core/authentication/register.vue diff --git a/admin/apps/web-antd/src/views/_core/fallback/coming-soon.vue b/admin-vben/apps/web-antd/src/views/_core/fallback/coming-soon.vue similarity index 100% rename from admin/apps/web-antd/src/views/_core/fallback/coming-soon.vue rename to admin-vben/apps/web-antd/src/views/_core/fallback/coming-soon.vue diff --git a/admin/apps/web-antd/src/views/_core/fallback/forbidden.vue b/admin-vben/apps/web-antd/src/views/_core/fallback/forbidden.vue similarity index 100% rename from admin/apps/web-antd/src/views/_core/fallback/forbidden.vue rename to admin-vben/apps/web-antd/src/views/_core/fallback/forbidden.vue diff --git a/admin/apps/web-antd/src/views/_core/fallback/internal-error.vue b/admin-vben/apps/web-antd/src/views/_core/fallback/internal-error.vue similarity index 100% rename from admin/apps/web-antd/src/views/_core/fallback/internal-error.vue rename to admin-vben/apps/web-antd/src/views/_core/fallback/internal-error.vue diff --git a/admin/apps/web-antd/src/views/_core/fallback/not-found.vue b/admin-vben/apps/web-antd/src/views/_core/fallback/not-found.vue similarity index 100% rename from admin/apps/web-antd/src/views/_core/fallback/not-found.vue rename to admin-vben/apps/web-antd/src/views/_core/fallback/not-found.vue diff --git a/admin/apps/web-antd/src/views/_core/fallback/offline.vue b/admin-vben/apps/web-antd/src/views/_core/fallback/offline.vue similarity index 100% rename from admin/apps/web-antd/src/views/_core/fallback/offline.vue rename to admin-vben/apps/web-antd/src/views/_core/fallback/offline.vue diff --git a/admin/apps/web-antd/src/views/admin/setting/layout/index.vue b/admin-vben/apps/web-antd/src/views/admin/setting/layout/index.vue similarity index 100% rename from admin/apps/web-antd/src/views/admin/setting/layout/index.vue rename to admin-vben/apps/web-antd/src/views/admin/setting/layout/index.vue diff --git a/admin/apps/web-antd/src/views/app/admin/index.vue b/admin-vben/apps/web-antd/src/views/app/admin/index.vue similarity index 100% rename from admin/apps/web-antd/src/views/app/admin/index.vue rename to admin-vben/apps/web-antd/src/views/app/admin/index.vue diff --git a/admin/apps/web-antd/src/views/app/home/index.vue b/admin-vben/apps/web-antd/src/views/app/home/index.vue similarity index 100% rename from admin/apps/web-antd/src/views/app/home/index.vue rename to admin-vben/apps/web-antd/src/views/app/home/index.vue diff --git a/admin/apps/web-antd/src/views/app/site/index.vue b/admin-vben/apps/web-antd/src/views/app/site/index.vue similarity index 100% rename from admin/apps/web-antd/src/views/app/site/index.vue rename to admin-vben/apps/web-antd/src/views/app/site/index.vue diff --git a/admin/apps/web-antd/src/views/dashboard/analytics/analytics-trends.vue b/admin-vben/apps/web-antd/src/views/dashboard/analytics/analytics-trends.vue similarity index 100% rename from admin/apps/web-antd/src/views/dashboard/analytics/analytics-trends.vue rename to admin-vben/apps/web-antd/src/views/dashboard/analytics/analytics-trends.vue diff --git a/admin/apps/web-antd/src/views/dashboard/analytics/analytics-visits-data.vue b/admin-vben/apps/web-antd/src/views/dashboard/analytics/analytics-visits-data.vue similarity index 100% rename from admin/apps/web-antd/src/views/dashboard/analytics/analytics-visits-data.vue rename to admin-vben/apps/web-antd/src/views/dashboard/analytics/analytics-visits-data.vue diff --git a/admin/apps/web-antd/src/views/dashboard/analytics/analytics-visits-sales.vue b/admin-vben/apps/web-antd/src/views/dashboard/analytics/analytics-visits-sales.vue similarity index 100% rename from admin/apps/web-antd/src/views/dashboard/analytics/analytics-visits-sales.vue rename to admin-vben/apps/web-antd/src/views/dashboard/analytics/analytics-visits-sales.vue diff --git a/admin/apps/web-antd/src/views/dashboard/analytics/analytics-visits-source.vue b/admin-vben/apps/web-antd/src/views/dashboard/analytics/analytics-visits-source.vue similarity index 100% rename from admin/apps/web-antd/src/views/dashboard/analytics/analytics-visits-source.vue rename to admin-vben/apps/web-antd/src/views/dashboard/analytics/analytics-visits-source.vue diff --git a/admin/apps/web-antd/src/views/dashboard/analytics/analytics-visits.vue b/admin-vben/apps/web-antd/src/views/dashboard/analytics/analytics-visits.vue similarity index 100% rename from admin/apps/web-antd/src/views/dashboard/analytics/analytics-visits.vue rename to admin-vben/apps/web-antd/src/views/dashboard/analytics/analytics-visits.vue diff --git a/admin/apps/web-antd/src/views/dashboard/analytics/index.vue b/admin-vben/apps/web-antd/src/views/dashboard/analytics/index.vue similarity index 100% rename from admin/apps/web-antd/src/views/dashboard/analytics/index.vue rename to admin-vben/apps/web-antd/src/views/dashboard/analytics/index.vue diff --git a/admin/apps/web-antd/src/views/dashboard/workspace/index.vue b/admin-vben/apps/web-antd/src/views/dashboard/workspace/index.vue similarity index 100% rename from admin/apps/web-antd/src/views/dashboard/workspace/index.vue rename to admin-vben/apps/web-antd/src/views/dashboard/workspace/index.vue diff --git a/admin/apps/web-antd/src/views/demos/access/admin-visible.vue b/admin-vben/apps/web-antd/src/views/demos/access/admin-visible.vue similarity index 100% rename from admin/apps/web-antd/src/views/demos/access/admin-visible.vue rename to admin-vben/apps/web-antd/src/views/demos/access/admin-visible.vue diff --git a/admin/apps/web-antd/src/views/demos/access/button-control.vue b/admin-vben/apps/web-antd/src/views/demos/access/button-control.vue similarity index 100% rename from admin/apps/web-antd/src/views/demos/access/button-control.vue rename to admin-vben/apps/web-antd/src/views/demos/access/button-control.vue diff --git a/admin/apps/web-antd/src/views/demos/access/index.vue b/admin-vben/apps/web-antd/src/views/demos/access/index.vue similarity index 100% rename from admin/apps/web-antd/src/views/demos/access/index.vue rename to admin-vben/apps/web-antd/src/views/demos/access/index.vue diff --git a/admin/apps/web-antd/src/views/demos/access/menu-visible-403.vue b/admin-vben/apps/web-antd/src/views/demos/access/menu-visible-403.vue similarity index 100% rename from admin/apps/web-antd/src/views/demos/access/menu-visible-403.vue rename to admin-vben/apps/web-antd/src/views/demos/access/menu-visible-403.vue diff --git a/admin/apps/web-antd/src/views/demos/access/super-visible.vue b/admin-vben/apps/web-antd/src/views/demos/access/super-visible.vue similarity index 100% rename from admin/apps/web-antd/src/views/demos/access/super-visible.vue rename to admin-vben/apps/web-antd/src/views/demos/access/super-visible.vue diff --git a/admin/apps/web-antd/src/views/demos/access/user-visible.vue b/admin-vben/apps/web-antd/src/views/demos/access/user-visible.vue similarity index 100% rename from admin/apps/web-antd/src/views/demos/access/user-visible.vue rename to admin-vben/apps/web-antd/src/views/demos/access/user-visible.vue diff --git a/admin/apps/web-antd/src/views/demos/active-icon/index.vue b/admin-vben/apps/web-antd/src/views/demos/active-icon/index.vue similarity index 100% rename from admin/apps/web-antd/src/views/demos/active-icon/index.vue rename to admin-vben/apps/web-antd/src/views/demos/active-icon/index.vue diff --git a/admin/apps/web-antd/src/views/demos/badge/index.vue b/admin-vben/apps/web-antd/src/views/demos/badge/index.vue similarity index 100% rename from admin/apps/web-antd/src/views/demos/badge/index.vue rename to admin-vben/apps/web-antd/src/views/demos/badge/index.vue diff --git a/admin/apps/web-antd/src/views/demos/breadcrumb/lateral-detail.vue b/admin-vben/apps/web-antd/src/views/demos/breadcrumb/lateral-detail.vue similarity index 100% rename from admin/apps/web-antd/src/views/demos/breadcrumb/lateral-detail.vue rename to admin-vben/apps/web-antd/src/views/demos/breadcrumb/lateral-detail.vue diff --git a/admin/apps/web-antd/src/views/demos/breadcrumb/lateral.vue b/admin-vben/apps/web-antd/src/views/demos/breadcrumb/lateral.vue similarity index 100% rename from admin/apps/web-antd/src/views/demos/breadcrumb/lateral.vue rename to admin-vben/apps/web-antd/src/views/demos/breadcrumb/lateral.vue diff --git a/admin/apps/web-antd/src/views/demos/breadcrumb/level-detail.vue b/admin-vben/apps/web-antd/src/views/demos/breadcrumb/level-detail.vue similarity index 100% rename from admin/apps/web-antd/src/views/demos/breadcrumb/level-detail.vue rename to admin-vben/apps/web-antd/src/views/demos/breadcrumb/level-detail.vue diff --git a/admin/apps/web-antd/src/views/demos/features/clipboard/index.vue b/admin-vben/apps/web-antd/src/views/demos/features/clipboard/index.vue similarity index 100% rename from admin/apps/web-antd/src/views/demos/features/clipboard/index.vue rename to admin-vben/apps/web-antd/src/views/demos/features/clipboard/index.vue diff --git a/admin/apps/web-antd/src/views/demos/features/file-download/base64.ts b/admin-vben/apps/web-antd/src/views/demos/features/file-download/base64.ts similarity index 100% rename from admin/apps/web-antd/src/views/demos/features/file-download/base64.ts rename to admin-vben/apps/web-antd/src/views/demos/features/file-download/base64.ts diff --git a/admin/apps/web-antd/src/views/demos/features/file-download/index.vue b/admin-vben/apps/web-antd/src/views/demos/features/file-download/index.vue similarity index 100% rename from admin/apps/web-antd/src/views/demos/features/file-download/index.vue rename to admin-vben/apps/web-antd/src/views/demos/features/file-download/index.vue diff --git a/admin/apps/web-antd/src/views/demos/features/full-screen/index.vue b/admin-vben/apps/web-antd/src/views/demos/features/full-screen/index.vue similarity index 100% rename from admin/apps/web-antd/src/views/demos/features/full-screen/index.vue rename to admin-vben/apps/web-antd/src/views/demos/features/full-screen/index.vue diff --git a/admin/apps/web-antd/src/views/demos/features/hide-menu-children/children.vue b/admin-vben/apps/web-antd/src/views/demos/features/hide-menu-children/children.vue similarity index 100% rename from admin/apps/web-antd/src/views/demos/features/hide-menu-children/children.vue rename to admin-vben/apps/web-antd/src/views/demos/features/hide-menu-children/children.vue diff --git a/admin/apps/web-antd/src/views/demos/features/hide-menu-children/parent.vue b/admin-vben/apps/web-antd/src/views/demos/features/hide-menu-children/parent.vue similarity index 100% rename from admin/apps/web-antd/src/views/demos/features/hide-menu-children/parent.vue rename to admin-vben/apps/web-antd/src/views/demos/features/hide-menu-children/parent.vue diff --git a/admin/apps/web-antd/src/views/demos/features/icons/index.vue b/admin-vben/apps/web-antd/src/views/demos/features/icons/index.vue similarity index 100% rename from admin/apps/web-antd/src/views/demos/features/icons/index.vue rename to admin-vben/apps/web-antd/src/views/demos/features/icons/index.vue diff --git a/admin/apps/web-antd/src/views/demos/features/json-bigint/index.vue b/admin-vben/apps/web-antd/src/views/demos/features/json-bigint/index.vue similarity index 100% rename from admin/apps/web-antd/src/views/demos/features/json-bigint/index.vue rename to admin-vben/apps/web-antd/src/views/demos/features/json-bigint/index.vue diff --git a/admin/apps/web-antd/src/views/demos/features/login-expired/index.vue b/admin-vben/apps/web-antd/src/views/demos/features/login-expired/index.vue similarity index 100% rename from admin/apps/web-antd/src/views/demos/features/login-expired/index.vue rename to admin-vben/apps/web-antd/src/views/demos/features/login-expired/index.vue diff --git a/admin/apps/web-antd/src/views/demos/features/menu-query/index.vue b/admin-vben/apps/web-antd/src/views/demos/features/menu-query/index.vue similarity index 100% rename from admin/apps/web-antd/src/views/demos/features/menu-query/index.vue rename to admin-vben/apps/web-antd/src/views/demos/features/menu-query/index.vue diff --git a/admin/apps/web-antd/src/views/demos/features/new-window/index.vue b/admin-vben/apps/web-antd/src/views/demos/features/new-window/index.vue similarity index 100% rename from admin/apps/web-antd/src/views/demos/features/new-window/index.vue rename to admin-vben/apps/web-antd/src/views/demos/features/new-window/index.vue diff --git a/admin/apps/web-antd/src/views/demos/features/request-params-serializer/index.vue b/admin-vben/apps/web-antd/src/views/demos/features/request-params-serializer/index.vue similarity index 100% rename from admin/apps/web-antd/src/views/demos/features/request-params-serializer/index.vue rename to admin-vben/apps/web-antd/src/views/demos/features/request-params-serializer/index.vue diff --git a/admin/apps/web-antd/src/views/demos/features/tabs/index.vue b/admin-vben/apps/web-antd/src/views/demos/features/tabs/index.vue similarity index 100% rename from admin/apps/web-antd/src/views/demos/features/tabs/index.vue rename to admin-vben/apps/web-antd/src/views/demos/features/tabs/index.vue diff --git a/admin/apps/web-antd/src/views/demos/features/tabs/tab-detail.vue b/admin-vben/apps/web-antd/src/views/demos/features/tabs/tab-detail.vue similarity index 100% rename from admin/apps/web-antd/src/views/demos/features/tabs/tab-detail.vue rename to admin-vben/apps/web-antd/src/views/demos/features/tabs/tab-detail.vue diff --git a/admin/apps/web-antd/src/views/demos/features/vue-query/concurrency-caching.vue b/admin-vben/apps/web-antd/src/views/demos/features/vue-query/concurrency-caching.vue similarity index 100% rename from admin/apps/web-antd/src/views/demos/features/vue-query/concurrency-caching.vue rename to admin-vben/apps/web-antd/src/views/demos/features/vue-query/concurrency-caching.vue diff --git a/admin/apps/web-antd/src/views/demos/features/vue-query/index.vue b/admin-vben/apps/web-antd/src/views/demos/features/vue-query/index.vue similarity index 100% rename from admin/apps/web-antd/src/views/demos/features/vue-query/index.vue rename to admin-vben/apps/web-antd/src/views/demos/features/vue-query/index.vue diff --git a/admin/apps/web-antd/src/views/demos/features/vue-query/infinite-queries.vue b/admin-vben/apps/web-antd/src/views/demos/features/vue-query/infinite-queries.vue similarity index 100% rename from admin/apps/web-antd/src/views/demos/features/vue-query/infinite-queries.vue rename to admin-vben/apps/web-antd/src/views/demos/features/vue-query/infinite-queries.vue diff --git a/admin/apps/web-antd/src/views/demos/features/vue-query/paginated-queries.vue b/admin-vben/apps/web-antd/src/views/demos/features/vue-query/paginated-queries.vue similarity index 100% rename from admin/apps/web-antd/src/views/demos/features/vue-query/paginated-queries.vue rename to admin-vben/apps/web-antd/src/views/demos/features/vue-query/paginated-queries.vue diff --git a/admin/apps/web-antd/src/views/demos/features/vue-query/query-retries.vue b/admin-vben/apps/web-antd/src/views/demos/features/vue-query/query-retries.vue similarity index 100% rename from admin/apps/web-antd/src/views/demos/features/vue-query/query-retries.vue rename to admin-vben/apps/web-antd/src/views/demos/features/vue-query/query-retries.vue diff --git a/admin/apps/web-antd/src/views/demos/features/vue-query/typing.ts b/admin-vben/apps/web-antd/src/views/demos/features/vue-query/typing.ts similarity index 100% rename from admin/apps/web-antd/src/views/demos/features/vue-query/typing.ts rename to admin-vben/apps/web-antd/src/views/demos/features/vue-query/typing.ts diff --git a/admin/apps/web-antd/src/views/demos/features/watermark/index.vue b/admin-vben/apps/web-antd/src/views/demos/features/watermark/index.vue similarity index 100% rename from admin/apps/web-antd/src/views/demos/features/watermark/index.vue rename to admin-vben/apps/web-antd/src/views/demos/features/watermark/index.vue diff --git a/admin/apps/web-antd/src/views/demos/nested/menu-1.vue b/admin-vben/apps/web-antd/src/views/demos/nested/menu-1.vue similarity index 100% rename from admin/apps/web-antd/src/views/demos/nested/menu-1.vue rename to admin-vben/apps/web-antd/src/views/demos/nested/menu-1.vue diff --git a/admin/apps/web-antd/src/views/demos/nested/menu-2-1.vue b/admin-vben/apps/web-antd/src/views/demos/nested/menu-2-1.vue similarity index 100% rename from admin/apps/web-antd/src/views/demos/nested/menu-2-1.vue rename to admin-vben/apps/web-antd/src/views/demos/nested/menu-2-1.vue diff --git a/admin/apps/web-antd/src/views/demos/nested/menu-3-1.vue b/admin-vben/apps/web-antd/src/views/demos/nested/menu-3-1.vue similarity index 100% rename from admin/apps/web-antd/src/views/demos/nested/menu-3-1.vue rename to admin-vben/apps/web-antd/src/views/demos/nested/menu-3-1.vue diff --git a/admin/apps/web-antd/src/views/demos/nested/menu-3-2-1.vue b/admin-vben/apps/web-antd/src/views/demos/nested/menu-3-2-1.vue similarity index 100% rename from admin/apps/web-antd/src/views/demos/nested/menu-3-2-1.vue rename to admin-vben/apps/web-antd/src/views/demos/nested/menu-3-2-1.vue diff --git a/admin/apps/web-antd/src/views/examples/button-group/index.vue b/admin-vben/apps/web-antd/src/views/examples/button-group/index.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/button-group/index.vue rename to admin-vben/apps/web-antd/src/views/examples/button-group/index.vue diff --git a/admin/apps/web-antd/src/views/examples/captcha/point-selection-captcha.vue b/admin-vben/apps/web-antd/src/views/examples/captcha/point-selection-captcha.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/captcha/point-selection-captcha.vue rename to admin-vben/apps/web-antd/src/views/examples/captcha/point-selection-captcha.vue diff --git a/admin/apps/web-antd/src/views/examples/captcha/slider-captcha.vue b/admin-vben/apps/web-antd/src/views/examples/captcha/slider-captcha.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/captcha/slider-captcha.vue rename to admin-vben/apps/web-antd/src/views/examples/captcha/slider-captcha.vue diff --git a/admin/apps/web-antd/src/views/examples/captcha/slider-rotate-captcha.vue b/admin-vben/apps/web-antd/src/views/examples/captcha/slider-rotate-captcha.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/captcha/slider-rotate-captcha.vue rename to admin-vben/apps/web-antd/src/views/examples/captcha/slider-rotate-captcha.vue diff --git a/admin/apps/web-antd/src/views/examples/captcha/slider-translate-captcha.vue b/admin-vben/apps/web-antd/src/views/examples/captcha/slider-translate-captcha.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/captcha/slider-translate-captcha.vue rename to admin-vben/apps/web-antd/src/views/examples/captcha/slider-translate-captcha.vue diff --git a/admin/apps/web-antd/src/views/examples/count-to/index.vue b/admin-vben/apps/web-antd/src/views/examples/count-to/index.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/count-to/index.vue rename to admin-vben/apps/web-antd/src/views/examples/count-to/index.vue diff --git a/admin/apps/web-antd/src/views/examples/doc-button.vue b/admin-vben/apps/web-antd/src/views/examples/doc-button.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/doc-button.vue rename to admin-vben/apps/web-antd/src/views/examples/doc-button.vue diff --git a/admin/apps/web-antd/src/views/examples/drawer/auto-height-demo.vue b/admin-vben/apps/web-antd/src/views/examples/drawer/auto-height-demo.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/drawer/auto-height-demo.vue rename to admin-vben/apps/web-antd/src/views/examples/drawer/auto-height-demo.vue diff --git a/admin/apps/web-antd/src/views/examples/drawer/base-demo.vue b/admin-vben/apps/web-antd/src/views/examples/drawer/base-demo.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/drawer/base-demo.vue rename to admin-vben/apps/web-antd/src/views/examples/drawer/base-demo.vue diff --git a/admin/apps/web-antd/src/views/examples/drawer/dynamic-demo.vue b/admin-vben/apps/web-antd/src/views/examples/drawer/dynamic-demo.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/drawer/dynamic-demo.vue rename to admin-vben/apps/web-antd/src/views/examples/drawer/dynamic-demo.vue diff --git a/admin/apps/web-antd/src/views/examples/drawer/form-drawer-demo.vue b/admin-vben/apps/web-antd/src/views/examples/drawer/form-drawer-demo.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/drawer/form-drawer-demo.vue rename to admin-vben/apps/web-antd/src/views/examples/drawer/form-drawer-demo.vue diff --git a/admin/apps/web-antd/src/views/examples/drawer/in-content-demo.vue b/admin-vben/apps/web-antd/src/views/examples/drawer/in-content-demo.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/drawer/in-content-demo.vue rename to admin-vben/apps/web-antd/src/views/examples/drawer/in-content-demo.vue diff --git a/admin/apps/web-antd/src/views/examples/drawer/index.vue b/admin-vben/apps/web-antd/src/views/examples/drawer/index.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/drawer/index.vue rename to admin-vben/apps/web-antd/src/views/examples/drawer/index.vue diff --git a/admin/apps/web-antd/src/views/examples/drawer/shared-data-demo.vue b/admin-vben/apps/web-antd/src/views/examples/drawer/shared-data-demo.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/drawer/shared-data-demo.vue rename to admin-vben/apps/web-antd/src/views/examples/drawer/shared-data-demo.vue diff --git a/admin/apps/web-antd/src/views/examples/ellipsis/index.vue b/admin-vben/apps/web-antd/src/views/examples/ellipsis/index.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/ellipsis/index.vue rename to admin-vben/apps/web-antd/src/views/examples/ellipsis/index.vue diff --git a/admin/apps/web-antd/src/views/examples/form/api.vue b/admin-vben/apps/web-antd/src/views/examples/form/api.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/form/api.vue rename to admin-vben/apps/web-antd/src/views/examples/form/api.vue diff --git a/admin/apps/web-antd/src/views/examples/form/basic.vue b/admin-vben/apps/web-antd/src/views/examples/form/basic.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/form/basic.vue rename to admin-vben/apps/web-antd/src/views/examples/form/basic.vue diff --git a/admin/apps/web-antd/src/views/examples/form/custom-layout.vue b/admin-vben/apps/web-antd/src/views/examples/form/custom-layout.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/form/custom-layout.vue rename to admin-vben/apps/web-antd/src/views/examples/form/custom-layout.vue diff --git a/admin/apps/web-antd/src/views/examples/form/custom.vue b/admin-vben/apps/web-antd/src/views/examples/form/custom.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/form/custom.vue rename to admin-vben/apps/web-antd/src/views/examples/form/custom.vue diff --git a/admin/apps/web-antd/src/views/examples/form/dynamic.vue b/admin-vben/apps/web-antd/src/views/examples/form/dynamic.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/form/dynamic.vue rename to admin-vben/apps/web-antd/src/views/examples/form/dynamic.vue diff --git a/admin/apps/web-antd/src/views/examples/form/merge.vue b/admin-vben/apps/web-antd/src/views/examples/form/merge.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/form/merge.vue rename to admin-vben/apps/web-antd/src/views/examples/form/merge.vue diff --git a/admin/apps/web-antd/src/views/examples/form/modules/two-fields.vue b/admin-vben/apps/web-antd/src/views/examples/form/modules/two-fields.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/form/modules/two-fields.vue rename to admin-vben/apps/web-antd/src/views/examples/form/modules/two-fields.vue diff --git a/admin/apps/web-antd/src/views/examples/form/query.vue b/admin-vben/apps/web-antd/src/views/examples/form/query.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/form/query.vue rename to admin-vben/apps/web-antd/src/views/examples/form/query.vue diff --git a/admin/apps/web-antd/src/views/examples/form/rules.vue b/admin-vben/apps/web-antd/src/views/examples/form/rules.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/form/rules.vue rename to admin-vben/apps/web-antd/src/views/examples/form/rules.vue diff --git a/admin/apps/web-antd/src/views/examples/form/scroll-to-error-test.vue b/admin-vben/apps/web-antd/src/views/examples/form/scroll-to-error-test.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/form/scroll-to-error-test.vue rename to admin-vben/apps/web-antd/src/views/examples/form/scroll-to-error-test.vue diff --git a/admin/apps/web-antd/src/views/examples/json-viewer/data.ts b/admin-vben/apps/web-antd/src/views/examples/json-viewer/data.ts similarity index 100% rename from admin/apps/web-antd/src/views/examples/json-viewer/data.ts rename to admin-vben/apps/web-antd/src/views/examples/json-viewer/data.ts diff --git a/admin/apps/web-antd/src/views/examples/json-viewer/index.vue b/admin-vben/apps/web-antd/src/views/examples/json-viewer/index.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/json-viewer/index.vue rename to admin-vben/apps/web-antd/src/views/examples/json-viewer/index.vue diff --git a/admin/apps/web-antd/src/views/examples/layout/col-page.vue b/admin-vben/apps/web-antd/src/views/examples/layout/col-page.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/layout/col-page.vue rename to admin-vben/apps/web-antd/src/views/examples/layout/col-page.vue diff --git a/admin/apps/web-antd/src/views/examples/loading/index.vue b/admin-vben/apps/web-antd/src/views/examples/loading/index.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/loading/index.vue rename to admin-vben/apps/web-antd/src/views/examples/loading/index.vue diff --git a/admin/apps/web-antd/src/views/examples/modal/auto-height-demo.vue b/admin-vben/apps/web-antd/src/views/examples/modal/auto-height-demo.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/modal/auto-height-demo.vue rename to admin-vben/apps/web-antd/src/views/examples/modal/auto-height-demo.vue diff --git a/admin/apps/web-antd/src/views/examples/modal/base-demo.vue b/admin-vben/apps/web-antd/src/views/examples/modal/base-demo.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/modal/base-demo.vue rename to admin-vben/apps/web-antd/src/views/examples/modal/base-demo.vue diff --git a/admin/apps/web-antd/src/views/examples/modal/blur-demo.vue b/admin-vben/apps/web-antd/src/views/examples/modal/blur-demo.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/modal/blur-demo.vue rename to admin-vben/apps/web-antd/src/views/examples/modal/blur-demo.vue diff --git a/admin/apps/web-antd/src/views/examples/modal/drag-demo.vue b/admin-vben/apps/web-antd/src/views/examples/modal/drag-demo.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/modal/drag-demo.vue rename to admin-vben/apps/web-antd/src/views/examples/modal/drag-demo.vue diff --git a/admin/apps/web-antd/src/views/examples/modal/dynamic-demo.vue b/admin-vben/apps/web-antd/src/views/examples/modal/dynamic-demo.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/modal/dynamic-demo.vue rename to admin-vben/apps/web-antd/src/views/examples/modal/dynamic-demo.vue diff --git a/admin/apps/web-antd/src/views/examples/modal/form-modal-demo.vue b/admin-vben/apps/web-antd/src/views/examples/modal/form-modal-demo.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/modal/form-modal-demo.vue rename to admin-vben/apps/web-antd/src/views/examples/modal/form-modal-demo.vue diff --git a/admin/apps/web-antd/src/views/examples/modal/in-content-demo.vue b/admin-vben/apps/web-antd/src/views/examples/modal/in-content-demo.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/modal/in-content-demo.vue rename to admin-vben/apps/web-antd/src/views/examples/modal/in-content-demo.vue diff --git a/admin/apps/web-antd/src/views/examples/modal/index.vue b/admin-vben/apps/web-antd/src/views/examples/modal/index.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/modal/index.vue rename to admin-vben/apps/web-antd/src/views/examples/modal/index.vue diff --git a/admin/apps/web-antd/src/views/examples/modal/nested-demo.vue b/admin-vben/apps/web-antd/src/views/examples/modal/nested-demo.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/modal/nested-demo.vue rename to admin-vben/apps/web-antd/src/views/examples/modal/nested-demo.vue diff --git a/admin/apps/web-antd/src/views/examples/modal/shared-data-demo.vue b/admin-vben/apps/web-antd/src/views/examples/modal/shared-data-demo.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/modal/shared-data-demo.vue rename to admin-vben/apps/web-antd/src/views/examples/modal/shared-data-demo.vue diff --git a/admin/apps/web-antd/src/views/examples/motion/index.vue b/admin-vben/apps/web-antd/src/views/examples/motion/index.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/motion/index.vue rename to admin-vben/apps/web-antd/src/views/examples/motion/index.vue diff --git a/admin/apps/web-antd/src/views/examples/resize/basic.vue b/admin-vben/apps/web-antd/src/views/examples/resize/basic.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/resize/basic.vue rename to admin-vben/apps/web-antd/src/views/examples/resize/basic.vue diff --git a/admin/apps/web-antd/src/views/examples/tippy/index.vue b/admin-vben/apps/web-antd/src/views/examples/tippy/index.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/tippy/index.vue rename to admin-vben/apps/web-antd/src/views/examples/tippy/index.vue diff --git a/admin/apps/web-antd/src/views/examples/vxe-table/basic.vue b/admin-vben/apps/web-antd/src/views/examples/vxe-table/basic.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/vxe-table/basic.vue rename to admin-vben/apps/web-antd/src/views/examples/vxe-table/basic.vue diff --git a/admin/apps/web-antd/src/views/examples/vxe-table/custom-cell.vue b/admin-vben/apps/web-antd/src/views/examples/vxe-table/custom-cell.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/vxe-table/custom-cell.vue rename to admin-vben/apps/web-antd/src/views/examples/vxe-table/custom-cell.vue diff --git a/admin/apps/web-antd/src/views/examples/vxe-table/edit-cell.vue b/admin-vben/apps/web-antd/src/views/examples/vxe-table/edit-cell.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/vxe-table/edit-cell.vue rename to admin-vben/apps/web-antd/src/views/examples/vxe-table/edit-cell.vue diff --git a/admin/apps/web-antd/src/views/examples/vxe-table/edit-row.vue b/admin-vben/apps/web-antd/src/views/examples/vxe-table/edit-row.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/vxe-table/edit-row.vue rename to admin-vben/apps/web-antd/src/views/examples/vxe-table/edit-row.vue diff --git a/admin/apps/web-antd/src/views/examples/vxe-table/fixed.vue b/admin-vben/apps/web-antd/src/views/examples/vxe-table/fixed.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/vxe-table/fixed.vue rename to admin-vben/apps/web-antd/src/views/examples/vxe-table/fixed.vue diff --git a/admin/apps/web-antd/src/views/examples/vxe-table/form.vue b/admin-vben/apps/web-antd/src/views/examples/vxe-table/form.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/vxe-table/form.vue rename to admin-vben/apps/web-antd/src/views/examples/vxe-table/form.vue diff --git a/admin/apps/web-antd/src/views/examples/vxe-table/remote.vue b/admin-vben/apps/web-antd/src/views/examples/vxe-table/remote.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/vxe-table/remote.vue rename to admin-vben/apps/web-antd/src/views/examples/vxe-table/remote.vue diff --git a/admin/apps/web-antd/src/views/examples/vxe-table/table-data.ts b/admin-vben/apps/web-antd/src/views/examples/vxe-table/table-data.ts similarity index 100% rename from admin/apps/web-antd/src/views/examples/vxe-table/table-data.ts rename to admin-vben/apps/web-antd/src/views/examples/vxe-table/table-data.ts diff --git a/admin/apps/web-antd/src/views/examples/vxe-table/tree.vue b/admin-vben/apps/web-antd/src/views/examples/vxe-table/tree.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/vxe-table/tree.vue rename to admin-vben/apps/web-antd/src/views/examples/vxe-table/tree.vue diff --git a/admin/apps/web-antd/src/views/examples/vxe-table/virtual.vue b/admin-vben/apps/web-antd/src/views/examples/vxe-table/virtual.vue similarity index 100% rename from admin/apps/web-antd/src/views/examples/vxe-table/virtual.vue rename to admin-vben/apps/web-antd/src/views/examples/vxe-table/virtual.vue diff --git a/admin/apps/web-antd/src/views/site/group.vue b/admin-vben/apps/web-antd/src/views/site/group.vue similarity index 100% rename from admin/apps/web-antd/src/views/site/group.vue rename to admin-vben/apps/web-antd/src/views/site/group.vue diff --git a/admin/apps/web-antd/src/views/site/list.vue b/admin-vben/apps/web-antd/src/views/site/list.vue similarity index 100% rename from admin/apps/web-antd/src/views/site/list.vue rename to admin-vben/apps/web-antd/src/views/site/list.vue diff --git a/admin/apps/web-antd/src/views/system/dept/data.ts b/admin-vben/apps/web-antd/src/views/system/dept/data.ts similarity index 100% rename from admin/apps/web-antd/src/views/system/dept/data.ts rename to admin-vben/apps/web-antd/src/views/system/dept/data.ts diff --git a/admin/apps/web-antd/src/views/system/dept/list.vue b/admin-vben/apps/web-antd/src/views/system/dept/list.vue similarity index 100% rename from admin/apps/web-antd/src/views/system/dept/list.vue rename to admin-vben/apps/web-antd/src/views/system/dept/list.vue diff --git a/admin/apps/web-antd/src/views/system/dept/modules/form.vue b/admin-vben/apps/web-antd/src/views/system/dept/modules/form.vue similarity index 100% rename from admin/apps/web-antd/src/views/system/dept/modules/form.vue rename to admin-vben/apps/web-antd/src/views/system/dept/modules/form.vue diff --git a/admin/apps/web-antd/src/views/system/menu/data.ts b/admin-vben/apps/web-antd/src/views/system/menu/data.ts similarity index 100% rename from admin/apps/web-antd/src/views/system/menu/data.ts rename to admin-vben/apps/web-antd/src/views/system/menu/data.ts diff --git a/admin/apps/web-antd/src/views/system/menu/list.vue b/admin-vben/apps/web-antd/src/views/system/menu/list.vue similarity index 100% rename from admin/apps/web-antd/src/views/system/menu/list.vue rename to admin-vben/apps/web-antd/src/views/system/menu/list.vue diff --git a/admin/apps/web-antd/src/views/system/menu/modules/form.vue b/admin-vben/apps/web-antd/src/views/system/menu/modules/form.vue similarity index 100% rename from admin/apps/web-antd/src/views/system/menu/modules/form.vue rename to admin-vben/apps/web-antd/src/views/system/menu/modules/form.vue diff --git a/admin/apps/web-antd/src/views/system/role/data.ts b/admin-vben/apps/web-antd/src/views/system/role/data.ts similarity index 100% rename from admin/apps/web-antd/src/views/system/role/data.ts rename to admin-vben/apps/web-antd/src/views/system/role/data.ts diff --git a/admin/apps/web-antd/src/views/system/role/list.vue b/admin-vben/apps/web-antd/src/views/system/role/list.vue similarity index 100% rename from admin/apps/web-antd/src/views/system/role/list.vue rename to admin-vben/apps/web-antd/src/views/system/role/list.vue diff --git a/admin/apps/web-antd/src/views/system/role/modules/form.vue b/admin-vben/apps/web-antd/src/views/system/role/modules/form.vue similarity index 100% rename from admin/apps/web-antd/src/views/system/role/modules/form.vue rename to admin-vben/apps/web-antd/src/views/system/role/modules/form.vue diff --git a/admin/apps/web-antd/src/views/system/user/list.vue b/admin-vben/apps/web-antd/src/views/system/user/list.vue similarity index 100% rename from admin/apps/web-antd/src/views/system/user/list.vue rename to admin-vben/apps/web-antd/src/views/system/user/list.vue diff --git a/admin/apps/web-antd/tailwind.config.mjs b/admin-vben/apps/web-antd/tailwind.config.mjs similarity index 100% rename from admin/apps/web-antd/tailwind.config.mjs rename to admin-vben/apps/web-antd/tailwind.config.mjs diff --git a/admin/apps/web-antd/tsconfig.json b/admin-vben/apps/web-antd/tsconfig.json similarity index 100% rename from admin/apps/web-antd/tsconfig.json rename to admin-vben/apps/web-antd/tsconfig.json diff --git a/admin/apps/web-antd/tsconfig.node.json b/admin-vben/apps/web-antd/tsconfig.node.json similarity index 100% rename from admin/apps/web-antd/tsconfig.node.json rename to admin-vben/apps/web-antd/tsconfig.node.json diff --git a/admin/apps/web-antd/vite.config.mts b/admin-vben/apps/web-antd/vite.config.mts similarity index 100% rename from admin/apps/web-antd/vite.config.mts rename to admin-vben/apps/web-antd/vite.config.mts diff --git a/admin/auto-imports.d.ts b/admin-vben/auto-imports.d.ts similarity index 100% rename from admin/auto-imports.d.ts rename to admin-vben/auto-imports.d.ts diff --git a/admin/components.d.ts b/admin-vben/components.d.ts similarity index 100% rename from admin/components.d.ts rename to admin-vben/components.d.ts diff --git a/admin/cspell.json b/admin-vben/cspell.json similarity index 100% rename from admin/cspell.json rename to admin-vben/cspell.json diff --git a/admin/docs/.vitepress/components/demo-preview.vue b/admin-vben/docs/.vitepress/components/demo-preview.vue similarity index 100% rename from admin/docs/.vitepress/components/demo-preview.vue rename to admin-vben/docs/.vitepress/components/demo-preview.vue diff --git a/admin/docs/.vitepress/components/index.ts b/admin-vben/docs/.vitepress/components/index.ts similarity index 100% rename from admin/docs/.vitepress/components/index.ts rename to admin-vben/docs/.vitepress/components/index.ts diff --git a/admin/docs/.vitepress/components/preview-group.vue b/admin-vben/docs/.vitepress/components/preview-group.vue similarity index 100% rename from admin/docs/.vitepress/components/preview-group.vue rename to admin-vben/docs/.vitepress/components/preview-group.vue diff --git a/admin/docs/.vitepress/config/en.mts b/admin-vben/docs/.vitepress/config/en.mts similarity index 100% rename from admin/docs/.vitepress/config/en.mts rename to admin-vben/docs/.vitepress/config/en.mts diff --git a/admin/docs/.vitepress/config/index.mts b/admin-vben/docs/.vitepress/config/index.mts similarity index 100% rename from admin/docs/.vitepress/config/index.mts rename to admin-vben/docs/.vitepress/config/index.mts diff --git a/admin/docs/.vitepress/config/plugins/demo-preview.ts b/admin-vben/docs/.vitepress/config/plugins/demo-preview.ts similarity index 100% rename from admin/docs/.vitepress/config/plugins/demo-preview.ts rename to admin-vben/docs/.vitepress/config/plugins/demo-preview.ts diff --git a/admin/docs/.vitepress/config/shared.mts b/admin-vben/docs/.vitepress/config/shared.mts similarity index 100% rename from admin/docs/.vitepress/config/shared.mts rename to admin-vben/docs/.vitepress/config/shared.mts diff --git a/admin/docs/.vitepress/config/zh.mts b/admin-vben/docs/.vitepress/config/zh.mts similarity index 100% rename from admin/docs/.vitepress/config/zh.mts rename to admin-vben/docs/.vitepress/config/zh.mts diff --git a/admin/docs/.vitepress/theme/components/site-layout.vue b/admin-vben/docs/.vitepress/theme/components/site-layout.vue similarity index 100% rename from admin/docs/.vitepress/theme/components/site-layout.vue rename to admin-vben/docs/.vitepress/theme/components/site-layout.vue diff --git a/admin/docs/.vitepress/theme/components/vben-contributors.vue b/admin-vben/docs/.vitepress/theme/components/vben-contributors.vue similarity index 100% rename from admin/docs/.vitepress/theme/components/vben-contributors.vue rename to admin-vben/docs/.vitepress/theme/components/vben-contributors.vue diff --git a/admin/docs/.vitepress/theme/index.ts b/admin-vben/docs/.vitepress/theme/index.ts similarity index 100% rename from admin/docs/.vitepress/theme/index.ts rename to admin-vben/docs/.vitepress/theme/index.ts diff --git a/admin/docs/.vitepress/theme/plugins/hm.ts b/admin-vben/docs/.vitepress/theme/plugins/hm.ts similarity index 100% rename from admin/docs/.vitepress/theme/plugins/hm.ts rename to admin-vben/docs/.vitepress/theme/plugins/hm.ts diff --git a/admin/docs/.vitepress/theme/styles/base.css b/admin-vben/docs/.vitepress/theme/styles/base.css similarity index 100% rename from admin/docs/.vitepress/theme/styles/base.css rename to admin-vben/docs/.vitepress/theme/styles/base.css diff --git a/admin/docs/.vitepress/theme/styles/index.ts b/admin-vben/docs/.vitepress/theme/styles/index.ts similarity index 100% rename from admin/docs/.vitepress/theme/styles/index.ts rename to admin-vben/docs/.vitepress/theme/styles/index.ts diff --git a/admin/docs/.vitepress/theme/styles/variables.css b/admin-vben/docs/.vitepress/theme/styles/variables.css similarity index 100% rename from admin/docs/.vitepress/theme/styles/variables.css rename to admin-vben/docs/.vitepress/theme/styles/variables.css diff --git a/admin/docs/package.json b/admin-vben/docs/package.json similarity index 100% rename from admin/docs/package.json rename to admin-vben/docs/package.json diff --git a/admin/docs/public/logos/logo.png b/admin-vben/docs/public/logos/logo.png similarity index 100% rename from admin/docs/public/logos/logo.png rename to admin-vben/docs/public/logos/logo.png diff --git a/admin/docs/public/logos/mysql.svg b/admin-vben/docs/public/logos/mysql.svg similarity index 100% rename from admin/docs/public/logos/mysql.svg rename to admin-vben/docs/public/logos/mysql.svg diff --git a/admin/docs/public/logos/nestjs.svg b/admin-vben/docs/public/logos/nestjs.svg similarity index 100% rename from admin/docs/public/logos/nestjs.svg rename to admin-vben/docs/public/logos/nestjs.svg diff --git a/admin/docs/public/logos/redis.svg b/admin-vben/docs/public/logos/redis.svg similarity index 100% rename from admin/docs/public/logos/redis.svg rename to admin-vben/docs/public/logos/redis.svg diff --git a/admin/docs/public/logos/typeorm.svg b/admin-vben/docs/public/logos/typeorm.svg similarity index 100% rename from admin/docs/public/logos/typeorm.svg rename to admin-vben/docs/public/logos/typeorm.svg diff --git a/admin/docs/public/logos/wwjcloud.svg b/admin-vben/docs/public/logos/wwjcloud.svg similarity index 100% rename from admin/docs/public/logos/wwjcloud.svg rename to admin-vben/docs/public/logos/wwjcloud.svg diff --git a/admin/docs/scripts/README.md b/admin-vben/docs/scripts/README.md similarity index 100% rename from admin/docs/scripts/README.md rename to admin-vben/docs/scripts/README.md diff --git a/admin/docs/scripts/generate-api-docs.js b/admin-vben/docs/scripts/generate-api-docs.js similarity index 100% rename from admin/docs/scripts/generate-api-docs.js rename to admin-vben/docs/scripts/generate-api-docs.js diff --git a/admin/docs/scripts/sync-api-docs.js b/admin-vben/docs/scripts/sync-api-docs.js similarity index 100% rename from admin/docs/scripts/sync-api-docs.js rename to admin-vben/docs/scripts/sync-api-docs.js diff --git a/admin/docs/src/_env/adapter/component.ts b/admin-vben/docs/src/_env/adapter/component.ts similarity index 100% rename from admin/docs/src/_env/adapter/component.ts rename to admin-vben/docs/src/_env/adapter/component.ts diff --git a/admin/docs/src/_env/adapter/form.ts b/admin-vben/docs/src/_env/adapter/form.ts similarity index 100% rename from admin/docs/src/_env/adapter/form.ts rename to admin-vben/docs/src/_env/adapter/form.ts diff --git a/admin/docs/src/_env/adapter/vxe-table.ts b/admin-vben/docs/src/_env/adapter/vxe-table.ts similarity index 100% rename from admin/docs/src/_env/adapter/vxe-table.ts rename to admin-vben/docs/src/_env/adapter/vxe-table.ts diff --git a/admin/docs/src/_env/node/adapter/form.ts b/admin-vben/docs/src/_env/node/adapter/form.ts similarity index 100% rename from admin/docs/src/_env/node/adapter/form.ts rename to admin-vben/docs/src/_env/node/adapter/form.ts diff --git a/admin/docs/src/_env/node/adapter/vxe-table.ts b/admin-vben/docs/src/_env/node/adapter/vxe-table.ts similarity index 100% rename from admin/docs/src/_env/node/adapter/vxe-table.ts rename to admin-vben/docs/src/_env/node/adapter/vxe-table.ts diff --git a/admin/docs/src/commercial/community.md b/admin-vben/docs/src/commercial/community.md similarity index 100% rename from admin/docs/src/commercial/community.md rename to admin-vben/docs/src/commercial/community.md diff --git a/admin/docs/src/commercial/customized.md b/admin-vben/docs/src/commercial/customized.md similarity index 100% rename from admin/docs/src/commercial/customized.md rename to admin-vben/docs/src/commercial/customized.md diff --git a/admin/docs/src/commercial/technical-support.md b/admin-vben/docs/src/commercial/technical-support.md similarity index 100% rename from admin/docs/src/commercial/technical-support.md rename to admin-vben/docs/src/commercial/technical-support.md diff --git a/admin/docs/src/components/common-ui/vben-alert.md b/admin-vben/docs/src/components/common-ui/vben-alert.md similarity index 100% rename from admin/docs/src/components/common-ui/vben-alert.md rename to admin-vben/docs/src/components/common-ui/vben-alert.md diff --git a/admin/docs/src/components/common-ui/vben-api-component.md b/admin-vben/docs/src/components/common-ui/vben-api-component.md similarity index 100% rename from admin/docs/src/components/common-ui/vben-api-component.md rename to admin-vben/docs/src/components/common-ui/vben-api-component.md diff --git a/admin/docs/src/components/common-ui/vben-count-to-animator.md b/admin-vben/docs/src/components/common-ui/vben-count-to-animator.md similarity index 100% rename from admin/docs/src/components/common-ui/vben-count-to-animator.md rename to admin-vben/docs/src/components/common-ui/vben-count-to-animator.md diff --git a/admin/docs/src/components/common-ui/vben-drawer.md b/admin-vben/docs/src/components/common-ui/vben-drawer.md similarity index 100% rename from admin/docs/src/components/common-ui/vben-drawer.md rename to admin-vben/docs/src/components/common-ui/vben-drawer.md diff --git a/admin/docs/src/components/common-ui/vben-ellipsis-text.md b/admin-vben/docs/src/components/common-ui/vben-ellipsis-text.md similarity index 100% rename from admin/docs/src/components/common-ui/vben-ellipsis-text.md rename to admin-vben/docs/src/components/common-ui/vben-ellipsis-text.md diff --git a/admin/docs/src/components/common-ui/vben-form.md b/admin-vben/docs/src/components/common-ui/vben-form.md similarity index 100% rename from admin/docs/src/components/common-ui/vben-form.md rename to admin-vben/docs/src/components/common-ui/vben-form.md diff --git a/admin/docs/src/components/common-ui/vben-modal.md b/admin-vben/docs/src/components/common-ui/vben-modal.md similarity index 100% rename from admin/docs/src/components/common-ui/vben-modal.md rename to admin-vben/docs/src/components/common-ui/vben-modal.md diff --git a/admin/docs/src/components/common-ui/vben-vxe-table.md b/admin-vben/docs/src/components/common-ui/vben-vxe-table.md similarity index 100% rename from admin/docs/src/components/common-ui/vben-vxe-table.md rename to admin-vben/docs/src/components/common-ui/vben-vxe-table.md diff --git a/admin/docs/src/components/introduction.md b/admin-vben/docs/src/components/introduction.md similarity index 100% rename from admin/docs/src/components/introduction.md rename to admin-vben/docs/src/components/introduction.md diff --git a/admin/docs/src/components/layout-ui/page.md b/admin-vben/docs/src/components/layout-ui/page.md similarity index 100% rename from admin/docs/src/components/layout-ui/page.md rename to admin-vben/docs/src/components/layout-ui/page.md diff --git a/admin/docs/src/demos/vben-alert/alert/index.vue b/admin-vben/docs/src/demos/vben-alert/alert/index.vue similarity index 100% rename from admin/docs/src/demos/vben-alert/alert/index.vue rename to admin-vben/docs/src/demos/vben-alert/alert/index.vue diff --git a/admin/docs/src/demos/vben-alert/confirm/index.vue b/admin-vben/docs/src/demos/vben-alert/confirm/index.vue similarity index 100% rename from admin/docs/src/demos/vben-alert/confirm/index.vue rename to admin-vben/docs/src/demos/vben-alert/confirm/index.vue diff --git a/admin/docs/src/demos/vben-alert/prompt/index.vue b/admin-vben/docs/src/demos/vben-alert/prompt/index.vue similarity index 100% rename from admin/docs/src/demos/vben-alert/prompt/index.vue rename to admin-vben/docs/src/demos/vben-alert/prompt/index.vue diff --git a/admin/docs/src/demos/vben-api-component/cascader/index.vue b/admin-vben/docs/src/demos/vben-api-component/cascader/index.vue similarity index 100% rename from admin/docs/src/demos/vben-api-component/cascader/index.vue rename to admin-vben/docs/src/demos/vben-api-component/cascader/index.vue diff --git a/admin/docs/src/demos/vben-count-to-animator/basic/index.vue b/admin-vben/docs/src/demos/vben-count-to-animator/basic/index.vue similarity index 100% rename from admin/docs/src/demos/vben-count-to-animator/basic/index.vue rename to admin-vben/docs/src/demos/vben-count-to-animator/basic/index.vue diff --git a/admin/docs/src/demos/vben-count-to-animator/custom/index.vue b/admin-vben/docs/src/demos/vben-count-to-animator/custom/index.vue similarity index 100% rename from admin/docs/src/demos/vben-count-to-animator/custom/index.vue rename to admin-vben/docs/src/demos/vben-count-to-animator/custom/index.vue diff --git a/admin/docs/src/demos/vben-drawer/auto-height/drawer.vue b/admin-vben/docs/src/demos/vben-drawer/auto-height/drawer.vue similarity index 100% rename from admin/docs/src/demos/vben-drawer/auto-height/drawer.vue rename to admin-vben/docs/src/demos/vben-drawer/auto-height/drawer.vue diff --git a/admin/docs/src/demos/vben-drawer/auto-height/index.vue b/admin-vben/docs/src/demos/vben-drawer/auto-height/index.vue similarity index 100% rename from admin/docs/src/demos/vben-drawer/auto-height/index.vue rename to admin-vben/docs/src/demos/vben-drawer/auto-height/index.vue diff --git a/admin/docs/src/demos/vben-drawer/basic/index.vue b/admin-vben/docs/src/demos/vben-drawer/basic/index.vue similarity index 100% rename from admin/docs/src/demos/vben-drawer/basic/index.vue rename to admin-vben/docs/src/demos/vben-drawer/basic/index.vue diff --git a/admin/docs/src/demos/vben-drawer/dynamic/drawer.vue b/admin-vben/docs/src/demos/vben-drawer/dynamic/drawer.vue similarity index 100% rename from admin/docs/src/demos/vben-drawer/dynamic/drawer.vue rename to admin-vben/docs/src/demos/vben-drawer/dynamic/drawer.vue diff --git a/admin/docs/src/demos/vben-drawer/dynamic/index.vue b/admin-vben/docs/src/demos/vben-drawer/dynamic/index.vue similarity index 100% rename from admin/docs/src/demos/vben-drawer/dynamic/index.vue rename to admin-vben/docs/src/demos/vben-drawer/dynamic/index.vue diff --git a/admin/docs/src/demos/vben-drawer/extra/drawer.vue b/admin-vben/docs/src/demos/vben-drawer/extra/drawer.vue similarity index 100% rename from admin/docs/src/demos/vben-drawer/extra/drawer.vue rename to admin-vben/docs/src/demos/vben-drawer/extra/drawer.vue diff --git a/admin/docs/src/demos/vben-drawer/extra/index.vue b/admin-vben/docs/src/demos/vben-drawer/extra/index.vue similarity index 100% rename from admin/docs/src/demos/vben-drawer/extra/index.vue rename to admin-vben/docs/src/demos/vben-drawer/extra/index.vue diff --git a/admin/docs/src/demos/vben-drawer/shared-data/drawer.vue b/admin-vben/docs/src/demos/vben-drawer/shared-data/drawer.vue similarity index 100% rename from admin/docs/src/demos/vben-drawer/shared-data/drawer.vue rename to admin-vben/docs/src/demos/vben-drawer/shared-data/drawer.vue diff --git a/admin/docs/src/demos/vben-drawer/shared-data/index.vue b/admin-vben/docs/src/demos/vben-drawer/shared-data/index.vue similarity index 100% rename from admin/docs/src/demos/vben-drawer/shared-data/index.vue rename to admin-vben/docs/src/demos/vben-drawer/shared-data/index.vue diff --git a/admin/docs/src/demos/vben-ellipsis-text/auto-display/index.vue b/admin-vben/docs/src/demos/vben-ellipsis-text/auto-display/index.vue similarity index 100% rename from admin/docs/src/demos/vben-ellipsis-text/auto-display/index.vue rename to admin-vben/docs/src/demos/vben-ellipsis-text/auto-display/index.vue diff --git a/admin/docs/src/demos/vben-ellipsis-text/expand/index.vue b/admin-vben/docs/src/demos/vben-ellipsis-text/expand/index.vue similarity index 100% rename from admin/docs/src/demos/vben-ellipsis-text/expand/index.vue rename to admin-vben/docs/src/demos/vben-ellipsis-text/expand/index.vue diff --git a/admin/docs/src/demos/vben-ellipsis-text/line/index.vue b/admin-vben/docs/src/demos/vben-ellipsis-text/line/index.vue similarity index 100% rename from admin/docs/src/demos/vben-ellipsis-text/line/index.vue rename to admin-vben/docs/src/demos/vben-ellipsis-text/line/index.vue diff --git a/admin/docs/src/demos/vben-ellipsis-text/tooltip/index.vue b/admin-vben/docs/src/demos/vben-ellipsis-text/tooltip/index.vue similarity index 100% rename from admin/docs/src/demos/vben-ellipsis-text/tooltip/index.vue rename to admin-vben/docs/src/demos/vben-ellipsis-text/tooltip/index.vue diff --git a/admin/docs/src/demos/vben-form/api/index.vue b/admin-vben/docs/src/demos/vben-form/api/index.vue similarity index 100% rename from admin/docs/src/demos/vben-form/api/index.vue rename to admin-vben/docs/src/demos/vben-form/api/index.vue diff --git a/admin/docs/src/demos/vben-form/basic/index.vue b/admin-vben/docs/src/demos/vben-form/basic/index.vue similarity index 100% rename from admin/docs/src/demos/vben-form/basic/index.vue rename to admin-vben/docs/src/demos/vben-form/basic/index.vue diff --git a/admin/docs/src/demos/vben-form/custom/index.vue b/admin-vben/docs/src/demos/vben-form/custom/index.vue similarity index 100% rename from admin/docs/src/demos/vben-form/custom/index.vue rename to admin-vben/docs/src/demos/vben-form/custom/index.vue diff --git a/admin/docs/src/demos/vben-form/dynamic/index.vue b/admin-vben/docs/src/demos/vben-form/dynamic/index.vue similarity index 100% rename from admin/docs/src/demos/vben-form/dynamic/index.vue rename to admin-vben/docs/src/demos/vben-form/dynamic/index.vue diff --git a/admin/docs/src/demos/vben-form/query/index.vue b/admin-vben/docs/src/demos/vben-form/query/index.vue similarity index 100% rename from admin/docs/src/demos/vben-form/query/index.vue rename to admin-vben/docs/src/demos/vben-form/query/index.vue diff --git a/admin/docs/src/demos/vben-form/rules/index.vue b/admin-vben/docs/src/demos/vben-form/rules/index.vue similarity index 100% rename from admin/docs/src/demos/vben-form/rules/index.vue rename to admin-vben/docs/src/demos/vben-form/rules/index.vue diff --git a/admin/docs/src/demos/vben-modal/animation-type/index.vue b/admin-vben/docs/src/demos/vben-modal/animation-type/index.vue similarity index 100% rename from admin/docs/src/demos/vben-modal/animation-type/index.vue rename to admin-vben/docs/src/demos/vben-modal/animation-type/index.vue diff --git a/admin/docs/src/demos/vben-modal/auto-height/index.vue b/admin-vben/docs/src/demos/vben-modal/auto-height/index.vue similarity index 100% rename from admin/docs/src/demos/vben-modal/auto-height/index.vue rename to admin-vben/docs/src/demos/vben-modal/auto-height/index.vue diff --git a/admin/docs/src/demos/vben-modal/auto-height/modal.vue b/admin-vben/docs/src/demos/vben-modal/auto-height/modal.vue similarity index 100% rename from admin/docs/src/demos/vben-modal/auto-height/modal.vue rename to admin-vben/docs/src/demos/vben-modal/auto-height/modal.vue diff --git a/admin/docs/src/demos/vben-modal/basic/index.vue b/admin-vben/docs/src/demos/vben-modal/basic/index.vue similarity index 100% rename from admin/docs/src/demos/vben-modal/basic/index.vue rename to admin-vben/docs/src/demos/vben-modal/basic/index.vue diff --git a/admin/docs/src/demos/vben-modal/draggable/index.vue b/admin-vben/docs/src/demos/vben-modal/draggable/index.vue similarity index 100% rename from admin/docs/src/demos/vben-modal/draggable/index.vue rename to admin-vben/docs/src/demos/vben-modal/draggable/index.vue diff --git a/admin/docs/src/demos/vben-modal/draggable/modal.vue b/admin-vben/docs/src/demos/vben-modal/draggable/modal.vue similarity index 100% rename from admin/docs/src/demos/vben-modal/draggable/modal.vue rename to admin-vben/docs/src/demos/vben-modal/draggable/modal.vue diff --git a/admin/docs/src/demos/vben-modal/dynamic/index.vue b/admin-vben/docs/src/demos/vben-modal/dynamic/index.vue similarity index 100% rename from admin/docs/src/demos/vben-modal/dynamic/index.vue rename to admin-vben/docs/src/demos/vben-modal/dynamic/index.vue diff --git a/admin/docs/src/demos/vben-modal/dynamic/modal.vue b/admin-vben/docs/src/demos/vben-modal/dynamic/modal.vue similarity index 100% rename from admin/docs/src/demos/vben-modal/dynamic/modal.vue rename to admin-vben/docs/src/demos/vben-modal/dynamic/modal.vue diff --git a/admin/docs/src/demos/vben-modal/extra/index.vue b/admin-vben/docs/src/demos/vben-modal/extra/index.vue similarity index 100% rename from admin/docs/src/demos/vben-modal/extra/index.vue rename to admin-vben/docs/src/demos/vben-modal/extra/index.vue diff --git a/admin/docs/src/demos/vben-modal/extra/modal.vue b/admin-vben/docs/src/demos/vben-modal/extra/modal.vue similarity index 100% rename from admin/docs/src/demos/vben-modal/extra/modal.vue rename to admin-vben/docs/src/demos/vben-modal/extra/modal.vue diff --git a/admin/docs/src/demos/vben-modal/shared-data/index.vue b/admin-vben/docs/src/demos/vben-modal/shared-data/index.vue similarity index 100% rename from admin/docs/src/demos/vben-modal/shared-data/index.vue rename to admin-vben/docs/src/demos/vben-modal/shared-data/index.vue diff --git a/admin/docs/src/demos/vben-modal/shared-data/modal.vue b/admin-vben/docs/src/demos/vben-modal/shared-data/modal.vue similarity index 100% rename from admin/docs/src/demos/vben-modal/shared-data/modal.vue rename to admin-vben/docs/src/demos/vben-modal/shared-data/modal.vue diff --git a/admin/docs/src/demos/vben-vxe-table/basic/index.vue b/admin-vben/docs/src/demos/vben-vxe-table/basic/index.vue similarity index 100% rename from admin/docs/src/demos/vben-vxe-table/basic/index.vue rename to admin-vben/docs/src/demos/vben-vxe-table/basic/index.vue diff --git a/admin/docs/src/demos/vben-vxe-table/custom-cell/index.vue b/admin-vben/docs/src/demos/vben-vxe-table/custom-cell/index.vue similarity index 100% rename from admin/docs/src/demos/vben-vxe-table/custom-cell/index.vue rename to admin-vben/docs/src/demos/vben-vxe-table/custom-cell/index.vue diff --git a/admin/docs/src/demos/vben-vxe-table/edit-cell/index.vue b/admin-vben/docs/src/demos/vben-vxe-table/edit-cell/index.vue similarity index 100% rename from admin/docs/src/demos/vben-vxe-table/edit-cell/index.vue rename to admin-vben/docs/src/demos/vben-vxe-table/edit-cell/index.vue diff --git a/admin/docs/src/demos/vben-vxe-table/edit-row/index.vue b/admin-vben/docs/src/demos/vben-vxe-table/edit-row/index.vue similarity index 100% rename from admin/docs/src/demos/vben-vxe-table/edit-row/index.vue rename to admin-vben/docs/src/demos/vben-vxe-table/edit-row/index.vue diff --git a/admin/docs/src/demos/vben-vxe-table/fixed/index.vue b/admin-vben/docs/src/demos/vben-vxe-table/fixed/index.vue similarity index 100% rename from admin/docs/src/demos/vben-vxe-table/fixed/index.vue rename to admin-vben/docs/src/demos/vben-vxe-table/fixed/index.vue diff --git a/admin/docs/src/demos/vben-vxe-table/form/index.vue b/admin-vben/docs/src/demos/vben-vxe-table/form/index.vue similarity index 100% rename from admin/docs/src/demos/vben-vxe-table/form/index.vue rename to admin-vben/docs/src/demos/vben-vxe-table/form/index.vue diff --git a/admin/docs/src/demos/vben-vxe-table/mock-api.ts b/admin-vben/docs/src/demos/vben-vxe-table/mock-api.ts similarity index 100% rename from admin/docs/src/demos/vben-vxe-table/mock-api.ts rename to admin-vben/docs/src/demos/vben-vxe-table/mock-api.ts diff --git a/admin/docs/src/demos/vben-vxe-table/remote/index.vue b/admin-vben/docs/src/demos/vben-vxe-table/remote/index.vue similarity index 100% rename from admin/docs/src/demos/vben-vxe-table/remote/index.vue rename to admin-vben/docs/src/demos/vben-vxe-table/remote/index.vue diff --git a/admin/docs/src/demos/vben-vxe-table/table-data.ts b/admin-vben/docs/src/demos/vben-vxe-table/table-data.ts similarity index 100% rename from admin/docs/src/demos/vben-vxe-table/table-data.ts rename to admin-vben/docs/src/demos/vben-vxe-table/table-data.ts diff --git a/admin/docs/src/demos/vben-vxe-table/tree/index.vue b/admin-vben/docs/src/demos/vben-vxe-table/tree/index.vue similarity index 100% rename from admin/docs/src/demos/vben-vxe-table/tree/index.vue rename to admin-vben/docs/src/demos/vben-vxe-table/tree/index.vue diff --git a/admin/docs/src/demos/vben-vxe-table/virtual/index.vue b/admin-vben/docs/src/demos/vben-vxe-table/virtual/index.vue similarity index 100% rename from admin/docs/src/demos/vben-vxe-table/virtual/index.vue rename to admin-vben/docs/src/demos/vben-vxe-table/virtual/index.vue diff --git a/admin/docs/src/en/index.md b/admin-vben/docs/src/en/index.md similarity index 100% rename from admin/docs/src/en/index.md rename to admin-vben/docs/src/en/index.md diff --git a/admin/docs/src/en/veben/guide/essentials/build.md b/admin-vben/docs/src/en/veben/guide/essentials/build.md similarity index 100% rename from admin/docs/src/en/veben/guide/essentials/build.md rename to admin-vben/docs/src/en/veben/guide/essentials/build.md diff --git a/admin/docs/src/en/veben/guide/essentials/concept.md b/admin-vben/docs/src/en/veben/guide/essentials/concept.md similarity index 100% rename from admin/docs/src/en/veben/guide/essentials/concept.md rename to admin-vben/docs/src/en/veben/guide/essentials/concept.md diff --git a/admin/docs/src/en/veben/guide/essentials/development.md b/admin-vben/docs/src/en/veben/guide/essentials/development.md similarity index 100% rename from admin/docs/src/en/veben/guide/essentials/development.md rename to admin-vben/docs/src/en/veben/guide/essentials/development.md diff --git a/admin/docs/src/en/veben/guide/essentials/external-module.md b/admin-vben/docs/src/en/veben/guide/essentials/external-module.md similarity index 100% rename from admin/docs/src/en/veben/guide/essentials/external-module.md rename to admin-vben/docs/src/en/veben/guide/essentials/external-module.md diff --git a/admin/docs/src/en/veben/guide/essentials/icons.md b/admin-vben/docs/src/en/veben/guide/essentials/icons.md similarity index 100% rename from admin/docs/src/en/veben/guide/essentials/icons.md rename to admin-vben/docs/src/en/veben/guide/essentials/icons.md diff --git a/admin/docs/src/en/veben/guide/essentials/route.md b/admin-vben/docs/src/en/veben/guide/essentials/route.md similarity index 100% rename from admin/docs/src/en/veben/guide/essentials/route.md rename to admin-vben/docs/src/en/veben/guide/essentials/route.md diff --git a/admin/docs/src/en/veben/guide/essentials/server.md b/admin-vben/docs/src/en/veben/guide/essentials/server.md similarity index 100% rename from admin/docs/src/en/veben/guide/essentials/server.md rename to admin-vben/docs/src/en/veben/guide/essentials/server.md diff --git a/admin/docs/src/en/veben/guide/essentials/settings.md b/admin-vben/docs/src/en/veben/guide/essentials/settings.md similarity index 100% rename from admin/docs/src/en/veben/guide/essentials/settings.md rename to admin-vben/docs/src/en/veben/guide/essentials/settings.md diff --git a/admin/docs/src/en/veben/guide/essentials/styles.md b/admin-vben/docs/src/en/veben/guide/essentials/styles.md similarity index 100% rename from admin/docs/src/en/veben/guide/essentials/styles.md rename to admin-vben/docs/src/en/veben/guide/essentials/styles.md diff --git a/admin/docs/src/en/veben/guide/in-depth/access.md b/admin-vben/docs/src/en/veben/guide/in-depth/access.md similarity index 100% rename from admin/docs/src/en/veben/guide/in-depth/access.md rename to admin-vben/docs/src/en/veben/guide/in-depth/access.md diff --git a/admin/docs/src/en/veben/guide/in-depth/check-updates.md b/admin-vben/docs/src/en/veben/guide/in-depth/check-updates.md similarity index 100% rename from admin/docs/src/en/veben/guide/in-depth/check-updates.md rename to admin-vben/docs/src/en/veben/guide/in-depth/check-updates.md diff --git a/admin/docs/src/en/veben/guide/in-depth/features.md b/admin-vben/docs/src/en/veben/guide/in-depth/features.md similarity index 100% rename from admin/docs/src/en/veben/guide/in-depth/features.md rename to admin-vben/docs/src/en/veben/guide/in-depth/features.md diff --git a/admin/docs/src/en/veben/guide/in-depth/layout.md b/admin-vben/docs/src/en/veben/guide/in-depth/layout.md similarity index 100% rename from admin/docs/src/en/veben/guide/in-depth/layout.md rename to admin-vben/docs/src/en/veben/guide/in-depth/layout.md diff --git a/admin/docs/src/en/veben/guide/in-depth/loading.md b/admin-vben/docs/src/en/veben/guide/in-depth/loading.md similarity index 100% rename from admin/docs/src/en/veben/guide/in-depth/loading.md rename to admin-vben/docs/src/en/veben/guide/in-depth/loading.md diff --git a/admin/docs/src/en/veben/guide/in-depth/locale.md b/admin-vben/docs/src/en/veben/guide/in-depth/locale.md similarity index 100% rename from admin/docs/src/en/veben/guide/in-depth/locale.md rename to admin-vben/docs/src/en/veben/guide/in-depth/locale.md diff --git a/admin/docs/src/en/veben/guide/in-depth/login.md b/admin-vben/docs/src/en/veben/guide/in-depth/login.md similarity index 100% rename from admin/docs/src/en/veben/guide/in-depth/login.md rename to admin-vben/docs/src/en/veben/guide/in-depth/login.md diff --git a/admin/docs/src/en/veben/guide/in-depth/theme.md b/admin-vben/docs/src/en/veben/guide/in-depth/theme.md similarity index 100% rename from admin/docs/src/en/veben/guide/in-depth/theme.md rename to admin-vben/docs/src/en/veben/guide/in-depth/theme.md diff --git a/admin/docs/src/en/veben/guide/in-depth/ui-framework.md b/admin-vben/docs/src/en/veben/guide/in-depth/ui-framework.md similarity index 100% rename from admin/docs/src/en/veben/guide/in-depth/ui-framework.md rename to admin-vben/docs/src/en/veben/guide/in-depth/ui-framework.md diff --git a/admin/docs/src/en/veben/guide/introduction/changelog.md b/admin-vben/docs/src/en/veben/guide/introduction/changelog.md similarity index 100% rename from admin/docs/src/en/veben/guide/introduction/changelog.md rename to admin-vben/docs/src/en/veben/guide/introduction/changelog.md diff --git a/admin/docs/src/en/veben/guide/introduction/quick-start.md b/admin-vben/docs/src/en/veben/guide/introduction/quick-start.md similarity index 100% rename from admin/docs/src/en/veben/guide/introduction/quick-start.md rename to admin-vben/docs/src/en/veben/guide/introduction/quick-start.md diff --git a/admin/docs/src/en/veben/guide/introduction/roadmap.md b/admin-vben/docs/src/en/veben/guide/introduction/roadmap.md similarity index 100% rename from admin/docs/src/en/veben/guide/introduction/roadmap.md rename to admin-vben/docs/src/en/veben/guide/introduction/roadmap.md diff --git a/admin/docs/src/en/veben/guide/introduction/thin.md b/admin-vben/docs/src/en/veben/guide/introduction/thin.md similarity index 100% rename from admin/docs/src/en/veben/guide/introduction/thin.md rename to admin-vben/docs/src/en/veben/guide/introduction/thin.md diff --git a/admin/docs/src/en/veben/guide/introduction/vben.md b/admin-vben/docs/src/en/veben/guide/introduction/vben.md similarity index 100% rename from admin/docs/src/en/veben/guide/introduction/vben.md rename to admin-vben/docs/src/en/veben/guide/introduction/vben.md diff --git a/admin/docs/src/en/veben/guide/introduction/why.md b/admin-vben/docs/src/en/veben/guide/introduction/why.md similarity index 100% rename from admin/docs/src/en/veben/guide/introduction/why.md rename to admin-vben/docs/src/en/veben/guide/introduction/why.md diff --git a/admin/docs/src/en/veben/guide/other/faq.md b/admin-vben/docs/src/en/veben/guide/other/faq.md similarity index 100% rename from admin/docs/src/en/veben/guide/other/faq.md rename to admin-vben/docs/src/en/veben/guide/other/faq.md diff --git a/admin/docs/src/en/veben/guide/other/project-update.md b/admin-vben/docs/src/en/veben/guide/other/project-update.md similarity index 100% rename from admin/docs/src/en/veben/guide/other/project-update.md rename to admin-vben/docs/src/en/veben/guide/other/project-update.md diff --git a/admin/docs/src/en/veben/guide/other/remove-code.md b/admin-vben/docs/src/en/veben/guide/other/remove-code.md similarity index 100% rename from admin/docs/src/en/veben/guide/other/remove-code.md rename to admin-vben/docs/src/en/veben/guide/other/remove-code.md diff --git a/admin/docs/src/en/veben/guide/project/changeset.md b/admin-vben/docs/src/en/veben/guide/project/changeset.md similarity index 100% rename from admin/docs/src/en/veben/guide/project/changeset.md rename to admin-vben/docs/src/en/veben/guide/project/changeset.md diff --git a/admin/docs/src/en/veben/guide/project/cli.md b/admin-vben/docs/src/en/veben/guide/project/cli.md similarity index 100% rename from admin/docs/src/en/veben/guide/project/cli.md rename to admin-vben/docs/src/en/veben/guide/project/cli.md diff --git a/admin/docs/src/en/veben/guide/project/dir.md b/admin-vben/docs/src/en/veben/guide/project/dir.md similarity index 100% rename from admin/docs/src/en/veben/guide/project/dir.md rename to admin-vben/docs/src/en/veben/guide/project/dir.md diff --git a/admin/docs/src/en/veben/guide/project/standard.md b/admin-vben/docs/src/en/veben/guide/project/standard.md similarity index 100% rename from admin/docs/src/en/veben/guide/project/standard.md rename to admin-vben/docs/src/en/veben/guide/project/standard.md diff --git a/admin/docs/src/en/veben/guide/project/tailwindcss.md b/admin-vben/docs/src/en/veben/guide/project/tailwindcss.md similarity index 100% rename from admin/docs/src/en/veben/guide/project/tailwindcss.md rename to admin-vben/docs/src/en/veben/guide/project/tailwindcss.md diff --git a/admin/docs/src/en/veben/guide/project/test.md b/admin-vben/docs/src/en/veben/guide/project/test.md similarity index 100% rename from admin/docs/src/en/veben/guide/project/test.md rename to admin-vben/docs/src/en/veben/guide/project/test.md diff --git a/admin/docs/src/en/veben/guide/project/vite.md b/admin-vben/docs/src/en/veben/guide/project/vite.md similarity index 100% rename from admin/docs/src/en/veben/guide/project/vite.md rename to admin-vben/docs/src/en/veben/guide/project/vite.md diff --git a/admin/docs/src/en/veben/index.md b/admin-vben/docs/src/en/veben/index.md similarity index 100% rename from admin/docs/src/en/veben/index.md rename to admin-vben/docs/src/en/veben/index.md diff --git a/admin/docs/src/friend-links/index.md b/admin-vben/docs/src/friend-links/index.md similarity index 100% rename from admin/docs/src/friend-links/index.md rename to admin-vben/docs/src/friend-links/index.md diff --git a/admin/docs/src/index.md b/admin-vben/docs/src/index.md similarity index 100% rename from admin/docs/src/index.md rename to admin-vben/docs/src/index.md diff --git a/admin/docs/src/public/favicon.ico b/admin-vben/docs/src/public/favicon.ico similarity index 100% rename from admin/docs/src/public/favicon.ico rename to admin-vben/docs/src/public/favicon.ico diff --git a/admin/docs/src/public/guide/devtools.png b/admin-vben/docs/src/public/guide/devtools.png similarity index 100% rename from admin/docs/src/public/guide/devtools.png rename to admin-vben/docs/src/public/guide/devtools.png diff --git a/admin/docs/src/public/guide/loading.png b/admin-vben/docs/src/public/guide/loading.png similarity index 100% rename from admin/docs/src/public/guide/loading.png rename to admin-vben/docs/src/public/guide/loading.png diff --git a/admin/docs/src/public/guide/locale.png b/admin-vben/docs/src/public/guide/locale.png similarity index 100% rename from admin/docs/src/public/guide/locale.png rename to admin-vben/docs/src/public/guide/locale.png diff --git a/admin/docs/src/public/guide/login-expired.png b/admin-vben/docs/src/public/guide/login-expired.png similarity index 100% rename from admin/docs/src/public/guide/login-expired.png rename to admin-vben/docs/src/public/guide/login-expired.png diff --git a/admin/docs/src/public/guide/login.png b/admin-vben/docs/src/public/guide/login.png similarity index 100% rename from admin/docs/src/public/guide/login.png rename to admin-vben/docs/src/public/guide/login.png diff --git a/admin/docs/src/public/guide/preferences.png b/admin-vben/docs/src/public/guide/preferences.png similarity index 100% rename from admin/docs/src/public/guide/preferences.png rename to admin-vben/docs/src/public/guide/preferences.png diff --git a/admin/docs/src/public/guide/qq.png b/admin-vben/docs/src/public/guide/qq.png similarity index 100% rename from admin/docs/src/public/guide/qq.png rename to admin-vben/docs/src/public/guide/qq.png diff --git a/admin/docs/src/public/guide/qq_channel.png b/admin-vben/docs/src/public/guide/qq_channel.png similarity index 100% rename from admin/docs/src/public/guide/qq_channel.png rename to admin-vben/docs/src/public/guide/qq_channel.png diff --git a/admin/docs/src/public/guide/report.png b/admin-vben/docs/src/public/guide/report.png similarity index 100% rename from admin/docs/src/public/guide/report.png rename to admin-vben/docs/src/public/guide/report.png diff --git a/admin/docs/src/public/guide/test.png b/admin-vben/docs/src/public/guide/test.png similarity index 100% rename from admin/docs/src/public/guide/test.png rename to admin-vben/docs/src/public/guide/test.png diff --git a/admin/docs/src/public/guide/update-notice.png b/admin-vben/docs/src/public/guide/update-notice.png similarity index 100% rename from admin/docs/src/public/guide/update-notice.png rename to admin-vben/docs/src/public/guide/update-notice.png diff --git a/admin/docs/src/public/logos/nitro.svg b/admin-vben/docs/src/public/logos/nitro.svg similarity index 100% rename from admin/docs/src/public/logos/nitro.svg rename to admin-vben/docs/src/public/logos/nitro.svg diff --git a/admin/docs/src/public/logos/shadcn-ui.svg b/admin-vben/docs/src/public/logos/shadcn-ui.svg similarity index 100% rename from admin/docs/src/public/logos/shadcn-ui.svg rename to admin-vben/docs/src/public/logos/shadcn-ui.svg diff --git a/admin/docs/src/public/logos/turborepo.svg b/admin-vben/docs/src/public/logos/turborepo.svg similarity index 100% rename from admin/docs/src/public/logos/turborepo.svg rename to admin-vben/docs/src/public/logos/turborepo.svg diff --git a/admin/docs/src/public/logos/vite.svg b/admin-vben/docs/src/public/logos/vite.svg similarity index 100% rename from admin/docs/src/public/logos/vite.svg rename to admin-vben/docs/src/public/logos/vite.svg diff --git a/admin/docs/src/sponsor/personal.md b/admin-vben/docs/src/sponsor/personal.md similarity index 100% rename from admin/docs/src/sponsor/personal.md rename to admin-vben/docs/src/sponsor/personal.md diff --git a/admin/docs/src/vben/guide/essentials/build.md b/admin-vben/docs/src/vben/guide/essentials/build.md similarity index 100% rename from admin/docs/src/vben/guide/essentials/build.md rename to admin-vben/docs/src/vben/guide/essentials/build.md diff --git a/admin/docs/src/vben/guide/essentials/concept.md b/admin-vben/docs/src/vben/guide/essentials/concept.md similarity index 100% rename from admin/docs/src/vben/guide/essentials/concept.md rename to admin-vben/docs/src/vben/guide/essentials/concept.md diff --git a/admin/docs/src/vben/guide/essentials/development.md b/admin-vben/docs/src/vben/guide/essentials/development.md similarity index 100% rename from admin/docs/src/vben/guide/essentials/development.md rename to admin-vben/docs/src/vben/guide/essentials/development.md diff --git a/admin/docs/src/vben/guide/essentials/external-module.md b/admin-vben/docs/src/vben/guide/essentials/external-module.md similarity index 100% rename from admin/docs/src/vben/guide/essentials/external-module.md rename to admin-vben/docs/src/vben/guide/essentials/external-module.md diff --git a/admin/docs/src/vben/guide/essentials/icons.md b/admin-vben/docs/src/vben/guide/essentials/icons.md similarity index 100% rename from admin/docs/src/vben/guide/essentials/icons.md rename to admin-vben/docs/src/vben/guide/essentials/icons.md diff --git a/admin/docs/src/vben/guide/essentials/route.md b/admin-vben/docs/src/vben/guide/essentials/route.md similarity index 100% rename from admin/docs/src/vben/guide/essentials/route.md rename to admin-vben/docs/src/vben/guide/essentials/route.md diff --git a/admin/docs/src/vben/guide/essentials/server.md b/admin-vben/docs/src/vben/guide/essentials/server.md similarity index 100% rename from admin/docs/src/vben/guide/essentials/server.md rename to admin-vben/docs/src/vben/guide/essentials/server.md diff --git a/admin/docs/src/vben/guide/essentials/settings.md b/admin-vben/docs/src/vben/guide/essentials/settings.md similarity index 100% rename from admin/docs/src/vben/guide/essentials/settings.md rename to admin-vben/docs/src/vben/guide/essentials/settings.md diff --git a/admin/docs/src/vben/guide/essentials/styles.md b/admin-vben/docs/src/vben/guide/essentials/styles.md similarity index 100% rename from admin/docs/src/vben/guide/essentials/styles.md rename to admin-vben/docs/src/vben/guide/essentials/styles.md diff --git a/admin/docs/src/vben/guide/in-depth/access.md b/admin-vben/docs/src/vben/guide/in-depth/access.md similarity index 100% rename from admin/docs/src/vben/guide/in-depth/access.md rename to admin-vben/docs/src/vben/guide/in-depth/access.md diff --git a/admin/docs/src/vben/guide/in-depth/check-updates.md b/admin-vben/docs/src/vben/guide/in-depth/check-updates.md similarity index 100% rename from admin/docs/src/vben/guide/in-depth/check-updates.md rename to admin-vben/docs/src/vben/guide/in-depth/check-updates.md diff --git a/admin/docs/src/vben/guide/in-depth/features.md b/admin-vben/docs/src/vben/guide/in-depth/features.md similarity index 100% rename from admin/docs/src/vben/guide/in-depth/features.md rename to admin-vben/docs/src/vben/guide/in-depth/features.md diff --git a/admin/docs/src/vben/guide/in-depth/layout.md b/admin-vben/docs/src/vben/guide/in-depth/layout.md similarity index 100% rename from admin/docs/src/vben/guide/in-depth/layout.md rename to admin-vben/docs/src/vben/guide/in-depth/layout.md diff --git a/admin/docs/src/vben/guide/in-depth/loading.md b/admin-vben/docs/src/vben/guide/in-depth/loading.md similarity index 100% rename from admin/docs/src/vben/guide/in-depth/loading.md rename to admin-vben/docs/src/vben/guide/in-depth/loading.md diff --git a/admin/docs/src/vben/guide/in-depth/locale.md b/admin-vben/docs/src/vben/guide/in-depth/locale.md similarity index 100% rename from admin/docs/src/vben/guide/in-depth/locale.md rename to admin-vben/docs/src/vben/guide/in-depth/locale.md diff --git a/admin/docs/src/vben/guide/in-depth/login.md b/admin-vben/docs/src/vben/guide/in-depth/login.md similarity index 100% rename from admin/docs/src/vben/guide/in-depth/login.md rename to admin-vben/docs/src/vben/guide/in-depth/login.md diff --git a/admin/docs/src/vben/guide/in-depth/theme.md b/admin-vben/docs/src/vben/guide/in-depth/theme.md similarity index 100% rename from admin/docs/src/vben/guide/in-depth/theme.md rename to admin-vben/docs/src/vben/guide/in-depth/theme.md diff --git a/admin/docs/src/vben/guide/in-depth/ui-framework.md b/admin-vben/docs/src/vben/guide/in-depth/ui-framework.md similarity index 100% rename from admin/docs/src/vben/guide/in-depth/ui-framework.md rename to admin-vben/docs/src/vben/guide/in-depth/ui-framework.md diff --git a/admin/docs/src/vben/guide/index.md b/admin-vben/docs/src/vben/guide/index.md similarity index 100% rename from admin/docs/src/vben/guide/index.md rename to admin-vben/docs/src/vben/guide/index.md diff --git a/admin/docs/src/vben/guide/introduction/changelog.md b/admin-vben/docs/src/vben/guide/introduction/changelog.md similarity index 100% rename from admin/docs/src/vben/guide/introduction/changelog.md rename to admin-vben/docs/src/vben/guide/introduction/changelog.md diff --git a/admin/docs/src/vben/guide/introduction/quick-start.md b/admin-vben/docs/src/vben/guide/introduction/quick-start.md similarity index 100% rename from admin/docs/src/vben/guide/introduction/quick-start.md rename to admin-vben/docs/src/vben/guide/introduction/quick-start.md diff --git a/admin/docs/src/vben/guide/introduction/roadmap.md b/admin-vben/docs/src/vben/guide/introduction/roadmap.md similarity index 100% rename from admin/docs/src/vben/guide/introduction/roadmap.md rename to admin-vben/docs/src/vben/guide/introduction/roadmap.md diff --git a/admin/docs/src/vben/guide/introduction/thin.md b/admin-vben/docs/src/vben/guide/introduction/thin.md similarity index 100% rename from admin/docs/src/vben/guide/introduction/thin.md rename to admin-vben/docs/src/vben/guide/introduction/thin.md diff --git a/admin/docs/src/vben/guide/introduction/vben.md b/admin-vben/docs/src/vben/guide/introduction/vben.md similarity index 100% rename from admin/docs/src/vben/guide/introduction/vben.md rename to admin-vben/docs/src/vben/guide/introduction/vben.md diff --git a/admin/docs/src/vben/guide/introduction/why.md b/admin-vben/docs/src/vben/guide/introduction/why.md similarity index 100% rename from admin/docs/src/vben/guide/introduction/why.md rename to admin-vben/docs/src/vben/guide/introduction/why.md diff --git a/admin/docs/src/vben/guide/other/faq.md b/admin-vben/docs/src/vben/guide/other/faq.md similarity index 100% rename from admin/docs/src/vben/guide/other/faq.md rename to admin-vben/docs/src/vben/guide/other/faq.md diff --git a/admin/docs/src/vben/guide/other/project-update.md b/admin-vben/docs/src/vben/guide/other/project-update.md similarity index 100% rename from admin/docs/src/vben/guide/other/project-update.md rename to admin-vben/docs/src/vben/guide/other/project-update.md diff --git a/admin/docs/src/vben/guide/other/remove-code.md b/admin-vben/docs/src/vben/guide/other/remove-code.md similarity index 100% rename from admin/docs/src/vben/guide/other/remove-code.md rename to admin-vben/docs/src/vben/guide/other/remove-code.md diff --git a/admin/docs/src/vben/guide/project/changeset.md b/admin-vben/docs/src/vben/guide/project/changeset.md similarity index 100% rename from admin/docs/src/vben/guide/project/changeset.md rename to admin-vben/docs/src/vben/guide/project/changeset.md diff --git a/admin/docs/src/vben/guide/project/cli.md b/admin-vben/docs/src/vben/guide/project/cli.md similarity index 100% rename from admin/docs/src/vben/guide/project/cli.md rename to admin-vben/docs/src/vben/guide/project/cli.md diff --git a/admin/docs/src/vben/guide/project/dir.md b/admin-vben/docs/src/vben/guide/project/dir.md similarity index 100% rename from admin/docs/src/vben/guide/project/dir.md rename to admin-vben/docs/src/vben/guide/project/dir.md diff --git a/admin/docs/src/vben/guide/project/standard.md b/admin-vben/docs/src/vben/guide/project/standard.md similarity index 100% rename from admin/docs/src/vben/guide/project/standard.md rename to admin-vben/docs/src/vben/guide/project/standard.md diff --git a/admin/docs/src/vben/guide/project/tailwindcss.md b/admin-vben/docs/src/vben/guide/project/tailwindcss.md similarity index 100% rename from admin/docs/src/vben/guide/project/tailwindcss.md rename to admin-vben/docs/src/vben/guide/project/tailwindcss.md diff --git a/admin/docs/src/vben/guide/project/test.md b/admin-vben/docs/src/vben/guide/project/test.md similarity index 100% rename from admin/docs/src/vben/guide/project/test.md rename to admin-vben/docs/src/vben/guide/project/test.md diff --git a/admin/docs/src/vben/guide/project/vite.md b/admin-vben/docs/src/vben/guide/project/vite.md similarity index 100% rename from admin/docs/src/vben/guide/project/vite.md rename to admin-vben/docs/src/vben/guide/project/vite.md diff --git a/admin/docs/src/wwjcloud/ai/coordination-example.md b/admin-vben/docs/src/wwjcloud/ai/coordination-example.md similarity index 100% rename from admin/docs/src/wwjcloud/ai/coordination-example.md rename to admin-vben/docs/src/wwjcloud/ai/coordination-example.md diff --git a/admin/docs/src/wwjcloud/ai/coordination.md b/admin-vben/docs/src/wwjcloud/ai/coordination.md similarity index 100% rename from admin/docs/src/wwjcloud/ai/coordination.md rename to admin-vben/docs/src/wwjcloud/ai/coordination.md diff --git a/admin/docs/src/wwjcloud/ai/frontend-workflow.md b/admin-vben/docs/src/wwjcloud/ai/frontend-workflow.md similarity index 100% rename from admin/docs/src/wwjcloud/ai/frontend-workflow.md rename to admin-vben/docs/src/wwjcloud/ai/frontend-workflow.md diff --git a/admin/docs/src/wwjcloud/ai/index.md b/admin-vben/docs/src/wwjcloud/ai/index.md similarity index 100% rename from admin/docs/src/wwjcloud/ai/index.md rename to admin-vben/docs/src/wwjcloud/ai/index.md diff --git a/admin/docs/src/wwjcloud/ai/planner.md b/admin-vben/docs/src/wwjcloud/ai/planner.md similarity index 100% rename from admin/docs/src/wwjcloud/ai/planner.md rename to admin-vben/docs/src/wwjcloud/ai/planner.md diff --git a/admin/docs/src/wwjcloud/ai/tooling.md b/admin-vben/docs/src/wwjcloud/ai/tooling.md similarity index 100% rename from admin/docs/src/wwjcloud/ai/tooling.md rename to admin-vben/docs/src/wwjcloud/ai/tooling.md diff --git a/admin/docs/src/wwjcloud/architecture/constraints.md b/admin-vben/docs/src/wwjcloud/architecture/constraints.md similarity index 100% rename from admin/docs/src/wwjcloud/architecture/constraints.md rename to admin-vben/docs/src/wwjcloud/architecture/constraints.md diff --git a/admin/docs/src/wwjcloud/gateway/architecture.md b/admin-vben/docs/src/wwjcloud/gateway/architecture.md similarity index 100% rename from admin/docs/src/wwjcloud/gateway/architecture.md rename to admin-vben/docs/src/wwjcloud/gateway/architecture.md diff --git a/admin/docs/src/wwjcloud/gateway/development-plan.md b/admin-vben/docs/src/wwjcloud/gateway/development-plan.md similarity index 100% rename from admin/docs/src/wwjcloud/gateway/development-plan.md rename to admin-vben/docs/src/wwjcloud/gateway/development-plan.md diff --git a/admin/docs/src/wwjcloud/gateway/index.md b/admin-vben/docs/src/wwjcloud/gateway/index.md similarity index 100% rename from admin/docs/src/wwjcloud/gateway/index.md rename to admin-vben/docs/src/wwjcloud/gateway/index.md diff --git a/admin/docs/src/wwjcloud/gateway/kong/README.md b/admin-vben/docs/src/wwjcloud/gateway/kong/README.md similarity index 100% rename from admin/docs/src/wwjcloud/gateway/kong/README.md rename to admin-vben/docs/src/wwjcloud/gateway/kong/README.md diff --git a/admin/docs/src/wwjcloud/gateway/kong/deck.yaml b/admin-vben/docs/src/wwjcloud/gateway/kong/deck.yaml similarity index 100% rename from admin/docs/src/wwjcloud/gateway/kong/deck.yaml rename to admin-vben/docs/src/wwjcloud/gateway/kong/deck.yaml diff --git a/admin/docs/src/wwjcloud/gateway/overview.md b/admin-vben/docs/src/wwjcloud/gateway/overview.md similarity index 100% rename from admin/docs/src/wwjcloud/gateway/overview.md rename to admin-vben/docs/src/wwjcloud/gateway/overview.md diff --git a/admin/docs/src/wwjcloud/gateway/quick-start.md b/admin-vben/docs/src/wwjcloud/gateway/quick-start.md similarity index 100% rename from admin/docs/src/wwjcloud/gateway/quick-start.md rename to admin-vben/docs/src/wwjcloud/gateway/quick-start.md diff --git a/admin/docs/src/wwjcloud/guide/concepts.md b/admin-vben/docs/src/wwjcloud/guide/concepts.md similarity index 100% rename from admin/docs/src/wwjcloud/guide/concepts.md rename to admin-vben/docs/src/wwjcloud/guide/concepts.md diff --git a/admin/docs/src/wwjcloud/guide/config-center.md b/admin-vben/docs/src/wwjcloud/guide/config-center.md similarity index 100% rename from admin/docs/src/wwjcloud/guide/config-center.md rename to admin-vben/docs/src/wwjcloud/guide/config-center.md diff --git a/admin/docs/src/wwjcloud/guide/introduction.md b/admin-vben/docs/src/wwjcloud/guide/introduction.md similarity index 100% rename from admin/docs/src/wwjcloud/guide/introduction.md rename to admin-vben/docs/src/wwjcloud/guide/introduction.md diff --git a/admin/docs/src/wwjcloud/guide/quick-start.md b/admin-vben/docs/src/wwjcloud/guide/quick-start.md similarity index 100% rename from admin/docs/src/wwjcloud/guide/quick-start.md rename to admin-vben/docs/src/wwjcloud/guide/quick-start.md diff --git a/admin/docs/src/wwjcloud/guide/why.md b/admin-vben/docs/src/wwjcloud/guide/why.md similarity index 100% rename from admin/docs/src/wwjcloud/guide/why.md rename to admin-vben/docs/src/wwjcloud/guide/why.md diff --git a/admin/docs/src/wwjcloud/index.md b/admin-vben/docs/src/wwjcloud/index.md similarity index 100% rename from admin/docs/src/wwjcloud/index.md rename to admin-vben/docs/src/wwjcloud/index.md diff --git a/admin/docs/src/wwjcloud/openapi/api/adminapi/index.md b/admin-vben/docs/src/wwjcloud/openapi/api/adminapi/index.md similarity index 100% rename from admin/docs/src/wwjcloud/openapi/api/adminapi/index.md rename to admin-vben/docs/src/wwjcloud/openapi/api/adminapi/index.md diff --git a/admin/docs/src/wwjcloud/openapi/api/frontend/index.md b/admin-vben/docs/src/wwjcloud/openapi/api/frontend/index.md similarity index 100% rename from admin/docs/src/wwjcloud/openapi/api/frontend/index.md rename to admin-vben/docs/src/wwjcloud/openapi/api/frontend/index.md diff --git a/admin/docs/src/wwjcloud/openapi/api/index.md b/admin-vben/docs/src/wwjcloud/openapi/api/index.md similarity index 100% rename from admin/docs/src/wwjcloud/openapi/api/index.md rename to admin-vben/docs/src/wwjcloud/openapi/api/index.md diff --git a/admin/docs/src/wwjcloud/openapi/standards/error-codes.md b/admin-vben/docs/src/wwjcloud/openapi/standards/error-codes.md similarity index 100% rename from admin/docs/src/wwjcloud/openapi/standards/error-codes.md rename to admin-vben/docs/src/wwjcloud/openapi/standards/error-codes.md diff --git a/admin/docs/src/wwjcloud/openapi/standards/response.md b/admin-vben/docs/src/wwjcloud/openapi/standards/response.md similarity index 100% rename from admin/docs/src/wwjcloud/openapi/standards/response.md rename to admin-vben/docs/src/wwjcloud/openapi/standards/response.md diff --git a/admin/docs/src/wwjcloud/openapi/standards/restful.md b/admin-vben/docs/src/wwjcloud/openapi/standards/restful.md similarity index 100% rename from admin/docs/src/wwjcloud/openapi/standards/restful.md rename to admin-vben/docs/src/wwjcloud/openapi/standards/restful.md diff --git a/admin/docs/src/wwjcloud/progress.md b/admin-vben/docs/src/wwjcloud/progress.md similarity index 100% rename from admin/docs/src/wwjcloud/progress.md rename to admin-vben/docs/src/wwjcloud/progress.md diff --git a/admin/docs/src/wwjcloud/project/ai-prompts-and-constraints.md b/admin-vben/docs/src/wwjcloud/project/ai-prompts-and-constraints.md similarity index 100% rename from admin/docs/src/wwjcloud/project/ai-prompts-and-constraints.md rename to admin-vben/docs/src/wwjcloud/project/ai-prompts-and-constraints.md diff --git a/admin/docs/src/wwjcloud/project/comparison.md b/admin-vben/docs/src/wwjcloud/project/comparison.md similarity index 100% rename from admin/docs/src/wwjcloud/project/comparison.md rename to admin-vben/docs/src/wwjcloud/project/comparison.md diff --git a/admin/docs/src/wwjcloud/project/data-consistency-and-jobs.md b/admin-vben/docs/src/wwjcloud/project/data-consistency-and-jobs.md similarity index 100% rename from admin/docs/src/wwjcloud/project/data-consistency-and-jobs.md rename to admin-vben/docs/src/wwjcloud/project/data-consistency-and-jobs.md diff --git a/admin/docs/src/wwjcloud/project/deploy-1panel.md b/admin-vben/docs/src/wwjcloud/project/deploy-1panel.md similarity index 100% rename from admin/docs/src/wwjcloud/project/deploy-1panel.md rename to admin-vben/docs/src/wwjcloud/project/deploy-1panel.md diff --git a/admin/docs/src/wwjcloud/project/domain-boundaries.md b/admin-vben/docs/src/wwjcloud/project/domain-boundaries.md similarity index 100% rename from admin/docs/src/wwjcloud/project/domain-boundaries.md rename to admin-vben/docs/src/wwjcloud/project/domain-boundaries.md diff --git a/admin/docs/src/wwjcloud/project/plan.md b/admin-vben/docs/src/wwjcloud/project/plan.md similarity index 100% rename from admin/docs/src/wwjcloud/project/plan.md rename to admin-vben/docs/src/wwjcloud/project/plan.md diff --git a/admin/docs/src/wwjcloud/project/roadmap.md b/admin-vben/docs/src/wwjcloud/project/roadmap.md similarity index 100% rename from admin/docs/src/wwjcloud/project/roadmap.md rename to admin-vben/docs/src/wwjcloud/project/roadmap.md diff --git a/admin/docs/src/wwjcloud/project/selection.md b/admin-vben/docs/src/wwjcloud/project/selection.md similarity index 100% rename from admin/docs/src/wwjcloud/project/selection.md rename to admin-vben/docs/src/wwjcloud/project/selection.md diff --git a/admin/docs/src/wwjcloud/project/vendor.md b/admin-vben/docs/src/wwjcloud/project/vendor.md similarity index 100% rename from admin/docs/src/wwjcloud/project/vendor.md rename to admin-vben/docs/src/wwjcloud/project/vendor.md diff --git a/admin/docs/src/wwjcloud/structure/overview.md b/admin-vben/docs/src/wwjcloud/structure/overview.md similarity index 100% rename from admin/docs/src/wwjcloud/structure/overview.md rename to admin-vben/docs/src/wwjcloud/structure/overview.md diff --git a/admin/docs/tailwind.config.mjs b/admin-vben/docs/tailwind.config.mjs similarity index 100% rename from admin/docs/tailwind.config.mjs rename to admin-vben/docs/tailwind.config.mjs diff --git a/admin/docs/tsconfig.json b/admin-vben/docs/tsconfig.json similarity index 100% rename from admin/docs/tsconfig.json rename to admin-vben/docs/tsconfig.json diff --git a/admin/eslint.config.mjs b/admin-vben/eslint.config.mjs similarity index 100% rename from admin/eslint.config.mjs rename to admin-vben/eslint.config.mjs diff --git a/admin/index.html b/admin-vben/index.html similarity index 100% rename from admin/index.html rename to admin-vben/index.html diff --git a/admin/internal/lint-configs/commitlint-config/index.mjs b/admin-vben/internal/lint-configs/commitlint-config/index.mjs similarity index 100% rename from admin/internal/lint-configs/commitlint-config/index.mjs rename to admin-vben/internal/lint-configs/commitlint-config/index.mjs diff --git a/admin/internal/lint-configs/commitlint-config/package.json b/admin-vben/internal/lint-configs/commitlint-config/package.json similarity index 100% rename from admin/internal/lint-configs/commitlint-config/package.json rename to admin-vben/internal/lint-configs/commitlint-config/package.json diff --git a/admin/internal/lint-configs/eslint-config/build.config.ts b/admin-vben/internal/lint-configs/eslint-config/build.config.ts similarity index 100% rename from admin/internal/lint-configs/eslint-config/build.config.ts rename to admin-vben/internal/lint-configs/eslint-config/build.config.ts diff --git a/admin/internal/lint-configs/eslint-config/package.json b/admin-vben/internal/lint-configs/eslint-config/package.json similarity index 100% rename from admin/internal/lint-configs/eslint-config/package.json rename to admin-vben/internal/lint-configs/eslint-config/package.json diff --git a/admin/internal/lint-configs/eslint-config/src/configs/command.ts b/admin-vben/internal/lint-configs/eslint-config/src/configs/command.ts similarity index 100% rename from admin/internal/lint-configs/eslint-config/src/configs/command.ts rename to admin-vben/internal/lint-configs/eslint-config/src/configs/command.ts diff --git a/admin/internal/lint-configs/eslint-config/src/configs/comments.ts b/admin-vben/internal/lint-configs/eslint-config/src/configs/comments.ts similarity index 100% rename from admin/internal/lint-configs/eslint-config/src/configs/comments.ts rename to admin-vben/internal/lint-configs/eslint-config/src/configs/comments.ts diff --git a/admin/internal/lint-configs/eslint-config/src/configs/disableds.ts b/admin-vben/internal/lint-configs/eslint-config/src/configs/disableds.ts similarity index 100% rename from admin/internal/lint-configs/eslint-config/src/configs/disableds.ts rename to admin-vben/internal/lint-configs/eslint-config/src/configs/disableds.ts diff --git a/admin/internal/lint-configs/eslint-config/src/configs/ignores.ts b/admin-vben/internal/lint-configs/eslint-config/src/configs/ignores.ts similarity index 100% rename from admin/internal/lint-configs/eslint-config/src/configs/ignores.ts rename to admin-vben/internal/lint-configs/eslint-config/src/configs/ignores.ts diff --git a/admin/internal/lint-configs/eslint-config/src/configs/import.ts b/admin-vben/internal/lint-configs/eslint-config/src/configs/import.ts similarity index 100% rename from admin/internal/lint-configs/eslint-config/src/configs/import.ts rename to admin-vben/internal/lint-configs/eslint-config/src/configs/import.ts diff --git a/admin/internal/lint-configs/eslint-config/src/configs/index.ts b/admin-vben/internal/lint-configs/eslint-config/src/configs/index.ts similarity index 100% rename from admin/internal/lint-configs/eslint-config/src/configs/index.ts rename to admin-vben/internal/lint-configs/eslint-config/src/configs/index.ts diff --git a/admin/internal/lint-configs/eslint-config/src/configs/javascript.ts b/admin-vben/internal/lint-configs/eslint-config/src/configs/javascript.ts similarity index 100% rename from admin/internal/lint-configs/eslint-config/src/configs/javascript.ts rename to admin-vben/internal/lint-configs/eslint-config/src/configs/javascript.ts diff --git a/admin/internal/lint-configs/eslint-config/src/configs/jsdoc.ts b/admin-vben/internal/lint-configs/eslint-config/src/configs/jsdoc.ts similarity index 100% rename from admin/internal/lint-configs/eslint-config/src/configs/jsdoc.ts rename to admin-vben/internal/lint-configs/eslint-config/src/configs/jsdoc.ts diff --git a/admin/internal/lint-configs/eslint-config/src/configs/jsonc.ts b/admin-vben/internal/lint-configs/eslint-config/src/configs/jsonc.ts similarity index 100% rename from admin/internal/lint-configs/eslint-config/src/configs/jsonc.ts rename to admin-vben/internal/lint-configs/eslint-config/src/configs/jsonc.ts diff --git a/admin/internal/lint-configs/eslint-config/src/configs/node.ts b/admin-vben/internal/lint-configs/eslint-config/src/configs/node.ts similarity index 100% rename from admin/internal/lint-configs/eslint-config/src/configs/node.ts rename to admin-vben/internal/lint-configs/eslint-config/src/configs/node.ts diff --git a/admin/internal/lint-configs/eslint-config/src/configs/perfectionist.ts b/admin-vben/internal/lint-configs/eslint-config/src/configs/perfectionist.ts similarity index 100% rename from admin/internal/lint-configs/eslint-config/src/configs/perfectionist.ts rename to admin-vben/internal/lint-configs/eslint-config/src/configs/perfectionist.ts diff --git a/admin/internal/lint-configs/eslint-config/src/configs/prettier.ts b/admin-vben/internal/lint-configs/eslint-config/src/configs/prettier.ts similarity index 100% rename from admin/internal/lint-configs/eslint-config/src/configs/prettier.ts rename to admin-vben/internal/lint-configs/eslint-config/src/configs/prettier.ts diff --git a/admin/internal/lint-configs/eslint-config/src/configs/regexp.ts b/admin-vben/internal/lint-configs/eslint-config/src/configs/regexp.ts similarity index 100% rename from admin/internal/lint-configs/eslint-config/src/configs/regexp.ts rename to admin-vben/internal/lint-configs/eslint-config/src/configs/regexp.ts diff --git a/admin/internal/lint-configs/eslint-config/src/configs/test.ts b/admin-vben/internal/lint-configs/eslint-config/src/configs/test.ts similarity index 100% rename from admin/internal/lint-configs/eslint-config/src/configs/test.ts rename to admin-vben/internal/lint-configs/eslint-config/src/configs/test.ts diff --git a/admin/internal/lint-configs/eslint-config/src/configs/turbo.ts b/admin-vben/internal/lint-configs/eslint-config/src/configs/turbo.ts similarity index 100% rename from admin/internal/lint-configs/eslint-config/src/configs/turbo.ts rename to admin-vben/internal/lint-configs/eslint-config/src/configs/turbo.ts diff --git a/admin/internal/lint-configs/eslint-config/src/configs/typescript.ts b/admin-vben/internal/lint-configs/eslint-config/src/configs/typescript.ts similarity index 100% rename from admin/internal/lint-configs/eslint-config/src/configs/typescript.ts rename to admin-vben/internal/lint-configs/eslint-config/src/configs/typescript.ts diff --git a/admin/internal/lint-configs/eslint-config/src/configs/unicorn.ts b/admin-vben/internal/lint-configs/eslint-config/src/configs/unicorn.ts similarity index 100% rename from admin/internal/lint-configs/eslint-config/src/configs/unicorn.ts rename to admin-vben/internal/lint-configs/eslint-config/src/configs/unicorn.ts diff --git a/admin/internal/lint-configs/eslint-config/src/configs/vue.ts b/admin-vben/internal/lint-configs/eslint-config/src/configs/vue.ts similarity index 100% rename from admin/internal/lint-configs/eslint-config/src/configs/vue.ts rename to admin-vben/internal/lint-configs/eslint-config/src/configs/vue.ts diff --git a/admin/internal/lint-configs/eslint-config/src/custom-config.ts b/admin-vben/internal/lint-configs/eslint-config/src/custom-config.ts similarity index 100% rename from admin/internal/lint-configs/eslint-config/src/custom-config.ts rename to admin-vben/internal/lint-configs/eslint-config/src/custom-config.ts diff --git a/admin/internal/lint-configs/eslint-config/src/index.ts b/admin-vben/internal/lint-configs/eslint-config/src/index.ts similarity index 100% rename from admin/internal/lint-configs/eslint-config/src/index.ts rename to admin-vben/internal/lint-configs/eslint-config/src/index.ts diff --git a/admin/internal/lint-configs/eslint-config/src/util.ts b/admin-vben/internal/lint-configs/eslint-config/src/util.ts similarity index 100% rename from admin/internal/lint-configs/eslint-config/src/util.ts rename to admin-vben/internal/lint-configs/eslint-config/src/util.ts diff --git a/admin/internal/lint-configs/eslint-config/tsconfig.json b/admin-vben/internal/lint-configs/eslint-config/tsconfig.json similarity index 100% rename from admin/internal/lint-configs/eslint-config/tsconfig.json rename to admin-vben/internal/lint-configs/eslint-config/tsconfig.json diff --git a/admin/internal/lint-configs/prettier-config/index.mjs b/admin-vben/internal/lint-configs/prettier-config/index.mjs similarity index 100% rename from admin/internal/lint-configs/prettier-config/index.mjs rename to admin-vben/internal/lint-configs/prettier-config/index.mjs diff --git a/admin/internal/lint-configs/prettier-config/package.json b/admin-vben/internal/lint-configs/prettier-config/package.json similarity index 100% rename from admin/internal/lint-configs/prettier-config/package.json rename to admin-vben/internal/lint-configs/prettier-config/package.json diff --git a/admin/internal/lint-configs/stylelint-config/index.mjs b/admin-vben/internal/lint-configs/stylelint-config/index.mjs similarity index 100% rename from admin/internal/lint-configs/stylelint-config/index.mjs rename to admin-vben/internal/lint-configs/stylelint-config/index.mjs diff --git a/admin/internal/lint-configs/stylelint-config/package.json b/admin-vben/internal/lint-configs/stylelint-config/package.json similarity index 100% rename from admin/internal/lint-configs/stylelint-config/package.json rename to admin-vben/internal/lint-configs/stylelint-config/package.json diff --git a/admin/internal/node-utils/build.config.ts b/admin-vben/internal/node-utils/build.config.ts similarity index 100% rename from admin/internal/node-utils/build.config.ts rename to admin-vben/internal/node-utils/build.config.ts diff --git a/admin/internal/node-utils/package.json b/admin-vben/internal/node-utils/package.json similarity index 100% rename from admin/internal/node-utils/package.json rename to admin-vben/internal/node-utils/package.json diff --git a/admin/internal/node-utils/src/__tests__/hash.test.ts b/admin-vben/internal/node-utils/src/__tests__/hash.test.ts similarity index 100% rename from admin/internal/node-utils/src/__tests__/hash.test.ts rename to admin-vben/internal/node-utils/src/__tests__/hash.test.ts diff --git a/admin/internal/node-utils/src/__tests__/path.test.ts b/admin-vben/internal/node-utils/src/__tests__/path.test.ts similarity index 100% rename from admin/internal/node-utils/src/__tests__/path.test.ts rename to admin-vben/internal/node-utils/src/__tests__/path.test.ts diff --git a/admin/internal/node-utils/src/constants.ts b/admin-vben/internal/node-utils/src/constants.ts similarity index 100% rename from admin/internal/node-utils/src/constants.ts rename to admin-vben/internal/node-utils/src/constants.ts diff --git a/admin/internal/node-utils/src/date.ts b/admin-vben/internal/node-utils/src/date.ts similarity index 100% rename from admin/internal/node-utils/src/date.ts rename to admin-vben/internal/node-utils/src/date.ts diff --git a/admin/internal/node-utils/src/fs.ts b/admin-vben/internal/node-utils/src/fs.ts similarity index 100% rename from admin/internal/node-utils/src/fs.ts rename to admin-vben/internal/node-utils/src/fs.ts diff --git a/admin/internal/node-utils/src/git.ts b/admin-vben/internal/node-utils/src/git.ts similarity index 100% rename from admin/internal/node-utils/src/git.ts rename to admin-vben/internal/node-utils/src/git.ts diff --git a/admin/internal/node-utils/src/hash.ts b/admin-vben/internal/node-utils/src/hash.ts similarity index 100% rename from admin/internal/node-utils/src/hash.ts rename to admin-vben/internal/node-utils/src/hash.ts diff --git a/admin/internal/node-utils/src/index.ts b/admin-vben/internal/node-utils/src/index.ts similarity index 100% rename from admin/internal/node-utils/src/index.ts rename to admin-vben/internal/node-utils/src/index.ts diff --git a/admin/internal/node-utils/src/monorepo.ts b/admin-vben/internal/node-utils/src/monorepo.ts similarity index 100% rename from admin/internal/node-utils/src/monorepo.ts rename to admin-vben/internal/node-utils/src/monorepo.ts diff --git a/admin/internal/node-utils/src/path.ts b/admin-vben/internal/node-utils/src/path.ts similarity index 100% rename from admin/internal/node-utils/src/path.ts rename to admin-vben/internal/node-utils/src/path.ts diff --git a/admin/internal/node-utils/src/prettier.ts b/admin-vben/internal/node-utils/src/prettier.ts similarity index 100% rename from admin/internal/node-utils/src/prettier.ts rename to admin-vben/internal/node-utils/src/prettier.ts diff --git a/admin/internal/node-utils/src/spinner.ts b/admin-vben/internal/node-utils/src/spinner.ts similarity index 100% rename from admin/internal/node-utils/src/spinner.ts rename to admin-vben/internal/node-utils/src/spinner.ts diff --git a/admin/internal/node-utils/tsconfig.json b/admin-vben/internal/node-utils/tsconfig.json similarity index 100% rename from admin/internal/node-utils/tsconfig.json rename to admin-vben/internal/node-utils/tsconfig.json diff --git a/admin/internal/tailwind-config/build.config.ts b/admin-vben/internal/tailwind-config/build.config.ts similarity index 100% rename from admin/internal/tailwind-config/build.config.ts rename to admin-vben/internal/tailwind-config/build.config.ts diff --git a/admin/internal/tailwind-config/package.json b/admin-vben/internal/tailwind-config/package.json similarity index 100% rename from admin/internal/tailwind-config/package.json rename to admin-vben/internal/tailwind-config/package.json diff --git a/admin/internal/tailwind-config/src/index.ts b/admin-vben/internal/tailwind-config/src/index.ts similarity index 100% rename from admin/internal/tailwind-config/src/index.ts rename to admin-vben/internal/tailwind-config/src/index.ts diff --git a/admin/internal/tailwind-config/src/module.d.ts b/admin-vben/internal/tailwind-config/src/module.d.ts similarity index 100% rename from admin/internal/tailwind-config/src/module.d.ts rename to admin-vben/internal/tailwind-config/src/module.d.ts diff --git a/admin/internal/tailwind-config/src/plugins/entry.ts b/admin-vben/internal/tailwind-config/src/plugins/entry.ts similarity index 100% rename from admin/internal/tailwind-config/src/plugins/entry.ts rename to admin-vben/internal/tailwind-config/src/plugins/entry.ts diff --git a/admin/internal/tailwind-config/src/postcss.config.ts b/admin-vben/internal/tailwind-config/src/postcss.config.ts similarity index 100% rename from admin/internal/tailwind-config/src/postcss.config.ts rename to admin-vben/internal/tailwind-config/src/postcss.config.ts diff --git a/admin/internal/tailwind-config/tsconfig.json b/admin-vben/internal/tailwind-config/tsconfig.json similarity index 100% rename from admin/internal/tailwind-config/tsconfig.json rename to admin-vben/internal/tailwind-config/tsconfig.json diff --git a/admin/internal/tsconfig/base.json b/admin-vben/internal/tsconfig/base.json similarity index 100% rename from admin/internal/tsconfig/base.json rename to admin-vben/internal/tsconfig/base.json diff --git a/admin/internal/tsconfig/library.json b/admin-vben/internal/tsconfig/library.json similarity index 100% rename from admin/internal/tsconfig/library.json rename to admin-vben/internal/tsconfig/library.json diff --git a/admin/internal/tsconfig/node.json b/admin-vben/internal/tsconfig/node.json similarity index 100% rename from admin/internal/tsconfig/node.json rename to admin-vben/internal/tsconfig/node.json diff --git a/admin/internal/tsconfig/package.json b/admin-vben/internal/tsconfig/package.json similarity index 100% rename from admin/internal/tsconfig/package.json rename to admin-vben/internal/tsconfig/package.json diff --git a/admin/internal/tsconfig/web-app.json b/admin-vben/internal/tsconfig/web-app.json similarity index 100% rename from admin/internal/tsconfig/web-app.json rename to admin-vben/internal/tsconfig/web-app.json diff --git a/admin/internal/tsconfig/web.json b/admin-vben/internal/tsconfig/web.json similarity index 100% rename from admin/internal/tsconfig/web.json rename to admin-vben/internal/tsconfig/web.json diff --git a/admin/internal/vite-config/build.config.ts b/admin-vben/internal/vite-config/build.config.ts similarity index 100% rename from admin/internal/vite-config/build.config.ts rename to admin-vben/internal/vite-config/build.config.ts diff --git a/admin/internal/vite-config/package.json b/admin-vben/internal/vite-config/package.json similarity index 100% rename from admin/internal/vite-config/package.json rename to admin-vben/internal/vite-config/package.json diff --git a/admin/internal/vite-config/src/config/application.ts b/admin-vben/internal/vite-config/src/config/application.ts similarity index 100% rename from admin/internal/vite-config/src/config/application.ts rename to admin-vben/internal/vite-config/src/config/application.ts diff --git a/admin/internal/vite-config/src/config/common.ts b/admin-vben/internal/vite-config/src/config/common.ts similarity index 100% rename from admin/internal/vite-config/src/config/common.ts rename to admin-vben/internal/vite-config/src/config/common.ts diff --git a/admin/internal/vite-config/src/config/index.ts b/admin-vben/internal/vite-config/src/config/index.ts similarity index 100% rename from admin/internal/vite-config/src/config/index.ts rename to admin-vben/internal/vite-config/src/config/index.ts diff --git a/admin/internal/vite-config/src/config/library.ts b/admin-vben/internal/vite-config/src/config/library.ts similarity index 100% rename from admin/internal/vite-config/src/config/library.ts rename to admin-vben/internal/vite-config/src/config/library.ts diff --git a/admin/internal/vite-config/src/index.ts b/admin-vben/internal/vite-config/src/index.ts similarity index 100% rename from admin/internal/vite-config/src/index.ts rename to admin-vben/internal/vite-config/src/index.ts diff --git a/admin/internal/vite-config/src/options.ts b/admin-vben/internal/vite-config/src/options.ts similarity index 100% rename from admin/internal/vite-config/src/options.ts rename to admin-vben/internal/vite-config/src/options.ts diff --git a/admin/internal/vite-config/src/plugins/archiver.ts b/admin-vben/internal/vite-config/src/plugins/archiver.ts similarity index 100% rename from admin/internal/vite-config/src/plugins/archiver.ts rename to admin-vben/internal/vite-config/src/plugins/archiver.ts diff --git a/admin/internal/vite-config/src/plugins/extra-app-config.ts b/admin-vben/internal/vite-config/src/plugins/extra-app-config.ts similarity index 100% rename from admin/internal/vite-config/src/plugins/extra-app-config.ts rename to admin-vben/internal/vite-config/src/plugins/extra-app-config.ts diff --git a/admin/internal/vite-config/src/plugins/importmap.ts b/admin-vben/internal/vite-config/src/plugins/importmap.ts similarity index 100% rename from admin/internal/vite-config/src/plugins/importmap.ts rename to admin-vben/internal/vite-config/src/plugins/importmap.ts diff --git a/admin/internal/vite-config/src/plugins/index.ts b/admin-vben/internal/vite-config/src/plugins/index.ts similarity index 100% rename from admin/internal/vite-config/src/plugins/index.ts rename to admin-vben/internal/vite-config/src/plugins/index.ts diff --git a/admin/internal/vite-config/src/plugins/inject-app-loading/README.md b/admin-vben/internal/vite-config/src/plugins/inject-app-loading/README.md similarity index 100% rename from admin/internal/vite-config/src/plugins/inject-app-loading/README.md rename to admin-vben/internal/vite-config/src/plugins/inject-app-loading/README.md diff --git a/admin/internal/vite-config/src/plugins/inject-app-loading/default-loading-antd.html b/admin-vben/internal/vite-config/src/plugins/inject-app-loading/default-loading-antd.html similarity index 100% rename from admin/internal/vite-config/src/plugins/inject-app-loading/default-loading-antd.html rename to admin-vben/internal/vite-config/src/plugins/inject-app-loading/default-loading-antd.html diff --git a/admin/internal/vite-config/src/plugins/inject-app-loading/default-loading.html b/admin-vben/internal/vite-config/src/plugins/inject-app-loading/default-loading.html similarity index 100% rename from admin/internal/vite-config/src/plugins/inject-app-loading/default-loading.html rename to admin-vben/internal/vite-config/src/plugins/inject-app-loading/default-loading.html diff --git a/admin/internal/vite-config/src/plugins/inject-app-loading/index.ts b/admin-vben/internal/vite-config/src/plugins/inject-app-loading/index.ts similarity index 100% rename from admin/internal/vite-config/src/plugins/inject-app-loading/index.ts rename to admin-vben/internal/vite-config/src/plugins/inject-app-loading/index.ts diff --git a/admin/internal/vite-config/src/plugins/inject-metadata.ts b/admin-vben/internal/vite-config/src/plugins/inject-metadata.ts similarity index 100% rename from admin/internal/vite-config/src/plugins/inject-metadata.ts rename to admin-vben/internal/vite-config/src/plugins/inject-metadata.ts diff --git a/admin/internal/vite-config/src/plugins/license.ts b/admin-vben/internal/vite-config/src/plugins/license.ts similarity index 100% rename from admin/internal/vite-config/src/plugins/license.ts rename to admin-vben/internal/vite-config/src/plugins/license.ts diff --git a/admin/internal/vite-config/src/plugins/nitro-mock.ts b/admin-vben/internal/vite-config/src/plugins/nitro-mock.ts similarity index 100% rename from admin/internal/vite-config/src/plugins/nitro-mock.ts rename to admin-vben/internal/vite-config/src/plugins/nitro-mock.ts diff --git a/admin/internal/vite-config/src/plugins/print.ts b/admin-vben/internal/vite-config/src/plugins/print.ts similarity index 100% rename from admin/internal/vite-config/src/plugins/print.ts rename to admin-vben/internal/vite-config/src/plugins/print.ts diff --git a/admin/internal/vite-config/src/plugins/vxe-table.ts b/admin-vben/internal/vite-config/src/plugins/vxe-table.ts similarity index 100% rename from admin/internal/vite-config/src/plugins/vxe-table.ts rename to admin-vben/internal/vite-config/src/plugins/vxe-table.ts diff --git a/admin/internal/vite-config/src/typing.ts b/admin-vben/internal/vite-config/src/typing.ts similarity index 100% rename from admin/internal/vite-config/src/typing.ts rename to admin-vben/internal/vite-config/src/typing.ts diff --git a/admin/internal/vite-config/src/utils/env.ts b/admin-vben/internal/vite-config/src/utils/env.ts similarity index 100% rename from admin/internal/vite-config/src/utils/env.ts rename to admin-vben/internal/vite-config/src/utils/env.ts diff --git a/admin/internal/vite-config/tsconfig.json b/admin-vben/internal/vite-config/tsconfig.json similarity index 100% rename from admin/internal/vite-config/tsconfig.json rename to admin-vben/internal/vite-config/tsconfig.json diff --git a/admin/lefthook.yml b/admin-vben/lefthook.yml similarity index 100% rename from admin/lefthook.yml rename to admin-vben/lefthook.yml diff --git a/admin/nginx.conf b/admin-vben/nginx.conf similarity index 100% rename from admin/nginx.conf rename to admin-vben/nginx.conf diff --git a/admin/package.json b/admin-vben/package.json similarity index 100% rename from admin/package.json rename to admin-vben/package.json diff --git a/admin/packages/@core/README.md b/admin-vben/packages/@core/README.md similarity index 100% rename from admin/packages/@core/README.md rename to admin-vben/packages/@core/README.md diff --git a/admin/packages/@core/base/README.md b/admin-vben/packages/@core/base/README.md similarity index 100% rename from admin/packages/@core/base/README.md rename to admin-vben/packages/@core/base/README.md diff --git a/admin/packages/@core/base/design/package.json b/admin-vben/packages/@core/base/design/package.json similarity index 100% rename from admin/packages/@core/base/design/package.json rename to admin-vben/packages/@core/base/design/package.json diff --git a/admin/packages/@core/base/design/src/css/global.css b/admin-vben/packages/@core/base/design/src/css/global.css similarity index 100% rename from admin/packages/@core/base/design/src/css/global.css rename to admin-vben/packages/@core/base/design/src/css/global.css diff --git a/admin/packages/@core/base/design/src/css/nprogress.css b/admin-vben/packages/@core/base/design/src/css/nprogress.css similarity index 100% rename from admin/packages/@core/base/design/src/css/nprogress.css rename to admin-vben/packages/@core/base/design/src/css/nprogress.css diff --git a/admin/packages/@core/base/design/src/css/transition.css b/admin-vben/packages/@core/base/design/src/css/transition.css similarity index 100% rename from admin/packages/@core/base/design/src/css/transition.css rename to admin-vben/packages/@core/base/design/src/css/transition.css diff --git a/admin/packages/@core/base/design/src/css/ui.css b/admin-vben/packages/@core/base/design/src/css/ui.css similarity index 100% rename from admin/packages/@core/base/design/src/css/ui.css rename to admin-vben/packages/@core/base/design/src/css/ui.css diff --git a/admin/packages/@core/base/design/src/design-tokens/dark.css b/admin-vben/packages/@core/base/design/src/design-tokens/dark.css similarity index 100% rename from admin/packages/@core/base/design/src/design-tokens/dark.css rename to admin-vben/packages/@core/base/design/src/design-tokens/dark.css diff --git a/admin/packages/@core/base/design/src/design-tokens/default.css b/admin-vben/packages/@core/base/design/src/design-tokens/default.css similarity index 100% rename from admin/packages/@core/base/design/src/design-tokens/default.css rename to admin-vben/packages/@core/base/design/src/design-tokens/default.css diff --git a/admin/packages/@core/base/design/src/design-tokens/index.ts b/admin-vben/packages/@core/base/design/src/design-tokens/index.ts similarity index 100% rename from admin/packages/@core/base/design/src/design-tokens/index.ts rename to admin-vben/packages/@core/base/design/src/design-tokens/index.ts diff --git a/admin/packages/@core/base/design/src/index.ts b/admin-vben/packages/@core/base/design/src/index.ts similarity index 100% rename from admin/packages/@core/base/design/src/index.ts rename to admin-vben/packages/@core/base/design/src/index.ts diff --git a/admin/packages/@core/base/design/src/scss-bem/bem.scss b/admin-vben/packages/@core/base/design/src/scss-bem/bem.scss similarity index 100% rename from admin/packages/@core/base/design/src/scss-bem/bem.scss rename to admin-vben/packages/@core/base/design/src/scss-bem/bem.scss diff --git a/admin/packages/@core/base/design/src/scss-bem/constants.scss b/admin-vben/packages/@core/base/design/src/scss-bem/constants.scss similarity index 100% rename from admin/packages/@core/base/design/src/scss-bem/constants.scss rename to admin-vben/packages/@core/base/design/src/scss-bem/constants.scss diff --git a/admin/packages/@core/base/design/tsconfig.json b/admin-vben/packages/@core/base/design/tsconfig.json similarity index 100% rename from admin/packages/@core/base/design/tsconfig.json rename to admin-vben/packages/@core/base/design/tsconfig.json diff --git a/admin/packages/@core/base/design/vite.config.mts b/admin-vben/packages/@core/base/design/vite.config.mts similarity index 100% rename from admin/packages/@core/base/design/vite.config.mts rename to admin-vben/packages/@core/base/design/vite.config.mts diff --git a/admin/packages/@core/base/icons/build.config.ts b/admin-vben/packages/@core/base/icons/build.config.ts similarity index 100% rename from admin/packages/@core/base/icons/build.config.ts rename to admin-vben/packages/@core/base/icons/build.config.ts diff --git a/admin/packages/@core/base/icons/package.json b/admin-vben/packages/@core/base/icons/package.json similarity index 100% rename from admin/packages/@core/base/icons/package.json rename to admin-vben/packages/@core/base/icons/package.json diff --git a/admin/packages/@core/base/icons/src/create-icon.ts b/admin-vben/packages/@core/base/icons/src/create-icon.ts similarity index 100% rename from admin/packages/@core/base/icons/src/create-icon.ts rename to admin-vben/packages/@core/base/icons/src/create-icon.ts diff --git a/admin/packages/@core/base/icons/src/index.ts b/admin-vben/packages/@core/base/icons/src/index.ts similarity index 100% rename from admin/packages/@core/base/icons/src/index.ts rename to admin-vben/packages/@core/base/icons/src/index.ts diff --git a/admin/packages/@core/base/icons/src/lucide.ts b/admin-vben/packages/@core/base/icons/src/lucide.ts similarity index 100% rename from admin/packages/@core/base/icons/src/lucide.ts rename to admin-vben/packages/@core/base/icons/src/lucide.ts diff --git a/admin/packages/@core/base/icons/tsconfig.json b/admin-vben/packages/@core/base/icons/tsconfig.json similarity index 100% rename from admin/packages/@core/base/icons/tsconfig.json rename to admin-vben/packages/@core/base/icons/tsconfig.json diff --git a/admin/packages/@core/base/shared/build.config.ts b/admin-vben/packages/@core/base/shared/build.config.ts similarity index 100% rename from admin/packages/@core/base/shared/build.config.ts rename to admin-vben/packages/@core/base/shared/build.config.ts diff --git a/admin/packages/@core/base/shared/package.json b/admin-vben/packages/@core/base/shared/package.json similarity index 100% rename from admin/packages/@core/base/shared/package.json rename to admin-vben/packages/@core/base/shared/package.json diff --git a/admin/packages/@core/base/shared/src/cache/__tests__/storage-manager.test.ts b/admin-vben/packages/@core/base/shared/src/cache/__tests__/storage-manager.test.ts similarity index 100% rename from admin/packages/@core/base/shared/src/cache/__tests__/storage-manager.test.ts rename to admin-vben/packages/@core/base/shared/src/cache/__tests__/storage-manager.test.ts diff --git a/admin/packages/@core/base/shared/src/cache/index.ts b/admin-vben/packages/@core/base/shared/src/cache/index.ts similarity index 100% rename from admin/packages/@core/base/shared/src/cache/index.ts rename to admin-vben/packages/@core/base/shared/src/cache/index.ts diff --git a/admin/packages/@core/base/shared/src/cache/storage-manager.ts b/admin-vben/packages/@core/base/shared/src/cache/storage-manager.ts similarity index 100% rename from admin/packages/@core/base/shared/src/cache/storage-manager.ts rename to admin-vben/packages/@core/base/shared/src/cache/storage-manager.ts diff --git a/admin/packages/@core/base/shared/src/cache/types.ts b/admin-vben/packages/@core/base/shared/src/cache/types.ts similarity index 100% rename from admin/packages/@core/base/shared/src/cache/types.ts rename to admin-vben/packages/@core/base/shared/src/cache/types.ts diff --git a/admin/packages/@core/base/shared/src/color/__tests__/convert.test.ts b/admin-vben/packages/@core/base/shared/src/color/__tests__/convert.test.ts similarity index 100% rename from admin/packages/@core/base/shared/src/color/__tests__/convert.test.ts rename to admin-vben/packages/@core/base/shared/src/color/__tests__/convert.test.ts diff --git a/admin/packages/@core/base/shared/src/color/color.ts b/admin-vben/packages/@core/base/shared/src/color/color.ts similarity index 100% rename from admin/packages/@core/base/shared/src/color/color.ts rename to admin-vben/packages/@core/base/shared/src/color/color.ts diff --git a/admin/packages/@core/base/shared/src/color/convert.ts b/admin-vben/packages/@core/base/shared/src/color/convert.ts similarity index 100% rename from admin/packages/@core/base/shared/src/color/convert.ts rename to admin-vben/packages/@core/base/shared/src/color/convert.ts diff --git a/admin/packages/@core/base/shared/src/color/generator.ts b/admin-vben/packages/@core/base/shared/src/color/generator.ts similarity index 100% rename from admin/packages/@core/base/shared/src/color/generator.ts rename to admin-vben/packages/@core/base/shared/src/color/generator.ts diff --git a/admin/packages/@core/base/shared/src/color/index.ts b/admin-vben/packages/@core/base/shared/src/color/index.ts similarity index 100% rename from admin/packages/@core/base/shared/src/color/index.ts rename to admin-vben/packages/@core/base/shared/src/color/index.ts diff --git a/admin/packages/@core/base/shared/src/constants/globals.ts b/admin-vben/packages/@core/base/shared/src/constants/globals.ts similarity index 100% rename from admin/packages/@core/base/shared/src/constants/globals.ts rename to admin-vben/packages/@core/base/shared/src/constants/globals.ts diff --git a/admin/packages/@core/base/shared/src/constants/index.ts b/admin-vben/packages/@core/base/shared/src/constants/index.ts similarity index 100% rename from admin/packages/@core/base/shared/src/constants/index.ts rename to admin-vben/packages/@core/base/shared/src/constants/index.ts diff --git a/admin/packages/@core/base/shared/src/constants/vben.ts b/admin-vben/packages/@core/base/shared/src/constants/vben.ts similarity index 100% rename from admin/packages/@core/base/shared/src/constants/vben.ts rename to admin-vben/packages/@core/base/shared/src/constants/vben.ts diff --git a/admin/packages/@core/base/shared/src/global-state.ts b/admin-vben/packages/@core/base/shared/src/global-state.ts similarity index 100% rename from admin/packages/@core/base/shared/src/global-state.ts rename to admin-vben/packages/@core/base/shared/src/global-state.ts diff --git a/admin/packages/@core/base/shared/src/store.ts b/admin-vben/packages/@core/base/shared/src/store.ts similarity index 100% rename from admin/packages/@core/base/shared/src/store.ts rename to admin-vben/packages/@core/base/shared/src/store.ts diff --git a/admin/packages/@core/base/shared/src/utils/__tests__/diff.test.ts b/admin-vben/packages/@core/base/shared/src/utils/__tests__/diff.test.ts similarity index 100% rename from admin/packages/@core/base/shared/src/utils/__tests__/diff.test.ts rename to admin-vben/packages/@core/base/shared/src/utils/__tests__/diff.test.ts diff --git a/admin/packages/@core/base/shared/src/utils/__tests__/dom.test.ts b/admin-vben/packages/@core/base/shared/src/utils/__tests__/dom.test.ts similarity index 100% rename from admin/packages/@core/base/shared/src/utils/__tests__/dom.test.ts rename to admin-vben/packages/@core/base/shared/src/utils/__tests__/dom.test.ts diff --git a/admin/packages/@core/base/shared/src/utils/__tests__/inference.test.ts b/admin-vben/packages/@core/base/shared/src/utils/__tests__/inference.test.ts similarity index 100% rename from admin/packages/@core/base/shared/src/utils/__tests__/inference.test.ts rename to admin-vben/packages/@core/base/shared/src/utils/__tests__/inference.test.ts diff --git a/admin/packages/@core/base/shared/src/utils/__tests__/letter.test.ts b/admin-vben/packages/@core/base/shared/src/utils/__tests__/letter.test.ts similarity index 100% rename from admin/packages/@core/base/shared/src/utils/__tests__/letter.test.ts rename to admin-vben/packages/@core/base/shared/src/utils/__tests__/letter.test.ts diff --git a/admin/packages/@core/base/shared/src/utils/__tests__/resources.test.ts b/admin-vben/packages/@core/base/shared/src/utils/__tests__/resources.test.ts similarity index 100% rename from admin/packages/@core/base/shared/src/utils/__tests__/resources.test.ts rename to admin-vben/packages/@core/base/shared/src/utils/__tests__/resources.test.ts diff --git a/admin/packages/@core/base/shared/src/utils/__tests__/state-handler.test.ts b/admin-vben/packages/@core/base/shared/src/utils/__tests__/state-handler.test.ts similarity index 100% rename from admin/packages/@core/base/shared/src/utils/__tests__/state-handler.test.ts rename to admin-vben/packages/@core/base/shared/src/utils/__tests__/state-handler.test.ts diff --git a/admin/packages/@core/base/shared/src/utils/__tests__/tree.test.ts b/admin-vben/packages/@core/base/shared/src/utils/__tests__/tree.test.ts similarity index 100% rename from admin/packages/@core/base/shared/src/utils/__tests__/tree.test.ts rename to admin-vben/packages/@core/base/shared/src/utils/__tests__/tree.test.ts diff --git a/admin/packages/@core/base/shared/src/utils/__tests__/unique.test.ts b/admin-vben/packages/@core/base/shared/src/utils/__tests__/unique.test.ts similarity index 100% rename from admin/packages/@core/base/shared/src/utils/__tests__/unique.test.ts rename to admin-vben/packages/@core/base/shared/src/utils/__tests__/unique.test.ts diff --git a/admin/packages/@core/base/shared/src/utils/__tests__/update-css-variables.test.ts b/admin-vben/packages/@core/base/shared/src/utils/__tests__/update-css-variables.test.ts similarity index 100% rename from admin/packages/@core/base/shared/src/utils/__tests__/update-css-variables.test.ts rename to admin-vben/packages/@core/base/shared/src/utils/__tests__/update-css-variables.test.ts diff --git a/admin/packages/@core/base/shared/src/utils/__tests__/util.test.ts b/admin-vben/packages/@core/base/shared/src/utils/__tests__/util.test.ts similarity index 100% rename from admin/packages/@core/base/shared/src/utils/__tests__/util.test.ts rename to admin-vben/packages/@core/base/shared/src/utils/__tests__/util.test.ts diff --git a/admin/packages/@core/base/shared/src/utils/__tests__/window.test.ts b/admin-vben/packages/@core/base/shared/src/utils/__tests__/window.test.ts similarity index 100% rename from admin/packages/@core/base/shared/src/utils/__tests__/window.test.ts rename to admin-vben/packages/@core/base/shared/src/utils/__tests__/window.test.ts diff --git a/admin/packages/@core/base/shared/src/utils/cn.ts b/admin-vben/packages/@core/base/shared/src/utils/cn.ts similarity index 100% rename from admin/packages/@core/base/shared/src/utils/cn.ts rename to admin-vben/packages/@core/base/shared/src/utils/cn.ts diff --git a/admin/packages/@core/base/shared/src/utils/date.ts b/admin-vben/packages/@core/base/shared/src/utils/date.ts similarity index 100% rename from admin/packages/@core/base/shared/src/utils/date.ts rename to admin-vben/packages/@core/base/shared/src/utils/date.ts diff --git a/admin/packages/@core/base/shared/src/utils/diff.ts b/admin-vben/packages/@core/base/shared/src/utils/diff.ts similarity index 100% rename from admin/packages/@core/base/shared/src/utils/diff.ts rename to admin-vben/packages/@core/base/shared/src/utils/diff.ts diff --git a/admin/packages/@core/base/shared/src/utils/dom.ts b/admin-vben/packages/@core/base/shared/src/utils/dom.ts similarity index 100% rename from admin/packages/@core/base/shared/src/utils/dom.ts rename to admin-vben/packages/@core/base/shared/src/utils/dom.ts diff --git a/admin/packages/@core/base/shared/src/utils/download.ts b/admin-vben/packages/@core/base/shared/src/utils/download.ts similarity index 100% rename from admin/packages/@core/base/shared/src/utils/download.ts rename to admin-vben/packages/@core/base/shared/src/utils/download.ts diff --git a/admin/packages/@core/base/shared/src/utils/index.ts b/admin-vben/packages/@core/base/shared/src/utils/index.ts similarity index 100% rename from admin/packages/@core/base/shared/src/utils/index.ts rename to admin-vben/packages/@core/base/shared/src/utils/index.ts diff --git a/admin/packages/@core/base/shared/src/utils/inference.ts b/admin-vben/packages/@core/base/shared/src/utils/inference.ts similarity index 100% rename from admin/packages/@core/base/shared/src/utils/inference.ts rename to admin-vben/packages/@core/base/shared/src/utils/inference.ts diff --git a/admin/packages/@core/base/shared/src/utils/letter.ts b/admin-vben/packages/@core/base/shared/src/utils/letter.ts similarity index 100% rename from admin/packages/@core/base/shared/src/utils/letter.ts rename to admin-vben/packages/@core/base/shared/src/utils/letter.ts diff --git a/admin/packages/@core/base/shared/src/utils/merge.ts b/admin-vben/packages/@core/base/shared/src/utils/merge.ts similarity index 100% rename from admin/packages/@core/base/shared/src/utils/merge.ts rename to admin-vben/packages/@core/base/shared/src/utils/merge.ts diff --git a/admin/packages/@core/base/shared/src/utils/nprogress.ts b/admin-vben/packages/@core/base/shared/src/utils/nprogress.ts similarity index 100% rename from admin/packages/@core/base/shared/src/utils/nprogress.ts rename to admin-vben/packages/@core/base/shared/src/utils/nprogress.ts diff --git a/admin/packages/@core/base/shared/src/utils/resources.ts b/admin-vben/packages/@core/base/shared/src/utils/resources.ts similarity index 100% rename from admin/packages/@core/base/shared/src/utils/resources.ts rename to admin-vben/packages/@core/base/shared/src/utils/resources.ts diff --git a/admin/packages/@core/base/shared/src/utils/state-handler.ts b/admin-vben/packages/@core/base/shared/src/utils/state-handler.ts similarity index 100% rename from admin/packages/@core/base/shared/src/utils/state-handler.ts rename to admin-vben/packages/@core/base/shared/src/utils/state-handler.ts diff --git a/admin/packages/@core/base/shared/src/utils/to.ts b/admin-vben/packages/@core/base/shared/src/utils/to.ts similarity index 100% rename from admin/packages/@core/base/shared/src/utils/to.ts rename to admin-vben/packages/@core/base/shared/src/utils/to.ts diff --git a/admin/packages/@core/base/shared/src/utils/tree.ts b/admin-vben/packages/@core/base/shared/src/utils/tree.ts similarity index 100% rename from admin/packages/@core/base/shared/src/utils/tree.ts rename to admin-vben/packages/@core/base/shared/src/utils/tree.ts diff --git a/admin/packages/@core/base/shared/src/utils/unique.ts b/admin-vben/packages/@core/base/shared/src/utils/unique.ts similarity index 100% rename from admin/packages/@core/base/shared/src/utils/unique.ts rename to admin-vben/packages/@core/base/shared/src/utils/unique.ts diff --git a/admin/packages/@core/base/shared/src/utils/update-css-variables.ts b/admin-vben/packages/@core/base/shared/src/utils/update-css-variables.ts similarity index 100% rename from admin/packages/@core/base/shared/src/utils/update-css-variables.ts rename to admin-vben/packages/@core/base/shared/src/utils/update-css-variables.ts diff --git a/admin/packages/@core/base/shared/src/utils/util.ts b/admin-vben/packages/@core/base/shared/src/utils/util.ts similarity index 100% rename from admin/packages/@core/base/shared/src/utils/util.ts rename to admin-vben/packages/@core/base/shared/src/utils/util.ts diff --git a/admin/packages/@core/base/shared/src/utils/window.ts b/admin-vben/packages/@core/base/shared/src/utils/window.ts similarity index 100% rename from admin/packages/@core/base/shared/src/utils/window.ts rename to admin-vben/packages/@core/base/shared/src/utils/window.ts diff --git a/admin/packages/@core/base/shared/tsconfig.json b/admin-vben/packages/@core/base/shared/tsconfig.json similarity index 100% rename from admin/packages/@core/base/shared/tsconfig.json rename to admin-vben/packages/@core/base/shared/tsconfig.json diff --git a/admin/packages/@core/base/typings/build.config.ts b/admin-vben/packages/@core/base/typings/build.config.ts similarity index 100% rename from admin/packages/@core/base/typings/build.config.ts rename to admin-vben/packages/@core/base/typings/build.config.ts diff --git a/admin/packages/@core/base/typings/package.json b/admin-vben/packages/@core/base/typings/package.json similarity index 100% rename from admin/packages/@core/base/typings/package.json rename to admin-vben/packages/@core/base/typings/package.json diff --git a/admin/packages/@core/base/typings/src/app.d.ts b/admin-vben/packages/@core/base/typings/src/app.d.ts similarity index 100% rename from admin/packages/@core/base/typings/src/app.d.ts rename to admin-vben/packages/@core/base/typings/src/app.d.ts diff --git a/admin/packages/@core/base/typings/src/basic.d.ts b/admin-vben/packages/@core/base/typings/src/basic.d.ts similarity index 100% rename from admin/packages/@core/base/typings/src/basic.d.ts rename to admin-vben/packages/@core/base/typings/src/basic.d.ts diff --git a/admin/packages/@core/base/typings/src/helper.d.ts b/admin-vben/packages/@core/base/typings/src/helper.d.ts similarity index 100% rename from admin/packages/@core/base/typings/src/helper.d.ts rename to admin-vben/packages/@core/base/typings/src/helper.d.ts diff --git a/admin/packages/@core/base/typings/src/index.ts b/admin-vben/packages/@core/base/typings/src/index.ts similarity index 100% rename from admin/packages/@core/base/typings/src/index.ts rename to admin-vben/packages/@core/base/typings/src/index.ts diff --git a/admin/packages/@core/base/typings/src/menu-record.ts b/admin-vben/packages/@core/base/typings/src/menu-record.ts similarity index 100% rename from admin/packages/@core/base/typings/src/menu-record.ts rename to admin-vben/packages/@core/base/typings/src/menu-record.ts diff --git a/admin/packages/@core/base/typings/src/tabs.ts b/admin-vben/packages/@core/base/typings/src/tabs.ts similarity index 100% rename from admin/packages/@core/base/typings/src/tabs.ts rename to admin-vben/packages/@core/base/typings/src/tabs.ts diff --git a/admin/packages/@core/base/typings/src/vue-router.d.ts b/admin-vben/packages/@core/base/typings/src/vue-router.d.ts similarity index 100% rename from admin/packages/@core/base/typings/src/vue-router.d.ts rename to admin-vben/packages/@core/base/typings/src/vue-router.d.ts diff --git a/admin/packages/@core/base/typings/tsconfig.json b/admin-vben/packages/@core/base/typings/tsconfig.json similarity index 100% rename from admin/packages/@core/base/typings/tsconfig.json rename to admin-vben/packages/@core/base/typings/tsconfig.json diff --git a/admin/packages/@core/base/typings/vue-router.d.ts b/admin-vben/packages/@core/base/typings/vue-router.d.ts similarity index 100% rename from admin/packages/@core/base/typings/vue-router.d.ts rename to admin-vben/packages/@core/base/typings/vue-router.d.ts diff --git a/admin/packages/@core/composables/build.config.ts b/admin-vben/packages/@core/composables/build.config.ts similarity index 100% rename from admin/packages/@core/composables/build.config.ts rename to admin-vben/packages/@core/composables/build.config.ts diff --git a/admin/packages/@core/composables/package.json b/admin-vben/packages/@core/composables/package.json similarity index 100% rename from admin/packages/@core/composables/package.json rename to admin-vben/packages/@core/composables/package.json diff --git a/admin/packages/@core/composables/src/__tests__/use-sortable.test.ts b/admin-vben/packages/@core/composables/src/__tests__/use-sortable.test.ts similarity index 100% rename from admin/packages/@core/composables/src/__tests__/use-sortable.test.ts rename to admin-vben/packages/@core/composables/src/__tests__/use-sortable.test.ts diff --git a/admin/packages/@core/composables/src/index.ts b/admin-vben/packages/@core/composables/src/index.ts similarity index 100% rename from admin/packages/@core/composables/src/index.ts rename to admin-vben/packages/@core/composables/src/index.ts diff --git a/admin/packages/@core/composables/src/use-is-mobile.ts b/admin-vben/packages/@core/composables/src/use-is-mobile.ts similarity index 100% rename from admin/packages/@core/composables/src/use-is-mobile.ts rename to admin-vben/packages/@core/composables/src/use-is-mobile.ts diff --git a/admin/packages/@core/composables/src/use-layout-style.ts b/admin-vben/packages/@core/composables/src/use-layout-style.ts similarity index 100% rename from admin/packages/@core/composables/src/use-layout-style.ts rename to admin-vben/packages/@core/composables/src/use-layout-style.ts diff --git a/admin/packages/@core/composables/src/use-namespace.ts b/admin-vben/packages/@core/composables/src/use-namespace.ts similarity index 100% rename from admin/packages/@core/composables/src/use-namespace.ts rename to admin-vben/packages/@core/composables/src/use-namespace.ts diff --git a/admin/packages/@core/composables/src/use-priority-value.ts b/admin-vben/packages/@core/composables/src/use-priority-value.ts similarity index 100% rename from admin/packages/@core/composables/src/use-priority-value.ts rename to admin-vben/packages/@core/composables/src/use-priority-value.ts diff --git a/admin/packages/@core/composables/src/use-scroll-lock.ts b/admin-vben/packages/@core/composables/src/use-scroll-lock.ts similarity index 100% rename from admin/packages/@core/composables/src/use-scroll-lock.ts rename to admin-vben/packages/@core/composables/src/use-scroll-lock.ts diff --git a/admin/packages/@core/composables/src/use-simple-locale/README.md b/admin-vben/packages/@core/composables/src/use-simple-locale/README.md similarity index 100% rename from admin/packages/@core/composables/src/use-simple-locale/README.md rename to admin-vben/packages/@core/composables/src/use-simple-locale/README.md diff --git a/admin/packages/@core/composables/src/use-simple-locale/index.ts b/admin-vben/packages/@core/composables/src/use-simple-locale/index.ts similarity index 100% rename from admin/packages/@core/composables/src/use-simple-locale/index.ts rename to admin-vben/packages/@core/composables/src/use-simple-locale/index.ts diff --git a/admin/packages/@core/composables/src/use-simple-locale/messages.ts b/admin-vben/packages/@core/composables/src/use-simple-locale/messages.ts similarity index 100% rename from admin/packages/@core/composables/src/use-simple-locale/messages.ts rename to admin-vben/packages/@core/composables/src/use-simple-locale/messages.ts diff --git a/admin/packages/@core/composables/src/use-sortable.ts b/admin-vben/packages/@core/composables/src/use-sortable.ts similarity index 100% rename from admin/packages/@core/composables/src/use-sortable.ts rename to admin-vben/packages/@core/composables/src/use-sortable.ts diff --git a/admin/packages/@core/composables/tsconfig.json b/admin-vben/packages/@core/composables/tsconfig.json similarity index 100% rename from admin/packages/@core/composables/tsconfig.json rename to admin-vben/packages/@core/composables/tsconfig.json diff --git a/admin/packages/@core/preferences/__tests__/__snapshots__/config.test.ts.snap b/admin-vben/packages/@core/preferences/__tests__/__snapshots__/config.test.ts.snap similarity index 100% rename from admin/packages/@core/preferences/__tests__/__snapshots__/config.test.ts.snap rename to admin-vben/packages/@core/preferences/__tests__/__snapshots__/config.test.ts.snap diff --git a/admin/packages/@core/preferences/__tests__/config.test.ts b/admin-vben/packages/@core/preferences/__tests__/config.test.ts similarity index 100% rename from admin/packages/@core/preferences/__tests__/config.test.ts rename to admin-vben/packages/@core/preferences/__tests__/config.test.ts diff --git a/admin/packages/@core/preferences/__tests__/preferences.test.ts b/admin-vben/packages/@core/preferences/__tests__/preferences.test.ts similarity index 100% rename from admin/packages/@core/preferences/__tests__/preferences.test.ts rename to admin-vben/packages/@core/preferences/__tests__/preferences.test.ts diff --git a/admin/packages/@core/preferences/build.config.ts b/admin-vben/packages/@core/preferences/build.config.ts similarity index 100% rename from admin/packages/@core/preferences/build.config.ts rename to admin-vben/packages/@core/preferences/build.config.ts diff --git a/admin/packages/@core/preferences/package.json b/admin-vben/packages/@core/preferences/package.json similarity index 100% rename from admin/packages/@core/preferences/package.json rename to admin-vben/packages/@core/preferences/package.json diff --git a/admin/packages/@core/preferences/src/config.ts b/admin-vben/packages/@core/preferences/src/config.ts similarity index 100% rename from admin/packages/@core/preferences/src/config.ts rename to admin-vben/packages/@core/preferences/src/config.ts diff --git a/admin/packages/@core/preferences/src/constants.ts b/admin-vben/packages/@core/preferences/src/constants.ts similarity index 100% rename from admin/packages/@core/preferences/src/constants.ts rename to admin-vben/packages/@core/preferences/src/constants.ts diff --git a/admin/packages/@core/preferences/src/index.ts b/admin-vben/packages/@core/preferences/src/index.ts similarity index 100% rename from admin/packages/@core/preferences/src/index.ts rename to admin-vben/packages/@core/preferences/src/index.ts diff --git a/admin/packages/@core/preferences/src/preferences.ts b/admin-vben/packages/@core/preferences/src/preferences.ts similarity index 100% rename from admin/packages/@core/preferences/src/preferences.ts rename to admin-vben/packages/@core/preferences/src/preferences.ts diff --git a/admin/packages/@core/preferences/src/types.ts b/admin-vben/packages/@core/preferences/src/types.ts similarity index 100% rename from admin/packages/@core/preferences/src/types.ts rename to admin-vben/packages/@core/preferences/src/types.ts diff --git a/admin/packages/@core/preferences/src/update-css-variables.ts b/admin-vben/packages/@core/preferences/src/update-css-variables.ts similarity index 100% rename from admin/packages/@core/preferences/src/update-css-variables.ts rename to admin-vben/packages/@core/preferences/src/update-css-variables.ts diff --git a/admin/packages/@core/preferences/src/use-preferences.ts b/admin-vben/packages/@core/preferences/src/use-preferences.ts similarity index 100% rename from admin/packages/@core/preferences/src/use-preferences.ts rename to admin-vben/packages/@core/preferences/src/use-preferences.ts diff --git a/admin/packages/@core/preferences/tsconfig.json b/admin-vben/packages/@core/preferences/tsconfig.json similarity index 100% rename from admin/packages/@core/preferences/tsconfig.json rename to admin-vben/packages/@core/preferences/tsconfig.json diff --git a/admin/packages/@core/ui-kit/README.md b/admin-vben/packages/@core/ui-kit/README.md similarity index 100% rename from admin/packages/@core/ui-kit/README.md rename to admin-vben/packages/@core/ui-kit/README.md diff --git a/admin/packages/@core/ui-kit/form-ui/__tests__/form-api.test.ts b/admin-vben/packages/@core/ui-kit/form-ui/__tests__/form-api.test.ts similarity index 100% rename from admin/packages/@core/ui-kit/form-ui/__tests__/form-api.test.ts rename to admin-vben/packages/@core/ui-kit/form-ui/__tests__/form-api.test.ts diff --git a/admin/packages/@core/ui-kit/form-ui/build.config.ts b/admin-vben/packages/@core/ui-kit/form-ui/build.config.ts similarity index 100% rename from admin/packages/@core/ui-kit/form-ui/build.config.ts rename to admin-vben/packages/@core/ui-kit/form-ui/build.config.ts diff --git a/admin/packages/@core/ui-kit/form-ui/package.json b/admin-vben/packages/@core/ui-kit/form-ui/package.json similarity index 100% rename from admin/packages/@core/ui-kit/form-ui/package.json rename to admin-vben/packages/@core/ui-kit/form-ui/package.json diff --git a/admin/packages/@core/ui-kit/form-ui/postcss.config.mjs b/admin-vben/packages/@core/ui-kit/form-ui/postcss.config.mjs similarity index 100% rename from admin/packages/@core/ui-kit/form-ui/postcss.config.mjs rename to admin-vben/packages/@core/ui-kit/form-ui/postcss.config.mjs diff --git a/admin/packages/@core/ui-kit/form-ui/src/components/form-actions.vue b/admin-vben/packages/@core/ui-kit/form-ui/src/components/form-actions.vue similarity index 100% rename from admin/packages/@core/ui-kit/form-ui/src/components/form-actions.vue rename to admin-vben/packages/@core/ui-kit/form-ui/src/components/form-actions.vue diff --git a/admin/packages/@core/ui-kit/form-ui/src/config.ts b/admin-vben/packages/@core/ui-kit/form-ui/src/config.ts similarity index 100% rename from admin/packages/@core/ui-kit/form-ui/src/config.ts rename to admin-vben/packages/@core/ui-kit/form-ui/src/config.ts diff --git a/admin/packages/@core/ui-kit/form-ui/src/form-api.ts b/admin-vben/packages/@core/ui-kit/form-ui/src/form-api.ts similarity index 100% rename from admin/packages/@core/ui-kit/form-ui/src/form-api.ts rename to admin-vben/packages/@core/ui-kit/form-ui/src/form-api.ts diff --git a/admin/packages/@core/ui-kit/form-ui/src/form-render/context.ts b/admin-vben/packages/@core/ui-kit/form-ui/src/form-render/context.ts similarity index 100% rename from admin/packages/@core/ui-kit/form-ui/src/form-render/context.ts rename to admin-vben/packages/@core/ui-kit/form-ui/src/form-render/context.ts diff --git a/admin/packages/@core/ui-kit/form-ui/src/form-render/dependencies.ts b/admin-vben/packages/@core/ui-kit/form-ui/src/form-render/dependencies.ts similarity index 100% rename from admin/packages/@core/ui-kit/form-ui/src/form-render/dependencies.ts rename to admin-vben/packages/@core/ui-kit/form-ui/src/form-render/dependencies.ts diff --git a/admin/packages/@core/ui-kit/form-ui/src/form-render/expandable.ts b/admin-vben/packages/@core/ui-kit/form-ui/src/form-render/expandable.ts similarity index 100% rename from admin/packages/@core/ui-kit/form-ui/src/form-render/expandable.ts rename to admin-vben/packages/@core/ui-kit/form-ui/src/form-render/expandable.ts diff --git a/admin/packages/@core/ui-kit/form-ui/src/form-render/form-field.vue b/admin-vben/packages/@core/ui-kit/form-ui/src/form-render/form-field.vue similarity index 100% rename from admin/packages/@core/ui-kit/form-ui/src/form-render/form-field.vue rename to admin-vben/packages/@core/ui-kit/form-ui/src/form-render/form-field.vue diff --git a/admin/packages/@core/ui-kit/form-ui/src/form-render/form-label.vue b/admin-vben/packages/@core/ui-kit/form-ui/src/form-render/form-label.vue similarity index 100% rename from admin/packages/@core/ui-kit/form-ui/src/form-render/form-label.vue rename to admin-vben/packages/@core/ui-kit/form-ui/src/form-render/form-label.vue diff --git a/admin/packages/@core/ui-kit/form-ui/src/form-render/form.vue b/admin-vben/packages/@core/ui-kit/form-ui/src/form-render/form.vue similarity index 100% rename from admin/packages/@core/ui-kit/form-ui/src/form-render/form.vue rename to admin-vben/packages/@core/ui-kit/form-ui/src/form-render/form.vue diff --git a/admin/packages/@core/ui-kit/form-ui/src/form-render/helper.ts b/admin-vben/packages/@core/ui-kit/form-ui/src/form-render/helper.ts similarity index 100% rename from admin/packages/@core/ui-kit/form-ui/src/form-render/helper.ts rename to admin-vben/packages/@core/ui-kit/form-ui/src/form-render/helper.ts diff --git a/admin/packages/@core/ui-kit/form-ui/src/form-render/index.ts b/admin-vben/packages/@core/ui-kit/form-ui/src/form-render/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/form-ui/src/form-render/index.ts rename to admin-vben/packages/@core/ui-kit/form-ui/src/form-render/index.ts diff --git a/admin/packages/@core/ui-kit/form-ui/src/index.ts b/admin-vben/packages/@core/ui-kit/form-ui/src/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/form-ui/src/index.ts rename to admin-vben/packages/@core/ui-kit/form-ui/src/index.ts diff --git a/admin/packages/@core/ui-kit/form-ui/src/types.ts b/admin-vben/packages/@core/ui-kit/form-ui/src/types.ts similarity index 100% rename from admin/packages/@core/ui-kit/form-ui/src/types.ts rename to admin-vben/packages/@core/ui-kit/form-ui/src/types.ts diff --git a/admin/packages/@core/ui-kit/form-ui/src/use-form-context.ts b/admin-vben/packages/@core/ui-kit/form-ui/src/use-form-context.ts similarity index 100% rename from admin/packages/@core/ui-kit/form-ui/src/use-form-context.ts rename to admin-vben/packages/@core/ui-kit/form-ui/src/use-form-context.ts diff --git a/admin/packages/@core/ui-kit/form-ui/src/use-vben-form.ts b/admin-vben/packages/@core/ui-kit/form-ui/src/use-vben-form.ts similarity index 100% rename from admin/packages/@core/ui-kit/form-ui/src/use-vben-form.ts rename to admin-vben/packages/@core/ui-kit/form-ui/src/use-vben-form.ts diff --git a/admin/packages/@core/ui-kit/form-ui/src/vben-form.vue b/admin-vben/packages/@core/ui-kit/form-ui/src/vben-form.vue similarity index 100% rename from admin/packages/@core/ui-kit/form-ui/src/vben-form.vue rename to admin-vben/packages/@core/ui-kit/form-ui/src/vben-form.vue diff --git a/admin/packages/@core/ui-kit/form-ui/src/vben-use-form.vue b/admin-vben/packages/@core/ui-kit/form-ui/src/vben-use-form.vue similarity index 100% rename from admin/packages/@core/ui-kit/form-ui/src/vben-use-form.vue rename to admin-vben/packages/@core/ui-kit/form-ui/src/vben-use-form.vue diff --git a/admin/packages/@core/ui-kit/form-ui/tailwind.config.mjs b/admin-vben/packages/@core/ui-kit/form-ui/tailwind.config.mjs similarity index 100% rename from admin/packages/@core/ui-kit/form-ui/tailwind.config.mjs rename to admin-vben/packages/@core/ui-kit/form-ui/tailwind.config.mjs diff --git a/admin/packages/@core/ui-kit/form-ui/tsconfig.json b/admin-vben/packages/@core/ui-kit/form-ui/tsconfig.json similarity index 100% rename from admin/packages/@core/ui-kit/form-ui/tsconfig.json rename to admin-vben/packages/@core/ui-kit/form-ui/tsconfig.json diff --git a/admin/packages/@core/ui-kit/layout-ui/build.config.ts b/admin-vben/packages/@core/ui-kit/layout-ui/build.config.ts similarity index 100% rename from admin/packages/@core/ui-kit/layout-ui/build.config.ts rename to admin-vben/packages/@core/ui-kit/layout-ui/build.config.ts diff --git a/admin/packages/@core/ui-kit/layout-ui/package.json b/admin-vben/packages/@core/ui-kit/layout-ui/package.json similarity index 100% rename from admin/packages/@core/ui-kit/layout-ui/package.json rename to admin-vben/packages/@core/ui-kit/layout-ui/package.json diff --git a/admin/packages/@core/ui-kit/layout-ui/postcss.config.mjs b/admin-vben/packages/@core/ui-kit/layout-ui/postcss.config.mjs similarity index 100% rename from admin/packages/@core/ui-kit/layout-ui/postcss.config.mjs rename to admin-vben/packages/@core/ui-kit/layout-ui/postcss.config.mjs diff --git a/admin/packages/@core/ui-kit/layout-ui/src/components/index.ts b/admin-vben/packages/@core/ui-kit/layout-ui/src/components/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/layout-ui/src/components/index.ts rename to admin-vben/packages/@core/ui-kit/layout-ui/src/components/index.ts diff --git a/admin/packages/@core/ui-kit/layout-ui/src/components/layout-content.vue b/admin-vben/packages/@core/ui-kit/layout-ui/src/components/layout-content.vue similarity index 100% rename from admin/packages/@core/ui-kit/layout-ui/src/components/layout-content.vue rename to admin-vben/packages/@core/ui-kit/layout-ui/src/components/layout-content.vue diff --git a/admin/packages/@core/ui-kit/layout-ui/src/components/layout-footer.vue b/admin-vben/packages/@core/ui-kit/layout-ui/src/components/layout-footer.vue similarity index 100% rename from admin/packages/@core/ui-kit/layout-ui/src/components/layout-footer.vue rename to admin-vben/packages/@core/ui-kit/layout-ui/src/components/layout-footer.vue diff --git a/admin/packages/@core/ui-kit/layout-ui/src/components/layout-header.vue b/admin-vben/packages/@core/ui-kit/layout-ui/src/components/layout-header.vue similarity index 100% rename from admin/packages/@core/ui-kit/layout-ui/src/components/layout-header.vue rename to admin-vben/packages/@core/ui-kit/layout-ui/src/components/layout-header.vue diff --git a/admin/packages/@core/ui-kit/layout-ui/src/components/layout-sidebar.vue b/admin-vben/packages/@core/ui-kit/layout-ui/src/components/layout-sidebar.vue similarity index 100% rename from admin/packages/@core/ui-kit/layout-ui/src/components/layout-sidebar.vue rename to admin-vben/packages/@core/ui-kit/layout-ui/src/components/layout-sidebar.vue diff --git a/admin/packages/@core/ui-kit/layout-ui/src/components/layout-tabbar.vue b/admin-vben/packages/@core/ui-kit/layout-ui/src/components/layout-tabbar.vue similarity index 100% rename from admin/packages/@core/ui-kit/layout-ui/src/components/layout-tabbar.vue rename to admin-vben/packages/@core/ui-kit/layout-ui/src/components/layout-tabbar.vue diff --git a/admin/packages/@core/ui-kit/layout-ui/src/components/widgets/index.ts b/admin-vben/packages/@core/ui-kit/layout-ui/src/components/widgets/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/layout-ui/src/components/widgets/index.ts rename to admin-vben/packages/@core/ui-kit/layout-ui/src/components/widgets/index.ts diff --git a/admin/packages/@core/ui-kit/layout-ui/src/components/widgets/sidebar-collapse-button.vue b/admin-vben/packages/@core/ui-kit/layout-ui/src/components/widgets/sidebar-collapse-button.vue similarity index 100% rename from admin/packages/@core/ui-kit/layout-ui/src/components/widgets/sidebar-collapse-button.vue rename to admin-vben/packages/@core/ui-kit/layout-ui/src/components/widgets/sidebar-collapse-button.vue diff --git a/admin/packages/@core/ui-kit/layout-ui/src/components/widgets/sidebar-fixed-button.vue b/admin-vben/packages/@core/ui-kit/layout-ui/src/components/widgets/sidebar-fixed-button.vue similarity index 100% rename from admin/packages/@core/ui-kit/layout-ui/src/components/widgets/sidebar-fixed-button.vue rename to admin-vben/packages/@core/ui-kit/layout-ui/src/components/widgets/sidebar-fixed-button.vue diff --git a/admin/packages/@core/ui-kit/layout-ui/src/hooks/use-layout.ts b/admin-vben/packages/@core/ui-kit/layout-ui/src/hooks/use-layout.ts similarity index 100% rename from admin/packages/@core/ui-kit/layout-ui/src/hooks/use-layout.ts rename to admin-vben/packages/@core/ui-kit/layout-ui/src/hooks/use-layout.ts diff --git a/admin/packages/@core/ui-kit/layout-ui/src/index.ts b/admin-vben/packages/@core/ui-kit/layout-ui/src/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/layout-ui/src/index.ts rename to admin-vben/packages/@core/ui-kit/layout-ui/src/index.ts diff --git a/admin/packages/@core/ui-kit/layout-ui/src/vben-layout.ts b/admin-vben/packages/@core/ui-kit/layout-ui/src/vben-layout.ts similarity index 100% rename from admin/packages/@core/ui-kit/layout-ui/src/vben-layout.ts rename to admin-vben/packages/@core/ui-kit/layout-ui/src/vben-layout.ts diff --git a/admin/packages/@core/ui-kit/layout-ui/src/vben-layout.vue b/admin-vben/packages/@core/ui-kit/layout-ui/src/vben-layout.vue similarity index 100% rename from admin/packages/@core/ui-kit/layout-ui/src/vben-layout.vue rename to admin-vben/packages/@core/ui-kit/layout-ui/src/vben-layout.vue diff --git a/admin/packages/@core/ui-kit/layout-ui/tailwind.config.mjs b/admin-vben/packages/@core/ui-kit/layout-ui/tailwind.config.mjs similarity index 100% rename from admin/packages/@core/ui-kit/layout-ui/tailwind.config.mjs rename to admin-vben/packages/@core/ui-kit/layout-ui/tailwind.config.mjs diff --git a/admin/packages/@core/ui-kit/layout-ui/tsconfig.json b/admin-vben/packages/@core/ui-kit/layout-ui/tsconfig.json similarity index 100% rename from admin/packages/@core/ui-kit/layout-ui/tsconfig.json rename to admin-vben/packages/@core/ui-kit/layout-ui/tsconfig.json diff --git a/admin/packages/@core/ui-kit/menu-ui/README.md b/admin-vben/packages/@core/ui-kit/menu-ui/README.md similarity index 100% rename from admin/packages/@core/ui-kit/menu-ui/README.md rename to admin-vben/packages/@core/ui-kit/menu-ui/README.md diff --git a/admin/packages/@core/ui-kit/menu-ui/build.config.ts b/admin-vben/packages/@core/ui-kit/menu-ui/build.config.ts similarity index 100% rename from admin/packages/@core/ui-kit/menu-ui/build.config.ts rename to admin-vben/packages/@core/ui-kit/menu-ui/build.config.ts diff --git a/admin/packages/@core/ui-kit/menu-ui/package.json b/admin-vben/packages/@core/ui-kit/menu-ui/package.json similarity index 100% rename from admin/packages/@core/ui-kit/menu-ui/package.json rename to admin-vben/packages/@core/ui-kit/menu-ui/package.json diff --git a/admin/packages/@core/ui-kit/menu-ui/postcss.config.mjs b/admin-vben/packages/@core/ui-kit/menu-ui/postcss.config.mjs similarity index 100% rename from admin/packages/@core/ui-kit/menu-ui/postcss.config.mjs rename to admin-vben/packages/@core/ui-kit/menu-ui/postcss.config.mjs diff --git a/admin/packages/@core/ui-kit/menu-ui/src/components/collapse-transition.vue b/admin-vben/packages/@core/ui-kit/menu-ui/src/components/collapse-transition.vue similarity index 100% rename from admin/packages/@core/ui-kit/menu-ui/src/components/collapse-transition.vue rename to admin-vben/packages/@core/ui-kit/menu-ui/src/components/collapse-transition.vue diff --git a/admin/packages/@core/ui-kit/menu-ui/src/components/index.ts b/admin-vben/packages/@core/ui-kit/menu-ui/src/components/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/menu-ui/src/components/index.ts rename to admin-vben/packages/@core/ui-kit/menu-ui/src/components/index.ts diff --git a/admin/packages/@core/ui-kit/menu-ui/src/components/menu-badge-dot.vue b/admin-vben/packages/@core/ui-kit/menu-ui/src/components/menu-badge-dot.vue similarity index 100% rename from admin/packages/@core/ui-kit/menu-ui/src/components/menu-badge-dot.vue rename to admin-vben/packages/@core/ui-kit/menu-ui/src/components/menu-badge-dot.vue diff --git a/admin/packages/@core/ui-kit/menu-ui/src/components/menu-badge.vue b/admin-vben/packages/@core/ui-kit/menu-ui/src/components/menu-badge.vue similarity index 100% rename from admin/packages/@core/ui-kit/menu-ui/src/components/menu-badge.vue rename to admin-vben/packages/@core/ui-kit/menu-ui/src/components/menu-badge.vue diff --git a/admin/packages/@core/ui-kit/menu-ui/src/components/menu-item.vue b/admin-vben/packages/@core/ui-kit/menu-ui/src/components/menu-item.vue similarity index 100% rename from admin/packages/@core/ui-kit/menu-ui/src/components/menu-item.vue rename to admin-vben/packages/@core/ui-kit/menu-ui/src/components/menu-item.vue diff --git a/admin/packages/@core/ui-kit/menu-ui/src/components/menu.vue b/admin-vben/packages/@core/ui-kit/menu-ui/src/components/menu.vue similarity index 100% rename from admin/packages/@core/ui-kit/menu-ui/src/components/menu.vue rename to admin-vben/packages/@core/ui-kit/menu-ui/src/components/menu.vue diff --git a/admin/packages/@core/ui-kit/menu-ui/src/components/normal-menu/index.ts b/admin-vben/packages/@core/ui-kit/menu-ui/src/components/normal-menu/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/menu-ui/src/components/normal-menu/index.ts rename to admin-vben/packages/@core/ui-kit/menu-ui/src/components/normal-menu/index.ts diff --git a/admin/packages/@core/ui-kit/menu-ui/src/components/normal-menu/normal-menu.ts b/admin-vben/packages/@core/ui-kit/menu-ui/src/components/normal-menu/normal-menu.ts similarity index 100% rename from admin/packages/@core/ui-kit/menu-ui/src/components/normal-menu/normal-menu.ts rename to admin-vben/packages/@core/ui-kit/menu-ui/src/components/normal-menu/normal-menu.ts diff --git a/admin/packages/@core/ui-kit/menu-ui/src/components/normal-menu/normal-menu.vue b/admin-vben/packages/@core/ui-kit/menu-ui/src/components/normal-menu/normal-menu.vue similarity index 100% rename from admin/packages/@core/ui-kit/menu-ui/src/components/normal-menu/normal-menu.vue rename to admin-vben/packages/@core/ui-kit/menu-ui/src/components/normal-menu/normal-menu.vue diff --git a/admin/packages/@core/ui-kit/menu-ui/src/components/sub-menu-content.vue b/admin-vben/packages/@core/ui-kit/menu-ui/src/components/sub-menu-content.vue similarity index 100% rename from admin/packages/@core/ui-kit/menu-ui/src/components/sub-menu-content.vue rename to admin-vben/packages/@core/ui-kit/menu-ui/src/components/sub-menu-content.vue diff --git a/admin/packages/@core/ui-kit/menu-ui/src/components/sub-menu.vue b/admin-vben/packages/@core/ui-kit/menu-ui/src/components/sub-menu.vue similarity index 100% rename from admin/packages/@core/ui-kit/menu-ui/src/components/sub-menu.vue rename to admin-vben/packages/@core/ui-kit/menu-ui/src/components/sub-menu.vue diff --git a/admin/packages/@core/ui-kit/menu-ui/src/hooks/index.ts b/admin-vben/packages/@core/ui-kit/menu-ui/src/hooks/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/menu-ui/src/hooks/index.ts rename to admin-vben/packages/@core/ui-kit/menu-ui/src/hooks/index.ts diff --git a/admin/packages/@core/ui-kit/menu-ui/src/hooks/use-menu-context.ts b/admin-vben/packages/@core/ui-kit/menu-ui/src/hooks/use-menu-context.ts similarity index 100% rename from admin/packages/@core/ui-kit/menu-ui/src/hooks/use-menu-context.ts rename to admin-vben/packages/@core/ui-kit/menu-ui/src/hooks/use-menu-context.ts diff --git a/admin/packages/@core/ui-kit/menu-ui/src/hooks/use-menu-scroll.ts b/admin-vben/packages/@core/ui-kit/menu-ui/src/hooks/use-menu-scroll.ts similarity index 100% rename from admin/packages/@core/ui-kit/menu-ui/src/hooks/use-menu-scroll.ts rename to admin-vben/packages/@core/ui-kit/menu-ui/src/hooks/use-menu-scroll.ts diff --git a/admin/packages/@core/ui-kit/menu-ui/src/hooks/use-menu.ts b/admin-vben/packages/@core/ui-kit/menu-ui/src/hooks/use-menu.ts similarity index 100% rename from admin/packages/@core/ui-kit/menu-ui/src/hooks/use-menu.ts rename to admin-vben/packages/@core/ui-kit/menu-ui/src/hooks/use-menu.ts diff --git a/admin/packages/@core/ui-kit/menu-ui/src/index.ts b/admin-vben/packages/@core/ui-kit/menu-ui/src/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/menu-ui/src/index.ts rename to admin-vben/packages/@core/ui-kit/menu-ui/src/index.ts diff --git a/admin/packages/@core/ui-kit/menu-ui/src/menu.vue b/admin-vben/packages/@core/ui-kit/menu-ui/src/menu.vue similarity index 100% rename from admin/packages/@core/ui-kit/menu-ui/src/menu.vue rename to admin-vben/packages/@core/ui-kit/menu-ui/src/menu.vue diff --git a/admin/packages/@core/ui-kit/menu-ui/src/sub-menu.vue b/admin-vben/packages/@core/ui-kit/menu-ui/src/sub-menu.vue similarity index 100% rename from admin/packages/@core/ui-kit/menu-ui/src/sub-menu.vue rename to admin-vben/packages/@core/ui-kit/menu-ui/src/sub-menu.vue diff --git a/admin/packages/@core/ui-kit/menu-ui/src/types.ts b/admin-vben/packages/@core/ui-kit/menu-ui/src/types.ts similarity index 100% rename from admin/packages/@core/ui-kit/menu-ui/src/types.ts rename to admin-vben/packages/@core/ui-kit/menu-ui/src/types.ts diff --git a/admin/packages/@core/ui-kit/menu-ui/src/utils/index.ts b/admin-vben/packages/@core/ui-kit/menu-ui/src/utils/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/menu-ui/src/utils/index.ts rename to admin-vben/packages/@core/ui-kit/menu-ui/src/utils/index.ts diff --git a/admin/packages/@core/ui-kit/menu-ui/tailwind.config.mjs b/admin-vben/packages/@core/ui-kit/menu-ui/tailwind.config.mjs similarity index 100% rename from admin/packages/@core/ui-kit/menu-ui/tailwind.config.mjs rename to admin-vben/packages/@core/ui-kit/menu-ui/tailwind.config.mjs diff --git a/admin/packages/@core/ui-kit/menu-ui/tsconfig.json b/admin-vben/packages/@core/ui-kit/menu-ui/tsconfig.json similarity index 100% rename from admin/packages/@core/ui-kit/menu-ui/tsconfig.json rename to admin-vben/packages/@core/ui-kit/menu-ui/tsconfig.json diff --git a/admin/packages/@core/ui-kit/popup-ui/build.config.ts b/admin-vben/packages/@core/ui-kit/popup-ui/build.config.ts similarity index 100% rename from admin/packages/@core/ui-kit/popup-ui/build.config.ts rename to admin-vben/packages/@core/ui-kit/popup-ui/build.config.ts diff --git a/admin/packages/@core/ui-kit/popup-ui/package.json b/admin-vben/packages/@core/ui-kit/popup-ui/package.json similarity index 100% rename from admin/packages/@core/ui-kit/popup-ui/package.json rename to admin-vben/packages/@core/ui-kit/popup-ui/package.json diff --git a/admin/packages/@core/ui-kit/popup-ui/postcss.config.mjs b/admin-vben/packages/@core/ui-kit/popup-ui/postcss.config.mjs similarity index 100% rename from admin/packages/@core/ui-kit/popup-ui/postcss.config.mjs rename to admin-vben/packages/@core/ui-kit/popup-ui/postcss.config.mjs diff --git a/admin/packages/@core/ui-kit/popup-ui/src/alert/AlertBuilder.ts b/admin-vben/packages/@core/ui-kit/popup-ui/src/alert/AlertBuilder.ts similarity index 100% rename from admin/packages/@core/ui-kit/popup-ui/src/alert/AlertBuilder.ts rename to admin-vben/packages/@core/ui-kit/popup-ui/src/alert/AlertBuilder.ts diff --git a/admin/packages/@core/ui-kit/popup-ui/src/alert/alert.ts b/admin-vben/packages/@core/ui-kit/popup-ui/src/alert/alert.ts similarity index 100% rename from admin/packages/@core/ui-kit/popup-ui/src/alert/alert.ts rename to admin-vben/packages/@core/ui-kit/popup-ui/src/alert/alert.ts diff --git a/admin/packages/@core/ui-kit/popup-ui/src/alert/alert.vue b/admin-vben/packages/@core/ui-kit/popup-ui/src/alert/alert.vue similarity index 100% rename from admin/packages/@core/ui-kit/popup-ui/src/alert/alert.vue rename to admin-vben/packages/@core/ui-kit/popup-ui/src/alert/alert.vue diff --git a/admin/packages/@core/ui-kit/popup-ui/src/alert/index.ts b/admin-vben/packages/@core/ui-kit/popup-ui/src/alert/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/popup-ui/src/alert/index.ts rename to admin-vben/packages/@core/ui-kit/popup-ui/src/alert/index.ts diff --git a/admin/packages/@core/ui-kit/popup-ui/src/drawer/__tests__/drawer-api.test.ts b/admin-vben/packages/@core/ui-kit/popup-ui/src/drawer/__tests__/drawer-api.test.ts similarity index 100% rename from admin/packages/@core/ui-kit/popup-ui/src/drawer/__tests__/drawer-api.test.ts rename to admin-vben/packages/@core/ui-kit/popup-ui/src/drawer/__tests__/drawer-api.test.ts diff --git a/admin/packages/@core/ui-kit/popup-ui/src/drawer/drawer-api.ts b/admin-vben/packages/@core/ui-kit/popup-ui/src/drawer/drawer-api.ts similarity index 100% rename from admin/packages/@core/ui-kit/popup-ui/src/drawer/drawer-api.ts rename to admin-vben/packages/@core/ui-kit/popup-ui/src/drawer/drawer-api.ts diff --git a/admin/packages/@core/ui-kit/popup-ui/src/drawer/drawer.ts b/admin-vben/packages/@core/ui-kit/popup-ui/src/drawer/drawer.ts similarity index 100% rename from admin/packages/@core/ui-kit/popup-ui/src/drawer/drawer.ts rename to admin-vben/packages/@core/ui-kit/popup-ui/src/drawer/drawer.ts diff --git a/admin/packages/@core/ui-kit/popup-ui/src/drawer/drawer.vue b/admin-vben/packages/@core/ui-kit/popup-ui/src/drawer/drawer.vue similarity index 100% rename from admin/packages/@core/ui-kit/popup-ui/src/drawer/drawer.vue rename to admin-vben/packages/@core/ui-kit/popup-ui/src/drawer/drawer.vue diff --git a/admin/packages/@core/ui-kit/popup-ui/src/drawer/index.ts b/admin-vben/packages/@core/ui-kit/popup-ui/src/drawer/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/popup-ui/src/drawer/index.ts rename to admin-vben/packages/@core/ui-kit/popup-ui/src/drawer/index.ts diff --git a/admin/packages/@core/ui-kit/popup-ui/src/drawer/use-drawer.ts b/admin-vben/packages/@core/ui-kit/popup-ui/src/drawer/use-drawer.ts similarity index 100% rename from admin/packages/@core/ui-kit/popup-ui/src/drawer/use-drawer.ts rename to admin-vben/packages/@core/ui-kit/popup-ui/src/drawer/use-drawer.ts diff --git a/admin/packages/@core/ui-kit/popup-ui/src/index.ts b/admin-vben/packages/@core/ui-kit/popup-ui/src/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/popup-ui/src/index.ts rename to admin-vben/packages/@core/ui-kit/popup-ui/src/index.ts diff --git a/admin/packages/@core/ui-kit/popup-ui/src/modal/__tests__/modal-api.test.ts b/admin-vben/packages/@core/ui-kit/popup-ui/src/modal/__tests__/modal-api.test.ts similarity index 100% rename from admin/packages/@core/ui-kit/popup-ui/src/modal/__tests__/modal-api.test.ts rename to admin-vben/packages/@core/ui-kit/popup-ui/src/modal/__tests__/modal-api.test.ts diff --git a/admin/packages/@core/ui-kit/popup-ui/src/modal/index.ts b/admin-vben/packages/@core/ui-kit/popup-ui/src/modal/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/popup-ui/src/modal/index.ts rename to admin-vben/packages/@core/ui-kit/popup-ui/src/modal/index.ts diff --git a/admin/packages/@core/ui-kit/popup-ui/src/modal/modal-api.ts b/admin-vben/packages/@core/ui-kit/popup-ui/src/modal/modal-api.ts similarity index 100% rename from admin/packages/@core/ui-kit/popup-ui/src/modal/modal-api.ts rename to admin-vben/packages/@core/ui-kit/popup-ui/src/modal/modal-api.ts diff --git a/admin/packages/@core/ui-kit/popup-ui/src/modal/modal.ts b/admin-vben/packages/@core/ui-kit/popup-ui/src/modal/modal.ts similarity index 100% rename from admin/packages/@core/ui-kit/popup-ui/src/modal/modal.ts rename to admin-vben/packages/@core/ui-kit/popup-ui/src/modal/modal.ts diff --git a/admin/packages/@core/ui-kit/popup-ui/src/modal/modal.vue b/admin-vben/packages/@core/ui-kit/popup-ui/src/modal/modal.vue similarity index 100% rename from admin/packages/@core/ui-kit/popup-ui/src/modal/modal.vue rename to admin-vben/packages/@core/ui-kit/popup-ui/src/modal/modal.vue diff --git a/admin/packages/@core/ui-kit/popup-ui/src/modal/use-modal-draggable.ts b/admin-vben/packages/@core/ui-kit/popup-ui/src/modal/use-modal-draggable.ts similarity index 100% rename from admin/packages/@core/ui-kit/popup-ui/src/modal/use-modal-draggable.ts rename to admin-vben/packages/@core/ui-kit/popup-ui/src/modal/use-modal-draggable.ts diff --git a/admin/packages/@core/ui-kit/popup-ui/src/modal/use-modal.ts b/admin-vben/packages/@core/ui-kit/popup-ui/src/modal/use-modal.ts similarity index 100% rename from admin/packages/@core/ui-kit/popup-ui/src/modal/use-modal.ts rename to admin-vben/packages/@core/ui-kit/popup-ui/src/modal/use-modal.ts diff --git a/admin/packages/@core/ui-kit/popup-ui/tailwind.config.mjs b/admin-vben/packages/@core/ui-kit/popup-ui/tailwind.config.mjs similarity index 100% rename from admin/packages/@core/ui-kit/popup-ui/tailwind.config.mjs rename to admin-vben/packages/@core/ui-kit/popup-ui/tailwind.config.mjs diff --git a/admin/packages/@core/ui-kit/popup-ui/tsconfig.json b/admin-vben/packages/@core/ui-kit/popup-ui/tsconfig.json similarity index 100% rename from admin/packages/@core/ui-kit/popup-ui/tsconfig.json rename to admin-vben/packages/@core/ui-kit/popup-ui/tsconfig.json diff --git a/admin/packages/@core/ui-kit/shadcn-ui/build.config.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/build.config.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/build.config.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/build.config.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/components.json b/admin-vben/packages/@core/ui-kit/shadcn-ui/components.json similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/components.json rename to admin-vben/packages/@core/ui-kit/shadcn-ui/components.json diff --git a/admin/packages/@core/ui-kit/shadcn-ui/package.json b/admin-vben/packages/@core/ui-kit/shadcn-ui/package.json similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/package.json rename to admin-vben/packages/@core/ui-kit/shadcn-ui/package.json diff --git a/admin/packages/@core/ui-kit/shadcn-ui/postcss.config.mjs b/admin-vben/packages/@core/ui-kit/shadcn-ui/postcss.config.mjs similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/postcss.config.mjs rename to admin-vben/packages/@core/ui-kit/shadcn-ui/postcss.config.mjs diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/avatar/avatar.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/avatar/avatar.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/avatar/avatar.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/avatar/avatar.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/avatar/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/avatar/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/avatar/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/avatar/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/back-top/back-top.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/back-top/back-top.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/back-top/back-top.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/back-top/back-top.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/back-top/backtop.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/back-top/backtop.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/back-top/backtop.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/back-top/backtop.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/back-top/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/back-top/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/back-top/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/back-top/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/back-top/use-backtop.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/back-top/use-backtop.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/back-top/use-backtop.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/back-top/use-backtop.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/breadcrumb/breadcrumb-background.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/breadcrumb/breadcrumb-background.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/breadcrumb/breadcrumb-background.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/breadcrumb/breadcrumb-background.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/breadcrumb/breadcrumb-view.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/breadcrumb/breadcrumb-view.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/breadcrumb/breadcrumb-view.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/breadcrumb/breadcrumb-view.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/breadcrumb/breadcrumb.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/breadcrumb/breadcrumb.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/breadcrumb/breadcrumb.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/breadcrumb/breadcrumb.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/breadcrumb/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/breadcrumb/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/breadcrumb/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/breadcrumb/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/breadcrumb/types.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/breadcrumb/types.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/breadcrumb/types.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/breadcrumb/types.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/button/button-group.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/button/button-group.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/button/button-group.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/button/button-group.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/button/button.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/button/button.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/button/button.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/button/button.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/button/button.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/button/button.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/button/button.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/button/button.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/button/check-button-group.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/button/check-button-group.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/button/check-button-group.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/button/check-button-group.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/button/icon-button.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/button/icon-button.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/button/icon-button.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/button/icon-button.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/button/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/button/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/button/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/button/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/checkbox/checkbox.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/checkbox/checkbox.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/checkbox/checkbox.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/checkbox/checkbox.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/checkbox/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/checkbox/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/checkbox/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/checkbox/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/context-menu/context-menu.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/context-menu/context-menu.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/context-menu/context-menu.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/context-menu/context-menu.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/context-menu/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/context-menu/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/context-menu/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/context-menu/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/context-menu/interface.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/context-menu/interface.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/context-menu/interface.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/context-menu/interface.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/count-to-animator/count-to-animator.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/count-to-animator/count-to-animator.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/count-to-animator/count-to-animator.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/count-to-animator/count-to-animator.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/count-to-animator/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/count-to-animator/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/count-to-animator/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/count-to-animator/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/dropdown-menu/dropdown-menu.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/dropdown-menu/dropdown-menu.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/dropdown-menu/dropdown-menu.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/dropdown-menu/dropdown-menu.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/dropdown-menu/dropdown-radio-menu.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/dropdown-menu/dropdown-radio-menu.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/dropdown-menu/dropdown-radio-menu.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/dropdown-menu/dropdown-radio-menu.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/dropdown-menu/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/dropdown-menu/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/dropdown-menu/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/dropdown-menu/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/dropdown-menu/interface.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/dropdown-menu/interface.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/dropdown-menu/interface.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/dropdown-menu/interface.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/expandable-arrow/expandable-arrow.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/expandable-arrow/expandable-arrow.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/expandable-arrow/expandable-arrow.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/expandable-arrow/expandable-arrow.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/expandable-arrow/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/expandable-arrow/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/expandable-arrow/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/expandable-arrow/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/full-screen/full-screen.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/full-screen/full-screen.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/full-screen/full-screen.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/full-screen/full-screen.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/full-screen/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/full-screen/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/full-screen/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/full-screen/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/hover-card/hover-card.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/hover-card/hover-card.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/hover-card/hover-card.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/hover-card/hover-card.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/hover-card/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/hover-card/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/hover-card/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/hover-card/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/icon/icon.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/icon/icon.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/icon/icon.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/icon/icon.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/icon/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/icon/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/icon/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/icon/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/input-password/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/input-password/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/input-password/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/input-password/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/input-password/input-password.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/input-password/input-password.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/input-password/input-password.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/input-password/input-password.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/input-password/password-strength.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/input-password/password-strength.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/input-password/password-strength.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/input-password/password-strength.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/logo/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/logo/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/logo/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/logo/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/logo/logo.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/logo/logo.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/logo/logo.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/logo/logo.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/pin-input/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/pin-input/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/pin-input/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/pin-input/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/pin-input/input.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/pin-input/input.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/pin-input/input.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/pin-input/input.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/pin-input/types.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/pin-input/types.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/pin-input/types.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/pin-input/types.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/popover/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/popover/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/popover/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/popover/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/popover/popover.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/popover/popover.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/popover/popover.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/popover/popover.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/render-content/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/render-content/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/render-content/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/render-content/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/render-content/render-content.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/render-content/render-content.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/render-content/render-content.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/render-content/render-content.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/scrollbar/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/scrollbar/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/scrollbar/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/scrollbar/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/scrollbar/scrollbar.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/scrollbar/scrollbar.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/scrollbar/scrollbar.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/scrollbar/scrollbar.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/segmented/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/segmented/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/segmented/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/segmented/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/segmented/segmented.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/segmented/segmented.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/segmented/segmented.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/segmented/segmented.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/segmented/tabs-indicator.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/segmented/tabs-indicator.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/segmented/tabs-indicator.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/segmented/tabs-indicator.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/segmented/types.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/segmented/types.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/segmented/types.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/segmented/types.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/select/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/select/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/select/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/select/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/select/select.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/select/select.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/select/select.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/select/select.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/spine-text/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/spine-text/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/spine-text/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/spine-text/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/spine-text/spine-text.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/spine-text/spine-text.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/spine-text/spine-text.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/spine-text/spine-text.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/spinner/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/spinner/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/spinner/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/spinner/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/spinner/loading.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/spinner/loading.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/spinner/loading.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/spinner/loading.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/spinner/spinner.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/spinner/spinner.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/spinner/spinner.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/spinner/spinner.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/tooltip/help-tooltip.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/tooltip/help-tooltip.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/tooltip/help-tooltip.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/tooltip/help-tooltip.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/tooltip/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/tooltip/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/tooltip/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/tooltip/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/components/tooltip/tooltip.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/tooltip/tooltip.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/components/tooltip/tooltip.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/components/tooltip/tooltip.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/accordion/Accordion.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/accordion/Accordion.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/accordion/Accordion.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/accordion/Accordion.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/accordion/AccordionContent.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/accordion/AccordionContent.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/accordion/AccordionContent.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/accordion/AccordionContent.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/accordion/AccordionItem.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/accordion/AccordionItem.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/accordion/AccordionItem.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/accordion/AccordionItem.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/accordion/AccordionTrigger.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/accordion/AccordionTrigger.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/accordion/AccordionTrigger.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/accordion/AccordionTrigger.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/accordion/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/accordion/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/accordion/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/accordion/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialog.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialog.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialog.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialog.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogAction.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogAction.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogAction.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogAction.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogCancel.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogCancel.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogCancel.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogCancel.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogContent.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogContent.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogContent.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogContent.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogDescription.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogDescription.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogDescription.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogDescription.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogOverlay.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogOverlay.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogOverlay.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogOverlay.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogTitle.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogTitle.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogTitle.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogTitle.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/avatar/Avatar.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/avatar/Avatar.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/avatar/Avatar.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/avatar/Avatar.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/avatar/AvatarFallback.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/avatar/AvatarFallback.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/avatar/AvatarFallback.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/avatar/AvatarFallback.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/avatar/AvatarImage.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/avatar/AvatarImage.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/avatar/AvatarImage.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/avatar/AvatarImage.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/avatar/avatar.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/avatar/avatar.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/avatar/avatar.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/avatar/avatar.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/avatar/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/avatar/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/avatar/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/avatar/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/badge/Badge.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/badge/Badge.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/badge/Badge.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/badge/Badge.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/badge/badge.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/badge/badge.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/badge/badge.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/badge/badge.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/badge/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/badge/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/badge/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/badge/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/Breadcrumb.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/Breadcrumb.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/Breadcrumb.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/Breadcrumb.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbEllipsis.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbEllipsis.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbEllipsis.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbEllipsis.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbItem.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbItem.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbItem.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbItem.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbLink.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbLink.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbLink.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbLink.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbList.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbList.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbList.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbList.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbPage.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbPage.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbPage.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbPage.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbSeparator.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbSeparator.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbSeparator.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbSeparator.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/button/Button.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/button/Button.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/button/Button.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/button/Button.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/button/button.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/button/button.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/button/button.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/button/button.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/button/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/button/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/button/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/button/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/button/types.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/button/types.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/button/types.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/button/types.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/card/Card.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/card/Card.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/card/Card.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/card/Card.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/card/CardContent.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/card/CardContent.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/card/CardContent.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/card/CardContent.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/card/CardDescription.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/card/CardDescription.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/card/CardDescription.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/card/CardDescription.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/card/CardFooter.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/card/CardFooter.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/card/CardFooter.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/card/CardFooter.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/card/CardHeader.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/card/CardHeader.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/card/CardHeader.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/card/CardHeader.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/card/CardTitle.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/card/CardTitle.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/card/CardTitle.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/card/CardTitle.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/card/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/card/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/card/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/card/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/checkbox/Checkbox.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/checkbox/Checkbox.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/checkbox/Checkbox.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/checkbox/Checkbox.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/checkbox/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/checkbox/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/checkbox/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/checkbox/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenu.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenu.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenu.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenu.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuCheckboxItem.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuCheckboxItem.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuCheckboxItem.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuCheckboxItem.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuContent.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuContent.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuContent.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuContent.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuGroup.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuGroup.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuGroup.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuGroup.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuItem.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuItem.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuItem.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuItem.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuLabel.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuLabel.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuLabel.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuLabel.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuPortal.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuPortal.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuPortal.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuPortal.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuRadioGroup.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuRadioGroup.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuRadioGroup.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuRadioGroup.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuRadioItem.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuRadioItem.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuRadioItem.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuRadioItem.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuSeparator.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuSeparator.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuSeparator.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuSeparator.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuShortcut.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuShortcut.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuShortcut.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuShortcut.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuSub.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuSub.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuSub.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuSub.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuSubContent.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuSubContent.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuSubContent.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuSubContent.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuSubTrigger.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuSubTrigger.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuSubTrigger.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuSubTrigger.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuTrigger.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuTrigger.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuTrigger.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuTrigger.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/Dialog.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/Dialog.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/Dialog.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/Dialog.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogClose.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogClose.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogClose.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogClose.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogContent.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogContent.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogContent.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogContent.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogDescription.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogDescription.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogDescription.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogDescription.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogFooter.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogFooter.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogFooter.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogFooter.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogHeader.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogHeader.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogHeader.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogHeader.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogOverlay.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogOverlay.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogOverlay.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogOverlay.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogScrollContent.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogScrollContent.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogScrollContent.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogScrollContent.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogTitle.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogTitle.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogTitle.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogTitle.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogTrigger.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogTrigger.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogTrigger.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogTrigger.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenu.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenu.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenu.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenu.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuCheckboxItem.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuCheckboxItem.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuCheckboxItem.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuCheckboxItem.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuContent.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuContent.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuContent.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuContent.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuGroup.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuGroup.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuGroup.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuGroup.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuItem.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuItem.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuItem.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuItem.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuLabel.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuLabel.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuLabel.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuLabel.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuRadioGroup.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuRadioGroup.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuRadioGroup.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuRadioGroup.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuRadioItem.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuRadioItem.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuRadioItem.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuRadioItem.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuSeparator.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuSeparator.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuSeparator.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuSeparator.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuShortcut.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuShortcut.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuShortcut.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuShortcut.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuSub.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuSub.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuSub.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuSub.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuSubContent.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuSubContent.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuSubContent.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuSubContent.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuSubTrigger.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuSubTrigger.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuSubTrigger.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuSubTrigger.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuTrigger.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuTrigger.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuTrigger.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuTrigger.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/form/FormControl.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/form/FormControl.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/form/FormControl.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/form/FormControl.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/form/FormDescription.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/form/FormDescription.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/form/FormDescription.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/form/FormDescription.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/form/FormItem.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/form/FormItem.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/form/FormItem.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/form/FormItem.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/form/FormLabel.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/form/FormLabel.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/form/FormLabel.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/form/FormLabel.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/form/FormMessage.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/form/FormMessage.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/form/FormMessage.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/form/FormMessage.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/form/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/form/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/form/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/form/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/form/injectionKeys.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/form/injectionKeys.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/form/injectionKeys.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/form/injectionKeys.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/form/useFormField.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/form/useFormField.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/form/useFormField.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/form/useFormField.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/hover-card/HoverCard.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/hover-card/HoverCard.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/hover-card/HoverCard.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/hover-card/HoverCard.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/hover-card/HoverCardContent.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/hover-card/HoverCardContent.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/hover-card/HoverCardContent.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/hover-card/HoverCardContent.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/hover-card/HoverCardTrigger.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/hover-card/HoverCardTrigger.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/hover-card/HoverCardTrigger.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/hover-card/HoverCardTrigger.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/hover-card/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/hover-card/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/hover-card/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/hover-card/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/input/Input.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/input/Input.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/input/Input.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/input/Input.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/input/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/input/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/input/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/input/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/label/Label.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/label/Label.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/label/Label.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/label/Label.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/label/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/label/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/label/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/label/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/number-field/NumberField.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/number-field/NumberField.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/number-field/NumberField.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/number-field/NumberField.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/number-field/NumberFieldContent.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/number-field/NumberFieldContent.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/number-field/NumberFieldContent.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/number-field/NumberFieldContent.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/number-field/NumberFieldDecrement.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/number-field/NumberFieldDecrement.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/number-field/NumberFieldDecrement.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/number-field/NumberFieldDecrement.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/number-field/NumberFieldIncrement.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/number-field/NumberFieldIncrement.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/number-field/NumberFieldIncrement.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/number-field/NumberFieldIncrement.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/number-field/NumberFieldInput.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/number-field/NumberFieldInput.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/number-field/NumberFieldInput.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/number-field/NumberFieldInput.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/number-field/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/number-field/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/number-field/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/number-field/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/pagination/PaginationEllipsis.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/pagination/PaginationEllipsis.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/pagination/PaginationEllipsis.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/pagination/PaginationEllipsis.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/pagination/PaginationFirst.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/pagination/PaginationFirst.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/pagination/PaginationFirst.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/pagination/PaginationFirst.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/pagination/PaginationLast.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/pagination/PaginationLast.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/pagination/PaginationLast.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/pagination/PaginationLast.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/pagination/PaginationNext.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/pagination/PaginationNext.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/pagination/PaginationNext.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/pagination/PaginationNext.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/pagination/PaginationPrev.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/pagination/PaginationPrev.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/pagination/PaginationPrev.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/pagination/PaginationPrev.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/pagination/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/pagination/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/pagination/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/pagination/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/pin-input/PinInput.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/pin-input/PinInput.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/pin-input/PinInput.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/pin-input/PinInput.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/pin-input/PinInputGroup.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/pin-input/PinInputGroup.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/pin-input/PinInputGroup.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/pin-input/PinInputGroup.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/pin-input/PinInputInput.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/pin-input/PinInputInput.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/pin-input/PinInputInput.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/pin-input/PinInputInput.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/pin-input/PinInputSeparator.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/pin-input/PinInputSeparator.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/pin-input/PinInputSeparator.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/pin-input/PinInputSeparator.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/pin-input/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/pin-input/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/pin-input/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/pin-input/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/popover/Popover.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/popover/Popover.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/popover/Popover.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/popover/Popover.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/popover/PopoverContent.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/popover/PopoverContent.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/popover/PopoverContent.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/popover/PopoverContent.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/popover/PopoverTrigger.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/popover/PopoverTrigger.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/popover/PopoverTrigger.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/popover/PopoverTrigger.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/popover/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/popover/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/popover/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/popover/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/radio-group/RadioGroup.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/radio-group/RadioGroup.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/radio-group/RadioGroup.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/radio-group/RadioGroup.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/radio-group/RadioGroupItem.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/radio-group/RadioGroupItem.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/radio-group/RadioGroupItem.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/radio-group/RadioGroupItem.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/radio-group/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/radio-group/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/radio-group/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/radio-group/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/resizable/ResizableHandle.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/resizable/ResizableHandle.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/resizable/ResizableHandle.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/resizable/ResizableHandle.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/resizable/ResizablePanelGroup.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/resizable/ResizablePanelGroup.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/resizable/ResizablePanelGroup.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/resizable/ResizablePanelGroup.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/resizable/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/resizable/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/resizable/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/resizable/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/scroll-area/ScrollArea.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/scroll-area/ScrollArea.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/scroll-area/ScrollArea.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/scroll-area/ScrollArea.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/scroll-area/ScrollBar.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/scroll-area/ScrollBar.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/scroll-area/ScrollBar.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/scroll-area/ScrollBar.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/scroll-area/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/scroll-area/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/scroll-area/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/scroll-area/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/select/Select.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/select/Select.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/select/Select.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/select/Select.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectContent.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectContent.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectContent.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectContent.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectGroup.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectGroup.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectGroup.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectGroup.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectItem.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectItem.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectItem.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectItem.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectItemText.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectItemText.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectItemText.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectItemText.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectLabel.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectLabel.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectLabel.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectLabel.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectScrollDownButton.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectScrollDownButton.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectScrollDownButton.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectScrollDownButton.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectScrollUpButton.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectScrollUpButton.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectScrollUpButton.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectScrollUpButton.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectSeparator.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectSeparator.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectSeparator.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectSeparator.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectTrigger.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectTrigger.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectTrigger.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectTrigger.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectValue.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectValue.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectValue.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectValue.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/select/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/select/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/select/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/select/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/separator/Separator.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/separator/Separator.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/separator/Separator.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/separator/Separator.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/separator/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/separator/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/separator/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/separator/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/Sheet.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/Sheet.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/Sheet.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/Sheet.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetClose.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetClose.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetClose.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetClose.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetContent.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetContent.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetContent.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetContent.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetDescription.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetDescription.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetDescription.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetDescription.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetFooter.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetFooter.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetFooter.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetFooter.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetHeader.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetHeader.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetHeader.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetHeader.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetOverlay.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetOverlay.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetOverlay.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetOverlay.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetTitle.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetTitle.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetTitle.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetTitle.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetTrigger.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetTrigger.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetTrigger.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetTrigger.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/sheet.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/sheet.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/sheet.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/sheet.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/switch/Switch.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/switch/Switch.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/switch/Switch.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/switch/Switch.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/switch/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/switch/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/switch/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/switch/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/tabs/Tabs.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/tabs/Tabs.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/tabs/Tabs.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/tabs/Tabs.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/tabs/TabsContent.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/tabs/TabsContent.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/tabs/TabsContent.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/tabs/TabsContent.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/tabs/TabsList.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/tabs/TabsList.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/tabs/TabsList.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/tabs/TabsList.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/tabs/TabsTrigger.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/tabs/TabsTrigger.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/tabs/TabsTrigger.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/tabs/TabsTrigger.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/tabs/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/tabs/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/tabs/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/tabs/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/textarea/Textarea.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/textarea/Textarea.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/textarea/Textarea.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/textarea/Textarea.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/textarea/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/textarea/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/textarea/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/textarea/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/toggle-group/ToggleGroup.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/toggle-group/ToggleGroup.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/toggle-group/ToggleGroup.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/toggle-group/ToggleGroup.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/toggle-group/ToggleGroupItem.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/toggle-group/ToggleGroupItem.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/toggle-group/ToggleGroupItem.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/toggle-group/ToggleGroupItem.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/toggle-group/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/toggle-group/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/toggle-group/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/toggle-group/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/toggle/Toggle.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/toggle/Toggle.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/toggle/Toggle.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/toggle/Toggle.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/toggle/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/toggle/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/toggle/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/toggle/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/toggle/toggle.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/toggle/toggle.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/toggle/toggle.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/toggle/toggle.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/tooltip/Tooltip.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/tooltip/Tooltip.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/tooltip/Tooltip.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/tooltip/Tooltip.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/tooltip/TooltipContent.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/tooltip/TooltipContent.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/tooltip/TooltipContent.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/tooltip/TooltipContent.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/tooltip/TooltipProvider.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/tooltip/TooltipProvider.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/tooltip/TooltipProvider.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/tooltip/TooltipProvider.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/tooltip/TooltipTrigger.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/tooltip/TooltipTrigger.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/tooltip/TooltipTrigger.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/tooltip/TooltipTrigger.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/tooltip/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/tooltip/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/tooltip/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/tooltip/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/tree/index.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/tree/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/tree/index.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/tree/index.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/tree/tree.vue b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/tree/tree.vue similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/tree/tree.vue rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/tree/tree.vue diff --git a/admin/packages/@core/ui-kit/shadcn-ui/src/ui/tree/types.ts b/admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/tree/types.ts similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/src/ui/tree/types.ts rename to admin-vben/packages/@core/ui-kit/shadcn-ui/src/ui/tree/types.ts diff --git a/admin/packages/@core/ui-kit/shadcn-ui/tailwind.config.mjs b/admin-vben/packages/@core/ui-kit/shadcn-ui/tailwind.config.mjs similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/tailwind.config.mjs rename to admin-vben/packages/@core/ui-kit/shadcn-ui/tailwind.config.mjs diff --git a/admin/packages/@core/ui-kit/shadcn-ui/tsconfig.json b/admin-vben/packages/@core/ui-kit/shadcn-ui/tsconfig.json similarity index 100% rename from admin/packages/@core/ui-kit/shadcn-ui/tsconfig.json rename to admin-vben/packages/@core/ui-kit/shadcn-ui/tsconfig.json diff --git a/admin/packages/@core/ui-kit/tabs-ui/build.config.ts b/admin-vben/packages/@core/ui-kit/tabs-ui/build.config.ts similarity index 100% rename from admin/packages/@core/ui-kit/tabs-ui/build.config.ts rename to admin-vben/packages/@core/ui-kit/tabs-ui/build.config.ts diff --git a/admin/packages/@core/ui-kit/tabs-ui/package.json b/admin-vben/packages/@core/ui-kit/tabs-ui/package.json similarity index 100% rename from admin/packages/@core/ui-kit/tabs-ui/package.json rename to admin-vben/packages/@core/ui-kit/tabs-ui/package.json diff --git a/admin/packages/@core/ui-kit/tabs-ui/postcss.config.mjs b/admin-vben/packages/@core/ui-kit/tabs-ui/postcss.config.mjs similarity index 100% rename from admin/packages/@core/ui-kit/tabs-ui/postcss.config.mjs rename to admin-vben/packages/@core/ui-kit/tabs-ui/postcss.config.mjs diff --git a/admin/packages/@core/ui-kit/tabs-ui/src/components/index.ts b/admin-vben/packages/@core/ui-kit/tabs-ui/src/components/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/tabs-ui/src/components/index.ts rename to admin-vben/packages/@core/ui-kit/tabs-ui/src/components/index.ts diff --git a/admin/packages/@core/ui-kit/tabs-ui/src/components/tabs-chrome/tabs.vue b/admin-vben/packages/@core/ui-kit/tabs-ui/src/components/tabs-chrome/tabs.vue similarity index 100% rename from admin/packages/@core/ui-kit/tabs-ui/src/components/tabs-chrome/tabs.vue rename to admin-vben/packages/@core/ui-kit/tabs-ui/src/components/tabs-chrome/tabs.vue diff --git a/admin/packages/@core/ui-kit/tabs-ui/src/components/tabs/tabs.vue b/admin-vben/packages/@core/ui-kit/tabs-ui/src/components/tabs/tabs.vue similarity index 100% rename from admin/packages/@core/ui-kit/tabs-ui/src/components/tabs/tabs.vue rename to admin-vben/packages/@core/ui-kit/tabs-ui/src/components/tabs/tabs.vue diff --git a/admin/packages/@core/ui-kit/tabs-ui/src/components/widgets/index.ts b/admin-vben/packages/@core/ui-kit/tabs-ui/src/components/widgets/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/tabs-ui/src/components/widgets/index.ts rename to admin-vben/packages/@core/ui-kit/tabs-ui/src/components/widgets/index.ts diff --git a/admin/packages/@core/ui-kit/tabs-ui/src/components/widgets/tool-more.vue b/admin-vben/packages/@core/ui-kit/tabs-ui/src/components/widgets/tool-more.vue similarity index 100% rename from admin/packages/@core/ui-kit/tabs-ui/src/components/widgets/tool-more.vue rename to admin-vben/packages/@core/ui-kit/tabs-ui/src/components/widgets/tool-more.vue diff --git a/admin/packages/@core/ui-kit/tabs-ui/src/components/widgets/tool-screen.vue b/admin-vben/packages/@core/ui-kit/tabs-ui/src/components/widgets/tool-screen.vue similarity index 100% rename from admin/packages/@core/ui-kit/tabs-ui/src/components/widgets/tool-screen.vue rename to admin-vben/packages/@core/ui-kit/tabs-ui/src/components/widgets/tool-screen.vue diff --git a/admin/packages/@core/ui-kit/tabs-ui/src/index.ts b/admin-vben/packages/@core/ui-kit/tabs-ui/src/index.ts similarity index 100% rename from admin/packages/@core/ui-kit/tabs-ui/src/index.ts rename to admin-vben/packages/@core/ui-kit/tabs-ui/src/index.ts diff --git a/admin/packages/@core/ui-kit/tabs-ui/src/tabs-view.vue b/admin-vben/packages/@core/ui-kit/tabs-ui/src/tabs-view.vue similarity index 100% rename from admin/packages/@core/ui-kit/tabs-ui/src/tabs-view.vue rename to admin-vben/packages/@core/ui-kit/tabs-ui/src/tabs-view.vue diff --git a/admin/packages/@core/ui-kit/tabs-ui/src/types.ts b/admin-vben/packages/@core/ui-kit/tabs-ui/src/types.ts similarity index 100% rename from admin/packages/@core/ui-kit/tabs-ui/src/types.ts rename to admin-vben/packages/@core/ui-kit/tabs-ui/src/types.ts diff --git a/admin/packages/@core/ui-kit/tabs-ui/src/use-tabs-drag.ts b/admin-vben/packages/@core/ui-kit/tabs-ui/src/use-tabs-drag.ts similarity index 100% rename from admin/packages/@core/ui-kit/tabs-ui/src/use-tabs-drag.ts rename to admin-vben/packages/@core/ui-kit/tabs-ui/src/use-tabs-drag.ts diff --git a/admin/packages/@core/ui-kit/tabs-ui/src/use-tabs-view-scroll.ts b/admin-vben/packages/@core/ui-kit/tabs-ui/src/use-tabs-view-scroll.ts similarity index 100% rename from admin/packages/@core/ui-kit/tabs-ui/src/use-tabs-view-scroll.ts rename to admin-vben/packages/@core/ui-kit/tabs-ui/src/use-tabs-view-scroll.ts diff --git a/admin/packages/@core/ui-kit/tabs-ui/tailwind.config.mjs b/admin-vben/packages/@core/ui-kit/tabs-ui/tailwind.config.mjs similarity index 100% rename from admin/packages/@core/ui-kit/tabs-ui/tailwind.config.mjs rename to admin-vben/packages/@core/ui-kit/tabs-ui/tailwind.config.mjs diff --git a/admin/packages/@core/ui-kit/tabs-ui/tsconfig.json b/admin-vben/packages/@core/ui-kit/tabs-ui/tsconfig.json similarity index 100% rename from admin/packages/@core/ui-kit/tabs-ui/tsconfig.json rename to admin-vben/packages/@core/ui-kit/tabs-ui/tsconfig.json diff --git a/admin/packages/constants/README.md b/admin-vben/packages/constants/README.md similarity index 100% rename from admin/packages/constants/README.md rename to admin-vben/packages/constants/README.md diff --git a/admin/packages/constants/package.json b/admin-vben/packages/constants/package.json similarity index 100% rename from admin/packages/constants/package.json rename to admin-vben/packages/constants/package.json diff --git a/admin/packages/constants/src/core.ts b/admin-vben/packages/constants/src/core.ts similarity index 100% rename from admin/packages/constants/src/core.ts rename to admin-vben/packages/constants/src/core.ts diff --git a/admin/packages/constants/src/index.ts b/admin-vben/packages/constants/src/index.ts similarity index 100% rename from admin/packages/constants/src/index.ts rename to admin-vben/packages/constants/src/index.ts diff --git a/admin/packages/constants/tsconfig.json b/admin-vben/packages/constants/tsconfig.json similarity index 100% rename from admin/packages/constants/tsconfig.json rename to admin-vben/packages/constants/tsconfig.json diff --git a/admin/packages/effects/README.md b/admin-vben/packages/effects/README.md similarity index 100% rename from admin/packages/effects/README.md rename to admin-vben/packages/effects/README.md diff --git a/admin/packages/effects/access/package.json b/admin-vben/packages/effects/access/package.json similarity index 100% rename from admin/packages/effects/access/package.json rename to admin-vben/packages/effects/access/package.json diff --git a/admin/packages/effects/access/src/access-control.vue b/admin-vben/packages/effects/access/src/access-control.vue similarity index 100% rename from admin/packages/effects/access/src/access-control.vue rename to admin-vben/packages/effects/access/src/access-control.vue diff --git a/admin/packages/effects/access/src/accessible.ts b/admin-vben/packages/effects/access/src/accessible.ts similarity index 100% rename from admin/packages/effects/access/src/accessible.ts rename to admin-vben/packages/effects/access/src/accessible.ts diff --git a/admin/packages/effects/access/src/directive.ts b/admin-vben/packages/effects/access/src/directive.ts similarity index 100% rename from admin/packages/effects/access/src/directive.ts rename to admin-vben/packages/effects/access/src/directive.ts diff --git a/admin/packages/effects/access/src/index.ts b/admin-vben/packages/effects/access/src/index.ts similarity index 100% rename from admin/packages/effects/access/src/index.ts rename to admin-vben/packages/effects/access/src/index.ts diff --git a/admin/packages/effects/access/src/use-access.ts b/admin-vben/packages/effects/access/src/use-access.ts similarity index 100% rename from admin/packages/effects/access/src/use-access.ts rename to admin-vben/packages/effects/access/src/use-access.ts diff --git a/admin/packages/effects/access/tsconfig.json b/admin-vben/packages/effects/access/tsconfig.json similarity index 100% rename from admin/packages/effects/access/tsconfig.json rename to admin-vben/packages/effects/access/tsconfig.json diff --git a/admin/packages/effects/common-ui/package.json b/admin-vben/packages/effects/common-ui/package.json similarity index 100% rename from admin/packages/effects/common-ui/package.json rename to admin-vben/packages/effects/common-ui/package.json diff --git a/admin/packages/effects/common-ui/src/components/api-component/api-component.vue b/admin-vben/packages/effects/common-ui/src/components/api-component/api-component.vue similarity index 100% rename from admin/packages/effects/common-ui/src/components/api-component/api-component.vue rename to admin-vben/packages/effects/common-ui/src/components/api-component/api-component.vue diff --git a/admin/packages/effects/common-ui/src/components/api-component/index.ts b/admin-vben/packages/effects/common-ui/src/components/api-component/index.ts similarity index 100% rename from admin/packages/effects/common-ui/src/components/api-component/index.ts rename to admin-vben/packages/effects/common-ui/src/components/api-component/index.ts diff --git a/admin/packages/effects/common-ui/src/components/captcha/hooks/useCaptchaPoints.ts b/admin-vben/packages/effects/common-ui/src/components/captcha/hooks/useCaptchaPoints.ts similarity index 100% rename from admin/packages/effects/common-ui/src/components/captcha/hooks/useCaptchaPoints.ts rename to admin-vben/packages/effects/common-ui/src/components/captcha/hooks/useCaptchaPoints.ts diff --git a/admin/packages/effects/common-ui/src/components/captcha/index.ts b/admin-vben/packages/effects/common-ui/src/components/captcha/index.ts similarity index 100% rename from admin/packages/effects/common-ui/src/components/captcha/index.ts rename to admin-vben/packages/effects/common-ui/src/components/captcha/index.ts diff --git a/admin/packages/effects/common-ui/src/components/captcha/point-selection-captcha/index.vue b/admin-vben/packages/effects/common-ui/src/components/captcha/point-selection-captcha/index.vue similarity index 100% rename from admin/packages/effects/common-ui/src/components/captcha/point-selection-captcha/index.vue rename to admin-vben/packages/effects/common-ui/src/components/captcha/point-selection-captcha/index.vue diff --git a/admin/packages/effects/common-ui/src/components/captcha/point-selection-captcha/point-selection-captcha-card.vue b/admin-vben/packages/effects/common-ui/src/components/captcha/point-selection-captcha/point-selection-captcha-card.vue similarity index 100% rename from admin/packages/effects/common-ui/src/components/captcha/point-selection-captcha/point-selection-captcha-card.vue rename to admin-vben/packages/effects/common-ui/src/components/captcha/point-selection-captcha/point-selection-captcha-card.vue diff --git a/admin/packages/effects/common-ui/src/components/captcha/slider-captcha/index.vue b/admin-vben/packages/effects/common-ui/src/components/captcha/slider-captcha/index.vue similarity index 100% rename from admin/packages/effects/common-ui/src/components/captcha/slider-captcha/index.vue rename to admin-vben/packages/effects/common-ui/src/components/captcha/slider-captcha/index.vue diff --git a/admin/packages/effects/common-ui/src/components/captcha/slider-captcha/slider-captcha-action.vue b/admin-vben/packages/effects/common-ui/src/components/captcha/slider-captcha/slider-captcha-action.vue similarity index 100% rename from admin/packages/effects/common-ui/src/components/captcha/slider-captcha/slider-captcha-action.vue rename to admin-vben/packages/effects/common-ui/src/components/captcha/slider-captcha/slider-captcha-action.vue diff --git a/admin/packages/effects/common-ui/src/components/captcha/slider-captcha/slider-captcha-bar.vue b/admin-vben/packages/effects/common-ui/src/components/captcha/slider-captcha/slider-captcha-bar.vue similarity index 100% rename from admin/packages/effects/common-ui/src/components/captcha/slider-captcha/slider-captcha-bar.vue rename to admin-vben/packages/effects/common-ui/src/components/captcha/slider-captcha/slider-captcha-bar.vue diff --git a/admin/packages/effects/common-ui/src/components/captcha/slider-captcha/slider-captcha-content.vue b/admin-vben/packages/effects/common-ui/src/components/captcha/slider-captcha/slider-captcha-content.vue similarity index 100% rename from admin/packages/effects/common-ui/src/components/captcha/slider-captcha/slider-captcha-content.vue rename to admin-vben/packages/effects/common-ui/src/components/captcha/slider-captcha/slider-captcha-content.vue diff --git a/admin/packages/effects/common-ui/src/components/captcha/slider-rotate-captcha/index.vue b/admin-vben/packages/effects/common-ui/src/components/captcha/slider-rotate-captcha/index.vue similarity index 100% rename from admin/packages/effects/common-ui/src/components/captcha/slider-rotate-captcha/index.vue rename to admin-vben/packages/effects/common-ui/src/components/captcha/slider-rotate-captcha/index.vue diff --git a/admin/packages/effects/common-ui/src/components/captcha/slider-translate-captcha/index.vue b/admin-vben/packages/effects/common-ui/src/components/captcha/slider-translate-captcha/index.vue similarity index 100% rename from admin/packages/effects/common-ui/src/components/captcha/slider-translate-captcha/index.vue rename to admin-vben/packages/effects/common-ui/src/components/captcha/slider-translate-captcha/index.vue diff --git a/admin/packages/effects/common-ui/src/components/captcha/types.ts b/admin-vben/packages/effects/common-ui/src/components/captcha/types.ts similarity index 100% rename from admin/packages/effects/common-ui/src/components/captcha/types.ts rename to admin-vben/packages/effects/common-ui/src/components/captcha/types.ts diff --git a/admin/packages/effects/common-ui/src/components/col-page/col-page.vue b/admin-vben/packages/effects/common-ui/src/components/col-page/col-page.vue similarity index 100% rename from admin/packages/effects/common-ui/src/components/col-page/col-page.vue rename to admin-vben/packages/effects/common-ui/src/components/col-page/col-page.vue diff --git a/admin/packages/effects/common-ui/src/components/col-page/index.ts b/admin-vben/packages/effects/common-ui/src/components/col-page/index.ts similarity index 100% rename from admin/packages/effects/common-ui/src/components/col-page/index.ts rename to admin-vben/packages/effects/common-ui/src/components/col-page/index.ts diff --git a/admin/packages/effects/common-ui/src/components/col-page/types.ts b/admin-vben/packages/effects/common-ui/src/components/col-page/types.ts similarity index 100% rename from admin/packages/effects/common-ui/src/components/col-page/types.ts rename to admin-vben/packages/effects/common-ui/src/components/col-page/types.ts diff --git a/admin/packages/effects/common-ui/src/components/count-to/count-to.vue b/admin-vben/packages/effects/common-ui/src/components/count-to/count-to.vue similarity index 100% rename from admin/packages/effects/common-ui/src/components/count-to/count-to.vue rename to admin-vben/packages/effects/common-ui/src/components/count-to/count-to.vue diff --git a/admin/packages/effects/common-ui/src/components/count-to/index.ts b/admin-vben/packages/effects/common-ui/src/components/count-to/index.ts similarity index 100% rename from admin/packages/effects/common-ui/src/components/count-to/index.ts rename to admin-vben/packages/effects/common-ui/src/components/count-to/index.ts diff --git a/admin/packages/effects/common-ui/src/components/count-to/types.ts b/admin-vben/packages/effects/common-ui/src/components/count-to/types.ts similarity index 100% rename from admin/packages/effects/common-ui/src/components/count-to/types.ts rename to admin-vben/packages/effects/common-ui/src/components/count-to/types.ts diff --git a/admin/packages/effects/common-ui/src/components/ellipsis-text/ellipsis-text.vue b/admin-vben/packages/effects/common-ui/src/components/ellipsis-text/ellipsis-text.vue similarity index 100% rename from admin/packages/effects/common-ui/src/components/ellipsis-text/ellipsis-text.vue rename to admin-vben/packages/effects/common-ui/src/components/ellipsis-text/ellipsis-text.vue diff --git a/admin/packages/effects/common-ui/src/components/ellipsis-text/index.ts b/admin-vben/packages/effects/common-ui/src/components/ellipsis-text/index.ts similarity index 100% rename from admin/packages/effects/common-ui/src/components/ellipsis-text/index.ts rename to admin-vben/packages/effects/common-ui/src/components/ellipsis-text/index.ts diff --git a/admin/packages/effects/common-ui/src/components/icon-picker/icon-picker.vue b/admin-vben/packages/effects/common-ui/src/components/icon-picker/icon-picker.vue similarity index 100% rename from admin/packages/effects/common-ui/src/components/icon-picker/icon-picker.vue rename to admin-vben/packages/effects/common-ui/src/components/icon-picker/icon-picker.vue diff --git a/admin/packages/effects/common-ui/src/components/icon-picker/icons.ts b/admin-vben/packages/effects/common-ui/src/components/icon-picker/icons.ts similarity index 100% rename from admin/packages/effects/common-ui/src/components/icon-picker/icons.ts rename to admin-vben/packages/effects/common-ui/src/components/icon-picker/icons.ts diff --git a/admin/packages/effects/common-ui/src/components/icon-picker/index.ts b/admin-vben/packages/effects/common-ui/src/components/icon-picker/index.ts similarity index 100% rename from admin/packages/effects/common-ui/src/components/icon-picker/index.ts rename to admin-vben/packages/effects/common-ui/src/components/icon-picker/index.ts diff --git a/admin/packages/effects/common-ui/src/components/index.ts b/admin-vben/packages/effects/common-ui/src/components/index.ts similarity index 100% rename from admin/packages/effects/common-ui/src/components/index.ts rename to admin-vben/packages/effects/common-ui/src/components/index.ts diff --git a/admin/packages/effects/common-ui/src/components/json-viewer/index.ts b/admin-vben/packages/effects/common-ui/src/components/json-viewer/index.ts similarity index 100% rename from admin/packages/effects/common-ui/src/components/json-viewer/index.ts rename to admin-vben/packages/effects/common-ui/src/components/json-viewer/index.ts diff --git a/admin/packages/effects/common-ui/src/components/json-viewer/index.vue b/admin-vben/packages/effects/common-ui/src/components/json-viewer/index.vue similarity index 100% rename from admin/packages/effects/common-ui/src/components/json-viewer/index.vue rename to admin-vben/packages/effects/common-ui/src/components/json-viewer/index.vue diff --git a/admin/packages/effects/common-ui/src/components/json-viewer/style.scss b/admin-vben/packages/effects/common-ui/src/components/json-viewer/style.scss similarity index 100% rename from admin/packages/effects/common-ui/src/components/json-viewer/style.scss rename to admin-vben/packages/effects/common-ui/src/components/json-viewer/style.scss diff --git a/admin/packages/effects/common-ui/src/components/json-viewer/types.ts b/admin-vben/packages/effects/common-ui/src/components/json-viewer/types.ts similarity index 100% rename from admin/packages/effects/common-ui/src/components/json-viewer/types.ts rename to admin-vben/packages/effects/common-ui/src/components/json-viewer/types.ts diff --git a/admin/packages/effects/common-ui/src/components/loading/directive.ts b/admin-vben/packages/effects/common-ui/src/components/loading/directive.ts similarity index 100% rename from admin/packages/effects/common-ui/src/components/loading/directive.ts rename to admin-vben/packages/effects/common-ui/src/components/loading/directive.ts diff --git a/admin/packages/effects/common-ui/src/components/loading/index.ts b/admin-vben/packages/effects/common-ui/src/components/loading/index.ts similarity index 100% rename from admin/packages/effects/common-ui/src/components/loading/index.ts rename to admin-vben/packages/effects/common-ui/src/components/loading/index.ts diff --git a/admin/packages/effects/common-ui/src/components/loading/loading.vue b/admin-vben/packages/effects/common-ui/src/components/loading/loading.vue similarity index 100% rename from admin/packages/effects/common-ui/src/components/loading/loading.vue rename to admin-vben/packages/effects/common-ui/src/components/loading/loading.vue diff --git a/admin/packages/effects/common-ui/src/components/loading/spinner.vue b/admin-vben/packages/effects/common-ui/src/components/loading/spinner.vue similarity index 100% rename from admin/packages/effects/common-ui/src/components/loading/spinner.vue rename to admin-vben/packages/effects/common-ui/src/components/loading/spinner.vue diff --git a/admin/packages/effects/common-ui/src/components/page/__tests__/page.test.ts b/admin-vben/packages/effects/common-ui/src/components/page/__tests__/page.test.ts similarity index 100% rename from admin/packages/effects/common-ui/src/components/page/__tests__/page.test.ts rename to admin-vben/packages/effects/common-ui/src/components/page/__tests__/page.test.ts diff --git a/admin/packages/effects/common-ui/src/components/page/index.ts b/admin-vben/packages/effects/common-ui/src/components/page/index.ts similarity index 100% rename from admin/packages/effects/common-ui/src/components/page/index.ts rename to admin-vben/packages/effects/common-ui/src/components/page/index.ts diff --git a/admin/packages/effects/common-ui/src/components/page/page.vue b/admin-vben/packages/effects/common-ui/src/components/page/page.vue similarity index 100% rename from admin/packages/effects/common-ui/src/components/page/page.vue rename to admin-vben/packages/effects/common-ui/src/components/page/page.vue diff --git a/admin/packages/effects/common-ui/src/components/page/types.ts b/admin-vben/packages/effects/common-ui/src/components/page/types.ts similarity index 100% rename from admin/packages/effects/common-ui/src/components/page/types.ts rename to admin-vben/packages/effects/common-ui/src/components/page/types.ts diff --git a/admin/packages/effects/common-ui/src/components/resize/index.ts b/admin-vben/packages/effects/common-ui/src/components/resize/index.ts similarity index 100% rename from admin/packages/effects/common-ui/src/components/resize/index.ts rename to admin-vben/packages/effects/common-ui/src/components/resize/index.ts diff --git a/admin/packages/effects/common-ui/src/components/resize/resize.vue b/admin-vben/packages/effects/common-ui/src/components/resize/resize.vue similarity index 100% rename from admin/packages/effects/common-ui/src/components/resize/resize.vue rename to admin-vben/packages/effects/common-ui/src/components/resize/resize.vue diff --git a/admin/packages/effects/common-ui/src/components/tippy/directive.ts b/admin-vben/packages/effects/common-ui/src/components/tippy/directive.ts similarity index 100% rename from admin/packages/effects/common-ui/src/components/tippy/directive.ts rename to admin-vben/packages/effects/common-ui/src/components/tippy/directive.ts diff --git a/admin/packages/effects/common-ui/src/components/tippy/index.ts b/admin-vben/packages/effects/common-ui/src/components/tippy/index.ts similarity index 100% rename from admin/packages/effects/common-ui/src/components/tippy/index.ts rename to admin-vben/packages/effects/common-ui/src/components/tippy/index.ts diff --git a/admin/packages/effects/common-ui/src/index.ts b/admin-vben/packages/effects/common-ui/src/index.ts similarity index 100% rename from admin/packages/effects/common-ui/src/index.ts rename to admin-vben/packages/effects/common-ui/src/index.ts diff --git a/admin/packages/effects/common-ui/src/ui/about/about.ts b/admin-vben/packages/effects/common-ui/src/ui/about/about.ts similarity index 100% rename from admin/packages/effects/common-ui/src/ui/about/about.ts rename to admin-vben/packages/effects/common-ui/src/ui/about/about.ts diff --git a/admin/packages/effects/common-ui/src/ui/about/about.vue b/admin-vben/packages/effects/common-ui/src/ui/about/about.vue similarity index 100% rename from admin/packages/effects/common-ui/src/ui/about/about.vue rename to admin-vben/packages/effects/common-ui/src/ui/about/about.vue diff --git a/admin/packages/effects/common-ui/src/ui/about/index.ts b/admin-vben/packages/effects/common-ui/src/ui/about/index.ts similarity index 100% rename from admin/packages/effects/common-ui/src/ui/about/index.ts rename to admin-vben/packages/effects/common-ui/src/ui/about/index.ts diff --git a/admin/packages/effects/common-ui/src/ui/authentication/auth-title.vue b/admin-vben/packages/effects/common-ui/src/ui/authentication/auth-title.vue similarity index 100% rename from admin/packages/effects/common-ui/src/ui/authentication/auth-title.vue rename to admin-vben/packages/effects/common-ui/src/ui/authentication/auth-title.vue diff --git a/admin/packages/effects/common-ui/src/ui/authentication/code-login.vue b/admin-vben/packages/effects/common-ui/src/ui/authentication/code-login.vue similarity index 100% rename from admin/packages/effects/common-ui/src/ui/authentication/code-login.vue rename to admin-vben/packages/effects/common-ui/src/ui/authentication/code-login.vue diff --git a/admin/packages/effects/common-ui/src/ui/authentication/dingding-login.vue b/admin-vben/packages/effects/common-ui/src/ui/authentication/dingding-login.vue similarity index 100% rename from admin/packages/effects/common-ui/src/ui/authentication/dingding-login.vue rename to admin-vben/packages/effects/common-ui/src/ui/authentication/dingding-login.vue diff --git a/admin/packages/effects/common-ui/src/ui/authentication/forget-password.vue b/admin-vben/packages/effects/common-ui/src/ui/authentication/forget-password.vue similarity index 100% rename from admin/packages/effects/common-ui/src/ui/authentication/forget-password.vue rename to admin-vben/packages/effects/common-ui/src/ui/authentication/forget-password.vue diff --git a/admin/packages/effects/common-ui/src/ui/authentication/index.ts b/admin-vben/packages/effects/common-ui/src/ui/authentication/index.ts similarity index 100% rename from admin/packages/effects/common-ui/src/ui/authentication/index.ts rename to admin-vben/packages/effects/common-ui/src/ui/authentication/index.ts diff --git a/admin/packages/effects/common-ui/src/ui/authentication/login-expired-modal.vue b/admin-vben/packages/effects/common-ui/src/ui/authentication/login-expired-modal.vue similarity index 100% rename from admin/packages/effects/common-ui/src/ui/authentication/login-expired-modal.vue rename to admin-vben/packages/effects/common-ui/src/ui/authentication/login-expired-modal.vue diff --git a/admin/packages/effects/common-ui/src/ui/authentication/login.vue b/admin-vben/packages/effects/common-ui/src/ui/authentication/login.vue similarity index 100% rename from admin/packages/effects/common-ui/src/ui/authentication/login.vue rename to admin-vben/packages/effects/common-ui/src/ui/authentication/login.vue diff --git a/admin/packages/effects/common-ui/src/ui/authentication/qrcode-login.vue b/admin-vben/packages/effects/common-ui/src/ui/authentication/qrcode-login.vue similarity index 100% rename from admin/packages/effects/common-ui/src/ui/authentication/qrcode-login.vue rename to admin-vben/packages/effects/common-ui/src/ui/authentication/qrcode-login.vue diff --git a/admin/packages/effects/common-ui/src/ui/authentication/register.vue b/admin-vben/packages/effects/common-ui/src/ui/authentication/register.vue similarity index 100% rename from admin/packages/effects/common-ui/src/ui/authentication/register.vue rename to admin-vben/packages/effects/common-ui/src/ui/authentication/register.vue diff --git a/admin/packages/effects/common-ui/src/ui/authentication/third-party-login.vue b/admin-vben/packages/effects/common-ui/src/ui/authentication/third-party-login.vue similarity index 100% rename from admin/packages/effects/common-ui/src/ui/authentication/third-party-login.vue rename to admin-vben/packages/effects/common-ui/src/ui/authentication/third-party-login.vue diff --git a/admin/packages/effects/common-ui/src/ui/authentication/types.ts b/admin-vben/packages/effects/common-ui/src/ui/authentication/types.ts similarity index 100% rename from admin/packages/effects/common-ui/src/ui/authentication/types.ts rename to admin-vben/packages/effects/common-ui/src/ui/authentication/types.ts diff --git a/admin/packages/effects/common-ui/src/ui/dashboard/analysis/analysis-chart-card.vue b/admin-vben/packages/effects/common-ui/src/ui/dashboard/analysis/analysis-chart-card.vue similarity index 100% rename from admin/packages/effects/common-ui/src/ui/dashboard/analysis/analysis-chart-card.vue rename to admin-vben/packages/effects/common-ui/src/ui/dashboard/analysis/analysis-chart-card.vue diff --git a/admin/packages/effects/common-ui/src/ui/dashboard/analysis/analysis-charts-tabs.vue b/admin-vben/packages/effects/common-ui/src/ui/dashboard/analysis/analysis-charts-tabs.vue similarity index 100% rename from admin/packages/effects/common-ui/src/ui/dashboard/analysis/analysis-charts-tabs.vue rename to admin-vben/packages/effects/common-ui/src/ui/dashboard/analysis/analysis-charts-tabs.vue diff --git a/admin/packages/effects/common-ui/src/ui/dashboard/analysis/analysis-overview.vue b/admin-vben/packages/effects/common-ui/src/ui/dashboard/analysis/analysis-overview.vue similarity index 100% rename from admin/packages/effects/common-ui/src/ui/dashboard/analysis/analysis-overview.vue rename to admin-vben/packages/effects/common-ui/src/ui/dashboard/analysis/analysis-overview.vue diff --git a/admin/packages/effects/common-ui/src/ui/dashboard/analysis/index.ts b/admin-vben/packages/effects/common-ui/src/ui/dashboard/analysis/index.ts similarity index 100% rename from admin/packages/effects/common-ui/src/ui/dashboard/analysis/index.ts rename to admin-vben/packages/effects/common-ui/src/ui/dashboard/analysis/index.ts diff --git a/admin/packages/effects/common-ui/src/ui/dashboard/index.ts b/admin-vben/packages/effects/common-ui/src/ui/dashboard/index.ts similarity index 100% rename from admin/packages/effects/common-ui/src/ui/dashboard/index.ts rename to admin-vben/packages/effects/common-ui/src/ui/dashboard/index.ts diff --git a/admin/packages/effects/common-ui/src/ui/dashboard/typing.ts b/admin-vben/packages/effects/common-ui/src/ui/dashboard/typing.ts similarity index 100% rename from admin/packages/effects/common-ui/src/ui/dashboard/typing.ts rename to admin-vben/packages/effects/common-ui/src/ui/dashboard/typing.ts diff --git a/admin/packages/effects/common-ui/src/ui/dashboard/workbench/index.ts b/admin-vben/packages/effects/common-ui/src/ui/dashboard/workbench/index.ts similarity index 100% rename from admin/packages/effects/common-ui/src/ui/dashboard/workbench/index.ts rename to admin-vben/packages/effects/common-ui/src/ui/dashboard/workbench/index.ts diff --git a/admin/packages/effects/common-ui/src/ui/dashboard/workbench/workbench-header.vue b/admin-vben/packages/effects/common-ui/src/ui/dashboard/workbench/workbench-header.vue similarity index 100% rename from admin/packages/effects/common-ui/src/ui/dashboard/workbench/workbench-header.vue rename to admin-vben/packages/effects/common-ui/src/ui/dashboard/workbench/workbench-header.vue diff --git a/admin/packages/effects/common-ui/src/ui/dashboard/workbench/workbench-project.vue b/admin-vben/packages/effects/common-ui/src/ui/dashboard/workbench/workbench-project.vue similarity index 100% rename from admin/packages/effects/common-ui/src/ui/dashboard/workbench/workbench-project.vue rename to admin-vben/packages/effects/common-ui/src/ui/dashboard/workbench/workbench-project.vue diff --git a/admin/packages/effects/common-ui/src/ui/dashboard/workbench/workbench-quick-nav.vue b/admin-vben/packages/effects/common-ui/src/ui/dashboard/workbench/workbench-quick-nav.vue similarity index 100% rename from admin/packages/effects/common-ui/src/ui/dashboard/workbench/workbench-quick-nav.vue rename to admin-vben/packages/effects/common-ui/src/ui/dashboard/workbench/workbench-quick-nav.vue diff --git a/admin/packages/effects/common-ui/src/ui/dashboard/workbench/workbench-todo.vue b/admin-vben/packages/effects/common-ui/src/ui/dashboard/workbench/workbench-todo.vue similarity index 100% rename from admin/packages/effects/common-ui/src/ui/dashboard/workbench/workbench-todo.vue rename to admin-vben/packages/effects/common-ui/src/ui/dashboard/workbench/workbench-todo.vue diff --git a/admin/packages/effects/common-ui/src/ui/dashboard/workbench/workbench-trends.vue b/admin-vben/packages/effects/common-ui/src/ui/dashboard/workbench/workbench-trends.vue similarity index 100% rename from admin/packages/effects/common-ui/src/ui/dashboard/workbench/workbench-trends.vue rename to admin-vben/packages/effects/common-ui/src/ui/dashboard/workbench/workbench-trends.vue diff --git a/admin/packages/effects/common-ui/src/ui/fallback/fallback.ts b/admin-vben/packages/effects/common-ui/src/ui/fallback/fallback.ts similarity index 100% rename from admin/packages/effects/common-ui/src/ui/fallback/fallback.ts rename to admin-vben/packages/effects/common-ui/src/ui/fallback/fallback.ts diff --git a/admin/packages/effects/common-ui/src/ui/fallback/fallback.vue b/admin-vben/packages/effects/common-ui/src/ui/fallback/fallback.vue similarity index 100% rename from admin/packages/effects/common-ui/src/ui/fallback/fallback.vue rename to admin-vben/packages/effects/common-ui/src/ui/fallback/fallback.vue diff --git a/admin/packages/effects/common-ui/src/ui/fallback/icons/icon-403.vue b/admin-vben/packages/effects/common-ui/src/ui/fallback/icons/icon-403.vue similarity index 100% rename from admin/packages/effects/common-ui/src/ui/fallback/icons/icon-403.vue rename to admin-vben/packages/effects/common-ui/src/ui/fallback/icons/icon-403.vue diff --git a/admin/packages/effects/common-ui/src/ui/fallback/icons/icon-404.vue b/admin-vben/packages/effects/common-ui/src/ui/fallback/icons/icon-404.vue similarity index 100% rename from admin/packages/effects/common-ui/src/ui/fallback/icons/icon-404.vue rename to admin-vben/packages/effects/common-ui/src/ui/fallback/icons/icon-404.vue diff --git a/admin/packages/effects/common-ui/src/ui/fallback/icons/icon-500.vue b/admin-vben/packages/effects/common-ui/src/ui/fallback/icons/icon-500.vue similarity index 100% rename from admin/packages/effects/common-ui/src/ui/fallback/icons/icon-500.vue rename to admin-vben/packages/effects/common-ui/src/ui/fallback/icons/icon-500.vue diff --git a/admin/packages/effects/common-ui/src/ui/fallback/icons/icon-coming-soon.vue b/admin-vben/packages/effects/common-ui/src/ui/fallback/icons/icon-coming-soon.vue similarity index 100% rename from admin/packages/effects/common-ui/src/ui/fallback/icons/icon-coming-soon.vue rename to admin-vben/packages/effects/common-ui/src/ui/fallback/icons/icon-coming-soon.vue diff --git a/admin/packages/effects/common-ui/src/ui/fallback/icons/icon-offline.vue b/admin-vben/packages/effects/common-ui/src/ui/fallback/icons/icon-offline.vue similarity index 100% rename from admin/packages/effects/common-ui/src/ui/fallback/icons/icon-offline.vue rename to admin-vben/packages/effects/common-ui/src/ui/fallback/icons/icon-offline.vue diff --git a/admin/packages/effects/common-ui/src/ui/fallback/icons/warning.svg b/admin-vben/packages/effects/common-ui/src/ui/fallback/icons/warning.svg similarity index 100% rename from admin/packages/effects/common-ui/src/ui/fallback/icons/warning.svg rename to admin-vben/packages/effects/common-ui/src/ui/fallback/icons/warning.svg diff --git a/admin/packages/effects/common-ui/src/ui/fallback/index.ts b/admin-vben/packages/effects/common-ui/src/ui/fallback/index.ts similarity index 100% rename from admin/packages/effects/common-ui/src/ui/fallback/index.ts rename to admin-vben/packages/effects/common-ui/src/ui/fallback/index.ts diff --git a/admin/packages/effects/common-ui/src/ui/index.ts b/admin-vben/packages/effects/common-ui/src/ui/index.ts similarity index 100% rename from admin/packages/effects/common-ui/src/ui/index.ts rename to admin-vben/packages/effects/common-ui/src/ui/index.ts diff --git a/admin/packages/effects/common-ui/tsconfig.json b/admin-vben/packages/effects/common-ui/tsconfig.json similarity index 100% rename from admin/packages/effects/common-ui/tsconfig.json rename to admin-vben/packages/effects/common-ui/tsconfig.json diff --git a/admin/packages/effects/hooks/README.md b/admin-vben/packages/effects/hooks/README.md similarity index 100% rename from admin/packages/effects/hooks/README.md rename to admin-vben/packages/effects/hooks/README.md diff --git a/admin/packages/effects/hooks/package.json b/admin-vben/packages/effects/hooks/package.json similarity index 100% rename from admin/packages/effects/hooks/package.json rename to admin-vben/packages/effects/hooks/package.json diff --git a/admin/packages/effects/hooks/src/index.ts b/admin-vben/packages/effects/hooks/src/index.ts similarity index 100% rename from admin/packages/effects/hooks/src/index.ts rename to admin-vben/packages/effects/hooks/src/index.ts diff --git a/admin/packages/effects/hooks/src/use-app-config.ts b/admin-vben/packages/effects/hooks/src/use-app-config.ts similarity index 100% rename from admin/packages/effects/hooks/src/use-app-config.ts rename to admin-vben/packages/effects/hooks/src/use-app-config.ts diff --git a/admin/packages/effects/hooks/src/use-content-maximize.ts b/admin-vben/packages/effects/hooks/src/use-content-maximize.ts similarity index 100% rename from admin/packages/effects/hooks/src/use-content-maximize.ts rename to admin-vben/packages/effects/hooks/src/use-content-maximize.ts diff --git a/admin/packages/effects/hooks/src/use-design-tokens.ts b/admin-vben/packages/effects/hooks/src/use-design-tokens.ts similarity index 100% rename from admin/packages/effects/hooks/src/use-design-tokens.ts rename to admin-vben/packages/effects/hooks/src/use-design-tokens.ts diff --git a/admin/packages/effects/hooks/src/use-hover-toggle.ts b/admin-vben/packages/effects/hooks/src/use-hover-toggle.ts similarity index 100% rename from admin/packages/effects/hooks/src/use-hover-toggle.ts rename to admin-vben/packages/effects/hooks/src/use-hover-toggle.ts diff --git a/admin/packages/effects/hooks/src/use-pagination.ts b/admin-vben/packages/effects/hooks/src/use-pagination.ts similarity index 100% rename from admin/packages/effects/hooks/src/use-pagination.ts rename to admin-vben/packages/effects/hooks/src/use-pagination.ts diff --git a/admin/packages/effects/hooks/src/use-refresh.ts b/admin-vben/packages/effects/hooks/src/use-refresh.ts similarity index 100% rename from admin/packages/effects/hooks/src/use-refresh.ts rename to admin-vben/packages/effects/hooks/src/use-refresh.ts diff --git a/admin/packages/effects/hooks/src/use-tabs.ts b/admin-vben/packages/effects/hooks/src/use-tabs.ts similarity index 100% rename from admin/packages/effects/hooks/src/use-tabs.ts rename to admin-vben/packages/effects/hooks/src/use-tabs.ts diff --git a/admin/packages/effects/hooks/src/use-watermark.ts b/admin-vben/packages/effects/hooks/src/use-watermark.ts similarity index 100% rename from admin/packages/effects/hooks/src/use-watermark.ts rename to admin-vben/packages/effects/hooks/src/use-watermark.ts diff --git a/admin/packages/effects/hooks/tsconfig.json b/admin-vben/packages/effects/hooks/tsconfig.json similarity index 100% rename from admin/packages/effects/hooks/tsconfig.json rename to admin-vben/packages/effects/hooks/tsconfig.json diff --git a/admin/packages/effects/layouts/package.json b/admin-vben/packages/effects/layouts/package.json similarity index 100% rename from admin/packages/effects/layouts/package.json rename to admin-vben/packages/effects/layouts/package.json diff --git a/admin/packages/effects/layouts/src/authentication/authentication.vue b/admin-vben/packages/effects/layouts/src/authentication/authentication.vue similarity index 100% rename from admin/packages/effects/layouts/src/authentication/authentication.vue rename to admin-vben/packages/effects/layouts/src/authentication/authentication.vue diff --git a/admin/packages/effects/layouts/src/authentication/form.vue b/admin-vben/packages/effects/layouts/src/authentication/form.vue similarity index 100% rename from admin/packages/effects/layouts/src/authentication/form.vue rename to admin-vben/packages/effects/layouts/src/authentication/form.vue diff --git a/admin/packages/effects/layouts/src/authentication/icons/slogan.vue b/admin-vben/packages/effects/layouts/src/authentication/icons/slogan.vue similarity index 100% rename from admin/packages/effects/layouts/src/authentication/icons/slogan.vue rename to admin-vben/packages/effects/layouts/src/authentication/icons/slogan.vue diff --git a/admin/packages/effects/layouts/src/authentication/index.ts b/admin-vben/packages/effects/layouts/src/authentication/index.ts similarity index 100% rename from admin/packages/effects/layouts/src/authentication/index.ts rename to admin-vben/packages/effects/layouts/src/authentication/index.ts diff --git a/admin/packages/effects/layouts/src/authentication/toolbar.vue b/admin-vben/packages/effects/layouts/src/authentication/toolbar.vue similarity index 100% rename from admin/packages/effects/layouts/src/authentication/toolbar.vue rename to admin-vben/packages/effects/layouts/src/authentication/toolbar.vue diff --git a/admin/packages/effects/layouts/src/authentication/types.ts b/admin-vben/packages/effects/layouts/src/authentication/types.ts similarity index 100% rename from admin/packages/effects/layouts/src/authentication/types.ts rename to admin-vben/packages/effects/layouts/src/authentication/types.ts diff --git a/admin/packages/effects/layouts/src/basic/README.md b/admin-vben/packages/effects/layouts/src/basic/README.md similarity index 100% rename from admin/packages/effects/layouts/src/basic/README.md rename to admin-vben/packages/effects/layouts/src/basic/README.md diff --git a/admin/packages/effects/layouts/src/basic/content/content-spinner.vue b/admin-vben/packages/effects/layouts/src/basic/content/content-spinner.vue similarity index 100% rename from admin/packages/effects/layouts/src/basic/content/content-spinner.vue rename to admin-vben/packages/effects/layouts/src/basic/content/content-spinner.vue diff --git a/admin/packages/effects/layouts/src/basic/content/content.vue b/admin-vben/packages/effects/layouts/src/basic/content/content.vue similarity index 100% rename from admin/packages/effects/layouts/src/basic/content/content.vue rename to admin-vben/packages/effects/layouts/src/basic/content/content.vue diff --git a/admin/packages/effects/layouts/src/basic/content/index.ts b/admin-vben/packages/effects/layouts/src/basic/content/index.ts similarity index 100% rename from admin/packages/effects/layouts/src/basic/content/index.ts rename to admin-vben/packages/effects/layouts/src/basic/content/index.ts diff --git a/admin/packages/effects/layouts/src/basic/content/use-content-spinner.ts b/admin-vben/packages/effects/layouts/src/basic/content/use-content-spinner.ts similarity index 100% rename from admin/packages/effects/layouts/src/basic/content/use-content-spinner.ts rename to admin-vben/packages/effects/layouts/src/basic/content/use-content-spinner.ts diff --git a/admin/packages/effects/layouts/src/basic/copyright/copyright.vue b/admin-vben/packages/effects/layouts/src/basic/copyright/copyright.vue similarity index 100% rename from admin/packages/effects/layouts/src/basic/copyright/copyright.vue rename to admin-vben/packages/effects/layouts/src/basic/copyright/copyright.vue diff --git a/admin/packages/effects/layouts/src/basic/copyright/index.ts b/admin-vben/packages/effects/layouts/src/basic/copyright/index.ts similarity index 100% rename from admin/packages/effects/layouts/src/basic/copyright/index.ts rename to admin-vben/packages/effects/layouts/src/basic/copyright/index.ts diff --git a/admin/packages/effects/layouts/src/basic/footer/footer.vue b/admin-vben/packages/effects/layouts/src/basic/footer/footer.vue similarity index 100% rename from admin/packages/effects/layouts/src/basic/footer/footer.vue rename to admin-vben/packages/effects/layouts/src/basic/footer/footer.vue diff --git a/admin/packages/effects/layouts/src/basic/footer/index.ts b/admin-vben/packages/effects/layouts/src/basic/footer/index.ts similarity index 100% rename from admin/packages/effects/layouts/src/basic/footer/index.ts rename to admin-vben/packages/effects/layouts/src/basic/footer/index.ts diff --git a/admin/packages/effects/layouts/src/basic/header/header.vue b/admin-vben/packages/effects/layouts/src/basic/header/header.vue similarity index 100% rename from admin/packages/effects/layouts/src/basic/header/header.vue rename to admin-vben/packages/effects/layouts/src/basic/header/header.vue diff --git a/admin/packages/effects/layouts/src/basic/header/index.ts b/admin-vben/packages/effects/layouts/src/basic/header/index.ts similarity index 100% rename from admin/packages/effects/layouts/src/basic/header/index.ts rename to admin-vben/packages/effects/layouts/src/basic/header/index.ts diff --git a/admin/packages/effects/layouts/src/basic/index.ts b/admin-vben/packages/effects/layouts/src/basic/index.ts similarity index 100% rename from admin/packages/effects/layouts/src/basic/index.ts rename to admin-vben/packages/effects/layouts/src/basic/index.ts diff --git a/admin/packages/effects/layouts/src/basic/layout.vue b/admin-vben/packages/effects/layouts/src/basic/layout.vue similarity index 100% rename from admin/packages/effects/layouts/src/basic/layout.vue rename to admin-vben/packages/effects/layouts/src/basic/layout.vue diff --git a/admin/packages/effects/layouts/src/basic/menu/extra-menu.vue b/admin-vben/packages/effects/layouts/src/basic/menu/extra-menu.vue similarity index 100% rename from admin/packages/effects/layouts/src/basic/menu/extra-menu.vue rename to admin-vben/packages/effects/layouts/src/basic/menu/extra-menu.vue diff --git a/admin/packages/effects/layouts/src/basic/menu/index.ts b/admin-vben/packages/effects/layouts/src/basic/menu/index.ts similarity index 100% rename from admin/packages/effects/layouts/src/basic/menu/index.ts rename to admin-vben/packages/effects/layouts/src/basic/menu/index.ts diff --git a/admin/packages/effects/layouts/src/basic/menu/menu.vue b/admin-vben/packages/effects/layouts/src/basic/menu/menu.vue similarity index 100% rename from admin/packages/effects/layouts/src/basic/menu/menu.vue rename to admin-vben/packages/effects/layouts/src/basic/menu/menu.vue diff --git a/admin/packages/effects/layouts/src/basic/menu/mixed-menu.vue b/admin-vben/packages/effects/layouts/src/basic/menu/mixed-menu.vue similarity index 100% rename from admin/packages/effects/layouts/src/basic/menu/mixed-menu.vue rename to admin-vben/packages/effects/layouts/src/basic/menu/mixed-menu.vue diff --git a/admin/packages/effects/layouts/src/basic/menu/use-extra-menu.ts b/admin-vben/packages/effects/layouts/src/basic/menu/use-extra-menu.ts similarity index 100% rename from admin/packages/effects/layouts/src/basic/menu/use-extra-menu.ts rename to admin-vben/packages/effects/layouts/src/basic/menu/use-extra-menu.ts diff --git a/admin/packages/effects/layouts/src/basic/menu/use-mixed-menu.ts b/admin-vben/packages/effects/layouts/src/basic/menu/use-mixed-menu.ts similarity index 100% rename from admin/packages/effects/layouts/src/basic/menu/use-mixed-menu.ts rename to admin-vben/packages/effects/layouts/src/basic/menu/use-mixed-menu.ts diff --git a/admin/packages/effects/layouts/src/basic/menu/use-navigation.ts b/admin-vben/packages/effects/layouts/src/basic/menu/use-navigation.ts similarity index 100% rename from admin/packages/effects/layouts/src/basic/menu/use-navigation.ts rename to admin-vben/packages/effects/layouts/src/basic/menu/use-navigation.ts diff --git a/admin/packages/effects/layouts/src/basic/tabbar/index.ts b/admin-vben/packages/effects/layouts/src/basic/tabbar/index.ts similarity index 100% rename from admin/packages/effects/layouts/src/basic/tabbar/index.ts rename to admin-vben/packages/effects/layouts/src/basic/tabbar/index.ts diff --git a/admin/packages/effects/layouts/src/basic/tabbar/tabbar.vue b/admin-vben/packages/effects/layouts/src/basic/tabbar/tabbar.vue similarity index 100% rename from admin/packages/effects/layouts/src/basic/tabbar/tabbar.vue rename to admin-vben/packages/effects/layouts/src/basic/tabbar/tabbar.vue diff --git a/admin/packages/effects/layouts/src/basic/tabbar/use-tabbar.ts b/admin-vben/packages/effects/layouts/src/basic/tabbar/use-tabbar.ts similarity index 100% rename from admin/packages/effects/layouts/src/basic/tabbar/use-tabbar.ts rename to admin-vben/packages/effects/layouts/src/basic/tabbar/use-tabbar.ts diff --git a/admin/packages/effects/layouts/src/iframe/iframe-router-view.vue b/admin-vben/packages/effects/layouts/src/iframe/iframe-router-view.vue similarity index 100% rename from admin/packages/effects/layouts/src/iframe/iframe-router-view.vue rename to admin-vben/packages/effects/layouts/src/iframe/iframe-router-view.vue diff --git a/admin/packages/effects/layouts/src/iframe/iframe-view.vue b/admin-vben/packages/effects/layouts/src/iframe/iframe-view.vue similarity index 100% rename from admin/packages/effects/layouts/src/iframe/iframe-view.vue rename to admin-vben/packages/effects/layouts/src/iframe/iframe-view.vue diff --git a/admin/packages/effects/layouts/src/iframe/index.ts b/admin-vben/packages/effects/layouts/src/iframe/index.ts similarity index 100% rename from admin/packages/effects/layouts/src/iframe/index.ts rename to admin-vben/packages/effects/layouts/src/iframe/index.ts diff --git a/admin/packages/effects/layouts/src/index.ts b/admin-vben/packages/effects/layouts/src/index.ts similarity index 100% rename from admin/packages/effects/layouts/src/index.ts rename to admin-vben/packages/effects/layouts/src/index.ts diff --git a/admin/packages/effects/layouts/src/widgets/breadcrumb.vue b/admin-vben/packages/effects/layouts/src/widgets/breadcrumb.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/breadcrumb.vue rename to admin-vben/packages/effects/layouts/src/widgets/breadcrumb.vue diff --git a/admin/packages/effects/layouts/src/widgets/check-updates/check-updates.vue b/admin-vben/packages/effects/layouts/src/widgets/check-updates/check-updates.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/check-updates/check-updates.vue rename to admin-vben/packages/effects/layouts/src/widgets/check-updates/check-updates.vue diff --git a/admin/packages/effects/layouts/src/widgets/check-updates/index.ts b/admin-vben/packages/effects/layouts/src/widgets/check-updates/index.ts similarity index 100% rename from admin/packages/effects/layouts/src/widgets/check-updates/index.ts rename to admin-vben/packages/effects/layouts/src/widgets/check-updates/index.ts diff --git a/admin/packages/effects/layouts/src/widgets/color-toggle.vue b/admin-vben/packages/effects/layouts/src/widgets/color-toggle.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/color-toggle.vue rename to admin-vben/packages/effects/layouts/src/widgets/color-toggle.vue diff --git a/admin/packages/effects/layouts/src/widgets/global-search/global-search.vue b/admin-vben/packages/effects/layouts/src/widgets/global-search/global-search.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/global-search/global-search.vue rename to admin-vben/packages/effects/layouts/src/widgets/global-search/global-search.vue diff --git a/admin/packages/effects/layouts/src/widgets/global-search/index.ts b/admin-vben/packages/effects/layouts/src/widgets/global-search/index.ts similarity index 100% rename from admin/packages/effects/layouts/src/widgets/global-search/index.ts rename to admin-vben/packages/effects/layouts/src/widgets/global-search/index.ts diff --git a/admin/packages/effects/layouts/src/widgets/global-search/search-panel.vue b/admin-vben/packages/effects/layouts/src/widgets/global-search/search-panel.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/global-search/search-panel.vue rename to admin-vben/packages/effects/layouts/src/widgets/global-search/search-panel.vue diff --git a/admin/packages/effects/layouts/src/widgets/index.ts b/admin-vben/packages/effects/layouts/src/widgets/index.ts similarity index 100% rename from admin/packages/effects/layouts/src/widgets/index.ts rename to admin-vben/packages/effects/layouts/src/widgets/index.ts diff --git a/admin/packages/effects/layouts/src/widgets/language-toggle.vue b/admin-vben/packages/effects/layouts/src/widgets/language-toggle.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/language-toggle.vue rename to admin-vben/packages/effects/layouts/src/widgets/language-toggle.vue diff --git a/admin/packages/effects/layouts/src/widgets/layout-toggle.vue b/admin-vben/packages/effects/layouts/src/widgets/layout-toggle.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/layout-toggle.vue rename to admin-vben/packages/effects/layouts/src/widgets/layout-toggle.vue diff --git a/admin/packages/effects/layouts/src/widgets/lock-screen/index.ts b/admin-vben/packages/effects/layouts/src/widgets/lock-screen/index.ts similarity index 100% rename from admin/packages/effects/layouts/src/widgets/lock-screen/index.ts rename to admin-vben/packages/effects/layouts/src/widgets/lock-screen/index.ts diff --git a/admin/packages/effects/layouts/src/widgets/lock-screen/lock-screen-modal.vue b/admin-vben/packages/effects/layouts/src/widgets/lock-screen/lock-screen-modal.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/lock-screen/lock-screen-modal.vue rename to admin-vben/packages/effects/layouts/src/widgets/lock-screen/lock-screen-modal.vue diff --git a/admin/packages/effects/layouts/src/widgets/lock-screen/lock-screen.vue b/admin-vben/packages/effects/layouts/src/widgets/lock-screen/lock-screen.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/lock-screen/lock-screen.vue rename to admin-vben/packages/effects/layouts/src/widgets/lock-screen/lock-screen.vue diff --git a/admin/packages/effects/layouts/src/widgets/notification/index.ts b/admin-vben/packages/effects/layouts/src/widgets/notification/index.ts similarity index 100% rename from admin/packages/effects/layouts/src/widgets/notification/index.ts rename to admin-vben/packages/effects/layouts/src/widgets/notification/index.ts diff --git a/admin/packages/effects/layouts/src/widgets/notification/notification.vue b/admin-vben/packages/effects/layouts/src/widgets/notification/notification.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/notification/notification.vue rename to admin-vben/packages/effects/layouts/src/widgets/notification/notification.vue diff --git a/admin/packages/effects/layouts/src/widgets/notification/types.ts b/admin-vben/packages/effects/layouts/src/widgets/notification/types.ts similarity index 100% rename from admin/packages/effects/layouts/src/widgets/notification/types.ts rename to admin-vben/packages/effects/layouts/src/widgets/notification/types.ts diff --git a/admin/packages/effects/layouts/src/widgets/preferences/blocks/block.vue b/admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/block.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/preferences/blocks/block.vue rename to admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/block.vue diff --git a/admin/packages/effects/layouts/src/widgets/preferences/blocks/checkbox-item.vue b/admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/checkbox-item.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/preferences/blocks/checkbox-item.vue rename to admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/checkbox-item.vue diff --git a/admin/packages/effects/layouts/src/widgets/preferences/blocks/general/animation.vue b/admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/general/animation.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/preferences/blocks/general/animation.vue rename to admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/general/animation.vue diff --git a/admin/packages/effects/layouts/src/widgets/preferences/blocks/general/general.vue b/admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/general/general.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/preferences/blocks/general/general.vue rename to admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/general/general.vue diff --git a/admin/packages/effects/layouts/src/widgets/preferences/blocks/index.ts b/admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/index.ts similarity index 100% rename from admin/packages/effects/layouts/src/widgets/preferences/blocks/index.ts rename to admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/index.ts diff --git a/admin/packages/effects/layouts/src/widgets/preferences/blocks/input-item.vue b/admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/input-item.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/preferences/blocks/input-item.vue rename to admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/input-item.vue diff --git a/admin/packages/effects/layouts/src/widgets/preferences/blocks/layout/breadcrumb.vue b/admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/layout/breadcrumb.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/preferences/blocks/layout/breadcrumb.vue rename to admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/layout/breadcrumb.vue diff --git a/admin/packages/effects/layouts/src/widgets/preferences/blocks/layout/content.vue b/admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/layout/content.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/preferences/blocks/layout/content.vue rename to admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/layout/content.vue diff --git a/admin/packages/effects/layouts/src/widgets/preferences/blocks/layout/copyright.vue b/admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/layout/copyright.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/preferences/blocks/layout/copyright.vue rename to admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/layout/copyright.vue diff --git a/admin/packages/effects/layouts/src/widgets/preferences/blocks/layout/footer.vue b/admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/layout/footer.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/preferences/blocks/layout/footer.vue rename to admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/layout/footer.vue diff --git a/admin/packages/effects/layouts/src/widgets/preferences/blocks/layout/header.vue b/admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/layout/header.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/preferences/blocks/layout/header.vue rename to admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/layout/header.vue diff --git a/admin/packages/effects/layouts/src/widgets/preferences/blocks/layout/layout.vue b/admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/layout/layout.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/preferences/blocks/layout/layout.vue rename to admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/layout/layout.vue diff --git a/admin/packages/effects/layouts/src/widgets/preferences/blocks/layout/navigation.vue b/admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/layout/navigation.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/preferences/blocks/layout/navigation.vue rename to admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/layout/navigation.vue diff --git a/admin/packages/effects/layouts/src/widgets/preferences/blocks/layout/sidebar.vue b/admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/layout/sidebar.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/preferences/blocks/layout/sidebar.vue rename to admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/layout/sidebar.vue diff --git a/admin/packages/effects/layouts/src/widgets/preferences/blocks/layout/tabbar.vue b/admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/layout/tabbar.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/preferences/blocks/layout/tabbar.vue rename to admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/layout/tabbar.vue diff --git a/admin/packages/effects/layouts/src/widgets/preferences/blocks/layout/widget.vue b/admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/layout/widget.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/preferences/blocks/layout/widget.vue rename to admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/layout/widget.vue diff --git a/admin/packages/effects/layouts/src/widgets/preferences/blocks/number-field-item.vue b/admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/number-field-item.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/preferences/blocks/number-field-item.vue rename to admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/number-field-item.vue diff --git a/admin/packages/effects/layouts/src/widgets/preferences/blocks/select-item.vue b/admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/select-item.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/preferences/blocks/select-item.vue rename to admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/select-item.vue diff --git a/admin/packages/effects/layouts/src/widgets/preferences/blocks/shortcut-keys/global.vue b/admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/shortcut-keys/global.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/preferences/blocks/shortcut-keys/global.vue rename to admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/shortcut-keys/global.vue diff --git a/admin/packages/effects/layouts/src/widgets/preferences/blocks/switch-item.vue b/admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/switch-item.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/preferences/blocks/switch-item.vue rename to admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/switch-item.vue diff --git a/admin/packages/effects/layouts/src/widgets/preferences/blocks/theme/builtin.vue b/admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/theme/builtin.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/preferences/blocks/theme/builtin.vue rename to admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/theme/builtin.vue diff --git a/admin/packages/effects/layouts/src/widgets/preferences/blocks/theme/color-mode.vue b/admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/theme/color-mode.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/preferences/blocks/theme/color-mode.vue rename to admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/theme/color-mode.vue diff --git a/admin/packages/effects/layouts/src/widgets/preferences/blocks/theme/radius.vue b/admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/theme/radius.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/preferences/blocks/theme/radius.vue rename to admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/theme/radius.vue diff --git a/admin/packages/effects/layouts/src/widgets/preferences/blocks/theme/theme.vue b/admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/theme/theme.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/preferences/blocks/theme/theme.vue rename to admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/theme/theme.vue diff --git a/admin/packages/effects/layouts/src/widgets/preferences/blocks/toggle-item.vue b/admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/toggle-item.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/preferences/blocks/toggle-item.vue rename to admin-vben/packages/effects/layouts/src/widgets/preferences/blocks/toggle-item.vue diff --git a/admin/packages/effects/layouts/src/widgets/preferences/icons/content-compact.vue b/admin-vben/packages/effects/layouts/src/widgets/preferences/icons/content-compact.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/preferences/icons/content-compact.vue rename to admin-vben/packages/effects/layouts/src/widgets/preferences/icons/content-compact.vue diff --git a/admin/packages/effects/layouts/src/widgets/preferences/icons/full-content.vue b/admin-vben/packages/effects/layouts/src/widgets/preferences/icons/full-content.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/preferences/icons/full-content.vue rename to admin-vben/packages/effects/layouts/src/widgets/preferences/icons/full-content.vue diff --git a/admin/packages/effects/layouts/src/widgets/preferences/icons/header-mixed-nav.vue b/admin-vben/packages/effects/layouts/src/widgets/preferences/icons/header-mixed-nav.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/preferences/icons/header-mixed-nav.vue rename to admin-vben/packages/effects/layouts/src/widgets/preferences/icons/header-mixed-nav.vue diff --git a/admin/packages/effects/layouts/src/widgets/preferences/icons/header-nav.vue b/admin-vben/packages/effects/layouts/src/widgets/preferences/icons/header-nav.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/preferences/icons/header-nav.vue rename to admin-vben/packages/effects/layouts/src/widgets/preferences/icons/header-nav.vue diff --git a/admin/packages/effects/layouts/src/widgets/preferences/icons/header-sidebar-nav.vue b/admin-vben/packages/effects/layouts/src/widgets/preferences/icons/header-sidebar-nav.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/preferences/icons/header-sidebar-nav.vue rename to admin-vben/packages/effects/layouts/src/widgets/preferences/icons/header-sidebar-nav.vue diff --git a/admin/packages/effects/layouts/src/widgets/preferences/icons/index.ts b/admin-vben/packages/effects/layouts/src/widgets/preferences/icons/index.ts similarity index 100% rename from admin/packages/effects/layouts/src/widgets/preferences/icons/index.ts rename to admin-vben/packages/effects/layouts/src/widgets/preferences/icons/index.ts diff --git a/admin/packages/effects/layouts/src/widgets/preferences/icons/mixed-nav.vue b/admin-vben/packages/effects/layouts/src/widgets/preferences/icons/mixed-nav.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/preferences/icons/mixed-nav.vue rename to admin-vben/packages/effects/layouts/src/widgets/preferences/icons/mixed-nav.vue diff --git a/admin/packages/effects/layouts/src/widgets/preferences/icons/setting.vue b/admin-vben/packages/effects/layouts/src/widgets/preferences/icons/setting.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/preferences/icons/setting.vue rename to admin-vben/packages/effects/layouts/src/widgets/preferences/icons/setting.vue diff --git a/admin/packages/effects/layouts/src/widgets/preferences/icons/sidebar-mixed-nav.vue b/admin-vben/packages/effects/layouts/src/widgets/preferences/icons/sidebar-mixed-nav.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/preferences/icons/sidebar-mixed-nav.vue rename to admin-vben/packages/effects/layouts/src/widgets/preferences/icons/sidebar-mixed-nav.vue diff --git a/admin/packages/effects/layouts/src/widgets/preferences/icons/sidebar-nav.vue b/admin-vben/packages/effects/layouts/src/widgets/preferences/icons/sidebar-nav.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/preferences/icons/sidebar-nav.vue rename to admin-vben/packages/effects/layouts/src/widgets/preferences/icons/sidebar-nav.vue diff --git a/admin/packages/effects/layouts/src/widgets/preferences/index.ts b/admin-vben/packages/effects/layouts/src/widgets/preferences/index.ts similarity index 100% rename from admin/packages/effects/layouts/src/widgets/preferences/index.ts rename to admin-vben/packages/effects/layouts/src/widgets/preferences/index.ts diff --git a/admin/packages/effects/layouts/src/widgets/preferences/preferences-button.vue b/admin-vben/packages/effects/layouts/src/widgets/preferences/preferences-button.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/preferences/preferences-button.vue rename to admin-vben/packages/effects/layouts/src/widgets/preferences/preferences-button.vue diff --git a/admin/packages/effects/layouts/src/widgets/preferences/preferences-drawer.vue b/admin-vben/packages/effects/layouts/src/widgets/preferences/preferences-drawer.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/preferences/preferences-drawer.vue rename to admin-vben/packages/effects/layouts/src/widgets/preferences/preferences-drawer.vue diff --git a/admin/packages/effects/layouts/src/widgets/preferences/preferences.vue b/admin-vben/packages/effects/layouts/src/widgets/preferences/preferences.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/preferences/preferences.vue rename to admin-vben/packages/effects/layouts/src/widgets/preferences/preferences.vue diff --git a/admin/packages/effects/layouts/src/widgets/preferences/use-open-preferences.ts b/admin-vben/packages/effects/layouts/src/widgets/preferences/use-open-preferences.ts similarity index 100% rename from admin/packages/effects/layouts/src/widgets/preferences/use-open-preferences.ts rename to admin-vben/packages/effects/layouts/src/widgets/preferences/use-open-preferences.ts diff --git a/admin/packages/effects/layouts/src/widgets/theme-toggle/index.ts b/admin-vben/packages/effects/layouts/src/widgets/theme-toggle/index.ts similarity index 100% rename from admin/packages/effects/layouts/src/widgets/theme-toggle/index.ts rename to admin-vben/packages/effects/layouts/src/widgets/theme-toggle/index.ts diff --git a/admin/packages/effects/layouts/src/widgets/theme-toggle/theme-button.vue b/admin-vben/packages/effects/layouts/src/widgets/theme-toggle/theme-button.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/theme-toggle/theme-button.vue rename to admin-vben/packages/effects/layouts/src/widgets/theme-toggle/theme-button.vue diff --git a/admin/packages/effects/layouts/src/widgets/theme-toggle/theme-toggle.vue b/admin-vben/packages/effects/layouts/src/widgets/theme-toggle/theme-toggle.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/theme-toggle/theme-toggle.vue rename to admin-vben/packages/effects/layouts/src/widgets/theme-toggle/theme-toggle.vue diff --git a/admin/packages/effects/layouts/src/widgets/user-dropdown/index.ts b/admin-vben/packages/effects/layouts/src/widgets/user-dropdown/index.ts similarity index 100% rename from admin/packages/effects/layouts/src/widgets/user-dropdown/index.ts rename to admin-vben/packages/effects/layouts/src/widgets/user-dropdown/index.ts diff --git a/admin/packages/effects/layouts/src/widgets/user-dropdown/user-dropdown.vue b/admin-vben/packages/effects/layouts/src/widgets/user-dropdown/user-dropdown.vue similarity index 100% rename from admin/packages/effects/layouts/src/widgets/user-dropdown/user-dropdown.vue rename to admin-vben/packages/effects/layouts/src/widgets/user-dropdown/user-dropdown.vue diff --git a/admin/packages/effects/layouts/tsconfig.json b/admin-vben/packages/effects/layouts/tsconfig.json similarity index 100% rename from admin/packages/effects/layouts/tsconfig.json rename to admin-vben/packages/effects/layouts/tsconfig.json diff --git a/admin/packages/effects/plugins/README.md b/admin-vben/packages/effects/plugins/README.md similarity index 100% rename from admin/packages/effects/plugins/README.md rename to admin-vben/packages/effects/plugins/README.md diff --git a/admin/packages/effects/plugins/package.json b/admin-vben/packages/effects/plugins/package.json similarity index 100% rename from admin/packages/effects/plugins/package.json rename to admin-vben/packages/effects/plugins/package.json diff --git a/admin/packages/effects/plugins/src/echarts/echarts-ui.vue b/admin-vben/packages/effects/plugins/src/echarts/echarts-ui.vue similarity index 100% rename from admin/packages/effects/plugins/src/echarts/echarts-ui.vue rename to admin-vben/packages/effects/plugins/src/echarts/echarts-ui.vue diff --git a/admin/packages/effects/plugins/src/echarts/echarts.ts b/admin-vben/packages/effects/plugins/src/echarts/echarts.ts similarity index 100% rename from admin/packages/effects/plugins/src/echarts/echarts.ts rename to admin-vben/packages/effects/plugins/src/echarts/echarts.ts diff --git a/admin/packages/effects/plugins/src/echarts/index.ts b/admin-vben/packages/effects/plugins/src/echarts/index.ts similarity index 100% rename from admin/packages/effects/plugins/src/echarts/index.ts rename to admin-vben/packages/effects/plugins/src/echarts/index.ts diff --git a/admin/packages/effects/plugins/src/echarts/use-echarts.ts b/admin-vben/packages/effects/plugins/src/echarts/use-echarts.ts similarity index 100% rename from admin/packages/effects/plugins/src/echarts/use-echarts.ts rename to admin-vben/packages/effects/plugins/src/echarts/use-echarts.ts diff --git a/admin/packages/effects/plugins/src/motion/index.ts b/admin-vben/packages/effects/plugins/src/motion/index.ts similarity index 100% rename from admin/packages/effects/plugins/src/motion/index.ts rename to admin-vben/packages/effects/plugins/src/motion/index.ts diff --git a/admin/packages/effects/plugins/src/motion/types.ts b/admin-vben/packages/effects/plugins/src/motion/types.ts similarity index 100% rename from admin/packages/effects/plugins/src/motion/types.ts rename to admin-vben/packages/effects/plugins/src/motion/types.ts diff --git a/admin/packages/effects/plugins/src/vxe-table/api.ts b/admin-vben/packages/effects/plugins/src/vxe-table/api.ts similarity index 100% rename from admin/packages/effects/plugins/src/vxe-table/api.ts rename to admin-vben/packages/effects/plugins/src/vxe-table/api.ts diff --git a/admin/packages/effects/plugins/src/vxe-table/extends.ts b/admin-vben/packages/effects/plugins/src/vxe-table/extends.ts similarity index 100% rename from admin/packages/effects/plugins/src/vxe-table/extends.ts rename to admin-vben/packages/effects/plugins/src/vxe-table/extends.ts diff --git a/admin/packages/effects/plugins/src/vxe-table/index.ts b/admin-vben/packages/effects/plugins/src/vxe-table/index.ts similarity index 100% rename from admin/packages/effects/plugins/src/vxe-table/index.ts rename to admin-vben/packages/effects/plugins/src/vxe-table/index.ts diff --git a/admin/packages/effects/plugins/src/vxe-table/init.ts b/admin-vben/packages/effects/plugins/src/vxe-table/init.ts similarity index 100% rename from admin/packages/effects/plugins/src/vxe-table/init.ts rename to admin-vben/packages/effects/plugins/src/vxe-table/init.ts diff --git a/admin/packages/effects/plugins/src/vxe-table/style.css b/admin-vben/packages/effects/plugins/src/vxe-table/style.css similarity index 100% rename from admin/packages/effects/plugins/src/vxe-table/style.css rename to admin-vben/packages/effects/plugins/src/vxe-table/style.css diff --git a/admin/packages/effects/plugins/src/vxe-table/types.ts b/admin-vben/packages/effects/plugins/src/vxe-table/types.ts similarity index 100% rename from admin/packages/effects/plugins/src/vxe-table/types.ts rename to admin-vben/packages/effects/plugins/src/vxe-table/types.ts diff --git a/admin/packages/effects/plugins/src/vxe-table/use-vxe-grid.ts b/admin-vben/packages/effects/plugins/src/vxe-table/use-vxe-grid.ts similarity index 100% rename from admin/packages/effects/plugins/src/vxe-table/use-vxe-grid.ts rename to admin-vben/packages/effects/plugins/src/vxe-table/use-vxe-grid.ts diff --git a/admin/packages/effects/plugins/src/vxe-table/use-vxe-grid.vue b/admin-vben/packages/effects/plugins/src/vxe-table/use-vxe-grid.vue similarity index 100% rename from admin/packages/effects/plugins/src/vxe-table/use-vxe-grid.vue rename to admin-vben/packages/effects/plugins/src/vxe-table/use-vxe-grid.vue diff --git a/admin/packages/effects/plugins/tsconfig.json b/admin-vben/packages/effects/plugins/tsconfig.json similarity index 100% rename from admin/packages/effects/plugins/tsconfig.json rename to admin-vben/packages/effects/plugins/tsconfig.json diff --git a/admin/packages/effects/request/package.json b/admin-vben/packages/effects/request/package.json similarity index 100% rename from admin/packages/effects/request/package.json rename to admin-vben/packages/effects/request/package.json diff --git a/admin/packages/effects/request/src/index.ts b/admin-vben/packages/effects/request/src/index.ts similarity index 100% rename from admin/packages/effects/request/src/index.ts rename to admin-vben/packages/effects/request/src/index.ts diff --git a/admin/packages/effects/request/src/request-client/index.ts b/admin-vben/packages/effects/request/src/request-client/index.ts similarity index 100% rename from admin/packages/effects/request/src/request-client/index.ts rename to admin-vben/packages/effects/request/src/request-client/index.ts diff --git a/admin/packages/effects/request/src/request-client/modules/downloader.test.ts b/admin-vben/packages/effects/request/src/request-client/modules/downloader.test.ts similarity index 100% rename from admin/packages/effects/request/src/request-client/modules/downloader.test.ts rename to admin-vben/packages/effects/request/src/request-client/modules/downloader.test.ts diff --git a/admin/packages/effects/request/src/request-client/modules/downloader.ts b/admin-vben/packages/effects/request/src/request-client/modules/downloader.ts similarity index 100% rename from admin/packages/effects/request/src/request-client/modules/downloader.ts rename to admin-vben/packages/effects/request/src/request-client/modules/downloader.ts diff --git a/admin/packages/effects/request/src/request-client/modules/interceptor.ts b/admin-vben/packages/effects/request/src/request-client/modules/interceptor.ts similarity index 100% rename from admin/packages/effects/request/src/request-client/modules/interceptor.ts rename to admin-vben/packages/effects/request/src/request-client/modules/interceptor.ts diff --git a/admin/packages/effects/request/src/request-client/modules/uploader.test.ts b/admin-vben/packages/effects/request/src/request-client/modules/uploader.test.ts similarity index 100% rename from admin/packages/effects/request/src/request-client/modules/uploader.test.ts rename to admin-vben/packages/effects/request/src/request-client/modules/uploader.test.ts diff --git a/admin/packages/effects/request/src/request-client/modules/uploader.ts b/admin-vben/packages/effects/request/src/request-client/modules/uploader.ts similarity index 100% rename from admin/packages/effects/request/src/request-client/modules/uploader.ts rename to admin-vben/packages/effects/request/src/request-client/modules/uploader.ts diff --git a/admin/packages/effects/request/src/request-client/preset-interceptors.ts b/admin-vben/packages/effects/request/src/request-client/preset-interceptors.ts similarity index 100% rename from admin/packages/effects/request/src/request-client/preset-interceptors.ts rename to admin-vben/packages/effects/request/src/request-client/preset-interceptors.ts diff --git a/admin/packages/effects/request/src/request-client/request-client.test.ts b/admin-vben/packages/effects/request/src/request-client/request-client.test.ts similarity index 100% rename from admin/packages/effects/request/src/request-client/request-client.test.ts rename to admin-vben/packages/effects/request/src/request-client/request-client.test.ts diff --git a/admin/packages/effects/request/src/request-client/request-client.ts b/admin-vben/packages/effects/request/src/request-client/request-client.ts similarity index 100% rename from admin/packages/effects/request/src/request-client/request-client.ts rename to admin-vben/packages/effects/request/src/request-client/request-client.ts diff --git a/admin/packages/effects/request/src/request-client/types.ts b/admin-vben/packages/effects/request/src/request-client/types.ts similarity index 100% rename from admin/packages/effects/request/src/request-client/types.ts rename to admin-vben/packages/effects/request/src/request-client/types.ts diff --git a/admin/packages/effects/request/tsconfig.json b/admin-vben/packages/effects/request/tsconfig.json similarity index 100% rename from admin/packages/effects/request/tsconfig.json rename to admin-vben/packages/effects/request/tsconfig.json diff --git a/admin/packages/icons/README.md b/admin-vben/packages/icons/README.md similarity index 100% rename from admin/packages/icons/README.md rename to admin-vben/packages/icons/README.md diff --git a/admin/packages/icons/package.json b/admin-vben/packages/icons/package.json similarity index 100% rename from admin/packages/icons/package.json rename to admin-vben/packages/icons/package.json diff --git a/admin/packages/icons/src/iconify/index.ts b/admin-vben/packages/icons/src/iconify/index.ts similarity index 100% rename from admin/packages/icons/src/iconify/index.ts rename to admin-vben/packages/icons/src/iconify/index.ts diff --git a/admin/packages/icons/src/icons/empty-icon.vue b/admin-vben/packages/icons/src/icons/empty-icon.vue similarity index 100% rename from admin/packages/icons/src/icons/empty-icon.vue rename to admin-vben/packages/icons/src/icons/empty-icon.vue diff --git a/admin/packages/icons/src/index.ts b/admin-vben/packages/icons/src/index.ts similarity index 100% rename from admin/packages/icons/src/index.ts rename to admin-vben/packages/icons/src/index.ts diff --git a/admin/packages/icons/src/svg/icons/antdv-logo.svg b/admin-vben/packages/icons/src/svg/icons/antdv-logo.svg similarity index 100% rename from admin/packages/icons/src/svg/icons/antdv-logo.svg rename to admin-vben/packages/icons/src/svg/icons/antdv-logo.svg diff --git a/admin/packages/icons/src/svg/icons/avatar-1.svg b/admin-vben/packages/icons/src/svg/icons/avatar-1.svg similarity index 100% rename from admin/packages/icons/src/svg/icons/avatar-1.svg rename to admin-vben/packages/icons/src/svg/icons/avatar-1.svg diff --git a/admin/packages/icons/src/svg/icons/avatar-2.svg b/admin-vben/packages/icons/src/svg/icons/avatar-2.svg similarity index 100% rename from admin/packages/icons/src/svg/icons/avatar-2.svg rename to admin-vben/packages/icons/src/svg/icons/avatar-2.svg diff --git a/admin/packages/icons/src/svg/icons/avatar-3.svg b/admin-vben/packages/icons/src/svg/icons/avatar-3.svg similarity index 100% rename from admin/packages/icons/src/svg/icons/avatar-3.svg rename to admin-vben/packages/icons/src/svg/icons/avatar-3.svg diff --git a/admin/packages/icons/src/svg/icons/avatar-4.svg b/admin-vben/packages/icons/src/svg/icons/avatar-4.svg similarity index 100% rename from admin/packages/icons/src/svg/icons/avatar-4.svg rename to admin-vben/packages/icons/src/svg/icons/avatar-4.svg diff --git a/admin/packages/icons/src/svg/icons/bell.svg b/admin-vben/packages/icons/src/svg/icons/bell.svg similarity index 100% rename from admin/packages/icons/src/svg/icons/bell.svg rename to admin-vben/packages/icons/src/svg/icons/bell.svg diff --git a/admin/packages/icons/src/svg/icons/cake.svg b/admin-vben/packages/icons/src/svg/icons/cake.svg similarity index 100% rename from admin/packages/icons/src/svg/icons/cake.svg rename to admin-vben/packages/icons/src/svg/icons/cake.svg diff --git a/admin/packages/icons/src/svg/icons/card.svg b/admin-vben/packages/icons/src/svg/icons/card.svg similarity index 100% rename from admin/packages/icons/src/svg/icons/card.svg rename to admin-vben/packages/icons/src/svg/icons/card.svg diff --git a/admin/packages/icons/src/svg/icons/download.svg b/admin-vben/packages/icons/src/svg/icons/download.svg similarity index 100% rename from admin/packages/icons/src/svg/icons/download.svg rename to admin-vben/packages/icons/src/svg/icons/download.svg diff --git a/admin/packages/icons/src/svg/index.ts b/admin-vben/packages/icons/src/svg/index.ts similarity index 100% rename from admin/packages/icons/src/svg/index.ts rename to admin-vben/packages/icons/src/svg/index.ts diff --git a/admin/packages/icons/src/svg/load.ts b/admin-vben/packages/icons/src/svg/load.ts similarity index 100% rename from admin/packages/icons/src/svg/load.ts rename to admin-vben/packages/icons/src/svg/load.ts diff --git a/admin/packages/icons/tsconfig.json b/admin-vben/packages/icons/tsconfig.json similarity index 100% rename from admin/packages/icons/tsconfig.json rename to admin-vben/packages/icons/tsconfig.json diff --git a/admin/packages/locales/package.json b/admin-vben/packages/locales/package.json similarity index 100% rename from admin/packages/locales/package.json rename to admin-vben/packages/locales/package.json diff --git a/admin/packages/locales/src/i18n.ts b/admin-vben/packages/locales/src/i18n.ts similarity index 100% rename from admin/packages/locales/src/i18n.ts rename to admin-vben/packages/locales/src/i18n.ts diff --git a/admin/packages/locales/src/index.ts b/admin-vben/packages/locales/src/index.ts similarity index 100% rename from admin/packages/locales/src/index.ts rename to admin-vben/packages/locales/src/index.ts diff --git a/admin/packages/locales/src/langs/en-US/authentication.json b/admin-vben/packages/locales/src/langs/en-US/authentication.json similarity index 100% rename from admin/packages/locales/src/langs/en-US/authentication.json rename to admin-vben/packages/locales/src/langs/en-US/authentication.json diff --git a/admin/packages/locales/src/langs/en-US/common.json b/admin-vben/packages/locales/src/langs/en-US/common.json similarity index 100% rename from admin/packages/locales/src/langs/en-US/common.json rename to admin-vben/packages/locales/src/langs/en-US/common.json diff --git a/admin/packages/locales/src/langs/en-US/preferences.json b/admin-vben/packages/locales/src/langs/en-US/preferences.json similarity index 100% rename from admin/packages/locales/src/langs/en-US/preferences.json rename to admin-vben/packages/locales/src/langs/en-US/preferences.json diff --git a/admin/packages/locales/src/langs/en-US/ui.json b/admin-vben/packages/locales/src/langs/en-US/ui.json similarity index 100% rename from admin/packages/locales/src/langs/en-US/ui.json rename to admin-vben/packages/locales/src/langs/en-US/ui.json diff --git a/admin/packages/locales/src/langs/zh-CN/authentication.json b/admin-vben/packages/locales/src/langs/zh-CN/authentication.json similarity index 100% rename from admin/packages/locales/src/langs/zh-CN/authentication.json rename to admin-vben/packages/locales/src/langs/zh-CN/authentication.json diff --git a/admin/packages/locales/src/langs/zh-CN/common.json b/admin-vben/packages/locales/src/langs/zh-CN/common.json similarity index 100% rename from admin/packages/locales/src/langs/zh-CN/common.json rename to admin-vben/packages/locales/src/langs/zh-CN/common.json diff --git a/admin/packages/locales/src/langs/zh-CN/preferences.json b/admin-vben/packages/locales/src/langs/zh-CN/preferences.json similarity index 100% rename from admin/packages/locales/src/langs/zh-CN/preferences.json rename to admin-vben/packages/locales/src/langs/zh-CN/preferences.json diff --git a/admin/packages/locales/src/langs/zh-CN/ui.json b/admin-vben/packages/locales/src/langs/zh-CN/ui.json similarity index 100% rename from admin/packages/locales/src/langs/zh-CN/ui.json rename to admin-vben/packages/locales/src/langs/zh-CN/ui.json diff --git a/admin/packages/locales/src/typing.ts b/admin-vben/packages/locales/src/typing.ts similarity index 100% rename from admin/packages/locales/src/typing.ts rename to admin-vben/packages/locales/src/typing.ts diff --git a/admin/packages/locales/tsconfig.json b/admin-vben/packages/locales/tsconfig.json similarity index 100% rename from admin/packages/locales/tsconfig.json rename to admin-vben/packages/locales/tsconfig.json diff --git a/admin/packages/preferences/package.json b/admin-vben/packages/preferences/package.json similarity index 100% rename from admin/packages/preferences/package.json rename to admin-vben/packages/preferences/package.json diff --git a/admin/packages/preferences/src/index.ts b/admin-vben/packages/preferences/src/index.ts similarity index 100% rename from admin/packages/preferences/src/index.ts rename to admin-vben/packages/preferences/src/index.ts diff --git a/admin/packages/preferences/tsconfig.json b/admin-vben/packages/preferences/tsconfig.json similarity index 100% rename from admin/packages/preferences/tsconfig.json rename to admin-vben/packages/preferences/tsconfig.json diff --git a/admin/packages/stores/package.json b/admin-vben/packages/stores/package.json similarity index 100% rename from admin/packages/stores/package.json rename to admin-vben/packages/stores/package.json diff --git a/admin/packages/stores/shim-pinia.d.ts b/admin-vben/packages/stores/shim-pinia.d.ts similarity index 100% rename from admin/packages/stores/shim-pinia.d.ts rename to admin-vben/packages/stores/shim-pinia.d.ts diff --git a/admin/packages/stores/src/index.ts b/admin-vben/packages/stores/src/index.ts similarity index 100% rename from admin/packages/stores/src/index.ts rename to admin-vben/packages/stores/src/index.ts diff --git a/admin/packages/stores/src/modules/access.test.ts b/admin-vben/packages/stores/src/modules/access.test.ts similarity index 100% rename from admin/packages/stores/src/modules/access.test.ts rename to admin-vben/packages/stores/src/modules/access.test.ts diff --git a/admin/packages/stores/src/modules/access.ts b/admin-vben/packages/stores/src/modules/access.ts similarity index 100% rename from admin/packages/stores/src/modules/access.ts rename to admin-vben/packages/stores/src/modules/access.ts diff --git a/admin/packages/stores/src/modules/index.ts b/admin-vben/packages/stores/src/modules/index.ts similarity index 100% rename from admin/packages/stores/src/modules/index.ts rename to admin-vben/packages/stores/src/modules/index.ts diff --git a/admin/packages/stores/src/modules/tabbar.test.ts b/admin-vben/packages/stores/src/modules/tabbar.test.ts similarity index 100% rename from admin/packages/stores/src/modules/tabbar.test.ts rename to admin-vben/packages/stores/src/modules/tabbar.test.ts diff --git a/admin/packages/stores/src/modules/tabbar.ts b/admin-vben/packages/stores/src/modules/tabbar.ts similarity index 100% rename from admin/packages/stores/src/modules/tabbar.ts rename to admin-vben/packages/stores/src/modules/tabbar.ts diff --git a/admin/packages/stores/src/modules/user.test.ts b/admin-vben/packages/stores/src/modules/user.test.ts similarity index 100% rename from admin/packages/stores/src/modules/user.test.ts rename to admin-vben/packages/stores/src/modules/user.test.ts diff --git a/admin/packages/stores/src/modules/user.ts b/admin-vben/packages/stores/src/modules/user.ts similarity index 100% rename from admin/packages/stores/src/modules/user.ts rename to admin-vben/packages/stores/src/modules/user.ts diff --git a/admin/packages/stores/src/setup.ts b/admin-vben/packages/stores/src/setup.ts similarity index 100% rename from admin/packages/stores/src/setup.ts rename to admin-vben/packages/stores/src/setup.ts diff --git a/admin/packages/stores/tsconfig.json b/admin-vben/packages/stores/tsconfig.json similarity index 100% rename from admin/packages/stores/tsconfig.json rename to admin-vben/packages/stores/tsconfig.json diff --git a/admin/packages/styles/README.md b/admin-vben/packages/styles/README.md similarity index 100% rename from admin/packages/styles/README.md rename to admin-vben/packages/styles/README.md diff --git a/admin/packages/styles/package.json b/admin-vben/packages/styles/package.json similarity index 100% rename from admin/packages/styles/package.json rename to admin-vben/packages/styles/package.json diff --git a/admin/packages/styles/src/antd/index.css b/admin-vben/packages/styles/src/antd/index.css similarity index 100% rename from admin/packages/styles/src/antd/index.css rename to admin-vben/packages/styles/src/antd/index.css diff --git a/admin/packages/styles/src/ele/index.css b/admin-vben/packages/styles/src/ele/index.css similarity index 100% rename from admin/packages/styles/src/ele/index.css rename to admin-vben/packages/styles/src/ele/index.css diff --git a/admin/packages/styles/src/global/index.scss b/admin-vben/packages/styles/src/global/index.scss similarity index 100% rename from admin/packages/styles/src/global/index.scss rename to admin-vben/packages/styles/src/global/index.scss diff --git a/admin/packages/styles/src/index.ts b/admin-vben/packages/styles/src/index.ts similarity index 100% rename from admin/packages/styles/src/index.ts rename to admin-vben/packages/styles/src/index.ts diff --git a/admin/packages/styles/src/naive/index.css b/admin-vben/packages/styles/src/naive/index.css similarity index 100% rename from admin/packages/styles/src/naive/index.css rename to admin-vben/packages/styles/src/naive/index.css diff --git a/admin/packages/styles/tsconfig.json b/admin-vben/packages/styles/tsconfig.json similarity index 100% rename from admin/packages/styles/tsconfig.json rename to admin-vben/packages/styles/tsconfig.json diff --git a/admin/packages/types/README.md b/admin-vben/packages/types/README.md similarity index 100% rename from admin/packages/types/README.md rename to admin-vben/packages/types/README.md diff --git a/admin/packages/types/global.d.ts b/admin-vben/packages/types/global.d.ts similarity index 100% rename from admin/packages/types/global.d.ts rename to admin-vben/packages/types/global.d.ts diff --git a/admin/packages/types/package.json b/admin-vben/packages/types/package.json similarity index 100% rename from admin/packages/types/package.json rename to admin-vben/packages/types/package.json diff --git a/admin/packages/types/src/index.ts b/admin-vben/packages/types/src/index.ts similarity index 100% rename from admin/packages/types/src/index.ts rename to admin-vben/packages/types/src/index.ts diff --git a/admin/packages/types/src/user.ts b/admin-vben/packages/types/src/user.ts similarity index 100% rename from admin/packages/types/src/user.ts rename to admin-vben/packages/types/src/user.ts diff --git a/admin/packages/types/tsconfig.json b/admin-vben/packages/types/tsconfig.json similarity index 100% rename from admin/packages/types/tsconfig.json rename to admin-vben/packages/types/tsconfig.json diff --git a/admin/packages/utils/README.md b/admin-vben/packages/utils/README.md similarity index 100% rename from admin/packages/utils/README.md rename to admin-vben/packages/utils/README.md diff --git a/admin/packages/utils/package.json b/admin-vben/packages/utils/package.json similarity index 100% rename from admin/packages/utils/package.json rename to admin-vben/packages/utils/package.json diff --git a/admin/packages/utils/src/helpers/__tests__/find-menu-by-path.test.ts b/admin-vben/packages/utils/src/helpers/__tests__/find-menu-by-path.test.ts similarity index 100% rename from admin/packages/utils/src/helpers/__tests__/find-menu-by-path.test.ts rename to admin-vben/packages/utils/src/helpers/__tests__/find-menu-by-path.test.ts diff --git a/admin/packages/utils/src/helpers/__tests__/generate-menus.test.ts b/admin-vben/packages/utils/src/helpers/__tests__/generate-menus.test.ts similarity index 100% rename from admin/packages/utils/src/helpers/__tests__/generate-menus.test.ts rename to admin-vben/packages/utils/src/helpers/__tests__/generate-menus.test.ts diff --git a/admin/packages/utils/src/helpers/__tests__/generate-routes-frontend.test.ts b/admin-vben/packages/utils/src/helpers/__tests__/generate-routes-frontend.test.ts similarity index 100% rename from admin/packages/utils/src/helpers/__tests__/generate-routes-frontend.test.ts rename to admin-vben/packages/utils/src/helpers/__tests__/generate-routes-frontend.test.ts diff --git a/admin/packages/utils/src/helpers/__tests__/merge-route-modules.test.ts b/admin-vben/packages/utils/src/helpers/__tests__/merge-route-modules.test.ts similarity index 100% rename from admin/packages/utils/src/helpers/__tests__/merge-route-modules.test.ts rename to admin-vben/packages/utils/src/helpers/__tests__/merge-route-modules.test.ts diff --git a/admin/packages/utils/src/helpers/find-menu-by-path.ts b/admin-vben/packages/utils/src/helpers/find-menu-by-path.ts similarity index 100% rename from admin/packages/utils/src/helpers/find-menu-by-path.ts rename to admin-vben/packages/utils/src/helpers/find-menu-by-path.ts diff --git a/admin/packages/utils/src/helpers/generate-menus.ts b/admin-vben/packages/utils/src/helpers/generate-menus.ts similarity index 100% rename from admin/packages/utils/src/helpers/generate-menus.ts rename to admin-vben/packages/utils/src/helpers/generate-menus.ts diff --git a/admin/packages/utils/src/helpers/generate-routes-backend.ts b/admin-vben/packages/utils/src/helpers/generate-routes-backend.ts similarity index 100% rename from admin/packages/utils/src/helpers/generate-routes-backend.ts rename to admin-vben/packages/utils/src/helpers/generate-routes-backend.ts diff --git a/admin/packages/utils/src/helpers/generate-routes-frontend.ts b/admin-vben/packages/utils/src/helpers/generate-routes-frontend.ts similarity index 100% rename from admin/packages/utils/src/helpers/generate-routes-frontend.ts rename to admin-vben/packages/utils/src/helpers/generate-routes-frontend.ts diff --git a/admin/packages/utils/src/helpers/get-popup-container.ts b/admin-vben/packages/utils/src/helpers/get-popup-container.ts similarity index 100% rename from admin/packages/utils/src/helpers/get-popup-container.ts rename to admin-vben/packages/utils/src/helpers/get-popup-container.ts diff --git a/admin/packages/utils/src/helpers/index.ts b/admin-vben/packages/utils/src/helpers/index.ts similarity index 100% rename from admin/packages/utils/src/helpers/index.ts rename to admin-vben/packages/utils/src/helpers/index.ts diff --git a/admin/packages/utils/src/helpers/merge-route-modules.ts b/admin-vben/packages/utils/src/helpers/merge-route-modules.ts similarity index 100% rename from admin/packages/utils/src/helpers/merge-route-modules.ts rename to admin-vben/packages/utils/src/helpers/merge-route-modules.ts diff --git a/admin/packages/utils/src/helpers/reset-routes.ts b/admin-vben/packages/utils/src/helpers/reset-routes.ts similarity index 100% rename from admin/packages/utils/src/helpers/reset-routes.ts rename to admin-vben/packages/utils/src/helpers/reset-routes.ts diff --git a/admin/packages/utils/src/helpers/unmount-global-loading.ts b/admin-vben/packages/utils/src/helpers/unmount-global-loading.ts similarity index 100% rename from admin/packages/utils/src/helpers/unmount-global-loading.ts rename to admin-vben/packages/utils/src/helpers/unmount-global-loading.ts diff --git a/admin/packages/utils/src/index.ts b/admin-vben/packages/utils/src/index.ts similarity index 100% rename from admin/packages/utils/src/index.ts rename to admin-vben/packages/utils/src/index.ts diff --git a/admin/packages/utils/tsconfig.json b/admin-vben/packages/utils/tsconfig.json similarity index 100% rename from admin/packages/utils/tsconfig.json rename to admin-vben/packages/utils/tsconfig.json diff --git a/admin/playground/.env.analyze b/admin-vben/playground/.env.analyze similarity index 100% rename from admin/playground/.env.analyze rename to admin-vben/playground/.env.analyze diff --git a/admin/playground/.env.development b/admin-vben/playground/.env.development similarity index 100% rename from admin/playground/.env.development rename to admin-vben/playground/.env.development diff --git a/admin/playground/.env.production b/admin-vben/playground/.env.production similarity index 100% rename from admin/playground/.env.production rename to admin-vben/playground/.env.production diff --git a/admin/playground/__tests__/e2e/auth-login.spec.ts b/admin-vben/playground/__tests__/e2e/auth-login.spec.ts similarity index 100% rename from admin/playground/__tests__/e2e/auth-login.spec.ts rename to admin-vben/playground/__tests__/e2e/auth-login.spec.ts diff --git a/admin/playground/__tests__/e2e/common/auth.ts b/admin-vben/playground/__tests__/e2e/common/auth.ts similarity index 100% rename from admin/playground/__tests__/e2e/common/auth.ts rename to admin-vben/playground/__tests__/e2e/common/auth.ts diff --git a/admin/playground/index.html b/admin-vben/playground/index.html similarity index 100% rename from admin/playground/index.html rename to admin-vben/playground/index.html diff --git a/admin/playground/package.json b/admin-vben/playground/package.json similarity index 100% rename from admin/playground/package.json rename to admin-vben/playground/package.json diff --git a/admin/playground/playwright.config.ts b/admin-vben/playground/playwright.config.ts similarity index 100% rename from admin/playground/playwright.config.ts rename to admin-vben/playground/playwright.config.ts diff --git a/admin/playground/postcss.config.mjs b/admin-vben/playground/postcss.config.mjs similarity index 100% rename from admin/playground/postcss.config.mjs rename to admin-vben/playground/postcss.config.mjs diff --git a/admin/playground/public/favicon.ico b/admin-vben/playground/public/favicon.ico similarity index 100% rename from admin/playground/public/favicon.ico rename to admin-vben/playground/public/favicon.ico diff --git a/admin/playground/src/adapter/component/index.ts b/admin-vben/playground/src/adapter/component/index.ts similarity index 100% rename from admin/playground/src/adapter/component/index.ts rename to admin-vben/playground/src/adapter/component/index.ts diff --git a/admin/playground/src/adapter/form.ts b/admin-vben/playground/src/adapter/form.ts similarity index 100% rename from admin/playground/src/adapter/form.ts rename to admin-vben/playground/src/adapter/form.ts diff --git a/admin/playground/src/adapter/vxe-table.ts b/admin-vben/playground/src/adapter/vxe-table.ts similarity index 100% rename from admin/playground/src/adapter/vxe-table.ts rename to admin-vben/playground/src/adapter/vxe-table.ts diff --git a/admin/playground/src/api/core/auth.ts b/admin-vben/playground/src/api/core/auth.ts similarity index 100% rename from admin/playground/src/api/core/auth.ts rename to admin-vben/playground/src/api/core/auth.ts diff --git a/admin/playground/src/api/core/index.ts b/admin-vben/playground/src/api/core/index.ts similarity index 100% rename from admin/playground/src/api/core/index.ts rename to admin-vben/playground/src/api/core/index.ts diff --git a/admin/playground/src/api/core/menu.ts b/admin-vben/playground/src/api/core/menu.ts similarity index 100% rename from admin/playground/src/api/core/menu.ts rename to admin-vben/playground/src/api/core/menu.ts diff --git a/admin/playground/src/api/core/user.ts b/admin-vben/playground/src/api/core/user.ts similarity index 100% rename from admin/playground/src/api/core/user.ts rename to admin-vben/playground/src/api/core/user.ts diff --git a/admin/playground/src/api/examples/download.ts b/admin-vben/playground/src/api/examples/download.ts similarity index 100% rename from admin/playground/src/api/examples/download.ts rename to admin-vben/playground/src/api/examples/download.ts diff --git a/admin/playground/src/api/examples/index.ts b/admin-vben/playground/src/api/examples/index.ts similarity index 100% rename from admin/playground/src/api/examples/index.ts rename to admin-vben/playground/src/api/examples/index.ts diff --git a/admin/playground/src/api/examples/json-bigint.ts b/admin-vben/playground/src/api/examples/json-bigint.ts similarity index 100% rename from admin/playground/src/api/examples/json-bigint.ts rename to admin-vben/playground/src/api/examples/json-bigint.ts diff --git a/admin/playground/src/api/examples/params.ts b/admin-vben/playground/src/api/examples/params.ts similarity index 100% rename from admin/playground/src/api/examples/params.ts rename to admin-vben/playground/src/api/examples/params.ts diff --git a/admin/playground/src/api/examples/status.ts b/admin-vben/playground/src/api/examples/status.ts similarity index 100% rename from admin/playground/src/api/examples/status.ts rename to admin-vben/playground/src/api/examples/status.ts diff --git a/admin/playground/src/api/examples/table.ts b/admin-vben/playground/src/api/examples/table.ts similarity index 100% rename from admin/playground/src/api/examples/table.ts rename to admin-vben/playground/src/api/examples/table.ts diff --git a/admin/playground/src/api/examples/upload.ts b/admin-vben/playground/src/api/examples/upload.ts similarity index 100% rename from admin/playground/src/api/examples/upload.ts rename to admin-vben/playground/src/api/examples/upload.ts diff --git a/admin/playground/src/api/index.ts b/admin-vben/playground/src/api/index.ts similarity index 100% rename from admin/playground/src/api/index.ts rename to admin-vben/playground/src/api/index.ts diff --git a/admin/playground/src/api/request.ts b/admin-vben/playground/src/api/request.ts similarity index 100% rename from admin/playground/src/api/request.ts rename to admin-vben/playground/src/api/request.ts diff --git a/admin/playground/src/api/system/dept.ts b/admin-vben/playground/src/api/system/dept.ts similarity index 100% rename from admin/playground/src/api/system/dept.ts rename to admin-vben/playground/src/api/system/dept.ts diff --git a/admin/playground/src/api/system/index.ts b/admin-vben/playground/src/api/system/index.ts similarity index 100% rename from admin/playground/src/api/system/index.ts rename to admin-vben/playground/src/api/system/index.ts diff --git a/admin/playground/src/api/system/menu.ts b/admin-vben/playground/src/api/system/menu.ts similarity index 100% rename from admin/playground/src/api/system/menu.ts rename to admin-vben/playground/src/api/system/menu.ts diff --git a/admin/playground/src/api/system/role.ts b/admin-vben/playground/src/api/system/role.ts similarity index 100% rename from admin/playground/src/api/system/role.ts rename to admin-vben/playground/src/api/system/role.ts diff --git a/admin/playground/src/app.vue b/admin-vben/playground/src/app.vue similarity index 100% rename from admin/playground/src/app.vue rename to admin-vben/playground/src/app.vue diff --git a/admin/playground/src/bootstrap.ts b/admin-vben/playground/src/bootstrap.ts similarity index 100% rename from admin/playground/src/bootstrap.ts rename to admin-vben/playground/src/bootstrap.ts diff --git a/admin/playground/src/layouts/auth.vue b/admin-vben/playground/src/layouts/auth.vue similarity index 100% rename from admin/playground/src/layouts/auth.vue rename to admin-vben/playground/src/layouts/auth.vue diff --git a/admin/playground/src/layouts/basic.vue b/admin-vben/playground/src/layouts/basic.vue similarity index 100% rename from admin/playground/src/layouts/basic.vue rename to admin-vben/playground/src/layouts/basic.vue diff --git a/admin/playground/src/layouts/index.ts b/admin-vben/playground/src/layouts/index.ts similarity index 100% rename from admin/playground/src/layouts/index.ts rename to admin-vben/playground/src/layouts/index.ts diff --git a/admin/playground/src/locales/README.md b/admin-vben/playground/src/locales/README.md similarity index 100% rename from admin/playground/src/locales/README.md rename to admin-vben/playground/src/locales/README.md diff --git a/admin/playground/src/locales/index.ts b/admin-vben/playground/src/locales/index.ts similarity index 100% rename from admin/playground/src/locales/index.ts rename to admin-vben/playground/src/locales/index.ts diff --git a/admin/playground/src/locales/langs/en-US/demos.json b/admin-vben/playground/src/locales/langs/en-US/demos.json similarity index 100% rename from admin/playground/src/locales/langs/en-US/demos.json rename to admin-vben/playground/src/locales/langs/en-US/demos.json diff --git a/admin/playground/src/locales/langs/en-US/examples.json b/admin-vben/playground/src/locales/langs/en-US/examples.json similarity index 100% rename from admin/playground/src/locales/langs/en-US/examples.json rename to admin-vben/playground/src/locales/langs/en-US/examples.json diff --git a/admin/playground/src/locales/langs/en-US/page.json b/admin-vben/playground/src/locales/langs/en-US/page.json similarity index 100% rename from admin/playground/src/locales/langs/en-US/page.json rename to admin-vben/playground/src/locales/langs/en-US/page.json diff --git a/admin/playground/src/locales/langs/en-US/system.json b/admin-vben/playground/src/locales/langs/en-US/system.json similarity index 100% rename from admin/playground/src/locales/langs/en-US/system.json rename to admin-vben/playground/src/locales/langs/en-US/system.json diff --git a/admin/playground/src/locales/langs/zh-CN/demos.json b/admin-vben/playground/src/locales/langs/zh-CN/demos.json similarity index 100% rename from admin/playground/src/locales/langs/zh-CN/demos.json rename to admin-vben/playground/src/locales/langs/zh-CN/demos.json diff --git a/admin/playground/src/locales/langs/zh-CN/examples.json b/admin-vben/playground/src/locales/langs/zh-CN/examples.json similarity index 100% rename from admin/playground/src/locales/langs/zh-CN/examples.json rename to admin-vben/playground/src/locales/langs/zh-CN/examples.json diff --git a/admin/playground/src/locales/langs/zh-CN/page.json b/admin-vben/playground/src/locales/langs/zh-CN/page.json similarity index 100% rename from admin/playground/src/locales/langs/zh-CN/page.json rename to admin-vben/playground/src/locales/langs/zh-CN/page.json diff --git a/admin/playground/src/locales/langs/zh-CN/system.json b/admin-vben/playground/src/locales/langs/zh-CN/system.json similarity index 100% rename from admin/playground/src/locales/langs/zh-CN/system.json rename to admin-vben/playground/src/locales/langs/zh-CN/system.json diff --git a/admin/playground/src/main.ts b/admin-vben/playground/src/main.ts similarity index 100% rename from admin/playground/src/main.ts rename to admin-vben/playground/src/main.ts diff --git a/admin/playground/src/preferences.ts b/admin-vben/playground/src/preferences.ts similarity index 100% rename from admin/playground/src/preferences.ts rename to admin-vben/playground/src/preferences.ts diff --git a/admin/playground/src/router/access.ts b/admin-vben/playground/src/router/access.ts similarity index 100% rename from admin/playground/src/router/access.ts rename to admin-vben/playground/src/router/access.ts diff --git a/admin/playground/src/router/guard.ts b/admin-vben/playground/src/router/guard.ts similarity index 100% rename from admin/playground/src/router/guard.ts rename to admin-vben/playground/src/router/guard.ts diff --git a/admin/playground/src/router/index.ts b/admin-vben/playground/src/router/index.ts similarity index 100% rename from admin/playground/src/router/index.ts rename to admin-vben/playground/src/router/index.ts diff --git a/admin/playground/src/router/routes/core.ts b/admin-vben/playground/src/router/routes/core.ts similarity index 100% rename from admin/playground/src/router/routes/core.ts rename to admin-vben/playground/src/router/routes/core.ts diff --git a/admin/playground/src/router/routes/index.ts b/admin-vben/playground/src/router/routes/index.ts similarity index 100% rename from admin/playground/src/router/routes/index.ts rename to admin-vben/playground/src/router/routes/index.ts diff --git a/admin/playground/src/router/routes/modules/dashboard.ts b/admin-vben/playground/src/router/routes/modules/dashboard.ts similarity index 100% rename from admin/playground/src/router/routes/modules/dashboard.ts rename to admin-vben/playground/src/router/routes/modules/dashboard.ts diff --git a/admin/playground/src/router/routes/modules/demos.ts b/admin-vben/playground/src/router/routes/modules/demos.ts similarity index 100% rename from admin/playground/src/router/routes/modules/demos.ts rename to admin-vben/playground/src/router/routes/modules/demos.ts diff --git a/admin/playground/src/router/routes/modules/examples.ts b/admin-vben/playground/src/router/routes/modules/examples.ts similarity index 100% rename from admin/playground/src/router/routes/modules/examples.ts rename to admin-vben/playground/src/router/routes/modules/examples.ts diff --git a/admin/playground/src/router/routes/modules/system.ts b/admin-vben/playground/src/router/routes/modules/system.ts similarity index 100% rename from admin/playground/src/router/routes/modules/system.ts rename to admin-vben/playground/src/router/routes/modules/system.ts diff --git a/admin/playground/src/router/routes/modules/vben.ts b/admin-vben/playground/src/router/routes/modules/vben.ts similarity index 100% rename from admin/playground/src/router/routes/modules/vben.ts rename to admin-vben/playground/src/router/routes/modules/vben.ts diff --git a/admin/playground/src/store/auth.ts b/admin-vben/playground/src/store/auth.ts similarity index 100% rename from admin/playground/src/store/auth.ts rename to admin-vben/playground/src/store/auth.ts diff --git a/admin/playground/src/store/index.ts b/admin-vben/playground/src/store/index.ts similarity index 100% rename from admin/playground/src/store/index.ts rename to admin-vben/playground/src/store/index.ts diff --git a/admin/playground/src/views/_core/README.md b/admin-vben/playground/src/views/_core/README.md similarity index 100% rename from admin/playground/src/views/_core/README.md rename to admin-vben/playground/src/views/_core/README.md diff --git a/admin/playground/src/views/_core/about/index.vue b/admin-vben/playground/src/views/_core/about/index.vue similarity index 100% rename from admin/playground/src/views/_core/about/index.vue rename to admin-vben/playground/src/views/_core/about/index.vue diff --git a/admin/playground/src/views/_core/authentication/code-login.vue b/admin-vben/playground/src/views/_core/authentication/code-login.vue similarity index 100% rename from admin/playground/src/views/_core/authentication/code-login.vue rename to admin-vben/playground/src/views/_core/authentication/code-login.vue diff --git a/admin/playground/src/views/_core/authentication/forget-password.vue b/admin-vben/playground/src/views/_core/authentication/forget-password.vue similarity index 100% rename from admin/playground/src/views/_core/authentication/forget-password.vue rename to admin-vben/playground/src/views/_core/authentication/forget-password.vue diff --git a/admin/playground/src/views/_core/authentication/login.vue b/admin-vben/playground/src/views/_core/authentication/login.vue similarity index 100% rename from admin/playground/src/views/_core/authentication/login.vue rename to admin-vben/playground/src/views/_core/authentication/login.vue diff --git a/admin/playground/src/views/_core/authentication/qrcode-login.vue b/admin-vben/playground/src/views/_core/authentication/qrcode-login.vue similarity index 100% rename from admin/playground/src/views/_core/authentication/qrcode-login.vue rename to admin-vben/playground/src/views/_core/authentication/qrcode-login.vue diff --git a/admin/playground/src/views/_core/authentication/register.vue b/admin-vben/playground/src/views/_core/authentication/register.vue similarity index 100% rename from admin/playground/src/views/_core/authentication/register.vue rename to admin-vben/playground/src/views/_core/authentication/register.vue diff --git a/admin/playground/src/views/_core/fallback/coming-soon.vue b/admin-vben/playground/src/views/_core/fallback/coming-soon.vue similarity index 100% rename from admin/playground/src/views/_core/fallback/coming-soon.vue rename to admin-vben/playground/src/views/_core/fallback/coming-soon.vue diff --git a/admin/playground/src/views/_core/fallback/forbidden.vue b/admin-vben/playground/src/views/_core/fallback/forbidden.vue similarity index 100% rename from admin/playground/src/views/_core/fallback/forbidden.vue rename to admin-vben/playground/src/views/_core/fallback/forbidden.vue diff --git a/admin/playground/src/views/_core/fallback/internal-error.vue b/admin-vben/playground/src/views/_core/fallback/internal-error.vue similarity index 100% rename from admin/playground/src/views/_core/fallback/internal-error.vue rename to admin-vben/playground/src/views/_core/fallback/internal-error.vue diff --git a/admin/playground/src/views/_core/fallback/not-found.vue b/admin-vben/playground/src/views/_core/fallback/not-found.vue similarity index 100% rename from admin/playground/src/views/_core/fallback/not-found.vue rename to admin-vben/playground/src/views/_core/fallback/not-found.vue diff --git a/admin/playground/src/views/_core/fallback/offline.vue b/admin-vben/playground/src/views/_core/fallback/offline.vue similarity index 100% rename from admin/playground/src/views/_core/fallback/offline.vue rename to admin-vben/playground/src/views/_core/fallback/offline.vue diff --git a/admin/playground/src/views/dashboard/analytics/analytics-trends.vue b/admin-vben/playground/src/views/dashboard/analytics/analytics-trends.vue similarity index 100% rename from admin/playground/src/views/dashboard/analytics/analytics-trends.vue rename to admin-vben/playground/src/views/dashboard/analytics/analytics-trends.vue diff --git a/admin/playground/src/views/dashboard/analytics/analytics-visits-data.vue b/admin-vben/playground/src/views/dashboard/analytics/analytics-visits-data.vue similarity index 100% rename from admin/playground/src/views/dashboard/analytics/analytics-visits-data.vue rename to admin-vben/playground/src/views/dashboard/analytics/analytics-visits-data.vue diff --git a/admin/playground/src/views/dashboard/analytics/analytics-visits-sales.vue b/admin-vben/playground/src/views/dashboard/analytics/analytics-visits-sales.vue similarity index 100% rename from admin/playground/src/views/dashboard/analytics/analytics-visits-sales.vue rename to admin-vben/playground/src/views/dashboard/analytics/analytics-visits-sales.vue diff --git a/admin/playground/src/views/dashboard/analytics/analytics-visits-source.vue b/admin-vben/playground/src/views/dashboard/analytics/analytics-visits-source.vue similarity index 100% rename from admin/playground/src/views/dashboard/analytics/analytics-visits-source.vue rename to admin-vben/playground/src/views/dashboard/analytics/analytics-visits-source.vue diff --git a/admin/playground/src/views/dashboard/analytics/analytics-visits.vue b/admin-vben/playground/src/views/dashboard/analytics/analytics-visits.vue similarity index 100% rename from admin/playground/src/views/dashboard/analytics/analytics-visits.vue rename to admin-vben/playground/src/views/dashboard/analytics/analytics-visits.vue diff --git a/admin/playground/src/views/dashboard/analytics/index.vue b/admin-vben/playground/src/views/dashboard/analytics/index.vue similarity index 100% rename from admin/playground/src/views/dashboard/analytics/index.vue rename to admin-vben/playground/src/views/dashboard/analytics/index.vue diff --git a/admin/playground/src/views/dashboard/workspace/index.vue b/admin-vben/playground/src/views/dashboard/workspace/index.vue similarity index 100% rename from admin/playground/src/views/dashboard/workspace/index.vue rename to admin-vben/playground/src/views/dashboard/workspace/index.vue diff --git a/admin/playground/src/views/demos/access/admin-visible.vue b/admin-vben/playground/src/views/demos/access/admin-visible.vue similarity index 100% rename from admin/playground/src/views/demos/access/admin-visible.vue rename to admin-vben/playground/src/views/demos/access/admin-visible.vue diff --git a/admin/playground/src/views/demos/access/button-control.vue b/admin-vben/playground/src/views/demos/access/button-control.vue similarity index 100% rename from admin/playground/src/views/demos/access/button-control.vue rename to admin-vben/playground/src/views/demos/access/button-control.vue diff --git a/admin/playground/src/views/demos/access/index.vue b/admin-vben/playground/src/views/demos/access/index.vue similarity index 100% rename from admin/playground/src/views/demos/access/index.vue rename to admin-vben/playground/src/views/demos/access/index.vue diff --git a/admin/playground/src/views/demos/access/menu-visible-403.vue b/admin-vben/playground/src/views/demos/access/menu-visible-403.vue similarity index 100% rename from admin/playground/src/views/demos/access/menu-visible-403.vue rename to admin-vben/playground/src/views/demos/access/menu-visible-403.vue diff --git a/admin/playground/src/views/demos/access/super-visible.vue b/admin-vben/playground/src/views/demos/access/super-visible.vue similarity index 100% rename from admin/playground/src/views/demos/access/super-visible.vue rename to admin-vben/playground/src/views/demos/access/super-visible.vue diff --git a/admin/playground/src/views/demos/access/user-visible.vue b/admin-vben/playground/src/views/demos/access/user-visible.vue similarity index 100% rename from admin/playground/src/views/demos/access/user-visible.vue rename to admin-vben/playground/src/views/demos/access/user-visible.vue diff --git a/admin/playground/src/views/demos/active-icon/index.vue b/admin-vben/playground/src/views/demos/active-icon/index.vue similarity index 100% rename from admin/playground/src/views/demos/active-icon/index.vue rename to admin-vben/playground/src/views/demos/active-icon/index.vue diff --git a/admin/playground/src/views/demos/badge/index.vue b/admin-vben/playground/src/views/demos/badge/index.vue similarity index 100% rename from admin/playground/src/views/demos/badge/index.vue rename to admin-vben/playground/src/views/demos/badge/index.vue diff --git a/admin/playground/src/views/demos/breadcrumb/lateral-detail.vue b/admin-vben/playground/src/views/demos/breadcrumb/lateral-detail.vue similarity index 100% rename from admin/playground/src/views/demos/breadcrumb/lateral-detail.vue rename to admin-vben/playground/src/views/demos/breadcrumb/lateral-detail.vue diff --git a/admin/playground/src/views/demos/breadcrumb/lateral.vue b/admin-vben/playground/src/views/demos/breadcrumb/lateral.vue similarity index 100% rename from admin/playground/src/views/demos/breadcrumb/lateral.vue rename to admin-vben/playground/src/views/demos/breadcrumb/lateral.vue diff --git a/admin/playground/src/views/demos/breadcrumb/level-detail.vue b/admin-vben/playground/src/views/demos/breadcrumb/level-detail.vue similarity index 100% rename from admin/playground/src/views/demos/breadcrumb/level-detail.vue rename to admin-vben/playground/src/views/demos/breadcrumb/level-detail.vue diff --git a/admin/playground/src/views/demos/features/clipboard/index.vue b/admin-vben/playground/src/views/demos/features/clipboard/index.vue similarity index 100% rename from admin/playground/src/views/demos/features/clipboard/index.vue rename to admin-vben/playground/src/views/demos/features/clipboard/index.vue diff --git a/admin/playground/src/views/demos/features/file-download/base64.ts b/admin-vben/playground/src/views/demos/features/file-download/base64.ts similarity index 100% rename from admin/playground/src/views/demos/features/file-download/base64.ts rename to admin-vben/playground/src/views/demos/features/file-download/base64.ts diff --git a/admin/playground/src/views/demos/features/file-download/index.vue b/admin-vben/playground/src/views/demos/features/file-download/index.vue similarity index 100% rename from admin/playground/src/views/demos/features/file-download/index.vue rename to admin-vben/playground/src/views/demos/features/file-download/index.vue diff --git a/admin/playground/src/views/demos/features/full-screen/index.vue b/admin-vben/playground/src/views/demos/features/full-screen/index.vue similarity index 100% rename from admin/playground/src/views/demos/features/full-screen/index.vue rename to admin-vben/playground/src/views/demos/features/full-screen/index.vue diff --git a/admin/playground/src/views/demos/features/hide-menu-children/children.vue b/admin-vben/playground/src/views/demos/features/hide-menu-children/children.vue similarity index 100% rename from admin/playground/src/views/demos/features/hide-menu-children/children.vue rename to admin-vben/playground/src/views/demos/features/hide-menu-children/children.vue diff --git a/admin/playground/src/views/demos/features/hide-menu-children/parent.vue b/admin-vben/playground/src/views/demos/features/hide-menu-children/parent.vue similarity index 100% rename from admin/playground/src/views/demos/features/hide-menu-children/parent.vue rename to admin-vben/playground/src/views/demos/features/hide-menu-children/parent.vue diff --git a/admin/playground/src/views/demos/features/icons/index.vue b/admin-vben/playground/src/views/demos/features/icons/index.vue similarity index 100% rename from admin/playground/src/views/demos/features/icons/index.vue rename to admin-vben/playground/src/views/demos/features/icons/index.vue diff --git a/admin/playground/src/views/demos/features/json-bigint/index.vue b/admin-vben/playground/src/views/demos/features/json-bigint/index.vue similarity index 100% rename from admin/playground/src/views/demos/features/json-bigint/index.vue rename to admin-vben/playground/src/views/demos/features/json-bigint/index.vue diff --git a/admin/playground/src/views/demos/features/login-expired/index.vue b/admin-vben/playground/src/views/demos/features/login-expired/index.vue similarity index 100% rename from admin/playground/src/views/demos/features/login-expired/index.vue rename to admin-vben/playground/src/views/demos/features/login-expired/index.vue diff --git a/admin/playground/src/views/demos/features/menu-query/index.vue b/admin-vben/playground/src/views/demos/features/menu-query/index.vue similarity index 100% rename from admin/playground/src/views/demos/features/menu-query/index.vue rename to admin-vben/playground/src/views/demos/features/menu-query/index.vue diff --git a/admin/playground/src/views/demos/features/new-window/index.vue b/admin-vben/playground/src/views/demos/features/new-window/index.vue similarity index 100% rename from admin/playground/src/views/demos/features/new-window/index.vue rename to admin-vben/playground/src/views/demos/features/new-window/index.vue diff --git a/admin/playground/src/views/demos/features/request-params-serializer/index.vue b/admin-vben/playground/src/views/demos/features/request-params-serializer/index.vue similarity index 100% rename from admin/playground/src/views/demos/features/request-params-serializer/index.vue rename to admin-vben/playground/src/views/demos/features/request-params-serializer/index.vue diff --git a/admin/playground/src/views/demos/features/tabs/index.vue b/admin-vben/playground/src/views/demos/features/tabs/index.vue similarity index 100% rename from admin/playground/src/views/demos/features/tabs/index.vue rename to admin-vben/playground/src/views/demos/features/tabs/index.vue diff --git a/admin/playground/src/views/demos/features/tabs/tab-detail.vue b/admin-vben/playground/src/views/demos/features/tabs/tab-detail.vue similarity index 100% rename from admin/playground/src/views/demos/features/tabs/tab-detail.vue rename to admin-vben/playground/src/views/demos/features/tabs/tab-detail.vue diff --git a/admin/playground/src/views/demos/features/vue-query/concurrency-caching.vue b/admin-vben/playground/src/views/demos/features/vue-query/concurrency-caching.vue similarity index 100% rename from admin/playground/src/views/demos/features/vue-query/concurrency-caching.vue rename to admin-vben/playground/src/views/demos/features/vue-query/concurrency-caching.vue diff --git a/admin/playground/src/views/demos/features/vue-query/index.vue b/admin-vben/playground/src/views/demos/features/vue-query/index.vue similarity index 100% rename from admin/playground/src/views/demos/features/vue-query/index.vue rename to admin-vben/playground/src/views/demos/features/vue-query/index.vue diff --git a/admin/playground/src/views/demos/features/vue-query/infinite-queries.vue b/admin-vben/playground/src/views/demos/features/vue-query/infinite-queries.vue similarity index 100% rename from admin/playground/src/views/demos/features/vue-query/infinite-queries.vue rename to admin-vben/playground/src/views/demos/features/vue-query/infinite-queries.vue diff --git a/admin/playground/src/views/demos/features/vue-query/paginated-queries.vue b/admin-vben/playground/src/views/demos/features/vue-query/paginated-queries.vue similarity index 100% rename from admin/playground/src/views/demos/features/vue-query/paginated-queries.vue rename to admin-vben/playground/src/views/demos/features/vue-query/paginated-queries.vue diff --git a/admin/playground/src/views/demos/features/vue-query/query-retries.vue b/admin-vben/playground/src/views/demos/features/vue-query/query-retries.vue similarity index 100% rename from admin/playground/src/views/demos/features/vue-query/query-retries.vue rename to admin-vben/playground/src/views/demos/features/vue-query/query-retries.vue diff --git a/admin/playground/src/views/demos/features/vue-query/typing.ts b/admin-vben/playground/src/views/demos/features/vue-query/typing.ts similarity index 100% rename from admin/playground/src/views/demos/features/vue-query/typing.ts rename to admin-vben/playground/src/views/demos/features/vue-query/typing.ts diff --git a/admin/playground/src/views/demos/features/watermark/index.vue b/admin-vben/playground/src/views/demos/features/watermark/index.vue similarity index 100% rename from admin/playground/src/views/demos/features/watermark/index.vue rename to admin-vben/playground/src/views/demos/features/watermark/index.vue diff --git a/admin/playground/src/views/demos/nested/menu-1.vue b/admin-vben/playground/src/views/demos/nested/menu-1.vue similarity index 100% rename from admin/playground/src/views/demos/nested/menu-1.vue rename to admin-vben/playground/src/views/demos/nested/menu-1.vue diff --git a/admin/playground/src/views/demos/nested/menu-2-1.vue b/admin-vben/playground/src/views/demos/nested/menu-2-1.vue similarity index 100% rename from admin/playground/src/views/demos/nested/menu-2-1.vue rename to admin-vben/playground/src/views/demos/nested/menu-2-1.vue diff --git a/admin/playground/src/views/demos/nested/menu-3-1.vue b/admin-vben/playground/src/views/demos/nested/menu-3-1.vue similarity index 100% rename from admin/playground/src/views/demos/nested/menu-3-1.vue rename to admin-vben/playground/src/views/demos/nested/menu-3-1.vue diff --git a/admin/playground/src/views/demos/nested/menu-3-2-1.vue b/admin-vben/playground/src/views/demos/nested/menu-3-2-1.vue similarity index 100% rename from admin/playground/src/views/demos/nested/menu-3-2-1.vue rename to admin-vben/playground/src/views/demos/nested/menu-3-2-1.vue diff --git a/admin/playground/src/views/examples/button-group/index.vue b/admin-vben/playground/src/views/examples/button-group/index.vue similarity index 100% rename from admin/playground/src/views/examples/button-group/index.vue rename to admin-vben/playground/src/views/examples/button-group/index.vue diff --git a/admin/playground/src/views/examples/captcha/point-selection-captcha.vue b/admin-vben/playground/src/views/examples/captcha/point-selection-captcha.vue similarity index 100% rename from admin/playground/src/views/examples/captcha/point-selection-captcha.vue rename to admin-vben/playground/src/views/examples/captcha/point-selection-captcha.vue diff --git a/admin/playground/src/views/examples/captcha/slider-captcha.vue b/admin-vben/playground/src/views/examples/captcha/slider-captcha.vue similarity index 100% rename from admin/playground/src/views/examples/captcha/slider-captcha.vue rename to admin-vben/playground/src/views/examples/captcha/slider-captcha.vue diff --git a/admin/playground/src/views/examples/captcha/slider-rotate-captcha.vue b/admin-vben/playground/src/views/examples/captcha/slider-rotate-captcha.vue similarity index 100% rename from admin/playground/src/views/examples/captcha/slider-rotate-captcha.vue rename to admin-vben/playground/src/views/examples/captcha/slider-rotate-captcha.vue diff --git a/admin/playground/src/views/examples/captcha/slider-translate-captcha.vue b/admin-vben/playground/src/views/examples/captcha/slider-translate-captcha.vue similarity index 100% rename from admin/playground/src/views/examples/captcha/slider-translate-captcha.vue rename to admin-vben/playground/src/views/examples/captcha/slider-translate-captcha.vue diff --git a/admin/playground/src/views/examples/count-to/index.vue b/admin-vben/playground/src/views/examples/count-to/index.vue similarity index 100% rename from admin/playground/src/views/examples/count-to/index.vue rename to admin-vben/playground/src/views/examples/count-to/index.vue diff --git a/admin/playground/src/views/examples/doc-button.vue b/admin-vben/playground/src/views/examples/doc-button.vue similarity index 100% rename from admin/playground/src/views/examples/doc-button.vue rename to admin-vben/playground/src/views/examples/doc-button.vue diff --git a/admin/playground/src/views/examples/drawer/auto-height-demo.vue b/admin-vben/playground/src/views/examples/drawer/auto-height-demo.vue similarity index 100% rename from admin/playground/src/views/examples/drawer/auto-height-demo.vue rename to admin-vben/playground/src/views/examples/drawer/auto-height-demo.vue diff --git a/admin/playground/src/views/examples/drawer/base-demo.vue b/admin-vben/playground/src/views/examples/drawer/base-demo.vue similarity index 100% rename from admin/playground/src/views/examples/drawer/base-demo.vue rename to admin-vben/playground/src/views/examples/drawer/base-demo.vue diff --git a/admin/playground/src/views/examples/drawer/dynamic-demo.vue b/admin-vben/playground/src/views/examples/drawer/dynamic-demo.vue similarity index 100% rename from admin/playground/src/views/examples/drawer/dynamic-demo.vue rename to admin-vben/playground/src/views/examples/drawer/dynamic-demo.vue diff --git a/admin/playground/src/views/examples/drawer/form-drawer-demo.vue b/admin-vben/playground/src/views/examples/drawer/form-drawer-demo.vue similarity index 100% rename from admin/playground/src/views/examples/drawer/form-drawer-demo.vue rename to admin-vben/playground/src/views/examples/drawer/form-drawer-demo.vue diff --git a/admin/playground/src/views/examples/drawer/in-content-demo.vue b/admin-vben/playground/src/views/examples/drawer/in-content-demo.vue similarity index 100% rename from admin/playground/src/views/examples/drawer/in-content-demo.vue rename to admin-vben/playground/src/views/examples/drawer/in-content-demo.vue diff --git a/admin/playground/src/views/examples/drawer/index.vue b/admin-vben/playground/src/views/examples/drawer/index.vue similarity index 100% rename from admin/playground/src/views/examples/drawer/index.vue rename to admin-vben/playground/src/views/examples/drawer/index.vue diff --git a/admin/playground/src/views/examples/drawer/shared-data-demo.vue b/admin-vben/playground/src/views/examples/drawer/shared-data-demo.vue similarity index 100% rename from admin/playground/src/views/examples/drawer/shared-data-demo.vue rename to admin-vben/playground/src/views/examples/drawer/shared-data-demo.vue diff --git a/admin/playground/src/views/examples/ellipsis/index.vue b/admin-vben/playground/src/views/examples/ellipsis/index.vue similarity index 100% rename from admin/playground/src/views/examples/ellipsis/index.vue rename to admin-vben/playground/src/views/examples/ellipsis/index.vue diff --git a/admin/playground/src/views/examples/form/api.vue b/admin-vben/playground/src/views/examples/form/api.vue similarity index 100% rename from admin/playground/src/views/examples/form/api.vue rename to admin-vben/playground/src/views/examples/form/api.vue diff --git a/admin/playground/src/views/examples/form/basic.vue b/admin-vben/playground/src/views/examples/form/basic.vue similarity index 100% rename from admin/playground/src/views/examples/form/basic.vue rename to admin-vben/playground/src/views/examples/form/basic.vue diff --git a/admin/playground/src/views/examples/form/custom-layout.vue b/admin-vben/playground/src/views/examples/form/custom-layout.vue similarity index 100% rename from admin/playground/src/views/examples/form/custom-layout.vue rename to admin-vben/playground/src/views/examples/form/custom-layout.vue diff --git a/admin/playground/src/views/examples/form/custom.vue b/admin-vben/playground/src/views/examples/form/custom.vue similarity index 100% rename from admin/playground/src/views/examples/form/custom.vue rename to admin-vben/playground/src/views/examples/form/custom.vue diff --git a/admin/playground/src/views/examples/form/dynamic.vue b/admin-vben/playground/src/views/examples/form/dynamic.vue similarity index 100% rename from admin/playground/src/views/examples/form/dynamic.vue rename to admin-vben/playground/src/views/examples/form/dynamic.vue diff --git a/admin/playground/src/views/examples/form/merge.vue b/admin-vben/playground/src/views/examples/form/merge.vue similarity index 100% rename from admin/playground/src/views/examples/form/merge.vue rename to admin-vben/playground/src/views/examples/form/merge.vue diff --git a/admin/playground/src/views/examples/form/modules/two-fields.vue b/admin-vben/playground/src/views/examples/form/modules/two-fields.vue similarity index 100% rename from admin/playground/src/views/examples/form/modules/two-fields.vue rename to admin-vben/playground/src/views/examples/form/modules/two-fields.vue diff --git a/admin/playground/src/views/examples/form/query.vue b/admin-vben/playground/src/views/examples/form/query.vue similarity index 100% rename from admin/playground/src/views/examples/form/query.vue rename to admin-vben/playground/src/views/examples/form/query.vue diff --git a/admin/playground/src/views/examples/form/rules.vue b/admin-vben/playground/src/views/examples/form/rules.vue similarity index 100% rename from admin/playground/src/views/examples/form/rules.vue rename to admin-vben/playground/src/views/examples/form/rules.vue diff --git a/admin/playground/src/views/examples/form/scroll-to-error-test.vue b/admin-vben/playground/src/views/examples/form/scroll-to-error-test.vue similarity index 100% rename from admin/playground/src/views/examples/form/scroll-to-error-test.vue rename to admin-vben/playground/src/views/examples/form/scroll-to-error-test.vue diff --git a/admin/playground/src/views/examples/json-viewer/data.ts b/admin-vben/playground/src/views/examples/json-viewer/data.ts similarity index 100% rename from admin/playground/src/views/examples/json-viewer/data.ts rename to admin-vben/playground/src/views/examples/json-viewer/data.ts diff --git a/admin/playground/src/views/examples/json-viewer/index.vue b/admin-vben/playground/src/views/examples/json-viewer/index.vue similarity index 100% rename from admin/playground/src/views/examples/json-viewer/index.vue rename to admin-vben/playground/src/views/examples/json-viewer/index.vue diff --git a/admin/playground/src/views/examples/layout/col-page.vue b/admin-vben/playground/src/views/examples/layout/col-page.vue similarity index 100% rename from admin/playground/src/views/examples/layout/col-page.vue rename to admin-vben/playground/src/views/examples/layout/col-page.vue diff --git a/admin/playground/src/views/examples/loading/index.vue b/admin-vben/playground/src/views/examples/loading/index.vue similarity index 100% rename from admin/playground/src/views/examples/loading/index.vue rename to admin-vben/playground/src/views/examples/loading/index.vue diff --git a/admin/playground/src/views/examples/modal/auto-height-demo.vue b/admin-vben/playground/src/views/examples/modal/auto-height-demo.vue similarity index 100% rename from admin/playground/src/views/examples/modal/auto-height-demo.vue rename to admin-vben/playground/src/views/examples/modal/auto-height-demo.vue diff --git a/admin/playground/src/views/examples/modal/base-demo.vue b/admin-vben/playground/src/views/examples/modal/base-demo.vue similarity index 100% rename from admin/playground/src/views/examples/modal/base-demo.vue rename to admin-vben/playground/src/views/examples/modal/base-demo.vue diff --git a/admin/playground/src/views/examples/modal/blur-demo.vue b/admin-vben/playground/src/views/examples/modal/blur-demo.vue similarity index 100% rename from admin/playground/src/views/examples/modal/blur-demo.vue rename to admin-vben/playground/src/views/examples/modal/blur-demo.vue diff --git a/admin/playground/src/views/examples/modal/drag-demo.vue b/admin-vben/playground/src/views/examples/modal/drag-demo.vue similarity index 100% rename from admin/playground/src/views/examples/modal/drag-demo.vue rename to admin-vben/playground/src/views/examples/modal/drag-demo.vue diff --git a/admin/playground/src/views/examples/modal/dynamic-demo.vue b/admin-vben/playground/src/views/examples/modal/dynamic-demo.vue similarity index 100% rename from admin/playground/src/views/examples/modal/dynamic-demo.vue rename to admin-vben/playground/src/views/examples/modal/dynamic-demo.vue diff --git a/admin/playground/src/views/examples/modal/form-modal-demo.vue b/admin-vben/playground/src/views/examples/modal/form-modal-demo.vue similarity index 100% rename from admin/playground/src/views/examples/modal/form-modal-demo.vue rename to admin-vben/playground/src/views/examples/modal/form-modal-demo.vue diff --git a/admin/playground/src/views/examples/modal/in-content-demo.vue b/admin-vben/playground/src/views/examples/modal/in-content-demo.vue similarity index 100% rename from admin/playground/src/views/examples/modal/in-content-demo.vue rename to admin-vben/playground/src/views/examples/modal/in-content-demo.vue diff --git a/admin/playground/src/views/examples/modal/index.vue b/admin-vben/playground/src/views/examples/modal/index.vue similarity index 100% rename from admin/playground/src/views/examples/modal/index.vue rename to admin-vben/playground/src/views/examples/modal/index.vue diff --git a/admin/playground/src/views/examples/modal/nested-demo.vue b/admin-vben/playground/src/views/examples/modal/nested-demo.vue similarity index 100% rename from admin/playground/src/views/examples/modal/nested-demo.vue rename to admin-vben/playground/src/views/examples/modal/nested-demo.vue diff --git a/admin/playground/src/views/examples/modal/shared-data-demo.vue b/admin-vben/playground/src/views/examples/modal/shared-data-demo.vue similarity index 100% rename from admin/playground/src/views/examples/modal/shared-data-demo.vue rename to admin-vben/playground/src/views/examples/modal/shared-data-demo.vue diff --git a/admin/playground/src/views/examples/motion/index.vue b/admin-vben/playground/src/views/examples/motion/index.vue similarity index 100% rename from admin/playground/src/views/examples/motion/index.vue rename to admin-vben/playground/src/views/examples/motion/index.vue diff --git a/admin/playground/src/views/examples/resize/basic.vue b/admin-vben/playground/src/views/examples/resize/basic.vue similarity index 100% rename from admin/playground/src/views/examples/resize/basic.vue rename to admin-vben/playground/src/views/examples/resize/basic.vue diff --git a/admin/playground/src/views/examples/tippy/index.vue b/admin-vben/playground/src/views/examples/tippy/index.vue similarity index 100% rename from admin/playground/src/views/examples/tippy/index.vue rename to admin-vben/playground/src/views/examples/tippy/index.vue diff --git a/admin/playground/src/views/examples/vxe-table/basic.vue b/admin-vben/playground/src/views/examples/vxe-table/basic.vue similarity index 100% rename from admin/playground/src/views/examples/vxe-table/basic.vue rename to admin-vben/playground/src/views/examples/vxe-table/basic.vue diff --git a/admin/playground/src/views/examples/vxe-table/custom-cell.vue b/admin-vben/playground/src/views/examples/vxe-table/custom-cell.vue similarity index 100% rename from admin/playground/src/views/examples/vxe-table/custom-cell.vue rename to admin-vben/playground/src/views/examples/vxe-table/custom-cell.vue diff --git a/admin/playground/src/views/examples/vxe-table/edit-cell.vue b/admin-vben/playground/src/views/examples/vxe-table/edit-cell.vue similarity index 100% rename from admin/playground/src/views/examples/vxe-table/edit-cell.vue rename to admin-vben/playground/src/views/examples/vxe-table/edit-cell.vue diff --git a/admin/playground/src/views/examples/vxe-table/edit-row.vue b/admin-vben/playground/src/views/examples/vxe-table/edit-row.vue similarity index 100% rename from admin/playground/src/views/examples/vxe-table/edit-row.vue rename to admin-vben/playground/src/views/examples/vxe-table/edit-row.vue diff --git a/admin/playground/src/views/examples/vxe-table/fixed.vue b/admin-vben/playground/src/views/examples/vxe-table/fixed.vue similarity index 100% rename from admin/playground/src/views/examples/vxe-table/fixed.vue rename to admin-vben/playground/src/views/examples/vxe-table/fixed.vue diff --git a/admin/playground/src/views/examples/vxe-table/form.vue b/admin-vben/playground/src/views/examples/vxe-table/form.vue similarity index 100% rename from admin/playground/src/views/examples/vxe-table/form.vue rename to admin-vben/playground/src/views/examples/vxe-table/form.vue diff --git a/admin/playground/src/views/examples/vxe-table/remote.vue b/admin-vben/playground/src/views/examples/vxe-table/remote.vue similarity index 100% rename from admin/playground/src/views/examples/vxe-table/remote.vue rename to admin-vben/playground/src/views/examples/vxe-table/remote.vue diff --git a/admin/playground/src/views/examples/vxe-table/table-data.ts b/admin-vben/playground/src/views/examples/vxe-table/table-data.ts similarity index 100% rename from admin/playground/src/views/examples/vxe-table/table-data.ts rename to admin-vben/playground/src/views/examples/vxe-table/table-data.ts diff --git a/admin/playground/src/views/examples/vxe-table/tree.vue b/admin-vben/playground/src/views/examples/vxe-table/tree.vue similarity index 100% rename from admin/playground/src/views/examples/vxe-table/tree.vue rename to admin-vben/playground/src/views/examples/vxe-table/tree.vue diff --git a/admin/playground/src/views/examples/vxe-table/virtual.vue b/admin-vben/playground/src/views/examples/vxe-table/virtual.vue similarity index 100% rename from admin/playground/src/views/examples/vxe-table/virtual.vue rename to admin-vben/playground/src/views/examples/vxe-table/virtual.vue diff --git a/admin/playground/src/views/system/dept/data.ts b/admin-vben/playground/src/views/system/dept/data.ts similarity index 100% rename from admin/playground/src/views/system/dept/data.ts rename to admin-vben/playground/src/views/system/dept/data.ts diff --git a/admin/playground/src/views/system/dept/list.vue b/admin-vben/playground/src/views/system/dept/list.vue similarity index 100% rename from admin/playground/src/views/system/dept/list.vue rename to admin-vben/playground/src/views/system/dept/list.vue diff --git a/admin/playground/src/views/system/dept/modules/form.vue b/admin-vben/playground/src/views/system/dept/modules/form.vue similarity index 100% rename from admin/playground/src/views/system/dept/modules/form.vue rename to admin-vben/playground/src/views/system/dept/modules/form.vue diff --git a/admin/playground/src/views/system/menu/data.ts b/admin-vben/playground/src/views/system/menu/data.ts similarity index 100% rename from admin/playground/src/views/system/menu/data.ts rename to admin-vben/playground/src/views/system/menu/data.ts diff --git a/admin/playground/src/views/system/menu/list.vue b/admin-vben/playground/src/views/system/menu/list.vue similarity index 100% rename from admin/playground/src/views/system/menu/list.vue rename to admin-vben/playground/src/views/system/menu/list.vue diff --git a/admin/playground/src/views/system/menu/modules/form.vue b/admin-vben/playground/src/views/system/menu/modules/form.vue similarity index 100% rename from admin/playground/src/views/system/menu/modules/form.vue rename to admin-vben/playground/src/views/system/menu/modules/form.vue diff --git a/admin/playground/src/views/system/role/data.ts b/admin-vben/playground/src/views/system/role/data.ts similarity index 100% rename from admin/playground/src/views/system/role/data.ts rename to admin-vben/playground/src/views/system/role/data.ts diff --git a/admin/playground/src/views/system/role/list.vue b/admin-vben/playground/src/views/system/role/list.vue similarity index 100% rename from admin/playground/src/views/system/role/list.vue rename to admin-vben/playground/src/views/system/role/list.vue diff --git a/admin/playground/src/views/system/role/modules/form.vue b/admin-vben/playground/src/views/system/role/modules/form.vue similarity index 100% rename from admin/playground/src/views/system/role/modules/form.vue rename to admin-vben/playground/src/views/system/role/modules/form.vue diff --git a/admin/playground/tailwind.config.mjs b/admin-vben/playground/tailwind.config.mjs similarity index 100% rename from admin/playground/tailwind.config.mjs rename to admin-vben/playground/tailwind.config.mjs diff --git a/admin/playground/tsconfig.json b/admin-vben/playground/tsconfig.json similarity index 100% rename from admin/playground/tsconfig.json rename to admin-vben/playground/tsconfig.json diff --git a/admin/playground/tsconfig.node.json b/admin-vben/playground/tsconfig.node.json similarity index 100% rename from admin/playground/tsconfig.node.json rename to admin-vben/playground/tsconfig.node.json diff --git a/admin/playground/vite.config.mts b/admin-vben/playground/vite.config.mts similarity index 100% rename from admin/playground/vite.config.mts rename to admin-vben/playground/vite.config.mts diff --git a/admin/pnpm-lock.yaml b/admin-vben/pnpm-lock.yaml similarity index 100% rename from admin/pnpm-lock.yaml rename to admin-vben/pnpm-lock.yaml diff --git a/admin/pnpm-workspace.yaml b/admin-vben/pnpm-workspace.yaml similarity index 100% rename from admin/pnpm-workspace.yaml rename to admin-vben/pnpm-workspace.yaml diff --git a/admin/postcss.config.cjs b/admin-vben/postcss.config.cjs similarity index 100% rename from admin/postcss.config.cjs rename to admin-vben/postcss.config.cjs diff --git a/admin/public/niucloud.ico b/admin-vben/public/niucloud.ico similarity index 100% rename from admin/public/niucloud.ico rename to admin-vben/public/niucloud.ico diff --git a/admin/public/ueditor/dialogs/anchor/anchor.html b/admin-vben/public/ueditor/dialogs/anchor/anchor.html similarity index 100% rename from admin/public/ueditor/dialogs/anchor/anchor.html rename to admin-vben/public/ueditor/dialogs/anchor/anchor.html diff --git a/admin/public/ueditor/dialogs/attachment/attachment.css b/admin-vben/public/ueditor/dialogs/attachment/attachment.css similarity index 100% rename from admin/public/ueditor/dialogs/attachment/attachment.css rename to admin-vben/public/ueditor/dialogs/attachment/attachment.css diff --git a/admin/public/ueditor/dialogs/attachment/attachment.html b/admin-vben/public/ueditor/dialogs/attachment/attachment.html similarity index 100% rename from admin/public/ueditor/dialogs/attachment/attachment.html rename to admin-vben/public/ueditor/dialogs/attachment/attachment.html diff --git a/admin/public/ueditor/dialogs/attachment/attachment.js b/admin-vben/public/ueditor/dialogs/attachment/attachment.js similarity index 100% rename from admin/public/ueditor/dialogs/attachment/attachment.js rename to admin-vben/public/ueditor/dialogs/attachment/attachment.js diff --git a/admin/public/ueditor/dialogs/attachment/images/alignicon.gif b/admin-vben/public/ueditor/dialogs/attachment/images/alignicon.gif similarity index 100% rename from admin/public/ueditor/dialogs/attachment/images/alignicon.gif rename to admin-vben/public/ueditor/dialogs/attachment/images/alignicon.gif diff --git a/admin/public/ueditor/dialogs/attachment/images/alignicon.png b/admin-vben/public/ueditor/dialogs/attachment/images/alignicon.png similarity index 100% rename from admin/public/ueditor/dialogs/attachment/images/alignicon.png rename to admin-vben/public/ueditor/dialogs/attachment/images/alignicon.png diff --git a/admin/public/ueditor/dialogs/attachment/images/bg.png b/admin-vben/public/ueditor/dialogs/attachment/images/bg.png similarity index 100% rename from admin/public/ueditor/dialogs/attachment/images/bg.png rename to admin-vben/public/ueditor/dialogs/attachment/images/bg.png diff --git a/admin/public/ueditor/dialogs/attachment/images/file-icons.gif b/admin-vben/public/ueditor/dialogs/attachment/images/file-icons.gif similarity index 100% rename from admin/public/ueditor/dialogs/attachment/images/file-icons.gif rename to admin-vben/public/ueditor/dialogs/attachment/images/file-icons.gif diff --git a/admin/public/ueditor/dialogs/attachment/images/file-icons.png b/admin-vben/public/ueditor/dialogs/attachment/images/file-icons.png similarity index 100% rename from admin/public/ueditor/dialogs/attachment/images/file-icons.png rename to admin-vben/public/ueditor/dialogs/attachment/images/file-icons.png diff --git a/admin/public/ueditor/dialogs/attachment/images/icons.gif b/admin-vben/public/ueditor/dialogs/attachment/images/icons.gif similarity index 100% rename from admin/public/ueditor/dialogs/attachment/images/icons.gif rename to admin-vben/public/ueditor/dialogs/attachment/images/icons.gif diff --git a/admin/public/ueditor/dialogs/attachment/images/icons.png b/admin-vben/public/ueditor/dialogs/attachment/images/icons.png similarity index 100% rename from admin/public/ueditor/dialogs/attachment/images/icons.png rename to admin-vben/public/ueditor/dialogs/attachment/images/icons.png diff --git a/admin/public/ueditor/dialogs/attachment/images/image.png b/admin-vben/public/ueditor/dialogs/attachment/images/image.png similarity index 100% rename from admin/public/ueditor/dialogs/attachment/images/image.png rename to admin-vben/public/ueditor/dialogs/attachment/images/image.png diff --git a/admin/public/ueditor/dialogs/attachment/images/progress.png b/admin-vben/public/ueditor/dialogs/attachment/images/progress.png similarity index 100% rename from admin/public/ueditor/dialogs/attachment/images/progress.png rename to admin-vben/public/ueditor/dialogs/attachment/images/progress.png diff --git a/admin/public/ueditor/dialogs/attachment/images/success.gif b/admin-vben/public/ueditor/dialogs/attachment/images/success.gif similarity index 100% rename from admin/public/ueditor/dialogs/attachment/images/success.gif rename to admin-vben/public/ueditor/dialogs/attachment/images/success.gif diff --git a/admin/public/ueditor/dialogs/attachment/images/success.png b/admin-vben/public/ueditor/dialogs/attachment/images/success.png similarity index 100% rename from admin/public/ueditor/dialogs/attachment/images/success.png rename to admin-vben/public/ueditor/dialogs/attachment/images/success.png diff --git a/admin/public/ueditor/dialogs/audio/audio.css b/admin-vben/public/ueditor/dialogs/audio/audio.css similarity index 100% rename from admin/public/ueditor/dialogs/audio/audio.css rename to admin-vben/public/ueditor/dialogs/audio/audio.css diff --git a/admin/public/ueditor/dialogs/audio/audio.html b/admin-vben/public/ueditor/dialogs/audio/audio.html similarity index 100% rename from admin/public/ueditor/dialogs/audio/audio.html rename to admin-vben/public/ueditor/dialogs/audio/audio.html diff --git a/admin/public/ueditor/dialogs/audio/audio.js b/admin-vben/public/ueditor/dialogs/audio/audio.js similarity index 100% rename from admin/public/ueditor/dialogs/audio/audio.js rename to admin-vben/public/ueditor/dialogs/audio/audio.js diff --git a/admin/public/ueditor/dialogs/audio/images/bg.png b/admin-vben/public/ueditor/dialogs/audio/images/bg.png similarity index 100% rename from admin/public/ueditor/dialogs/audio/images/bg.png rename to admin-vben/public/ueditor/dialogs/audio/images/bg.png diff --git a/admin/public/ueditor/dialogs/audio/images/center_focus.jpg b/admin-vben/public/ueditor/dialogs/audio/images/center_focus.jpg similarity index 100% rename from admin/public/ueditor/dialogs/audio/images/center_focus.jpg rename to admin-vben/public/ueditor/dialogs/audio/images/center_focus.jpg diff --git a/admin/public/ueditor/dialogs/audio/images/file-icons.gif b/admin-vben/public/ueditor/dialogs/audio/images/file-icons.gif similarity index 100% rename from admin/public/ueditor/dialogs/audio/images/file-icons.gif rename to admin-vben/public/ueditor/dialogs/audio/images/file-icons.gif diff --git a/admin/public/ueditor/dialogs/audio/images/file-icons.png b/admin-vben/public/ueditor/dialogs/audio/images/file-icons.png similarity index 100% rename from admin/public/ueditor/dialogs/audio/images/file-icons.png rename to admin-vben/public/ueditor/dialogs/audio/images/file-icons.png diff --git a/admin/public/ueditor/dialogs/audio/images/icons.gif b/admin-vben/public/ueditor/dialogs/audio/images/icons.gif similarity index 100% rename from admin/public/ueditor/dialogs/audio/images/icons.gif rename to admin-vben/public/ueditor/dialogs/audio/images/icons.gif diff --git a/admin/public/ueditor/dialogs/audio/images/icons.png b/admin-vben/public/ueditor/dialogs/audio/images/icons.png similarity index 100% rename from admin/public/ueditor/dialogs/audio/images/icons.png rename to admin-vben/public/ueditor/dialogs/audio/images/icons.png diff --git a/admin/public/ueditor/dialogs/audio/images/image.png b/admin-vben/public/ueditor/dialogs/audio/images/image.png similarity index 100% rename from admin/public/ueditor/dialogs/audio/images/image.png rename to admin-vben/public/ueditor/dialogs/audio/images/image.png diff --git a/admin/public/ueditor/dialogs/audio/images/left_focus.jpg b/admin-vben/public/ueditor/dialogs/audio/images/left_focus.jpg similarity index 100% rename from admin/public/ueditor/dialogs/audio/images/left_focus.jpg rename to admin-vben/public/ueditor/dialogs/audio/images/left_focus.jpg diff --git a/admin/public/ueditor/dialogs/audio/images/none_focus.jpg b/admin-vben/public/ueditor/dialogs/audio/images/none_focus.jpg similarity index 100% rename from admin/public/ueditor/dialogs/audio/images/none_focus.jpg rename to admin-vben/public/ueditor/dialogs/audio/images/none_focus.jpg diff --git a/admin/public/ueditor/dialogs/audio/images/progress.png b/admin-vben/public/ueditor/dialogs/audio/images/progress.png similarity index 100% rename from admin/public/ueditor/dialogs/audio/images/progress.png rename to admin-vben/public/ueditor/dialogs/audio/images/progress.png diff --git a/admin/public/ueditor/dialogs/audio/images/right_focus.jpg b/admin-vben/public/ueditor/dialogs/audio/images/right_focus.jpg similarity index 100% rename from admin/public/ueditor/dialogs/audio/images/right_focus.jpg rename to admin-vben/public/ueditor/dialogs/audio/images/right_focus.jpg diff --git a/admin/public/ueditor/dialogs/audio/images/success.gif b/admin-vben/public/ueditor/dialogs/audio/images/success.gif similarity index 100% rename from admin/public/ueditor/dialogs/audio/images/success.gif rename to admin-vben/public/ueditor/dialogs/audio/images/success.gif diff --git a/admin/public/ueditor/dialogs/audio/images/success.png b/admin-vben/public/ueditor/dialogs/audio/images/success.png similarity index 100% rename from admin/public/ueditor/dialogs/audio/images/success.png rename to admin-vben/public/ueditor/dialogs/audio/images/success.png diff --git a/admin/public/ueditor/dialogs/background/background.css b/admin-vben/public/ueditor/dialogs/background/background.css similarity index 100% rename from admin/public/ueditor/dialogs/background/background.css rename to admin-vben/public/ueditor/dialogs/background/background.css diff --git a/admin/public/ueditor/dialogs/background/background.html b/admin-vben/public/ueditor/dialogs/background/background.html similarity index 100% rename from admin/public/ueditor/dialogs/background/background.html rename to admin-vben/public/ueditor/dialogs/background/background.html diff --git a/admin/public/ueditor/dialogs/background/background.js b/admin-vben/public/ueditor/dialogs/background/background.js similarity index 100% rename from admin/public/ueditor/dialogs/background/background.js rename to admin-vben/public/ueditor/dialogs/background/background.js diff --git a/admin/public/ueditor/dialogs/background/images/bg.png b/admin-vben/public/ueditor/dialogs/background/images/bg.png similarity index 100% rename from admin/public/ueditor/dialogs/background/images/bg.png rename to admin-vben/public/ueditor/dialogs/background/images/bg.png diff --git a/admin/public/ueditor/dialogs/background/images/success.png b/admin-vben/public/ueditor/dialogs/background/images/success.png similarity index 100% rename from admin/public/ueditor/dialogs/background/images/success.png rename to admin-vben/public/ueditor/dialogs/background/images/success.png diff --git a/admin/public/ueditor/dialogs/contentimport/contentimport.html b/admin-vben/public/ueditor/dialogs/contentimport/contentimport.html similarity index 100% rename from admin/public/ueditor/dialogs/contentimport/contentimport.html rename to admin-vben/public/ueditor/dialogs/contentimport/contentimport.html diff --git a/admin/public/ueditor/dialogs/contentimport/contentimport.js b/admin-vben/public/ueditor/dialogs/contentimport/contentimport.js similarity index 100% rename from admin/public/ueditor/dialogs/contentimport/contentimport.js rename to admin-vben/public/ueditor/dialogs/contentimport/contentimport.js diff --git a/admin/public/ueditor/dialogs/emotion/emotion.css b/admin-vben/public/ueditor/dialogs/emotion/emotion.css similarity index 100% rename from admin/public/ueditor/dialogs/emotion/emotion.css rename to admin-vben/public/ueditor/dialogs/emotion/emotion.css diff --git a/admin/public/ueditor/dialogs/emotion/emotion.html b/admin-vben/public/ueditor/dialogs/emotion/emotion.html similarity index 100% rename from admin/public/ueditor/dialogs/emotion/emotion.html rename to admin-vben/public/ueditor/dialogs/emotion/emotion.html diff --git a/admin/public/ueditor/dialogs/emotion/emotion.js b/admin-vben/public/ueditor/dialogs/emotion/emotion.js similarity index 100% rename from admin/public/ueditor/dialogs/emotion/emotion.js rename to admin-vben/public/ueditor/dialogs/emotion/emotion.js diff --git a/admin/public/ueditor/dialogs/emotion/images/0.gif b/admin-vben/public/ueditor/dialogs/emotion/images/0.gif similarity index 100% rename from admin/public/ueditor/dialogs/emotion/images/0.gif rename to admin-vben/public/ueditor/dialogs/emotion/images/0.gif diff --git a/admin/public/ueditor/dialogs/emotion/images/bface.gif b/admin-vben/public/ueditor/dialogs/emotion/images/bface.gif similarity index 100% rename from admin/public/ueditor/dialogs/emotion/images/bface.gif rename to admin-vben/public/ueditor/dialogs/emotion/images/bface.gif diff --git a/admin/public/ueditor/dialogs/emotion/images/cface.gif b/admin-vben/public/ueditor/dialogs/emotion/images/cface.gif similarity index 100% rename from admin/public/ueditor/dialogs/emotion/images/cface.gif rename to admin-vben/public/ueditor/dialogs/emotion/images/cface.gif diff --git a/admin/public/ueditor/dialogs/emotion/images/fface.gif b/admin-vben/public/ueditor/dialogs/emotion/images/fface.gif similarity index 100% rename from admin/public/ueditor/dialogs/emotion/images/fface.gif rename to admin-vben/public/ueditor/dialogs/emotion/images/fface.gif diff --git a/admin/public/ueditor/dialogs/emotion/images/jxface2.gif b/admin-vben/public/ueditor/dialogs/emotion/images/jxface2.gif similarity index 100% rename from admin/public/ueditor/dialogs/emotion/images/jxface2.gif rename to admin-vben/public/ueditor/dialogs/emotion/images/jxface2.gif diff --git a/admin/public/ueditor/dialogs/emotion/images/neweditor-tab-bg.png b/admin-vben/public/ueditor/dialogs/emotion/images/neweditor-tab-bg.png similarity index 100% rename from admin/public/ueditor/dialogs/emotion/images/neweditor-tab-bg.png rename to admin-vben/public/ueditor/dialogs/emotion/images/neweditor-tab-bg.png diff --git a/admin/public/ueditor/dialogs/emotion/images/tface.gif b/admin-vben/public/ueditor/dialogs/emotion/images/tface.gif similarity index 100% rename from admin/public/ueditor/dialogs/emotion/images/tface.gif rename to admin-vben/public/ueditor/dialogs/emotion/images/tface.gif diff --git a/admin/public/ueditor/dialogs/emotion/images/wface.gif b/admin-vben/public/ueditor/dialogs/emotion/images/wface.gif similarity index 100% rename from admin/public/ueditor/dialogs/emotion/images/wface.gif rename to admin-vben/public/ueditor/dialogs/emotion/images/wface.gif diff --git a/admin/public/ueditor/dialogs/emotion/images/yface.gif b/admin-vben/public/ueditor/dialogs/emotion/images/yface.gif similarity index 100% rename from admin/public/ueditor/dialogs/emotion/images/yface.gif rename to admin-vben/public/ueditor/dialogs/emotion/images/yface.gif diff --git a/admin/public/ueditor/dialogs/formula/formula.html b/admin-vben/public/ueditor/dialogs/formula/formula.html similarity index 100% rename from admin/public/ueditor/dialogs/formula/formula.html rename to admin-vben/public/ueditor/dialogs/formula/formula.html diff --git a/admin/public/ueditor/dialogs/formula/formula.js b/admin-vben/public/ueditor/dialogs/formula/formula.js similarity index 100% rename from admin/public/ueditor/dialogs/formula/formula.js rename to admin-vben/public/ueditor/dialogs/formula/formula.js diff --git a/admin/public/ueditor/dialogs/help/help.css b/admin-vben/public/ueditor/dialogs/help/help.css similarity index 100% rename from admin/public/ueditor/dialogs/help/help.css rename to admin-vben/public/ueditor/dialogs/help/help.css diff --git a/admin/public/ueditor/dialogs/help/help.html b/admin-vben/public/ueditor/dialogs/help/help.html similarity index 100% rename from admin/public/ueditor/dialogs/help/help.html rename to admin-vben/public/ueditor/dialogs/help/help.html diff --git a/admin/public/ueditor/dialogs/help/help.js b/admin-vben/public/ueditor/dialogs/help/help.js similarity index 100% rename from admin/public/ueditor/dialogs/help/help.js rename to admin-vben/public/ueditor/dialogs/help/help.js diff --git a/admin/public/ueditor/dialogs/image/image.css b/admin-vben/public/ueditor/dialogs/image/image.css similarity index 100% rename from admin/public/ueditor/dialogs/image/image.css rename to admin-vben/public/ueditor/dialogs/image/image.css diff --git a/admin/public/ueditor/dialogs/image/image.html b/admin-vben/public/ueditor/dialogs/image/image.html similarity index 100% rename from admin/public/ueditor/dialogs/image/image.html rename to admin-vben/public/ueditor/dialogs/image/image.html diff --git a/admin/public/ueditor/dialogs/image/image.js b/admin-vben/public/ueditor/dialogs/image/image.js similarity index 100% rename from admin/public/ueditor/dialogs/image/image.js rename to admin-vben/public/ueditor/dialogs/image/image.js diff --git a/admin/public/ueditor/dialogs/image/images/alignicon.jpg b/admin-vben/public/ueditor/dialogs/image/images/alignicon.jpg similarity index 100% rename from admin/public/ueditor/dialogs/image/images/alignicon.jpg rename to admin-vben/public/ueditor/dialogs/image/images/alignicon.jpg diff --git a/admin/public/ueditor/dialogs/image/images/bg.png b/admin-vben/public/ueditor/dialogs/image/images/bg.png similarity index 100% rename from admin/public/ueditor/dialogs/image/images/bg.png rename to admin-vben/public/ueditor/dialogs/image/images/bg.png diff --git a/admin/public/ueditor/dialogs/image/images/icons.gif b/admin-vben/public/ueditor/dialogs/image/images/icons.gif similarity index 100% rename from admin/public/ueditor/dialogs/image/images/icons.gif rename to admin-vben/public/ueditor/dialogs/image/images/icons.gif diff --git a/admin/public/ueditor/dialogs/image/images/icons.png b/admin-vben/public/ueditor/dialogs/image/images/icons.png similarity index 100% rename from admin/public/ueditor/dialogs/image/images/icons.png rename to admin-vben/public/ueditor/dialogs/image/images/icons.png diff --git a/admin/public/ueditor/dialogs/image/images/image.png b/admin-vben/public/ueditor/dialogs/image/images/image.png similarity index 100% rename from admin/public/ueditor/dialogs/image/images/image.png rename to admin-vben/public/ueditor/dialogs/image/images/image.png diff --git a/admin/public/ueditor/dialogs/image/images/progress.png b/admin-vben/public/ueditor/dialogs/image/images/progress.png similarity index 100% rename from admin/public/ueditor/dialogs/image/images/progress.png rename to admin-vben/public/ueditor/dialogs/image/images/progress.png diff --git a/admin/public/ueditor/dialogs/image/images/success.gif b/admin-vben/public/ueditor/dialogs/image/images/success.gif similarity index 100% rename from admin/public/ueditor/dialogs/image/images/success.gif rename to admin-vben/public/ueditor/dialogs/image/images/success.gif diff --git a/admin/public/ueditor/dialogs/image/images/success.png b/admin-vben/public/ueditor/dialogs/image/images/success.png similarity index 100% rename from admin/public/ueditor/dialogs/image/images/success.png rename to admin-vben/public/ueditor/dialogs/image/images/success.png diff --git a/admin/public/ueditor/dialogs/insertframe/insertframe.html b/admin-vben/public/ueditor/dialogs/insertframe/insertframe.html similarity index 100% rename from admin/public/ueditor/dialogs/insertframe/insertframe.html rename to admin-vben/public/ueditor/dialogs/insertframe/insertframe.html diff --git a/admin/public/ueditor/dialogs/internal.js b/admin-vben/public/ueditor/dialogs/internal.js similarity index 100% rename from admin/public/ueditor/dialogs/internal.js rename to admin-vben/public/ueditor/dialogs/internal.js diff --git a/admin/public/ueditor/dialogs/link/link.html b/admin-vben/public/ueditor/dialogs/link/link.html similarity index 100% rename from admin/public/ueditor/dialogs/link/link.html rename to admin-vben/public/ueditor/dialogs/link/link.html diff --git a/admin/public/ueditor/dialogs/preview/preview.html b/admin-vben/public/ueditor/dialogs/preview/preview.html similarity index 100% rename from admin/public/ueditor/dialogs/preview/preview.html rename to admin-vben/public/ueditor/dialogs/preview/preview.html diff --git a/admin/public/ueditor/dialogs/scrawl/images/addimg.png b/admin-vben/public/ueditor/dialogs/scrawl/images/addimg.png similarity index 100% rename from admin/public/ueditor/dialogs/scrawl/images/addimg.png rename to admin-vben/public/ueditor/dialogs/scrawl/images/addimg.png diff --git a/admin/public/ueditor/dialogs/scrawl/images/brush.png b/admin-vben/public/ueditor/dialogs/scrawl/images/brush.png similarity index 100% rename from admin/public/ueditor/dialogs/scrawl/images/brush.png rename to admin-vben/public/ueditor/dialogs/scrawl/images/brush.png diff --git a/admin/public/ueditor/dialogs/scrawl/images/delimg.png b/admin-vben/public/ueditor/dialogs/scrawl/images/delimg.png similarity index 100% rename from admin/public/ueditor/dialogs/scrawl/images/delimg.png rename to admin-vben/public/ueditor/dialogs/scrawl/images/delimg.png diff --git a/admin/public/ueditor/dialogs/scrawl/images/delimgH.png b/admin-vben/public/ueditor/dialogs/scrawl/images/delimgH.png similarity index 100% rename from admin/public/ueditor/dialogs/scrawl/images/delimgH.png rename to admin-vben/public/ueditor/dialogs/scrawl/images/delimgH.png diff --git a/admin/public/ueditor/dialogs/scrawl/images/empty.png b/admin-vben/public/ueditor/dialogs/scrawl/images/empty.png similarity index 100% rename from admin/public/ueditor/dialogs/scrawl/images/empty.png rename to admin-vben/public/ueditor/dialogs/scrawl/images/empty.png diff --git a/admin/public/ueditor/dialogs/scrawl/images/emptyH.png b/admin-vben/public/ueditor/dialogs/scrawl/images/emptyH.png similarity index 100% rename from admin/public/ueditor/dialogs/scrawl/images/emptyH.png rename to admin-vben/public/ueditor/dialogs/scrawl/images/emptyH.png diff --git a/admin/public/ueditor/dialogs/scrawl/images/eraser.png b/admin-vben/public/ueditor/dialogs/scrawl/images/eraser.png similarity index 100% rename from admin/public/ueditor/dialogs/scrawl/images/eraser.png rename to admin-vben/public/ueditor/dialogs/scrawl/images/eraser.png diff --git a/admin/public/ueditor/dialogs/scrawl/images/redo.png b/admin-vben/public/ueditor/dialogs/scrawl/images/redo.png similarity index 100% rename from admin/public/ueditor/dialogs/scrawl/images/redo.png rename to admin-vben/public/ueditor/dialogs/scrawl/images/redo.png diff --git a/admin/public/ueditor/dialogs/scrawl/images/redoH.png b/admin-vben/public/ueditor/dialogs/scrawl/images/redoH.png similarity index 100% rename from admin/public/ueditor/dialogs/scrawl/images/redoH.png rename to admin-vben/public/ueditor/dialogs/scrawl/images/redoH.png diff --git a/admin/public/ueditor/dialogs/scrawl/images/scale.png b/admin-vben/public/ueditor/dialogs/scrawl/images/scale.png similarity index 100% rename from admin/public/ueditor/dialogs/scrawl/images/scale.png rename to admin-vben/public/ueditor/dialogs/scrawl/images/scale.png diff --git a/admin/public/ueditor/dialogs/scrawl/images/scaleH.png b/admin-vben/public/ueditor/dialogs/scrawl/images/scaleH.png similarity index 100% rename from admin/public/ueditor/dialogs/scrawl/images/scaleH.png rename to admin-vben/public/ueditor/dialogs/scrawl/images/scaleH.png diff --git a/admin/public/ueditor/dialogs/scrawl/images/size.png b/admin-vben/public/ueditor/dialogs/scrawl/images/size.png similarity index 100% rename from admin/public/ueditor/dialogs/scrawl/images/size.png rename to admin-vben/public/ueditor/dialogs/scrawl/images/size.png diff --git a/admin/public/ueditor/dialogs/scrawl/images/undo.png b/admin-vben/public/ueditor/dialogs/scrawl/images/undo.png similarity index 100% rename from admin/public/ueditor/dialogs/scrawl/images/undo.png rename to admin-vben/public/ueditor/dialogs/scrawl/images/undo.png diff --git a/admin/public/ueditor/dialogs/scrawl/images/undoH.png b/admin-vben/public/ueditor/dialogs/scrawl/images/undoH.png similarity index 100% rename from admin/public/ueditor/dialogs/scrawl/images/undoH.png rename to admin-vben/public/ueditor/dialogs/scrawl/images/undoH.png diff --git a/admin/public/ueditor/dialogs/scrawl/scrawl.css b/admin-vben/public/ueditor/dialogs/scrawl/scrawl.css similarity index 100% rename from admin/public/ueditor/dialogs/scrawl/scrawl.css rename to admin-vben/public/ueditor/dialogs/scrawl/scrawl.css diff --git a/admin/public/ueditor/dialogs/scrawl/scrawl.html b/admin-vben/public/ueditor/dialogs/scrawl/scrawl.html similarity index 100% rename from admin/public/ueditor/dialogs/scrawl/scrawl.html rename to admin-vben/public/ueditor/dialogs/scrawl/scrawl.html diff --git a/admin/public/ueditor/dialogs/scrawl/scrawl.js b/admin-vben/public/ueditor/dialogs/scrawl/scrawl.js similarity index 100% rename from admin/public/ueditor/dialogs/scrawl/scrawl.js rename to admin-vben/public/ueditor/dialogs/scrawl/scrawl.js diff --git a/admin/public/ueditor/dialogs/searchreplace/searchreplace.html b/admin-vben/public/ueditor/dialogs/searchreplace/searchreplace.html similarity index 100% rename from admin/public/ueditor/dialogs/searchreplace/searchreplace.html rename to admin-vben/public/ueditor/dialogs/searchreplace/searchreplace.html diff --git a/admin/public/ueditor/dialogs/searchreplace/searchreplace.js b/admin-vben/public/ueditor/dialogs/searchreplace/searchreplace.js similarity index 100% rename from admin/public/ueditor/dialogs/searchreplace/searchreplace.js rename to admin-vben/public/ueditor/dialogs/searchreplace/searchreplace.js diff --git a/admin/public/ueditor/dialogs/spechars/spechars.html b/admin-vben/public/ueditor/dialogs/spechars/spechars.html similarity index 100% rename from admin/public/ueditor/dialogs/spechars/spechars.html rename to admin-vben/public/ueditor/dialogs/spechars/spechars.html diff --git a/admin/public/ueditor/dialogs/spechars/spechars.js b/admin-vben/public/ueditor/dialogs/spechars/spechars.js similarity index 100% rename from admin/public/ueditor/dialogs/spechars/spechars.js rename to admin-vben/public/ueditor/dialogs/spechars/spechars.js diff --git a/admin/public/ueditor/dialogs/table/dragicon.png b/admin-vben/public/ueditor/dialogs/table/dragicon.png similarity index 100% rename from admin/public/ueditor/dialogs/table/dragicon.png rename to admin-vben/public/ueditor/dialogs/table/dragicon.png diff --git a/admin/public/ueditor/dialogs/table/edittable.css b/admin-vben/public/ueditor/dialogs/table/edittable.css similarity index 100% rename from admin/public/ueditor/dialogs/table/edittable.css rename to admin-vben/public/ueditor/dialogs/table/edittable.css diff --git a/admin/public/ueditor/dialogs/table/edittable.html b/admin-vben/public/ueditor/dialogs/table/edittable.html similarity index 100% rename from admin/public/ueditor/dialogs/table/edittable.html rename to admin-vben/public/ueditor/dialogs/table/edittable.html diff --git a/admin/public/ueditor/dialogs/table/edittable.js b/admin-vben/public/ueditor/dialogs/table/edittable.js similarity index 100% rename from admin/public/ueditor/dialogs/table/edittable.js rename to admin-vben/public/ueditor/dialogs/table/edittable.js diff --git a/admin/public/ueditor/dialogs/table/edittd.html b/admin-vben/public/ueditor/dialogs/table/edittd.html similarity index 100% rename from admin/public/ueditor/dialogs/table/edittd.html rename to admin-vben/public/ueditor/dialogs/table/edittd.html diff --git a/admin/public/ueditor/dialogs/table/edittip.html b/admin-vben/public/ueditor/dialogs/table/edittip.html similarity index 100% rename from admin/public/ueditor/dialogs/table/edittip.html rename to admin-vben/public/ueditor/dialogs/table/edittip.html diff --git a/admin/public/ueditor/dialogs/template/config.js b/admin-vben/public/ueditor/dialogs/template/config.js similarity index 100% rename from admin/public/ueditor/dialogs/template/config.js rename to admin-vben/public/ueditor/dialogs/template/config.js diff --git a/admin/public/ueditor/dialogs/template/images/bg.gif b/admin-vben/public/ueditor/dialogs/template/images/bg.gif similarity index 100% rename from admin/public/ueditor/dialogs/template/images/bg.gif rename to admin-vben/public/ueditor/dialogs/template/images/bg.gif diff --git a/admin/public/ueditor/dialogs/template/images/pre0.png b/admin-vben/public/ueditor/dialogs/template/images/pre0.png similarity index 100% rename from admin/public/ueditor/dialogs/template/images/pre0.png rename to admin-vben/public/ueditor/dialogs/template/images/pre0.png diff --git a/admin/public/ueditor/dialogs/template/images/pre1.png b/admin-vben/public/ueditor/dialogs/template/images/pre1.png similarity index 100% rename from admin/public/ueditor/dialogs/template/images/pre1.png rename to admin-vben/public/ueditor/dialogs/template/images/pre1.png diff --git a/admin/public/ueditor/dialogs/template/images/pre2.png b/admin-vben/public/ueditor/dialogs/template/images/pre2.png similarity index 100% rename from admin/public/ueditor/dialogs/template/images/pre2.png rename to admin-vben/public/ueditor/dialogs/template/images/pre2.png diff --git a/admin/public/ueditor/dialogs/template/images/pre3.png b/admin-vben/public/ueditor/dialogs/template/images/pre3.png similarity index 100% rename from admin/public/ueditor/dialogs/template/images/pre3.png rename to admin-vben/public/ueditor/dialogs/template/images/pre3.png diff --git a/admin/public/ueditor/dialogs/template/images/pre4.png b/admin-vben/public/ueditor/dialogs/template/images/pre4.png similarity index 100% rename from admin/public/ueditor/dialogs/template/images/pre4.png rename to admin-vben/public/ueditor/dialogs/template/images/pre4.png diff --git a/admin/public/ueditor/dialogs/template/template.css b/admin-vben/public/ueditor/dialogs/template/template.css similarity index 100% rename from admin/public/ueditor/dialogs/template/template.css rename to admin-vben/public/ueditor/dialogs/template/template.css diff --git a/admin/public/ueditor/dialogs/template/template.html b/admin-vben/public/ueditor/dialogs/template/template.html similarity index 100% rename from admin/public/ueditor/dialogs/template/template.html rename to admin-vben/public/ueditor/dialogs/template/template.html diff --git a/admin/public/ueditor/dialogs/template/template.js b/admin-vben/public/ueditor/dialogs/template/template.js similarity index 100% rename from admin/public/ueditor/dialogs/template/template.js rename to admin-vben/public/ueditor/dialogs/template/template.js diff --git a/admin/public/ueditor/dialogs/video/images/bg.png b/admin-vben/public/ueditor/dialogs/video/images/bg.png similarity index 100% rename from admin/public/ueditor/dialogs/video/images/bg.png rename to admin-vben/public/ueditor/dialogs/video/images/bg.png diff --git a/admin/public/ueditor/dialogs/video/images/center_focus.jpg b/admin-vben/public/ueditor/dialogs/video/images/center_focus.jpg similarity index 100% rename from admin/public/ueditor/dialogs/video/images/center_focus.jpg rename to admin-vben/public/ueditor/dialogs/video/images/center_focus.jpg diff --git a/admin/public/ueditor/dialogs/video/images/file-icons.gif b/admin-vben/public/ueditor/dialogs/video/images/file-icons.gif similarity index 100% rename from admin/public/ueditor/dialogs/video/images/file-icons.gif rename to admin-vben/public/ueditor/dialogs/video/images/file-icons.gif diff --git a/admin/public/ueditor/dialogs/video/images/file-icons.png b/admin-vben/public/ueditor/dialogs/video/images/file-icons.png similarity index 100% rename from admin/public/ueditor/dialogs/video/images/file-icons.png rename to admin-vben/public/ueditor/dialogs/video/images/file-icons.png diff --git a/admin/public/ueditor/dialogs/video/images/icons.gif b/admin-vben/public/ueditor/dialogs/video/images/icons.gif similarity index 100% rename from admin/public/ueditor/dialogs/video/images/icons.gif rename to admin-vben/public/ueditor/dialogs/video/images/icons.gif diff --git a/admin/public/ueditor/dialogs/video/images/icons.png b/admin-vben/public/ueditor/dialogs/video/images/icons.png similarity index 100% rename from admin/public/ueditor/dialogs/video/images/icons.png rename to admin-vben/public/ueditor/dialogs/video/images/icons.png diff --git a/admin/public/ueditor/dialogs/video/images/image.png b/admin-vben/public/ueditor/dialogs/video/images/image.png similarity index 100% rename from admin/public/ueditor/dialogs/video/images/image.png rename to admin-vben/public/ueditor/dialogs/video/images/image.png diff --git a/admin/public/ueditor/dialogs/video/images/left_focus.jpg b/admin-vben/public/ueditor/dialogs/video/images/left_focus.jpg similarity index 100% rename from admin/public/ueditor/dialogs/video/images/left_focus.jpg rename to admin-vben/public/ueditor/dialogs/video/images/left_focus.jpg diff --git a/admin/public/ueditor/dialogs/video/images/none_focus.jpg b/admin-vben/public/ueditor/dialogs/video/images/none_focus.jpg similarity index 100% rename from admin/public/ueditor/dialogs/video/images/none_focus.jpg rename to admin-vben/public/ueditor/dialogs/video/images/none_focus.jpg diff --git a/admin/public/ueditor/dialogs/video/images/progress.png b/admin-vben/public/ueditor/dialogs/video/images/progress.png similarity index 100% rename from admin/public/ueditor/dialogs/video/images/progress.png rename to admin-vben/public/ueditor/dialogs/video/images/progress.png diff --git a/admin/public/ueditor/dialogs/video/images/right_focus.jpg b/admin-vben/public/ueditor/dialogs/video/images/right_focus.jpg similarity index 100% rename from admin/public/ueditor/dialogs/video/images/right_focus.jpg rename to admin-vben/public/ueditor/dialogs/video/images/right_focus.jpg diff --git a/admin/public/ueditor/dialogs/video/images/success.gif b/admin-vben/public/ueditor/dialogs/video/images/success.gif similarity index 100% rename from admin/public/ueditor/dialogs/video/images/success.gif rename to admin-vben/public/ueditor/dialogs/video/images/success.gif diff --git a/admin/public/ueditor/dialogs/video/images/success.png b/admin-vben/public/ueditor/dialogs/video/images/success.png similarity index 100% rename from admin/public/ueditor/dialogs/video/images/success.png rename to admin-vben/public/ueditor/dialogs/video/images/success.png diff --git a/admin/public/ueditor/dialogs/video/video.css b/admin-vben/public/ueditor/dialogs/video/video.css similarity index 100% rename from admin/public/ueditor/dialogs/video/video.css rename to admin-vben/public/ueditor/dialogs/video/video.css diff --git a/admin/public/ueditor/dialogs/video/video.html b/admin-vben/public/ueditor/dialogs/video/video.html similarity index 100% rename from admin/public/ueditor/dialogs/video/video.html rename to admin-vben/public/ueditor/dialogs/video/video.html diff --git a/admin/public/ueditor/dialogs/video/video.js b/admin-vben/public/ueditor/dialogs/video/video.js similarity index 100% rename from admin/public/ueditor/dialogs/video/video.js rename to admin-vben/public/ueditor/dialogs/video/video.js diff --git a/admin/public/ueditor/dialogs/wordimage/wordimage.html b/admin-vben/public/ueditor/dialogs/wordimage/wordimage.html similarity index 100% rename from admin/public/ueditor/dialogs/wordimage/wordimage.html rename to admin-vben/public/ueditor/dialogs/wordimage/wordimage.html diff --git a/admin/public/ueditor/dialogs/wordimage/wordimage.js b/admin-vben/public/ueditor/dialogs/wordimage/wordimage.js similarity index 100% rename from admin/public/ueditor/dialogs/wordimage/wordimage.js rename to admin-vben/public/ueditor/dialogs/wordimage/wordimage.js diff --git a/admin/public/ueditor/index.html b/admin-vben/public/ueditor/index.html similarity index 100% rename from admin/public/ueditor/index.html rename to admin-vben/public/ueditor/index.html diff --git a/admin/public/ueditor/lang/en/en.js b/admin-vben/public/ueditor/lang/en/en.js similarity index 100% rename from admin/public/ueditor/lang/en/en.js rename to admin-vben/public/ueditor/lang/en/en.js diff --git a/admin/public/ueditor/lang/en/images/addimage.png b/admin-vben/public/ueditor/lang/en/images/addimage.png similarity index 100% rename from admin/public/ueditor/lang/en/images/addimage.png rename to admin-vben/public/ueditor/lang/en/images/addimage.png diff --git a/admin/public/ueditor/lang/en/images/alldeletebtnhoverskin.png b/admin-vben/public/ueditor/lang/en/images/alldeletebtnhoverskin.png similarity index 100% rename from admin/public/ueditor/lang/en/images/alldeletebtnhoverskin.png rename to admin-vben/public/ueditor/lang/en/images/alldeletebtnhoverskin.png diff --git a/admin/public/ueditor/lang/en/images/alldeletebtnupskin.png b/admin-vben/public/ueditor/lang/en/images/alldeletebtnupskin.png similarity index 100% rename from admin/public/ueditor/lang/en/images/alldeletebtnupskin.png rename to admin-vben/public/ueditor/lang/en/images/alldeletebtnupskin.png diff --git a/admin/public/ueditor/lang/en/images/background.png b/admin-vben/public/ueditor/lang/en/images/background.png similarity index 100% rename from admin/public/ueditor/lang/en/images/background.png rename to admin-vben/public/ueditor/lang/en/images/background.png diff --git a/admin/public/ueditor/lang/en/images/button.png b/admin-vben/public/ueditor/lang/en/images/button.png similarity index 100% rename from admin/public/ueditor/lang/en/images/button.png rename to admin-vben/public/ueditor/lang/en/images/button.png diff --git a/admin/public/ueditor/lang/en/images/copy.png b/admin-vben/public/ueditor/lang/en/images/copy.png similarity index 100% rename from admin/public/ueditor/lang/en/images/copy.png rename to admin-vben/public/ueditor/lang/en/images/copy.png diff --git a/admin/public/ueditor/lang/en/images/deletedisable.png b/admin-vben/public/ueditor/lang/en/images/deletedisable.png similarity index 100% rename from admin/public/ueditor/lang/en/images/deletedisable.png rename to admin-vben/public/ueditor/lang/en/images/deletedisable.png diff --git a/admin/public/ueditor/lang/en/images/deleteenable.png b/admin-vben/public/ueditor/lang/en/images/deleteenable.png similarity index 100% rename from admin/public/ueditor/lang/en/images/deleteenable.png rename to admin-vben/public/ueditor/lang/en/images/deleteenable.png diff --git a/admin/public/ueditor/lang/en/images/listbackground.png b/admin-vben/public/ueditor/lang/en/images/listbackground.png similarity index 100% rename from admin/public/ueditor/lang/en/images/listbackground.png rename to admin-vben/public/ueditor/lang/en/images/listbackground.png diff --git a/admin/public/ueditor/lang/en/images/localimage.png b/admin-vben/public/ueditor/lang/en/images/localimage.png similarity index 100% rename from admin/public/ueditor/lang/en/images/localimage.png rename to admin-vben/public/ueditor/lang/en/images/localimage.png diff --git a/admin/public/ueditor/lang/en/images/music.png b/admin-vben/public/ueditor/lang/en/images/music.png similarity index 100% rename from admin/public/ueditor/lang/en/images/music.png rename to admin-vben/public/ueditor/lang/en/images/music.png diff --git a/admin/public/ueditor/lang/en/images/rotateleftdisable.png b/admin-vben/public/ueditor/lang/en/images/rotateleftdisable.png similarity index 100% rename from admin/public/ueditor/lang/en/images/rotateleftdisable.png rename to admin-vben/public/ueditor/lang/en/images/rotateleftdisable.png diff --git a/admin/public/ueditor/lang/en/images/rotateleftenable.png b/admin-vben/public/ueditor/lang/en/images/rotateleftenable.png similarity index 100% rename from admin/public/ueditor/lang/en/images/rotateleftenable.png rename to admin-vben/public/ueditor/lang/en/images/rotateleftenable.png diff --git a/admin/public/ueditor/lang/en/images/rotaterightdisable.png b/admin-vben/public/ueditor/lang/en/images/rotaterightdisable.png similarity index 100% rename from admin/public/ueditor/lang/en/images/rotaterightdisable.png rename to admin-vben/public/ueditor/lang/en/images/rotaterightdisable.png diff --git a/admin/public/ueditor/lang/en/images/rotaterightenable.png b/admin-vben/public/ueditor/lang/en/images/rotaterightenable.png similarity index 100% rename from admin/public/ueditor/lang/en/images/rotaterightenable.png rename to admin-vben/public/ueditor/lang/en/images/rotaterightenable.png diff --git a/admin/public/ueditor/lang/en/images/upload.png b/admin-vben/public/ueditor/lang/en/images/upload.png similarity index 100% rename from admin/public/ueditor/lang/en/images/upload.png rename to admin-vben/public/ueditor/lang/en/images/upload.png diff --git a/admin/public/ueditor/lang/zh-cn/images/copy.png b/admin-vben/public/ueditor/lang/zh-cn/images/copy.png similarity index 100% rename from admin/public/ueditor/lang/zh-cn/images/copy.png rename to admin-vben/public/ueditor/lang/zh-cn/images/copy.png diff --git a/admin/public/ueditor/lang/zh-cn/images/localimage.png b/admin-vben/public/ueditor/lang/zh-cn/images/localimage.png similarity index 100% rename from admin/public/ueditor/lang/zh-cn/images/localimage.png rename to admin-vben/public/ueditor/lang/zh-cn/images/localimage.png diff --git a/admin/public/ueditor/lang/zh-cn/images/music.png b/admin-vben/public/ueditor/lang/zh-cn/images/music.png similarity index 100% rename from admin/public/ueditor/lang/zh-cn/images/music.png rename to admin-vben/public/ueditor/lang/zh-cn/images/music.png diff --git a/admin/public/ueditor/lang/zh-cn/images/upload.png b/admin-vben/public/ueditor/lang/zh-cn/images/upload.png similarity index 100% rename from admin/public/ueditor/lang/zh-cn/images/upload.png rename to admin-vben/public/ueditor/lang/zh-cn/images/upload.png diff --git a/admin/public/ueditor/lang/zh-cn/zh-cn.js b/admin-vben/public/ueditor/lang/zh-cn/zh-cn.js similarity index 100% rename from admin/public/ueditor/lang/zh-cn/zh-cn.js rename to admin-vben/public/ueditor/lang/zh-cn/zh-cn.js diff --git a/admin/public/ueditor/plugins/demo/demo.js b/admin-vben/public/ueditor/plugins/demo/demo.js similarity index 100% rename from admin/public/ueditor/plugins/demo/demo.js rename to admin-vben/public/ueditor/plugins/demo/demo.js diff --git a/admin/public/ueditor/themes/default/css/ueditor.css b/admin-vben/public/ueditor/themes/default/css/ueditor.css similarity index 100% rename from admin/public/ueditor/themes/default/css/ueditor.css rename to admin-vben/public/ueditor/themes/default/css/ueditor.css diff --git a/admin/public/ueditor/themes/default/dialog.css b/admin-vben/public/ueditor/themes/default/dialog.css similarity index 100% rename from admin/public/ueditor/themes/default/dialog.css rename to admin-vben/public/ueditor/themes/default/dialog.css diff --git a/admin/public/ueditor/themes/default/dialogbase.css b/admin-vben/public/ueditor/themes/default/dialogbase.css similarity index 100% rename from admin/public/ueditor/themes/default/dialogbase.css rename to admin-vben/public/ueditor/themes/default/dialogbase.css diff --git a/admin/public/ueditor/themes/default/exts/ai.svg b/admin-vben/public/ueditor/themes/default/exts/ai.svg similarity index 100% rename from admin/public/ueditor/themes/default/exts/ai.svg rename to admin-vben/public/ueditor/themes/default/exts/ai.svg diff --git a/admin/public/ueditor/themes/default/exts/apk.svg b/admin-vben/public/ueditor/themes/default/exts/apk.svg similarity index 100% rename from admin/public/ueditor/themes/default/exts/apk.svg rename to admin-vben/public/ueditor/themes/default/exts/apk.svg diff --git a/admin/public/ueditor/themes/default/exts/chm.svg b/admin-vben/public/ueditor/themes/default/exts/chm.svg similarity index 100% rename from admin/public/ueditor/themes/default/exts/chm.svg rename to admin-vben/public/ueditor/themes/default/exts/chm.svg diff --git a/admin/public/ueditor/themes/default/exts/css.svg b/admin-vben/public/ueditor/themes/default/exts/css.svg similarity index 100% rename from admin/public/ueditor/themes/default/exts/css.svg rename to admin-vben/public/ueditor/themes/default/exts/css.svg diff --git a/admin/public/ueditor/themes/default/exts/doc.svg b/admin-vben/public/ueditor/themes/default/exts/doc.svg similarity index 100% rename from admin/public/ueditor/themes/default/exts/doc.svg rename to admin-vben/public/ueditor/themes/default/exts/doc.svg diff --git a/admin/public/ueditor/themes/default/exts/docx.svg b/admin-vben/public/ueditor/themes/default/exts/docx.svg similarity index 100% rename from admin/public/ueditor/themes/default/exts/docx.svg rename to admin-vben/public/ueditor/themes/default/exts/docx.svg diff --git a/admin/public/ueditor/themes/default/exts/dwg.svg b/admin-vben/public/ueditor/themes/default/exts/dwg.svg similarity index 100% rename from admin/public/ueditor/themes/default/exts/dwg.svg rename to admin-vben/public/ueditor/themes/default/exts/dwg.svg diff --git a/admin/public/ueditor/themes/default/exts/folder.svg b/admin-vben/public/ueditor/themes/default/exts/folder.svg similarity index 100% rename from admin/public/ueditor/themes/default/exts/folder.svg rename to admin-vben/public/ueditor/themes/default/exts/folder.svg diff --git a/admin/public/ueditor/themes/default/exts/gif.svg b/admin-vben/public/ueditor/themes/default/exts/gif.svg similarity index 100% rename from admin/public/ueditor/themes/default/exts/gif.svg rename to admin-vben/public/ueditor/themes/default/exts/gif.svg diff --git a/admin/public/ueditor/themes/default/exts/html.svg b/admin-vben/public/ueditor/themes/default/exts/html.svg similarity index 100% rename from admin/public/ueditor/themes/default/exts/html.svg rename to admin-vben/public/ueditor/themes/default/exts/html.svg diff --git a/admin/public/ueditor/themes/default/exts/jpeg.svg b/admin-vben/public/ueditor/themes/default/exts/jpeg.svg similarity index 100% rename from admin/public/ueditor/themes/default/exts/jpeg.svg rename to admin-vben/public/ueditor/themes/default/exts/jpeg.svg diff --git a/admin/public/ueditor/themes/default/exts/jpg.svg b/admin-vben/public/ueditor/themes/default/exts/jpg.svg similarity index 100% rename from admin/public/ueditor/themes/default/exts/jpg.svg rename to admin-vben/public/ueditor/themes/default/exts/jpg.svg diff --git a/admin/public/ueditor/themes/default/exts/log.svg b/admin-vben/public/ueditor/themes/default/exts/log.svg similarity index 100% rename from admin/public/ueditor/themes/default/exts/log.svg rename to admin-vben/public/ueditor/themes/default/exts/log.svg diff --git a/admin/public/ueditor/themes/default/exts/mp3.svg b/admin-vben/public/ueditor/themes/default/exts/mp3.svg similarity index 100% rename from admin/public/ueditor/themes/default/exts/mp3.svg rename to admin-vben/public/ueditor/themes/default/exts/mp3.svg diff --git a/admin/public/ueditor/themes/default/exts/mp4.svg b/admin-vben/public/ueditor/themes/default/exts/mp4.svg similarity index 100% rename from admin/public/ueditor/themes/default/exts/mp4.svg rename to admin-vben/public/ueditor/themes/default/exts/mp4.svg diff --git a/admin/public/ueditor/themes/default/exts/pdf.svg b/admin-vben/public/ueditor/themes/default/exts/pdf.svg similarity index 100% rename from admin/public/ueditor/themes/default/exts/pdf.svg rename to admin-vben/public/ueditor/themes/default/exts/pdf.svg diff --git a/admin/public/ueditor/themes/default/exts/png.svg b/admin-vben/public/ueditor/themes/default/exts/png.svg similarity index 100% rename from admin/public/ueditor/themes/default/exts/png.svg rename to admin-vben/public/ueditor/themes/default/exts/png.svg diff --git a/admin/public/ueditor/themes/default/exts/ppt.svg b/admin-vben/public/ueditor/themes/default/exts/ppt.svg similarity index 100% rename from admin/public/ueditor/themes/default/exts/ppt.svg rename to admin-vben/public/ueditor/themes/default/exts/ppt.svg diff --git a/admin/public/ueditor/themes/default/exts/pptx.svg b/admin-vben/public/ueditor/themes/default/exts/pptx.svg similarity index 100% rename from admin/public/ueditor/themes/default/exts/pptx.svg rename to admin-vben/public/ueditor/themes/default/exts/pptx.svg diff --git a/admin/public/ueditor/themes/default/exts/psd.svg b/admin-vben/public/ueditor/themes/default/exts/psd.svg similarity index 100% rename from admin/public/ueditor/themes/default/exts/psd.svg rename to admin-vben/public/ueditor/themes/default/exts/psd.svg diff --git a/admin/public/ueditor/themes/default/exts/rar.svg b/admin-vben/public/ueditor/themes/default/exts/rar.svg similarity index 100% rename from admin/public/ueditor/themes/default/exts/rar.svg rename to admin-vben/public/ueditor/themes/default/exts/rar.svg diff --git a/admin/public/ueditor/themes/default/exts/svg.svg b/admin-vben/public/ueditor/themes/default/exts/svg.svg similarity index 100% rename from admin/public/ueditor/themes/default/exts/svg.svg rename to admin-vben/public/ueditor/themes/default/exts/svg.svg diff --git a/admin/public/ueditor/themes/default/exts/torrent.svg b/admin-vben/public/ueditor/themes/default/exts/torrent.svg similarity index 100% rename from admin/public/ueditor/themes/default/exts/torrent.svg rename to admin-vben/public/ueditor/themes/default/exts/torrent.svg diff --git a/admin/public/ueditor/themes/default/exts/txt.svg b/admin-vben/public/ueditor/themes/default/exts/txt.svg similarity index 100% rename from admin/public/ueditor/themes/default/exts/txt.svg rename to admin-vben/public/ueditor/themes/default/exts/txt.svg diff --git a/admin/public/ueditor/themes/default/exts/unknown.svg b/admin-vben/public/ueditor/themes/default/exts/unknown.svg similarity index 100% rename from admin/public/ueditor/themes/default/exts/unknown.svg rename to admin-vben/public/ueditor/themes/default/exts/unknown.svg diff --git a/admin/public/ueditor/themes/default/exts/xls.svg b/admin-vben/public/ueditor/themes/default/exts/xls.svg similarity index 100% rename from admin/public/ueditor/themes/default/exts/xls.svg rename to admin-vben/public/ueditor/themes/default/exts/xls.svg diff --git a/admin/public/ueditor/themes/default/exts/xlsx.svg b/admin-vben/public/ueditor/themes/default/exts/xlsx.svg similarity index 100% rename from admin/public/ueditor/themes/default/exts/xlsx.svg rename to admin-vben/public/ueditor/themes/default/exts/xlsx.svg diff --git a/admin/public/ueditor/themes/default/exts/zip.svg b/admin-vben/public/ueditor/themes/default/exts/zip.svg similarity index 100% rename from admin/public/ueditor/themes/default/exts/zip.svg rename to admin-vben/public/ueditor/themes/default/exts/zip.svg diff --git a/admin/public/ueditor/themes/default/images/anchor.gif b/admin-vben/public/ueditor/themes/default/images/anchor.gif similarity index 100% rename from admin/public/ueditor/themes/default/images/anchor.gif rename to admin-vben/public/ueditor/themes/default/images/anchor.gif diff --git a/admin/public/ueditor/themes/default/images/arrow.png b/admin-vben/public/ueditor/themes/default/images/arrow.png similarity index 100% rename from admin/public/ueditor/themes/default/images/arrow.png rename to admin-vben/public/ueditor/themes/default/images/arrow.png diff --git a/admin/public/ueditor/themes/default/images/arrow_down.png b/admin-vben/public/ueditor/themes/default/images/arrow_down.png similarity index 100% rename from admin/public/ueditor/themes/default/images/arrow_down.png rename to admin-vben/public/ueditor/themes/default/images/arrow_down.png diff --git a/admin/public/ueditor/themes/default/images/arrow_up.png b/admin-vben/public/ueditor/themes/default/images/arrow_up.png similarity index 100% rename from admin/public/ueditor/themes/default/images/arrow_up.png rename to admin-vben/public/ueditor/themes/default/images/arrow_up.png diff --git a/admin/public/ueditor/themes/default/images/button-bg.gif b/admin-vben/public/ueditor/themes/default/images/button-bg.gif similarity index 100% rename from admin/public/ueditor/themes/default/images/button-bg.gif rename to admin-vben/public/ueditor/themes/default/images/button-bg.gif diff --git a/admin/public/ueditor/themes/default/images/cancelbutton.gif b/admin-vben/public/ueditor/themes/default/images/cancelbutton.gif similarity index 100% rename from admin/public/ueditor/themes/default/images/cancelbutton.gif rename to admin-vben/public/ueditor/themes/default/images/cancelbutton.gif diff --git a/admin/public/ueditor/themes/default/images/charts.png b/admin-vben/public/ueditor/themes/default/images/charts.png similarity index 100% rename from admin/public/ueditor/themes/default/images/charts.png rename to admin-vben/public/ueditor/themes/default/images/charts.png diff --git a/admin/public/ueditor/themes/default/images/cursor_h.gif b/admin-vben/public/ueditor/themes/default/images/cursor_h.gif similarity index 100% rename from admin/public/ueditor/themes/default/images/cursor_h.gif rename to admin-vben/public/ueditor/themes/default/images/cursor_h.gif diff --git a/admin/public/ueditor/themes/default/images/cursor_h.png b/admin-vben/public/ueditor/themes/default/images/cursor_h.png similarity index 100% rename from admin/public/ueditor/themes/default/images/cursor_h.png rename to admin-vben/public/ueditor/themes/default/images/cursor_h.png diff --git a/admin/public/ueditor/themes/default/images/cursor_v.gif b/admin-vben/public/ueditor/themes/default/images/cursor_v.gif similarity index 100% rename from admin/public/ueditor/themes/default/images/cursor_v.gif rename to admin-vben/public/ueditor/themes/default/images/cursor_v.gif diff --git a/admin/public/ueditor/themes/default/images/cursor_v.png b/admin-vben/public/ueditor/themes/default/images/cursor_v.png similarity index 100% rename from admin/public/ueditor/themes/default/images/cursor_v.png rename to admin-vben/public/ueditor/themes/default/images/cursor_v.png diff --git a/admin/public/ueditor/themes/default/images/dialog-title-bg.png b/admin-vben/public/ueditor/themes/default/images/dialog-title-bg.png similarity index 100% rename from admin/public/ueditor/themes/default/images/dialog-title-bg.png rename to admin-vben/public/ueditor/themes/default/images/dialog-title-bg.png diff --git a/admin/public/ueditor/themes/default/images/filescan.png b/admin-vben/public/ueditor/themes/default/images/filescan.png similarity index 100% rename from admin/public/ueditor/themes/default/images/filescan.png rename to admin-vben/public/ueditor/themes/default/images/filescan.png diff --git a/admin/public/ueditor/themes/default/images/highlighted.gif b/admin-vben/public/ueditor/themes/default/images/highlighted.gif similarity index 100% rename from admin/public/ueditor/themes/default/images/highlighted.gif rename to admin-vben/public/ueditor/themes/default/images/highlighted.gif diff --git a/admin/public/ueditor/themes/default/images/icons-all.gif b/admin-vben/public/ueditor/themes/default/images/icons-all.gif similarity index 100% rename from admin/public/ueditor/themes/default/images/icons-all.gif rename to admin-vben/public/ueditor/themes/default/images/icons-all.gif diff --git a/admin/public/ueditor/themes/default/images/icons.gif b/admin-vben/public/ueditor/themes/default/images/icons.gif similarity index 100% rename from admin/public/ueditor/themes/default/images/icons.gif rename to admin-vben/public/ueditor/themes/default/images/icons.gif diff --git a/admin/public/ueditor/themes/default/images/icons.png b/admin-vben/public/ueditor/themes/default/images/icons.png similarity index 100% rename from admin/public/ueditor/themes/default/images/icons.png rename to admin-vben/public/ueditor/themes/default/images/icons.png diff --git a/admin/public/ueditor/themes/default/images/img-cracked.png b/admin-vben/public/ueditor/themes/default/images/img-cracked.png similarity index 100% rename from admin/public/ueditor/themes/default/images/img-cracked.png rename to admin-vben/public/ueditor/themes/default/images/img-cracked.png diff --git a/admin/public/ueditor/themes/default/images/loaderror.png b/admin-vben/public/ueditor/themes/default/images/loaderror.png similarity index 100% rename from admin/public/ueditor/themes/default/images/loaderror.png rename to admin-vben/public/ueditor/themes/default/images/loaderror.png diff --git a/admin/public/ueditor/themes/default/images/loading.gif b/admin-vben/public/ueditor/themes/default/images/loading.gif similarity index 100% rename from admin/public/ueditor/themes/default/images/loading.gif rename to admin-vben/public/ueditor/themes/default/images/loading.gif diff --git a/admin/public/ueditor/themes/default/images/lock.gif b/admin-vben/public/ueditor/themes/default/images/lock.gif similarity index 100% rename from admin/public/ueditor/themes/default/images/lock.gif rename to admin-vben/public/ueditor/themes/default/images/lock.gif diff --git a/admin/public/ueditor/themes/default/images/neweditor-tab-bg.png b/admin-vben/public/ueditor/themes/default/images/neweditor-tab-bg.png similarity index 100% rename from admin/public/ueditor/themes/default/images/neweditor-tab-bg.png rename to admin-vben/public/ueditor/themes/default/images/neweditor-tab-bg.png diff --git a/admin/public/ueditor/themes/default/images/pagebreak.gif b/admin-vben/public/ueditor/themes/default/images/pagebreak.gif similarity index 100% rename from admin/public/ueditor/themes/default/images/pagebreak.gif rename to admin-vben/public/ueditor/themes/default/images/pagebreak.gif diff --git a/admin/public/ueditor/themes/default/images/scale.png b/admin-vben/public/ueditor/themes/default/images/scale.png similarity index 100% rename from admin/public/ueditor/themes/default/images/scale.png rename to admin-vben/public/ueditor/themes/default/images/scale.png diff --git a/admin/public/ueditor/themes/default/images/sortable.png b/admin-vben/public/ueditor/themes/default/images/sortable.png similarity index 100% rename from admin/public/ueditor/themes/default/images/sortable.png rename to admin-vben/public/ueditor/themes/default/images/sortable.png diff --git a/admin/public/ueditor/themes/default/images/spacer.gif b/admin-vben/public/ueditor/themes/default/images/spacer.gif similarity index 100% rename from admin/public/ueditor/themes/default/images/spacer.gif rename to admin-vben/public/ueditor/themes/default/images/spacer.gif diff --git a/admin/public/ueditor/themes/default/images/sparator_v.png b/admin-vben/public/ueditor/themes/default/images/sparator_v.png similarity index 100% rename from admin/public/ueditor/themes/default/images/sparator_v.png rename to admin-vben/public/ueditor/themes/default/images/sparator_v.png diff --git a/admin/public/ueditor/themes/default/images/table-cell-align.png b/admin-vben/public/ueditor/themes/default/images/table-cell-align.png similarity index 100% rename from admin/public/ueditor/themes/default/images/table-cell-align.png rename to admin-vben/public/ueditor/themes/default/images/table-cell-align.png diff --git a/admin/public/ueditor/themes/default/images/tangram-colorpicker.png b/admin-vben/public/ueditor/themes/default/images/tangram-colorpicker.png similarity index 100% rename from admin/public/ueditor/themes/default/images/tangram-colorpicker.png rename to admin-vben/public/ueditor/themes/default/images/tangram-colorpicker.png diff --git a/admin/public/ueditor/themes/default/images/toolbar_bg.png b/admin-vben/public/ueditor/themes/default/images/toolbar_bg.png similarity index 100% rename from admin/public/ueditor/themes/default/images/toolbar_bg.png rename to admin-vben/public/ueditor/themes/default/images/toolbar_bg.png diff --git a/admin/public/ueditor/themes/default/images/unhighlighted.gif b/admin-vben/public/ueditor/themes/default/images/unhighlighted.gif similarity index 100% rename from admin/public/ueditor/themes/default/images/unhighlighted.gif rename to admin-vben/public/ueditor/themes/default/images/unhighlighted.gif diff --git a/admin/public/ueditor/themes/default/images/upload.png b/admin-vben/public/ueditor/themes/default/images/upload.png similarity index 100% rename from admin/public/ueditor/themes/default/images/upload.png rename to admin-vben/public/ueditor/themes/default/images/upload.png diff --git a/admin/public/ueditor/themes/default/images/videologo.gif b/admin-vben/public/ueditor/themes/default/images/videologo.gif similarity index 100% rename from admin/public/ueditor/themes/default/images/videologo.gif rename to admin-vben/public/ueditor/themes/default/images/videologo.gif diff --git a/admin/public/ueditor/themes/default/images/word.gif b/admin-vben/public/ueditor/themes/default/images/word.gif similarity index 100% rename from admin/public/ueditor/themes/default/images/word.gif rename to admin-vben/public/ueditor/themes/default/images/word.gif diff --git a/admin/public/ueditor/themes/default/images/wordpaste.png b/admin-vben/public/ueditor/themes/default/images/wordpaste.png similarity index 100% rename from admin/public/ueditor/themes/default/images/wordpaste.png rename to admin-vben/public/ueditor/themes/default/images/wordpaste.png diff --git a/admin/public/ueditor/themes/iframe.css b/admin-vben/public/ueditor/themes/iframe.css similarity index 100% rename from admin/public/ueditor/themes/iframe.css rename to admin-vben/public/ueditor/themes/iframe.css diff --git a/admin/public/ueditor/third-party/SyntaxHighlighter/shCore.js b/admin-vben/public/ueditor/third-party/SyntaxHighlighter/shCore.js similarity index 100% rename from admin/public/ueditor/third-party/SyntaxHighlighter/shCore.js rename to admin-vben/public/ueditor/third-party/SyntaxHighlighter/shCore.js diff --git a/admin/public/ueditor/third-party/SyntaxHighlighter/shCoreDefault.css b/admin-vben/public/ueditor/third-party/SyntaxHighlighter/shCoreDefault.css similarity index 100% rename from admin/public/ueditor/third-party/SyntaxHighlighter/shCoreDefault.css rename to admin-vben/public/ueditor/third-party/SyntaxHighlighter/shCoreDefault.css diff --git a/admin/public/ueditor/third-party/clipboard/clipboard.js b/admin-vben/public/ueditor/third-party/clipboard/clipboard.js similarity index 100% rename from admin/public/ueditor/third-party/clipboard/clipboard.js rename to admin-vben/public/ueditor/third-party/clipboard/clipboard.js diff --git a/admin/public/ueditor/third-party/codemirror/codemirror.css b/admin-vben/public/ueditor/third-party/codemirror/codemirror.css similarity index 100% rename from admin/public/ueditor/third-party/codemirror/codemirror.css rename to admin-vben/public/ueditor/third-party/codemirror/codemirror.css diff --git a/admin/public/ueditor/third-party/codemirror/codemirror.js b/admin-vben/public/ueditor/third-party/codemirror/codemirror.js similarity index 100% rename from admin/public/ueditor/third-party/codemirror/codemirror.js rename to admin-vben/public/ueditor/third-party/codemirror/codemirror.js diff --git a/admin/public/ueditor/third-party/jquery-1.10.2.js b/admin-vben/public/ueditor/third-party/jquery-1.10.2.js similarity index 100% rename from admin/public/ueditor/third-party/jquery-1.10.2.js rename to admin-vben/public/ueditor/third-party/jquery-1.10.2.js diff --git a/admin/public/ueditor/third-party/webuploader/webuploader.css b/admin-vben/public/ueditor/third-party/webuploader/webuploader.css similarity index 100% rename from admin/public/ueditor/third-party/webuploader/webuploader.css rename to admin-vben/public/ueditor/third-party/webuploader/webuploader.css diff --git a/admin/public/ueditor/third-party/webuploader/webuploader.js b/admin-vben/public/ueditor/third-party/webuploader/webuploader.js similarity index 100% rename from admin/public/ueditor/third-party/webuploader/webuploader.js rename to admin-vben/public/ueditor/third-party/webuploader/webuploader.js diff --git a/admin/public/ueditor/third-party/zeroclipboard/ZeroClipboard.js b/admin-vben/public/ueditor/third-party/zeroclipboard/ZeroClipboard.js similarity index 100% rename from admin/public/ueditor/third-party/zeroclipboard/ZeroClipboard.js rename to admin-vben/public/ueditor/third-party/zeroclipboard/ZeroClipboard.js diff --git a/admin/public/ueditor/ueditor.all.js b/admin-vben/public/ueditor/ueditor.all.js similarity index 100% rename from admin/public/ueditor/ueditor.all.js rename to admin-vben/public/ueditor/ueditor.all.js diff --git a/admin/public/ueditor/ueditor.config.js b/admin-vben/public/ueditor/ueditor.config.js similarity index 100% rename from admin/public/ueditor/ueditor.config.js rename to admin-vben/public/ueditor/ueditor.config.js diff --git a/admin/public/ueditor/ueditor.parse.js b/admin-vben/public/ueditor/ueditor.parse.js similarity index 100% rename from admin/public/ueditor/ueditor.parse.js rename to admin-vben/public/ueditor/ueditor.parse.js diff --git a/admin/publish.cjs b/admin-vben/publish.cjs similarity index 100% rename from admin/publish.cjs rename to admin-vben/publish.cjs diff --git a/admin/scripts/clean.mjs b/admin-vben/scripts/clean.mjs similarity index 100% rename from admin/scripts/clean.mjs rename to admin-vben/scripts/clean.mjs diff --git a/admin/scripts/deploy/Dockerfile b/admin-vben/scripts/deploy/Dockerfile similarity index 100% rename from admin/scripts/deploy/Dockerfile rename to admin-vben/scripts/deploy/Dockerfile diff --git a/admin/scripts/deploy/build-local-docker-image.sh b/admin-vben/scripts/deploy/build-local-docker-image.sh similarity index 100% rename from admin/scripts/deploy/build-local-docker-image.sh rename to admin-vben/scripts/deploy/build-local-docker-image.sh diff --git a/admin/scripts/deploy/nginx.conf b/admin-vben/scripts/deploy/nginx.conf similarity index 100% rename from admin/scripts/deploy/nginx.conf rename to admin-vben/scripts/deploy/nginx.conf diff --git a/admin/scripts/turbo-run/README.md b/admin-vben/scripts/turbo-run/README.md similarity index 100% rename from admin/scripts/turbo-run/README.md rename to admin-vben/scripts/turbo-run/README.md diff --git a/admin/scripts/turbo-run/bin/turbo-run.mjs b/admin-vben/scripts/turbo-run/bin/turbo-run.mjs similarity index 100% rename from admin/scripts/turbo-run/bin/turbo-run.mjs rename to admin-vben/scripts/turbo-run/bin/turbo-run.mjs diff --git a/admin/scripts/turbo-run/build.config.ts b/admin-vben/scripts/turbo-run/build.config.ts similarity index 100% rename from admin/scripts/turbo-run/build.config.ts rename to admin-vben/scripts/turbo-run/build.config.ts diff --git a/admin/scripts/turbo-run/package.json b/admin-vben/scripts/turbo-run/package.json similarity index 100% rename from admin/scripts/turbo-run/package.json rename to admin-vben/scripts/turbo-run/package.json diff --git a/admin/scripts/turbo-run/src/index.ts b/admin-vben/scripts/turbo-run/src/index.ts similarity index 100% rename from admin/scripts/turbo-run/src/index.ts rename to admin-vben/scripts/turbo-run/src/index.ts diff --git a/admin/scripts/turbo-run/src/run.ts b/admin-vben/scripts/turbo-run/src/run.ts similarity index 100% rename from admin/scripts/turbo-run/src/run.ts rename to admin-vben/scripts/turbo-run/src/run.ts diff --git a/admin/scripts/turbo-run/tsconfig.json b/admin-vben/scripts/turbo-run/tsconfig.json similarity index 100% rename from admin/scripts/turbo-run/tsconfig.json rename to admin-vben/scripts/turbo-run/tsconfig.json diff --git a/admin/scripts/vsh/README.md b/admin-vben/scripts/vsh/README.md similarity index 100% rename from admin/scripts/vsh/README.md rename to admin-vben/scripts/vsh/README.md diff --git a/admin/scripts/vsh/bin/vsh.mjs b/admin-vben/scripts/vsh/bin/vsh.mjs similarity index 100% rename from admin/scripts/vsh/bin/vsh.mjs rename to admin-vben/scripts/vsh/bin/vsh.mjs diff --git a/admin/scripts/vsh/build.config.ts b/admin-vben/scripts/vsh/build.config.ts similarity index 100% rename from admin/scripts/vsh/build.config.ts rename to admin-vben/scripts/vsh/build.config.ts diff --git a/admin/scripts/vsh/package.json b/admin-vben/scripts/vsh/package.json similarity index 100% rename from admin/scripts/vsh/package.json rename to admin-vben/scripts/vsh/package.json diff --git a/admin/scripts/vsh/src/check-circular/index.ts b/admin-vben/scripts/vsh/src/check-circular/index.ts similarity index 100% rename from admin/scripts/vsh/src/check-circular/index.ts rename to admin-vben/scripts/vsh/src/check-circular/index.ts diff --git a/admin/scripts/vsh/src/check-dep/index.ts b/admin-vben/scripts/vsh/src/check-dep/index.ts similarity index 100% rename from admin/scripts/vsh/src/check-dep/index.ts rename to admin-vben/scripts/vsh/src/check-dep/index.ts diff --git a/admin/scripts/vsh/src/code-workspace/index.ts b/admin-vben/scripts/vsh/src/code-workspace/index.ts similarity index 100% rename from admin/scripts/vsh/src/code-workspace/index.ts rename to admin-vben/scripts/vsh/src/code-workspace/index.ts diff --git a/admin/scripts/vsh/src/index.ts b/admin-vben/scripts/vsh/src/index.ts similarity index 100% rename from admin/scripts/vsh/src/index.ts rename to admin-vben/scripts/vsh/src/index.ts diff --git a/admin/scripts/vsh/src/lint/index.ts b/admin-vben/scripts/vsh/src/lint/index.ts similarity index 100% rename from admin/scripts/vsh/src/lint/index.ts rename to admin-vben/scripts/vsh/src/lint/index.ts diff --git a/admin/scripts/vsh/src/publint/index.ts b/admin-vben/scripts/vsh/src/publint/index.ts similarity index 100% rename from admin/scripts/vsh/src/publint/index.ts rename to admin-vben/scripts/vsh/src/publint/index.ts diff --git a/admin/scripts/vsh/tsconfig.json b/admin-vben/scripts/vsh/tsconfig.json similarity index 100% rename from admin/scripts/vsh/tsconfig.json rename to admin-vben/scripts/vsh/tsconfig.json diff --git a/admin/src/App.vue b/admin-vben/src/App.vue similarity index 100% rename from admin/src/App.vue rename to admin-vben/src/App.vue diff --git a/admin/src/addon/.gitignore b/admin-vben/src/addon/.gitignore similarity index 100% rename from admin/src/addon/.gitignore rename to admin-vben/src/addon/.gitignore diff --git a/admin/src/app/api/addon.ts b/admin-vben/src/app/api/addon.ts similarity index 100% rename from admin/src/app/api/addon.ts rename to admin-vben/src/app/api/addon.ts diff --git a/admin/src/app/api/aliapp.ts b/admin-vben/src/app/api/aliapp.ts similarity index 100% rename from admin/src/app/api/aliapp.ts rename to admin-vben/src/app/api/aliapp.ts diff --git a/admin/src/app/api/app.ts b/admin-vben/src/app/api/app.ts similarity index 100% rename from admin/src/app/api/app.ts rename to admin-vben/src/app/api/app.ts diff --git a/admin/src/app/api/auth.ts b/admin-vben/src/app/api/auth.ts similarity index 100% rename from admin/src/app/api/auth.ts rename to admin-vben/src/app/api/auth.ts diff --git a/admin/src/app/api/cloud.ts b/admin-vben/src/app/api/cloud.ts similarity index 100% rename from admin/src/app/api/cloud.ts rename to admin-vben/src/app/api/cloud.ts diff --git a/admin/src/app/api/dict.ts b/admin-vben/src/app/api/dict.ts similarity index 100% rename from admin/src/app/api/dict.ts rename to admin-vben/src/app/api/dict.ts diff --git a/admin/src/app/api/diy.ts b/admin-vben/src/app/api/diy.ts similarity index 100% rename from admin/src/app/api/diy.ts rename to admin-vben/src/app/api/diy.ts diff --git a/admin/src/app/api/diy_form.ts b/admin-vben/src/app/api/diy_form.ts similarity index 100% rename from admin/src/app/api/diy_form.ts rename to admin-vben/src/app/api/diy_form.ts diff --git a/admin/src/app/api/h5.ts b/admin-vben/src/app/api/h5.ts similarity index 100% rename from admin/src/app/api/h5.ts rename to admin-vben/src/app/api/h5.ts diff --git a/admin/src/app/api/home.ts b/admin-vben/src/app/api/home.ts similarity index 100% rename from admin/src/app/api/home.ts rename to admin-vben/src/app/api/home.ts diff --git a/admin/src/app/api/member.ts b/admin-vben/src/app/api/member.ts similarity index 100% rename from admin/src/app/api/member.ts rename to admin-vben/src/app/api/member.ts diff --git a/admin/src/app/api/module.ts b/admin-vben/src/app/api/module.ts similarity index 100% rename from admin/src/app/api/module.ts rename to admin-vben/src/app/api/module.ts diff --git a/admin/src/app/api/notice.ts b/admin-vben/src/app/api/notice.ts similarity index 100% rename from admin/src/app/api/notice.ts rename to admin-vben/src/app/api/notice.ts diff --git a/admin/src/app/api/pay.ts b/admin-vben/src/app/api/pay.ts similarity index 100% rename from admin/src/app/api/pay.ts rename to admin-vben/src/app/api/pay.ts diff --git a/admin/src/app/api/pc.ts b/admin-vben/src/app/api/pc.ts similarity index 100% rename from admin/src/app/api/pc.ts rename to admin-vben/src/app/api/pc.ts diff --git a/admin/src/app/api/personal.ts b/admin-vben/src/app/api/personal.ts similarity index 100% rename from admin/src/app/api/personal.ts rename to admin-vben/src/app/api/personal.ts diff --git a/admin/src/app/api/poster.ts b/admin-vben/src/app/api/poster.ts similarity index 100% rename from admin/src/app/api/poster.ts rename to admin-vben/src/app/api/poster.ts diff --git a/admin/src/app/api/printer.ts b/admin-vben/src/app/api/printer.ts similarity index 100% rename from admin/src/app/api/printer.ts rename to admin-vben/src/app/api/printer.ts diff --git a/admin/src/app/api/site.ts b/admin-vben/src/app/api/site.ts similarity index 100% rename from admin/src/app/api/site.ts rename to admin-vben/src/app/api/site.ts diff --git a/admin/src/app/api/stat.ts b/admin-vben/src/app/api/stat.ts similarity index 100% rename from admin/src/app/api/stat.ts rename to admin-vben/src/app/api/stat.ts diff --git a/admin/src/app/api/sys.ts b/admin-vben/src/app/api/sys.ts similarity index 100% rename from admin/src/app/api/sys.ts rename to admin-vben/src/app/api/sys.ts diff --git a/admin/src/app/api/tools.ts b/admin-vben/src/app/api/tools.ts similarity index 100% rename from admin/src/app/api/tools.ts rename to admin-vben/src/app/api/tools.ts diff --git a/admin/src/app/api/upgrade.ts b/admin-vben/src/app/api/upgrade.ts similarity index 100% rename from admin/src/app/api/upgrade.ts rename to admin-vben/src/app/api/upgrade.ts diff --git a/admin/src/app/api/user.ts b/admin-vben/src/app/api/user.ts similarity index 100% rename from admin/src/app/api/user.ts rename to admin-vben/src/app/api/user.ts diff --git a/admin/src/app/api/verify.ts b/admin-vben/src/app/api/verify.ts similarity index 100% rename from admin/src/app/api/verify.ts rename to admin-vben/src/app/api/verify.ts diff --git a/admin/src/app/api/weapp.ts b/admin-vben/src/app/api/weapp.ts similarity index 100% rename from admin/src/app/api/weapp.ts rename to admin-vben/src/app/api/weapp.ts diff --git a/admin/src/app/api/wechat.ts b/admin-vben/src/app/api/wechat.ts similarity index 100% rename from admin/src/app/api/wechat.ts rename to admin-vben/src/app/api/wechat.ts diff --git a/admin/src/app/api/wxoplatform.ts b/admin-vben/src/app/api/wxoplatform.ts similarity index 100% rename from admin/src/app/api/wxoplatform.ts rename to admin-vben/src/app/api/wxoplatform.ts diff --git a/admin/src/app/assets/images/SaaS.png b/admin-vben/src/app/assets/images/SaaS.png similarity index 100% rename from admin/src/app/assets/images/SaaS.png rename to admin-vben/src/app/assets/images/SaaS.png diff --git a/admin/src/app/assets/images/app_default.png b/admin-vben/src/app/assets/images/app_default.png similarity index 100% rename from admin/src/app/assets/images/app_default.png rename to admin-vben/src/app/assets/images/app_default.png diff --git a/admin/src/app/assets/images/app_store/app_store_default.png b/admin-vben/src/app/assets/images/app_store/app_store_default.png similarity index 100% rename from admin/src/app/assets/images/app_store/app_store_default.png rename to admin-vben/src/app/assets/images/app_store/app_store_default.png diff --git a/admin/src/app/assets/images/app_store/local_icon.png b/admin-vben/src/app/assets/images/app_store/local_icon.png similarity index 100% rename from admin/src/app/assets/images/app_store/local_icon.png rename to admin-vben/src/app/assets/images/app_store/local_icon.png diff --git a/admin/src/app/assets/images/app_store/local_icon_select.png b/admin-vben/src/app/assets/images/app_store/local_icon_select.png similarity index 100% rename from admin/src/app/assets/images/app_store/local_icon_select.png rename to admin-vben/src/app/assets/images/app_store/local_icon_select.png diff --git a/admin/src/app/assets/images/app_store/market_icon.png b/admin-vben/src/app/assets/images/app_store/market_icon.png similarity index 100% rename from admin/src/app/assets/images/app_store/market_icon.png rename to admin-vben/src/app/assets/images/app_store/market_icon.png diff --git a/admin/src/app/assets/images/app_store/market_icon_select.png b/admin-vben/src/app/assets/images/app_store/market_icon_select.png similarity index 100% rename from admin/src/app/assets/images/app_store/market_icon_select.png rename to admin-vben/src/app/assets/images/app_store/market_icon_select.png diff --git a/admin/src/app/assets/images/app_store/switch_icon_1.png b/admin-vben/src/app/assets/images/app_store/switch_icon_1.png similarity index 100% rename from admin/src/app/assets/images/app_store/switch_icon_1.png rename to admin-vben/src/app/assets/images/app_store/switch_icon_1.png diff --git a/admin/src/app/assets/images/app_store/switch_icon_2.png b/admin-vben/src/app/assets/images/app_store/switch_icon_2.png similarity index 100% rename from admin/src/app/assets/images/app_store/switch_icon_2.png rename to admin-vben/src/app/assets/images/app_store/switch_icon_2.png diff --git a/admin/src/app/assets/images/back_login.jpg b/admin-vben/src/app/assets/images/back_login.jpg similarity index 100% rename from admin/src/app/assets/images/back_login.jpg rename to admin-vben/src/app/assets/images/back_login.jpg diff --git a/admin/src/app/assets/images/category_default.png b/admin-vben/src/app/assets/images/category_default.png similarity index 100% rename from admin/src/app/assets/images/category_default.png rename to admin-vben/src/app/assets/images/category_default.png diff --git a/admin/src/app/assets/images/channel/preview.png b/admin-vben/src/app/assets/images/channel/preview.png similarity index 100% rename from admin/src/app/assets/images/channel/preview.png rename to admin-vben/src/app/assets/images/channel/preview.png diff --git a/admin/src/app/assets/images/creatBg.png b/admin-vben/src/app/assets/images/creatBg.png similarity index 100% rename from admin/src/app/assets/images/creatBg.png rename to admin-vben/src/app/assets/images/creatBg.png diff --git a/admin/src/app/assets/images/default_headimg.png b/admin-vben/src/app/assets/images/default_headimg.png similarity index 100% rename from admin/src/app/assets/images/default_headimg.png rename to admin-vben/src/app/assets/images/default_headimg.png diff --git a/admin/src/app/assets/images/default_headimg_square.jpg b/admin-vben/src/app/assets/images/default_headimg_square.jpg similarity index 100% rename from admin/src/app/assets/images/default_headimg_square.jpg rename to admin-vben/src/app/assets/images/default_headimg_square.jpg diff --git a/admin/src/app/assets/images/diy/head/nav_style1.jpg b/admin-vben/src/app/assets/images/diy/head/nav_style1.jpg similarity index 100% rename from admin/src/app/assets/images/diy/head/nav_style1.jpg rename to admin-vben/src/app/assets/images/diy/head/nav_style1.jpg diff --git a/admin/src/app/assets/images/diy/head/nav_style2.jpg b/admin-vben/src/app/assets/images/diy/head/nav_style2.jpg similarity index 100% rename from admin/src/app/assets/images/diy/head/nav_style2.jpg rename to admin-vben/src/app/assets/images/diy/head/nav_style2.jpg diff --git a/admin/src/app/assets/images/diy/head/nav_style3.jpg b/admin-vben/src/app/assets/images/diy/head/nav_style3.jpg similarity index 100% rename from admin/src/app/assets/images/diy/head/nav_style3.jpg rename to admin-vben/src/app/assets/images/diy/head/nav_style3.jpg diff --git a/admin/src/app/assets/images/diy/head/nav_style4.jpg b/admin-vben/src/app/assets/images/diy/head/nav_style4.jpg similarity index 100% rename from admin/src/app/assets/images/diy/head/nav_style4.jpg rename to admin-vben/src/app/assets/images/diy/head/nav_style4.jpg diff --git a/admin/src/app/assets/images/diy/head/nav_style5.png b/admin-vben/src/app/assets/images/diy/head/nav_style5.png similarity index 100% rename from admin/src/app/assets/images/diy/head/nav_style5.png rename to admin-vben/src/app/assets/images/diy/head/nav_style5.png diff --git a/admin/src/app/assets/images/diy/head/nav_style6.jpg b/admin-vben/src/app/assets/images/diy/head/nav_style6.jpg similarity index 100% rename from admin/src/app/assets/images/diy/head/nav_style6.jpg rename to admin-vben/src/app/assets/images/diy/head/nav_style6.jpg diff --git a/admin/src/app/assets/images/diy/notice/style_1.png b/admin-vben/src/app/assets/images/diy/notice/style_1.png similarity index 100% rename from admin/src/app/assets/images/diy/notice/style_1.png rename to admin-vben/src/app/assets/images/diy/notice/style_1.png diff --git a/admin/src/app/assets/images/diy/notice/style_2.png b/admin-vben/src/app/assets/images/diy/notice/style_2.png similarity index 100% rename from admin/src/app/assets/images/diy/notice/style_2.png rename to admin-vben/src/app/assets/images/diy/notice/style_2.png diff --git a/admin/src/app/assets/images/diy/text/style1.png b/admin-vben/src/app/assets/images/diy/text/style1.png similarity index 100% rename from admin/src/app/assets/images/diy/text/style1.png rename to admin-vben/src/app/assets/images/diy/text/style1.png diff --git a/admin/src/app/assets/images/diy/text/style2.png b/admin-vben/src/app/assets/images/diy/text/style2.png similarity index 100% rename from admin/src/app/assets/images/diy/text/style2.png rename to admin-vben/src/app/assets/images/diy/text/style2.png diff --git a/admin/src/app/assets/images/diy_form/mobile_bottom.png b/admin-vben/src/app/assets/images/diy_form/mobile_bottom.png similarity index 100% rename from admin/src/app/assets/images/diy_form/mobile_bottom.png rename to admin-vben/src/app/assets/images/diy_form/mobile_bottom.png diff --git a/admin/src/app/assets/images/diy_form/mobile_line.png b/admin-vben/src/app/assets/images/diy_form/mobile_line.png similarity index 100% rename from admin/src/app/assets/images/diy_form/mobile_line.png rename to admin-vben/src/app/assets/images/diy_form/mobile_line.png diff --git a/admin/src/app/assets/images/diy_form/mobile_tabbar.png b/admin-vben/src/app/assets/images/diy_form/mobile_tabbar.png similarity index 100% rename from admin/src/app/assets/images/diy_form/mobile_tabbar.png rename to admin-vben/src/app/assets/images/diy_form/mobile_tabbar.png diff --git a/admin/src/app/assets/images/diy_preview_head.png b/admin-vben/src/app/assets/images/diy_preview_head.png similarity index 100% rename from admin/src/app/assets/images/diy_preview_head.png rename to admin-vben/src/app/assets/images/diy_preview_head.png diff --git a/admin/src/app/assets/images/error.png b/admin-vben/src/app/assets/images/error.png similarity index 100% rename from admin/src/app/assets/images/error.png rename to admin-vben/src/app/assets/images/error.png diff --git a/admin/src/app/assets/images/error_icon.png b/admin-vben/src/app/assets/images/error_icon.png similarity index 100% rename from admin/src/app/assets/images/error_icon.png rename to admin-vben/src/app/assets/images/error_icon.png diff --git a/admin/src/app/assets/images/goods_default.png b/admin-vben/src/app/assets/images/goods_default.png similarity index 100% rename from admin/src/app/assets/images/goods_default.png rename to admin-vben/src/app/assets/images/goods_default.png diff --git a/admin/src/app/assets/images/gov_icon.png b/admin-vben/src/app/assets/images/gov_icon.png similarity index 100% rename from admin/src/app/assets/images/gov_icon.png rename to admin-vben/src/app/assets/images/gov_icon.png diff --git a/admin/src/app/assets/images/icon-addon-one.png b/admin-vben/src/app/assets/images/icon-addon-one.png similarity index 100% rename from admin/src/app/assets/images/icon-addon-one.png rename to admin-vben/src/app/assets/images/icon-addon-one.png diff --git a/admin/src/app/assets/images/icon-addon.png b/admin-vben/src/app/assets/images/icon-addon.png similarity index 100% rename from admin/src/app/assets/images/icon-addon.png rename to admin-vben/src/app/assets/images/icon-addon.png diff --git a/admin/src/app/assets/images/icon_folder.png b/admin-vben/src/app/assets/images/icon_folder.png similarity index 100% rename from admin/src/app/assets/images/icon_folder.png rename to admin-vben/src/app/assets/images/icon_folder.png diff --git a/admin/src/app/assets/images/icon_preview.png b/admin-vben/src/app/assets/images/icon_preview.png similarity index 100% rename from admin/src/app/assets/images/icon_preview.png rename to admin-vben/src/app/assets/images/icon_preview.png diff --git a/admin/src/app/assets/images/index/add_menu.png b/admin-vben/src/app/assets/images/index/add_menu.png similarity index 100% rename from admin/src/app/assets/images/index/add_menu.png rename to admin-vben/src/app/assets/images/index/add_menu.png diff --git a/admin/src/app/assets/images/index/administrator.png b/admin-vben/src/app/assets/images/index/administrator.png similarity index 100% rename from admin/src/app/assets/images/index/administrator.png rename to admin-vben/src/app/assets/images/index/administrator.png diff --git a/admin/src/app/assets/images/index/app.png b/admin-vben/src/app/assets/images/index/app.png similarity index 100% rename from admin/src/app/assets/images/index/app.png rename to admin-vben/src/app/assets/images/index/app.png diff --git a/admin/src/app/assets/images/index/app1.png b/admin-vben/src/app/assets/images/index/app1.png similarity index 100% rename from admin/src/app/assets/images/index/app1.png rename to admin-vben/src/app/assets/images/index/app1.png diff --git a/admin/src/app/assets/images/index/app_default.png b/admin-vben/src/app/assets/images/index/app_default.png similarity index 100% rename from admin/src/app/assets/images/index/app_default.png rename to admin-vben/src/app/assets/images/index/app_default.png diff --git a/admin/src/app/assets/images/index/app_store.png b/admin-vben/src/app/assets/images/index/app_store.png similarity index 100% rename from admin/src/app/assets/images/index/app_store.png rename to admin-vben/src/app/assets/images/index/app_store.png diff --git a/admin/src/app/assets/images/index/app_store1.png b/admin-vben/src/app/assets/images/index/app_store1.png similarity index 100% rename from admin/src/app/assets/images/index/app_store1.png rename to admin-vben/src/app/assets/images/index/app_store1.png diff --git a/admin/src/app/assets/images/index/apply_empty.png b/admin-vben/src/app/assets/images/index/apply_empty.png similarity index 100% rename from admin/src/app/assets/images/index/apply_empty.png rename to admin-vben/src/app/assets/images/index/apply_empty.png diff --git a/admin/src/app/assets/images/index/article.png b/admin-vben/src/app/assets/images/index/article.png similarity index 100% rename from admin/src/app/assets/images/index/article.png rename to admin-vben/src/app/assets/images/index/article.png diff --git a/admin/src/app/assets/images/index/article_list.png b/admin-vben/src/app/assets/images/index/article_list.png similarity index 100% rename from admin/src/app/assets/images/index/article_list.png rename to admin-vben/src/app/assets/images/index/article_list.png diff --git a/admin/src/app/assets/images/index/auth.png b/admin-vben/src/app/assets/images/index/auth.png similarity index 100% rename from admin/src/app/assets/images/index/auth.png rename to admin-vben/src/app/assets/images/index/auth.png diff --git a/admin/src/app/assets/images/index/auth1.png b/admin-vben/src/app/assets/images/index/auth1.png similarity index 100% rename from admin/src/app/assets/images/index/auth1.png rename to admin-vben/src/app/assets/images/index/auth1.png diff --git a/admin/src/app/assets/images/index/balance.png b/admin-vben/src/app/assets/images/index/balance.png similarity index 100% rename from admin/src/app/assets/images/index/balance.png rename to admin-vben/src/app/assets/images/index/balance.png diff --git a/admin/src/app/assets/images/index/banner_1.png b/admin-vben/src/app/assets/images/index/banner_1.png similarity index 100% rename from admin/src/app/assets/images/index/banner_1.png rename to admin-vben/src/app/assets/images/index/banner_1.png diff --git a/admin/src/app/assets/images/index/banner_2.png b/admin-vben/src/app/assets/images/index/banner_2.png similarity index 100% rename from admin/src/app/assets/images/index/banner_2.png rename to admin-vben/src/app/assets/images/index/banner_2.png diff --git a/admin/src/app/assets/images/index/cloud.png b/admin-vben/src/app/assets/images/index/cloud.png similarity index 100% rename from admin/src/app/assets/images/index/cloud.png rename to admin-vben/src/app/assets/images/index/cloud.png diff --git a/admin/src/app/assets/images/index/del_model.png b/admin-vben/src/app/assets/images/index/del_model.png similarity index 100% rename from admin/src/app/assets/images/index/del_model.png rename to admin-vben/src/app/assets/images/index/del_model.png diff --git a/admin/src/app/assets/images/index/edit.png b/admin-vben/src/app/assets/images/index/edit.png similarity index 100% rename from admin/src/app/assets/images/index/edit.png rename to admin-vben/src/app/assets/images/index/edit.png diff --git a/admin/src/app/assets/images/index/fitment.png b/admin-vben/src/app/assets/images/index/fitment.png similarity index 100% rename from admin/src/app/assets/images/index/fitment.png rename to admin-vben/src/app/assets/images/index/fitment.png diff --git a/admin/src/app/assets/images/index/install.png b/admin-vben/src/app/assets/images/index/install.png similarity index 100% rename from admin/src/app/assets/images/index/install.png rename to admin-vben/src/app/assets/images/index/install.png diff --git a/admin/src/app/assets/images/index/low-play.mp4 b/admin-vben/src/app/assets/images/index/low-play.mp4 similarity index 100% rename from admin/src/app/assets/images/index/low-play.mp4 rename to admin-vben/src/app/assets/images/index/low-play.mp4 diff --git a/admin/src/app/assets/images/index/member.png b/admin-vben/src/app/assets/images/index/member.png similarity index 100% rename from admin/src/app/assets/images/index/member.png rename to admin-vben/src/app/assets/images/index/member.png diff --git a/admin/src/app/assets/images/index/message_empty.png b/admin-vben/src/app/assets/images/index/message_empty.png similarity index 100% rename from admin/src/app/assets/images/index/message_empty.png rename to admin-vben/src/app/assets/images/index/message_empty.png diff --git a/admin/src/app/assets/images/index/model_tag.png b/admin-vben/src/app/assets/images/index/model_tag.png similarity index 100% rename from admin/src/app/assets/images/index/model_tag.png rename to admin-vben/src/app/assets/images/index/model_tag.png diff --git a/admin/src/app/assets/images/index/new_site.png b/admin-vben/src/app/assets/images/index/new_site.png similarity index 100% rename from admin/src/app/assets/images/index/new_site.png rename to admin-vben/src/app/assets/images/index/new_site.png diff --git a/admin/src/app/assets/images/index/new_site1.png b/admin-vben/src/app/assets/images/index/new_site1.png similarity index 100% rename from admin/src/app/assets/images/index/new_site1.png rename to admin-vben/src/app/assets/images/index/new_site1.png diff --git a/admin/src/app/assets/images/index/not_install.png b/admin-vben/src/app/assets/images/index/not_install.png similarity index 100% rename from admin/src/app/assets/images/index/not_install.png rename to admin-vben/src/app/assets/images/index/not_install.png diff --git a/admin/src/app/assets/images/index/overview.png b/admin-vben/src/app/assets/images/index/overview.png similarity index 100% rename from admin/src/app/assets/images/index/overview.png rename to admin-vben/src/app/assets/images/index/overview.png diff --git a/admin/src/app/assets/images/index/renovation.png b/admin-vben/src/app/assets/images/index/renovation.png similarity index 100% rename from admin/src/app/assets/images/index/renovation.png rename to admin-vben/src/app/assets/images/index/renovation.png diff --git a/admin/src/app/assets/images/index/site.png b/admin-vben/src/app/assets/images/index/site.png similarity index 100% rename from admin/src/app/assets/images/index/site.png rename to admin-vben/src/app/assets/images/index/site.png diff --git a/admin/src/app/assets/images/index/site1.png b/admin-vben/src/app/assets/images/index/site1.png similarity index 100% rename from admin/src/app/assets/images/index/site1.png rename to admin-vben/src/app/assets/images/index/site1.png diff --git a/admin/src/app/assets/images/index/site2.png b/admin-vben/src/app/assets/images/index/site2.png similarity index 100% rename from admin/src/app/assets/images/index/site2.png rename to admin-vben/src/app/assets/images/index/site2.png diff --git a/admin/src/app/assets/images/index/site3.png b/admin-vben/src/app/assets/images/index/site3.png similarity index 100% rename from admin/src/app/assets/images/index/site3.png rename to admin-vben/src/app/assets/images/index/site3.png diff --git a/admin/src/app/assets/images/index/site_add.png b/admin-vben/src/app/assets/images/index/site_add.png similarity index 100% rename from admin/src/app/assets/images/index/site_add.png rename to admin-vben/src/app/assets/images/index/site_add.png diff --git a/admin/src/app/assets/images/index/site_add1.png b/admin-vben/src/app/assets/images/index/site_add1.png similarity index 100% rename from admin/src/app/assets/images/index/site_add1.png rename to admin-vben/src/app/assets/images/index/site_add1.png diff --git a/admin/src/app/assets/images/index/site_auth.png b/admin-vben/src/app/assets/images/index/site_auth.png similarity index 100% rename from admin/src/app/assets/images/index/site_auth.png rename to admin-vben/src/app/assets/images/index/site_auth.png diff --git a/admin/src/app/assets/images/index/site_balance.png b/admin-vben/src/app/assets/images/index/site_balance.png similarity index 100% rename from admin/src/app/assets/images/index/site_balance.png rename to admin-vben/src/app/assets/images/index/site_balance.png diff --git a/admin/src/app/assets/images/index/site_bg.png b/admin-vben/src/app/assets/images/index/site_bg.png similarity index 100% rename from admin/src/app/assets/images/index/site_bg.png rename to admin-vben/src/app/assets/images/index/site_bg.png diff --git a/admin/src/app/assets/images/index/site_class.png b/admin-vben/src/app/assets/images/index/site_class.png similarity index 100% rename from admin/src/app/assets/images/index/site_class.png rename to admin-vben/src/app/assets/images/index/site_class.png diff --git a/admin/src/app/assets/images/index/site_class1.png b/admin-vben/src/app/assets/images/index/site_class1.png similarity index 100% rename from admin/src/app/assets/images/index/site_class1.png rename to admin-vben/src/app/assets/images/index/site_class1.png diff --git a/admin/src/app/assets/images/index/site_img.png b/admin-vben/src/app/assets/images/index/site_img.png similarity index 100% rename from admin/src/app/assets/images/index/site_img.png rename to admin-vben/src/app/assets/images/index/site_img.png diff --git a/admin/src/app/assets/images/index/site_list.png b/admin-vben/src/app/assets/images/index/site_list.png similarity index 100% rename from admin/src/app/assets/images/index/site_list.png rename to admin-vben/src/app/assets/images/index/site_list.png diff --git a/admin/src/app/assets/images/index/site_list1.png b/admin-vben/src/app/assets/images/index/site_list1.png similarity index 100% rename from admin/src/app/assets/images/index/site_list1.png rename to admin-vben/src/app/assets/images/index/site_list1.png diff --git a/admin/src/app/assets/images/index/site_member.png b/admin-vben/src/app/assets/images/index/site_member.png similarity index 100% rename from admin/src/app/assets/images/index/site_member.png rename to admin-vben/src/app/assets/images/index/site_member.png diff --git a/admin/src/app/assets/images/index/site_normal.png b/admin-vben/src/app/assets/images/index/site_normal.png similarity index 100% rename from admin/src/app/assets/images/index/site_normal.png rename to admin-vben/src/app/assets/images/index/site_normal.png diff --git a/admin/src/app/assets/images/index/site_tc.png b/admin-vben/src/app/assets/images/index/site_tc.png similarity index 100% rename from admin/src/app/assets/images/index/site_tc.png rename to admin-vben/src/app/assets/images/index/site_tc.png diff --git a/admin/src/app/assets/images/index/site_tc1.png b/admin-vben/src/app/assets/images/index/site_tc1.png similarity index 100% rename from admin/src/app/assets/images/index/site_tc1.png rename to admin-vben/src/app/assets/images/index/site_tc1.png diff --git a/admin/src/app/assets/images/index/site_user.png b/admin-vben/src/app/assets/images/index/site_user.png similarity index 100% rename from admin/src/app/assets/images/index/site_user.png rename to admin-vben/src/app/assets/images/index/site_user.png diff --git a/admin/src/app/assets/images/index/site_user1.png b/admin-vben/src/app/assets/images/index/site_user1.png similarity index 100% rename from admin/src/app/assets/images/index/site_user1.png rename to admin-vben/src/app/assets/images/index/site_user1.png diff --git a/admin/src/app/assets/images/index/wework_qrcode.png b/admin-vben/src/app/assets/images/index/wework_qrcode.png similarity index 100% rename from admin/src/app/assets/images/index/wework_qrcode.png rename to admin-vben/src/app/assets/images/index/wework_qrcode.png diff --git a/admin/src/app/assets/images/index/wx_qrcode.jpg b/admin-vben/src/app/assets/images/index/wx_qrcode.jpg similarity index 100% rename from admin/src/app/assets/images/index/wx_qrcode.jpg rename to admin-vben/src/app/assets/images/index/wx_qrcode.jpg diff --git a/admin/src/app/assets/images/iphone_bg.png b/admin-vben/src/app/assets/images/iphone_bg.png similarity index 100% rename from admin/src/app/assets/images/iphone_bg.png rename to admin-vben/src/app/assets/images/iphone_bg.png diff --git a/admin/src/app/assets/images/layout_bussiness.png b/admin-vben/src/app/assets/images/layout_bussiness.png similarity index 100% rename from admin/src/app/assets/images/layout_bussiness.png rename to admin-vben/src/app/assets/images/layout_bussiness.png diff --git a/admin/src/app/assets/images/layout_darkside.png b/admin-vben/src/app/assets/images/layout_darkside.png similarity index 100% rename from admin/src/app/assets/images/layout_darkside.png rename to admin-vben/src/app/assets/images/layout_darkside.png diff --git a/admin/src/app/assets/images/layout_default.png b/admin-vben/src/app/assets/images/layout_default.png similarity index 100% rename from admin/src/app/assets/images/layout_default.png rename to admin-vben/src/app/assets/images/layout_default.png diff --git a/admin/src/app/assets/images/layout_profession.png b/admin-vben/src/app/assets/images/layout_profession.png similarity index 100% rename from admin/src/app/assets/images/layout_profession.png rename to admin-vben/src/app/assets/images/layout_profession.png diff --git a/admin/src/app/assets/images/login/login_bg.jpg b/admin-vben/src/app/assets/images/login/login_bg.jpg similarity index 100% rename from admin/src/app/assets/images/login/login_bg.jpg rename to admin-vben/src/app/assets/images/login/login_bg.jpg diff --git a/admin/src/app/assets/images/login/login_icon.png b/admin-vben/src/app/assets/images/login/login_icon.png similarity index 100% rename from admin/src/app/assets/images/login/login_icon.png rename to admin-vben/src/app/assets/images/login/login_icon.png diff --git a/admin/src/app/assets/images/login/login_index_bg.jpg b/admin-vben/src/app/assets/images/login/login_index_bg.jpg similarity index 100% rename from admin/src/app/assets/images/login/login_index_bg.jpg rename to admin-vben/src/app/assets/images/login/login_index_bg.jpg diff --git a/admin/src/app/assets/images/login/login_index_left.png b/admin-vben/src/app/assets/images/login/login_index_left.png similarity index 100% rename from admin/src/app/assets/images/login/login_index_left.png rename to admin-vben/src/app/assets/images/login/login_index_left.png diff --git a/admin/src/app/assets/images/login/password.png b/admin-vben/src/app/assets/images/login/password.png similarity index 100% rename from admin/src/app/assets/images/login/password.png rename to admin-vben/src/app/assets/images/login/password.png diff --git a/admin/src/app/assets/images/login/site_login_bg.png b/admin-vben/src/app/assets/images/login/site_login_bg.png similarity index 100% rename from admin/src/app/assets/images/login/site_login_bg.png rename to admin-vben/src/app/assets/images/login/site_login_bg.png diff --git a/admin/src/app/assets/images/login/username.png b/admin-vben/src/app/assets/images/login/username.png similarity index 100% rename from admin/src/app/assets/images/login/username.png rename to admin-vben/src/app/assets/images/login/username.png diff --git a/admin/src/app/assets/images/login_bg.png b/admin-vben/src/app/assets/images/login_bg.png similarity index 100% rename from admin/src/app/assets/images/login_bg.png rename to admin-vben/src/app/assets/images/login_bg.png diff --git a/admin/src/app/assets/images/login_logo.png b/admin-vben/src/app/assets/images/login_logo.png similarity index 100% rename from admin/src/app/assets/images/login_logo.png rename to admin-vben/src/app/assets/images/login_logo.png diff --git a/admin/src/app/assets/images/logo.default.png b/admin-vben/src/app/assets/images/logo.default.png similarity index 100% rename from admin/src/app/assets/images/logo.default.png rename to admin-vben/src/app/assets/images/logo.default.png diff --git a/admin/src/app/assets/images/logo.png b/admin-vben/src/app/assets/images/logo.png similarity index 100% rename from admin/src/app/assets/images/logo.png rename to admin-vben/src/app/assets/images/logo.png diff --git a/admin/src/app/assets/images/member_head.png b/admin-vben/src/app/assets/images/member_head.png similarity index 100% rename from admin/src/app/assets/images/member_head.png rename to admin-vben/src/app/assets/images/member_head.png diff --git a/admin/src/app/assets/images/no_attachment.png b/admin-vben/src/app/assets/images/no_attachment.png similarity index 100% rename from admin/src/app/assets/images/no_attachment.png rename to admin-vben/src/app/assets/images/no_attachment.png diff --git a/admin/src/app/assets/images/no_perms.png b/admin-vben/src/app/assets/images/no_perms.png similarity index 100% rename from admin/src/app/assets/images/no_perms.png rename to admin-vben/src/app/assets/images/no_perms.png diff --git a/admin/src/app/assets/images/one_type.png b/admin-vben/src/app/assets/images/one_type.png similarity index 100% rename from admin/src/app/assets/images/one_type.png rename to admin-vben/src/app/assets/images/one_type.png diff --git a/admin/src/app/assets/images/setting/QRcode.png b/admin-vben/src/app/assets/images/setting/QRcode.png similarity index 100% rename from admin/src/app/assets/images/setting/QRcode.png rename to admin-vben/src/app/assets/images/setting/QRcode.png diff --git a/admin/src/app/assets/images/setting/alipay1.png b/admin-vben/src/app/assets/images/setting/alipay1.png similarity index 100% rename from admin/src/app/assets/images/setting/alipay1.png rename to admin-vben/src/app/assets/images/setting/alipay1.png diff --git a/admin/src/app/assets/images/setting/alipay2.png b/admin-vben/src/app/assets/images/setting/alipay2.png similarity index 100% rename from admin/src/app/assets/images/setting/alipay2.png rename to admin-vben/src/app/assets/images/setting/alipay2.png diff --git a/admin/src/app/assets/images/setting/alipay3.png b/admin-vben/src/app/assets/images/setting/alipay3.png similarity index 100% rename from admin/src/app/assets/images/setting/alipay3.png rename to admin-vben/src/app/assets/images/setting/alipay3.png diff --git a/admin/src/app/assets/images/setting/alipay4.png b/admin-vben/src/app/assets/images/setting/alipay4.png similarity index 100% rename from admin/src/app/assets/images/setting/alipay4.png rename to admin-vben/src/app/assets/images/setting/alipay4.png diff --git a/admin/src/app/assets/images/setting/alipay4_1.jpg b/admin-vben/src/app/assets/images/setting/alipay4_1.jpg similarity index 100% rename from admin/src/app/assets/images/setting/alipay4_1.jpg rename to admin-vben/src/app/assets/images/setting/alipay4_1.jpg diff --git a/admin/src/app/assets/images/setting/alipay4_2.jpg b/admin-vben/src/app/assets/images/setting/alipay4_2.jpg similarity index 100% rename from admin/src/app/assets/images/setting/alipay4_2.jpg rename to admin-vben/src/app/assets/images/setting/alipay4_2.jpg diff --git a/admin/src/app/assets/images/setting/alipay4_3.jpg b/admin-vben/src/app/assets/images/setting/alipay4_3.jpg similarity index 100% rename from admin/src/app/assets/images/setting/alipay4_3.jpg rename to admin-vben/src/app/assets/images/setting/alipay4_3.jpg diff --git a/admin/src/app/assets/images/setting/alipay4_4.jpg b/admin-vben/src/app/assets/images/setting/alipay4_4.jpg similarity index 100% rename from admin/src/app/assets/images/setting/alipay4_4.jpg rename to admin-vben/src/app/assets/images/setting/alipay4_4.jpg diff --git a/admin/src/app/assets/images/setting/alipay5.png b/admin-vben/src/app/assets/images/setting/alipay5.png similarity index 100% rename from admin/src/app/assets/images/setting/alipay5.png rename to admin-vben/src/app/assets/images/setting/alipay5.png diff --git a/admin/src/app/assets/images/setting/alipay6.png b/admin-vben/src/app/assets/images/setting/alipay6.png similarity index 100% rename from admin/src/app/assets/images/setting/alipay6.png rename to admin-vben/src/app/assets/images/setting/alipay6.png diff --git a/admin/src/app/assets/images/setting/alipay7.png b/admin-vben/src/app/assets/images/setting/alipay7.png similarity index 100% rename from admin/src/app/assets/images/setting/alipay7.png rename to admin-vben/src/app/assets/images/setting/alipay7.png diff --git a/admin/src/app/assets/images/setting/alipay8.png b/admin-vben/src/app/assets/images/setting/alipay8.png similarity index 100% rename from admin/src/app/assets/images/setting/alipay8.png rename to admin-vben/src/app/assets/images/setting/alipay8.png diff --git a/admin/src/app/assets/images/setting/app-authorize1.png b/admin-vben/src/app/assets/images/setting/app-authorize1.png similarity index 100% rename from admin/src/app/assets/images/setting/app-authorize1.png rename to admin-vben/src/app/assets/images/setting/app-authorize1.png diff --git a/admin/src/app/assets/images/setting/weapp_1.png b/admin-vben/src/app/assets/images/setting/weapp_1.png similarity index 100% rename from admin/src/app/assets/images/setting/weapp_1.png rename to admin-vben/src/app/assets/images/setting/weapp_1.png diff --git a/admin/src/app/assets/images/setting/weapp_2.png b/admin-vben/src/app/assets/images/setting/weapp_2.png similarity index 100% rename from admin/src/app/assets/images/setting/weapp_2.png rename to admin-vben/src/app/assets/images/setting/weapp_2.png diff --git a/admin/src/app/assets/images/setting/weapp_3.png b/admin-vben/src/app/assets/images/setting/weapp_3.png similarity index 100% rename from admin/src/app/assets/images/setting/weapp_3.png rename to admin-vben/src/app/assets/images/setting/weapp_3.png diff --git a/admin/src/app/assets/images/setting/weapp_4.png b/admin-vben/src/app/assets/images/setting/weapp_4.png similarity index 100% rename from admin/src/app/assets/images/setting/weapp_4.png rename to admin-vben/src/app/assets/images/setting/weapp_4.png diff --git a/admin/src/app/assets/images/setting/wechat_1.png b/admin-vben/src/app/assets/images/setting/wechat_1.png similarity index 100% rename from admin/src/app/assets/images/setting/wechat_1.png rename to admin-vben/src/app/assets/images/setting/wechat_1.png diff --git a/admin/src/app/assets/images/setting/wechat_2.png b/admin-vben/src/app/assets/images/setting/wechat_2.png similarity index 100% rename from admin/src/app/assets/images/setting/wechat_2.png rename to admin-vben/src/app/assets/images/setting/wechat_2.png diff --git a/admin/src/app/assets/images/setting/wechat_3.png b/admin-vben/src/app/assets/images/setting/wechat_3.png similarity index 100% rename from admin/src/app/assets/images/setting/wechat_3.png rename to admin-vben/src/app/assets/images/setting/wechat_3.png diff --git a/admin/src/app/assets/images/setting/wechat_4.png b/admin-vben/src/app/assets/images/setting/wechat_4.png similarity index 100% rename from admin/src/app/assets/images/setting/wechat_4.png rename to admin-vben/src/app/assets/images/setting/wechat_4.png diff --git a/admin/src/app/assets/images/site_default.png b/admin-vben/src/app/assets/images/site_default.png similarity index 100% rename from admin/src/app/assets/images/site_default.png rename to admin-vben/src/app/assets/images/site_default.png diff --git a/admin/src/app/assets/images/site_empty.png b/admin-vben/src/app/assets/images/site_empty.png similarity index 100% rename from admin/src/app/assets/images/site_empty.png rename to admin-vben/src/app/assets/images/site_empty.png diff --git a/admin/src/app/assets/images/site_login.png b/admin-vben/src/app/assets/images/site_login.png similarity index 100% rename from admin/src/app/assets/images/site_login.png rename to admin-vben/src/app/assets/images/site_login.png diff --git a/admin/src/app/assets/images/site_login_bg.png b/admin-vben/src/app/assets/images/site_login_bg.png similarity index 100% rename from admin/src/app/assets/images/site_login_bg.png rename to admin-vben/src/app/assets/images/site_login_bg.png diff --git a/admin/src/app/assets/images/site_login_logo.png b/admin-vben/src/app/assets/images/site_login_logo.png similarity index 100% rename from admin/src/app/assets/images/site_login_logo.png rename to admin-vben/src/app/assets/images/site_login_logo.png diff --git a/admin/src/app/assets/images/site_logo.png b/admin-vben/src/app/assets/images/site_logo.png similarity index 100% rename from admin/src/app/assets/images/site_logo.png rename to admin-vben/src/app/assets/images/site_logo.png diff --git a/admin/src/app/assets/images/success_icon.png b/admin-vben/src/app/assets/images/success_icon.png similarity index 100% rename from admin/src/app/assets/images/success_icon.png rename to admin-vben/src/app/assets/images/success_icon.png diff --git a/admin/src/app/assets/images/theme_black.png b/admin-vben/src/app/assets/images/theme_black.png similarity index 100% rename from admin/src/app/assets/images/theme_black.png rename to admin-vben/src/app/assets/images/theme_black.png diff --git a/admin/src/app/assets/images/theme_white.png b/admin-vben/src/app/assets/images/theme_white.png similarity index 100% rename from admin/src/app/assets/images/theme_white.png rename to admin-vben/src/app/assets/images/theme_white.png diff --git a/admin/src/app/assets/images/three_type.png b/admin-vben/src/app/assets/images/three_type.png similarity index 100% rename from admin/src/app/assets/images/three_type.png rename to admin-vben/src/app/assets/images/three_type.png diff --git a/admin/src/app/assets/images/tools/addon_develop.png b/admin-vben/src/app/assets/images/tools/addon_develop.png similarity index 100% rename from admin/src/app/assets/images/tools/addon_develop.png rename to admin-vben/src/app/assets/images/tools/addon_develop.png diff --git a/admin/src/app/assets/images/tools/app_auth.png b/admin-vben/src/app/assets/images/tools/app_auth.png similarity index 100% rename from admin/src/app/assets/images/tools/app_auth.png rename to admin-vben/src/app/assets/images/tools/app_auth.png diff --git a/admin/src/app/assets/images/tools/auth_menu.png b/admin-vben/src/app/assets/images/tools/auth_menu.png similarity index 100% rename from admin/src/app/assets/images/tools/auth_menu.png rename to admin-vben/src/app/assets/images/tools/auth_menu.png diff --git a/admin/src/app/assets/images/tools/authorize.png b/admin-vben/src/app/assets/images/tools/authorize.png similarity index 100% rename from admin/src/app/assets/images/tools/authorize.png rename to admin-vben/src/app/assets/images/tools/authorize.png diff --git a/admin/src/app/assets/images/tools/code.png b/admin-vben/src/app/assets/images/tools/code.png similarity index 100% rename from admin/src/app/assets/images/tools/code.png rename to admin-vben/src/app/assets/images/tools/code.png diff --git a/admin/src/app/assets/images/tools/developer.png b/admin-vben/src/app/assets/images/tools/developer.png similarity index 100% rename from admin/src/app/assets/images/tools/developer.png rename to admin-vben/src/app/assets/images/tools/developer.png diff --git a/admin/src/app/assets/images/tools/official_market.png b/admin-vben/src/app/assets/images/tools/official_market.png similarity index 100% rename from admin/src/app/assets/images/tools/official_market.png rename to admin-vben/src/app/assets/images/tools/official_market.png diff --git a/admin/src/app/assets/images/tools/sys_dict_list.png b/admin-vben/src/app/assets/images/tools/sys_dict_list.png similarity index 100% rename from admin/src/app/assets/images/tools/sys_dict_list.png rename to admin-vben/src/app/assets/images/tools/sys_dict_list.png diff --git a/admin/src/app/assets/images/tools/tools_backup_records.png b/admin-vben/src/app/assets/images/tools/tools_backup_records.png similarity index 100% rename from admin/src/app/assets/images/tools/tools_backup_records.png rename to admin-vben/src/app/assets/images/tools/tools_backup_records.png diff --git a/admin/src/app/assets/images/tools/tools_check_environment.png b/admin-vben/src/app/assets/images/tools/tools_check_environment.png similarity index 100% rename from admin/src/app/assets/images/tools/tools_check_environment.png rename to admin-vben/src/app/assets/images/tools/tools_check_environment.png diff --git a/admin/src/app/assets/images/tools/tools_cloud_compile.png b/admin-vben/src/app/assets/images/tools/tools_cloud_compile.png similarity index 100% rename from admin/src/app/assets/images/tools/tools_cloud_compile.png rename to admin-vben/src/app/assets/images/tools/tools_cloud_compile.png diff --git a/admin/src/app/assets/images/tools/tools_schedule.png b/admin-vben/src/app/assets/images/tools/tools_schedule.png similarity index 100% rename from admin/src/app/assets/images/tools/tools_schedule.png rename to admin-vben/src/app/assets/images/tools/tools_schedule.png diff --git a/admin/src/app/assets/images/tools/tools_update_cache.png b/admin-vben/src/app/assets/images/tools/tools_update_cache.png similarity index 100% rename from admin/src/app/assets/images/tools/tools_update_cache.png rename to admin-vben/src/app/assets/images/tools/tools_update_cache.png diff --git a/admin/src/app/assets/images/tools/tools_upgrade.png b/admin-vben/src/app/assets/images/tools/tools_upgrade.png similarity index 100% rename from admin/src/app/assets/images/tools/tools_upgrade.png rename to admin-vben/src/app/assets/images/tools/tools_upgrade.png diff --git a/admin/src/app/assets/images/tools/tools_upgrade_records.png b/admin-vben/src/app/assets/images/tools/tools_upgrade_records.png similarity index 100% rename from admin/src/app/assets/images/tools/tools_upgrade_records.png rename to admin-vben/src/app/assets/images/tools/tools_upgrade_records.png diff --git a/admin/src/app/assets/images/tools/upgrade.png b/admin-vben/src/app/assets/images/tools/upgrade.png similarity index 100% rename from admin/src/app/assets/images/tools/upgrade.png rename to admin-vben/src/app/assets/images/tools/upgrade.png diff --git a/admin/src/app/assets/images/two_type.png b/admin-vben/src/app/assets/images/two_type.png similarity index 100% rename from admin/src/app/assets/images/two_type.png rename to admin-vben/src/app/assets/images/two_type.png diff --git a/admin/src/app/assets/images/versions.png b/admin-vben/src/app/assets/images/versions.png similarity index 100% rename from admin/src/app/assets/images/versions.png rename to admin-vben/src/app/assets/images/versions.png diff --git a/admin/src/app/assets/images/wechat-menu-head-bg.png b/admin-vben/src/app/assets/images/wechat-menu-head-bg.png similarity index 100% rename from admin/src/app/assets/images/wechat-menu-head-bg.png rename to admin-vben/src/app/assets/images/wechat-menu-head-bg.png diff --git a/admin/src/app/assets/images/wechat-menu-head-dark-bg.png b/admin-vben/src/app/assets/images/wechat-menu-head-dark-bg.png similarity index 100% rename from admin/src/app/assets/images/wechat-menu-head-dark-bg.png rename to admin-vben/src/app/assets/images/wechat-menu-head-dark-bg.png diff --git a/admin/src/app/assets/images/white_logo.png b/admin-vben/src/app/assets/images/white_logo.png similarity index 100% rename from admin/src/app/assets/images/white_logo.png rename to admin-vben/src/app/assets/images/white_logo.png diff --git a/admin/src/app/assets/images/write.png b/admin-vben/src/app/assets/images/write.png similarity index 100% rename from admin/src/app/assets/images/write.png rename to admin-vben/src/app/assets/images/write.png diff --git a/admin/src/app/components/cloud-build/index.vue b/admin-vben/src/app/components/cloud-build/index.vue similarity index 100% rename from admin/src/app/components/cloud-build/index.vue rename to admin-vben/src/app/components/cloud-build/index.vue diff --git a/admin/src/app/components/upgrade-log/index.vue b/admin-vben/src/app/components/upgrade-log/index.vue similarity index 100% rename from admin/src/app/components/upgrade-log/index.vue rename to admin-vben/src/app/components/upgrade-log/index.vue diff --git a/admin/src/app/components/upgrade/index.vue b/admin-vben/src/app/components/upgrade/index.vue similarity index 100% rename from admin/src/app/components/upgrade/index.vue rename to admin-vben/src/app/components/upgrade/index.vue diff --git a/admin/src/app/components/user-info-edit/index.vue b/admin-vben/src/app/components/user-info-edit/index.vue similarity index 100% rename from admin/src/app/components/user-info-edit/index.vue rename to admin-vben/src/app/components/user-info-edit/index.vue diff --git a/admin/src/app/lang/en/403.json b/admin-vben/src/app/lang/en/403.json similarity index 100% rename from admin/src/app/lang/en/403.json rename to admin-vben/src/app/lang/en/403.json diff --git a/admin/src/app/lang/en/auth.menu.json b/admin-vben/src/app/lang/en/auth.menu.json similarity index 100% rename from admin/src/app/lang/en/auth.menu.json rename to admin-vben/src/app/lang/en/auth.menu.json diff --git a/admin/src/app/lang/en/index.json b/admin-vben/src/app/lang/en/index.json similarity index 100% rename from admin/src/app/lang/en/index.json rename to admin-vben/src/app/lang/en/index.json diff --git a/admin/src/app/lang/en/login.json b/admin-vben/src/app/lang/en/login.json similarity index 100% rename from admin/src/app/lang/en/login.json rename to admin-vben/src/app/lang/en/login.json diff --git a/admin/src/app/lang/en/member.member.json b/admin-vben/src/app/lang/en/member.member.json similarity index 100% rename from admin/src/app/lang/en/member.member.json rename to admin-vben/src/app/lang/en/member.member.json diff --git a/admin/src/app/lang/en/user.center.json b/admin-vben/src/app/lang/en/user.center.json similarity index 100% rename from admin/src/app/lang/en/user.center.json rename to admin-vben/src/app/lang/en/user.center.json diff --git a/admin/src/app/lang/zh-cn/403.json b/admin-vben/src/app/lang/zh-cn/403.json similarity index 100% rename from admin/src/app/lang/zh-cn/403.json rename to admin-vben/src/app/lang/zh-cn/403.json diff --git a/admin/src/app/lang/zh-cn/app.authorize.json b/admin-vben/src/app/lang/zh-cn/app.authorize.json similarity index 100% rename from admin/src/app/lang/zh-cn/app.authorize.json rename to admin-vben/src/app/lang/zh-cn/app.authorize.json diff --git a/admin/src/app/lang/zh-cn/app.index.json b/admin-vben/src/app/lang/zh-cn/app.index.json similarity index 100% rename from admin/src/app/lang/zh-cn/app.index.json rename to admin-vben/src/app/lang/zh-cn/app.index.json diff --git a/admin/src/app/lang/zh-cn/app.store.json b/admin-vben/src/app/lang/zh-cn/app.store.json similarity index 100% rename from admin/src/app/lang/zh-cn/app.store.json rename to admin-vben/src/app/lang/zh-cn/app.store.json diff --git a/admin/src/app/lang/zh-cn/app.upgrade.json b/admin-vben/src/app/lang/zh-cn/app.upgrade.json similarity index 100% rename from admin/src/app/lang/zh-cn/app.upgrade.json rename to admin-vben/src/app/lang/zh-cn/app.upgrade.json diff --git a/admin/src/app/lang/zh-cn/auth.log.json b/admin-vben/src/app/lang/zh-cn/auth.log.json similarity index 100% rename from admin/src/app/lang/zh-cn/auth.log.json rename to admin-vben/src/app/lang/zh-cn/auth.log.json diff --git a/admin/src/app/lang/zh-cn/auth.menu.json b/admin-vben/src/app/lang/zh-cn/auth.menu.json similarity index 100% rename from admin/src/app/lang/zh-cn/auth.menu.json rename to admin-vben/src/app/lang/zh-cn/auth.menu.json diff --git a/admin/src/app/lang/zh-cn/auth.role.json b/admin-vben/src/app/lang/zh-cn/auth.role.json similarity index 100% rename from admin/src/app/lang/zh-cn/auth.role.json rename to admin-vben/src/app/lang/zh-cn/auth.role.json diff --git a/admin/src/app/lang/zh-cn/auth.site_menu.json b/admin-vben/src/app/lang/zh-cn/auth.site_menu.json similarity index 100% rename from admin/src/app/lang/zh-cn/auth.site_menu.json rename to admin-vben/src/app/lang/zh-cn/auth.site_menu.json diff --git a/admin/src/app/lang/zh-cn/auth.user.json b/admin-vben/src/app/lang/zh-cn/auth.user.json similarity index 100% rename from admin/src/app/lang/zh-cn/auth.user.json rename to admin-vben/src/app/lang/zh-cn/auth.user.json diff --git a/admin/src/app/lang/zh-cn/channel.aliapp.access.json b/admin-vben/src/app/lang/zh-cn/channel.aliapp.access.json similarity index 100% rename from admin/src/app/lang/zh-cn/channel.aliapp.access.json rename to admin-vben/src/app/lang/zh-cn/channel.aliapp.access.json diff --git a/admin/src/app/lang/zh-cn/channel.aliapp.config.json b/admin-vben/src/app/lang/zh-cn/channel.aliapp.config.json similarity index 100% rename from admin/src/app/lang/zh-cn/channel.aliapp.config.json rename to admin-vben/src/app/lang/zh-cn/channel.aliapp.config.json diff --git a/admin/src/app/lang/zh-cn/channel.aliapp.course.json b/admin-vben/src/app/lang/zh-cn/channel.aliapp.course.json similarity index 100% rename from admin/src/app/lang/zh-cn/channel.aliapp.course.json rename to admin-vben/src/app/lang/zh-cn/channel.aliapp.course.json diff --git a/admin/src/app/lang/zh-cn/channel.app.access.json b/admin-vben/src/app/lang/zh-cn/channel.app.access.json similarity index 100% rename from admin/src/app/lang/zh-cn/channel.app.access.json rename to admin-vben/src/app/lang/zh-cn/channel.app.access.json diff --git a/admin/src/app/lang/zh-cn/channel.app.config.json b/admin-vben/src/app/lang/zh-cn/channel.app.config.json similarity index 100% rename from admin/src/app/lang/zh-cn/channel.app.config.json rename to admin-vben/src/app/lang/zh-cn/channel.app.config.json diff --git a/admin/src/app/lang/zh-cn/channel.app.version.json b/admin-vben/src/app/lang/zh-cn/channel.app.version.json similarity index 100% rename from admin/src/app/lang/zh-cn/channel.app.version.json rename to admin-vben/src/app/lang/zh-cn/channel.app.version.json diff --git a/admin/src/app/lang/zh-cn/channel.h5.config.json b/admin-vben/src/app/lang/zh-cn/channel.h5.config.json similarity index 100% rename from admin/src/app/lang/zh-cn/channel.h5.config.json rename to admin-vben/src/app/lang/zh-cn/channel.h5.config.json diff --git a/admin/src/app/lang/zh-cn/channel.pc.config.json b/admin-vben/src/app/lang/zh-cn/channel.pc.config.json similarity index 100% rename from admin/src/app/lang/zh-cn/channel.pc.config.json rename to admin-vben/src/app/lang/zh-cn/channel.pc.config.json diff --git a/admin/src/app/lang/zh-cn/channel.weapp.access.json b/admin-vben/src/app/lang/zh-cn/channel.weapp.access.json similarity index 100% rename from admin/src/app/lang/zh-cn/channel.weapp.access.json rename to admin-vben/src/app/lang/zh-cn/channel.weapp.access.json diff --git a/admin/src/app/lang/zh-cn/channel.weapp.code.json b/admin-vben/src/app/lang/zh-cn/channel.weapp.code.json similarity index 100% rename from admin/src/app/lang/zh-cn/channel.weapp.code.json rename to admin-vben/src/app/lang/zh-cn/channel.weapp.code.json diff --git a/admin/src/app/lang/zh-cn/channel.weapp.config.json b/admin-vben/src/app/lang/zh-cn/channel.weapp.config.json similarity index 100% rename from admin/src/app/lang/zh-cn/channel.weapp.config.json rename to admin-vben/src/app/lang/zh-cn/channel.weapp.config.json diff --git a/admin/src/app/lang/zh-cn/channel.weapp.course.json b/admin-vben/src/app/lang/zh-cn/channel.weapp.course.json similarity index 100% rename from admin/src/app/lang/zh-cn/channel.weapp.course.json rename to admin-vben/src/app/lang/zh-cn/channel.weapp.course.json diff --git a/admin/src/app/lang/zh-cn/channel.weapp.template.json b/admin-vben/src/app/lang/zh-cn/channel.weapp.template.json similarity index 100% rename from admin/src/app/lang/zh-cn/channel.weapp.template.json rename to admin-vben/src/app/lang/zh-cn/channel.weapp.template.json diff --git a/admin/src/app/lang/zh-cn/channel.wechat.access.json b/admin-vben/src/app/lang/zh-cn/channel.wechat.access.json similarity index 100% rename from admin/src/app/lang/zh-cn/channel.wechat.access.json rename to admin-vben/src/app/lang/zh-cn/channel.wechat.access.json diff --git a/admin/src/app/lang/zh-cn/channel.wechat.config.json b/admin-vben/src/app/lang/zh-cn/channel.wechat.config.json similarity index 100% rename from admin/src/app/lang/zh-cn/channel.wechat.config.json rename to admin-vben/src/app/lang/zh-cn/channel.wechat.config.json diff --git a/admin/src/app/lang/zh-cn/channel.wechat.course.json b/admin-vben/src/app/lang/zh-cn/channel.wechat.course.json similarity index 100% rename from admin/src/app/lang/zh-cn/channel.wechat.course.json rename to admin-vben/src/app/lang/zh-cn/channel.wechat.course.json diff --git a/admin/src/app/lang/zh-cn/channel.wechat.keyword_reply_edit.json b/admin-vben/src/app/lang/zh-cn/channel.wechat.keyword_reply_edit.json similarity index 100% rename from admin/src/app/lang/zh-cn/channel.wechat.keyword_reply_edit.json rename to admin-vben/src/app/lang/zh-cn/channel.wechat.keyword_reply_edit.json diff --git a/admin/src/app/lang/zh-cn/channel.wechat.menu.json b/admin-vben/src/app/lang/zh-cn/channel.wechat.menu.json similarity index 100% rename from admin/src/app/lang/zh-cn/channel.wechat.menu.json rename to admin-vben/src/app/lang/zh-cn/channel.wechat.menu.json diff --git a/admin/src/app/lang/zh-cn/channel.wechat.reply.json b/admin-vben/src/app/lang/zh-cn/channel.wechat.reply.json similarity index 100% rename from admin/src/app/lang/zh-cn/channel.wechat.reply.json rename to admin-vben/src/app/lang/zh-cn/channel.wechat.reply.json diff --git a/admin/src/app/lang/zh-cn/channel.wechat.template.json b/admin-vben/src/app/lang/zh-cn/channel.wechat.template.json similarity index 100% rename from admin/src/app/lang/zh-cn/channel.wechat.template.json rename to admin-vben/src/app/lang/zh-cn/channel.wechat.template.json diff --git a/admin/src/app/lang/zh-cn/decorate.preview.json b/admin-vben/src/app/lang/zh-cn/decorate.preview.json similarity index 100% rename from admin/src/app/lang/zh-cn/decorate.preview.json rename to admin-vben/src/app/lang/zh-cn/decorate.preview.json diff --git a/admin/src/app/lang/zh-cn/dict.list.json b/admin-vben/src/app/lang/zh-cn/dict.list.json similarity index 100% rename from admin/src/app/lang/zh-cn/dict.list.json rename to admin-vben/src/app/lang/zh-cn/dict.list.json diff --git a/admin/src/app/lang/zh-cn/diy.edit.json b/admin-vben/src/app/lang/zh-cn/diy.edit.json similarity index 100% rename from admin/src/app/lang/zh-cn/diy.edit.json rename to admin-vben/src/app/lang/zh-cn/diy.edit.json diff --git a/admin/src/app/lang/zh-cn/diy.index.json b/admin-vben/src/app/lang/zh-cn/diy.index.json similarity index 100% rename from admin/src/app/lang/zh-cn/diy.index.json rename to admin-vben/src/app/lang/zh-cn/diy.index.json diff --git a/admin/src/app/lang/zh-cn/diy.list.json b/admin-vben/src/app/lang/zh-cn/diy.list.json similarity index 100% rename from admin/src/app/lang/zh-cn/diy.list.json rename to admin-vben/src/app/lang/zh-cn/diy.list.json diff --git a/admin/src/app/lang/zh-cn/diy.member.json b/admin-vben/src/app/lang/zh-cn/diy.member.json similarity index 100% rename from admin/src/app/lang/zh-cn/diy.member.json rename to admin-vben/src/app/lang/zh-cn/diy.member.json diff --git a/admin/src/app/lang/zh-cn/diy.preview.json b/admin-vben/src/app/lang/zh-cn/diy.preview.json similarity index 100% rename from admin/src/app/lang/zh-cn/diy.preview.json rename to admin-vben/src/app/lang/zh-cn/diy.preview.json diff --git a/admin/src/app/lang/zh-cn/diy.route.json b/admin-vben/src/app/lang/zh-cn/diy.route.json similarity index 100% rename from admin/src/app/lang/zh-cn/diy.route.json rename to admin-vben/src/app/lang/zh-cn/diy.route.json diff --git a/admin/src/app/lang/zh-cn/diy.tabbar.json b/admin-vben/src/app/lang/zh-cn/diy.tabbar.json similarity index 100% rename from admin/src/app/lang/zh-cn/diy.tabbar.json rename to admin-vben/src/app/lang/zh-cn/diy.tabbar.json diff --git a/admin/src/app/lang/zh-cn/diy.tabbar_edit.json b/admin-vben/src/app/lang/zh-cn/diy.tabbar_edit.json similarity index 100% rename from admin/src/app/lang/zh-cn/diy.tabbar_edit.json rename to admin-vben/src/app/lang/zh-cn/diy.tabbar_edit.json diff --git a/admin/src/app/lang/zh-cn/diy_form.edit.json b/admin-vben/src/app/lang/zh-cn/diy_form.edit.json similarity index 100% rename from admin/src/app/lang/zh-cn/diy_form.edit.json rename to admin-vben/src/app/lang/zh-cn/diy_form.edit.json diff --git a/admin/src/app/lang/zh-cn/diy_form.list.json b/admin-vben/src/app/lang/zh-cn/diy_form.list.json similarity index 100% rename from admin/src/app/lang/zh-cn/diy_form.list.json rename to admin-vben/src/app/lang/zh-cn/diy_form.list.json diff --git a/admin/src/app/lang/zh-cn/finance.account.json b/admin-vben/src/app/lang/zh-cn/finance.account.json similarity index 100% rename from admin/src/app/lang/zh-cn/finance.account.json rename to admin-vben/src/app/lang/zh-cn/finance.account.json diff --git a/admin/src/app/lang/zh-cn/finance.cash_out.json b/admin-vben/src/app/lang/zh-cn/finance.cash_out.json similarity index 100% rename from admin/src/app/lang/zh-cn/finance.cash_out.json rename to admin-vben/src/app/lang/zh-cn/finance.cash_out.json diff --git a/admin/src/app/lang/zh-cn/finance.offlinepay.json b/admin-vben/src/app/lang/zh-cn/finance.offlinepay.json similarity index 100% rename from admin/src/app/lang/zh-cn/finance.offlinepay.json rename to admin-vben/src/app/lang/zh-cn/finance.offlinepay.json diff --git a/admin/src/app/lang/zh-cn/finance.pay_detail.json b/admin-vben/src/app/lang/zh-cn/finance.pay_detail.json similarity index 100% rename from admin/src/app/lang/zh-cn/finance.pay_detail.json rename to admin-vben/src/app/lang/zh-cn/finance.pay_detail.json diff --git a/admin/src/app/lang/zh-cn/finance.pay_refund.json b/admin-vben/src/app/lang/zh-cn/finance.pay_refund.json similarity index 100% rename from admin/src/app/lang/zh-cn/finance.pay_refund.json rename to admin-vben/src/app/lang/zh-cn/finance.pay_refund.json diff --git a/admin/src/app/lang/zh-cn/finance.refund_detail.json b/admin-vben/src/app/lang/zh-cn/finance.refund_detail.json similarity index 100% rename from admin/src/app/lang/zh-cn/finance.refund_detail.json rename to admin-vben/src/app/lang/zh-cn/finance.refund_detail.json diff --git a/admin/src/app/lang/zh-cn/index.app_manage.json b/admin-vben/src/app/lang/zh-cn/index.app_manage.json similarity index 100% rename from admin/src/app/lang/zh-cn/index.app_manage.json rename to admin-vben/src/app/lang/zh-cn/index.app_manage.json diff --git a/admin/src/app/lang/zh-cn/index.index.json b/admin-vben/src/app/lang/zh-cn/index.index.json similarity index 100% rename from admin/src/app/lang/zh-cn/index.index.json rename to admin-vben/src/app/lang/zh-cn/index.index.json diff --git a/admin/src/app/lang/zh-cn/index.preview.json b/admin-vben/src/app/lang/zh-cn/index.preview.json similarity index 100% rename from admin/src/app/lang/zh-cn/index.preview.json rename to admin-vben/src/app/lang/zh-cn/index.preview.json diff --git a/admin/src/app/lang/zh-cn/index.store.json b/admin-vben/src/app/lang/zh-cn/index.store.json similarity index 100% rename from admin/src/app/lang/zh-cn/index.store.json rename to admin-vben/src/app/lang/zh-cn/index.store.json diff --git a/admin/src/app/lang/zh-cn/login.json b/admin-vben/src/app/lang/zh-cn/login.json similarity index 100% rename from admin/src/app/lang/zh-cn/login.json rename to admin-vben/src/app/lang/zh-cn/login.json diff --git a/admin/src/app/lang/zh-cn/marketing.sign_config.json b/admin-vben/src/app/lang/zh-cn/marketing.sign_config.json similarity index 100% rename from admin/src/app/lang/zh-cn/marketing.sign_config.json rename to admin-vben/src/app/lang/zh-cn/marketing.sign_config.json diff --git a/admin/src/app/lang/zh-cn/marketing.sign_list.json b/admin-vben/src/app/lang/zh-cn/marketing.sign_list.json similarity index 100% rename from admin/src/app/lang/zh-cn/marketing.sign_list.json rename to admin-vben/src/app/lang/zh-cn/marketing.sign_list.json diff --git a/admin/src/app/lang/zh-cn/marketing.verifier.json b/admin-vben/src/app/lang/zh-cn/marketing.verifier.json similarity index 100% rename from admin/src/app/lang/zh-cn/marketing.verifier.json rename to admin-vben/src/app/lang/zh-cn/marketing.verifier.json diff --git a/admin/src/app/lang/zh-cn/marketing.verify.json b/admin-vben/src/app/lang/zh-cn/marketing.verify.json similarity index 100% rename from admin/src/app/lang/zh-cn/marketing.verify.json rename to admin-vben/src/app/lang/zh-cn/marketing.verify.json diff --git a/admin/src/app/lang/zh-cn/member.balance.json b/admin-vben/src/app/lang/zh-cn/member.balance.json similarity index 100% rename from admin/src/app/lang/zh-cn/member.balance.json rename to admin-vben/src/app/lang/zh-cn/member.balance.json diff --git a/admin/src/app/lang/zh-cn/member.commission.json b/admin-vben/src/app/lang/zh-cn/member.commission.json similarity index 100% rename from admin/src/app/lang/zh-cn/member.commission.json rename to admin-vben/src/app/lang/zh-cn/member.commission.json diff --git a/admin/src/app/lang/zh-cn/member.growth.json b/admin-vben/src/app/lang/zh-cn/member.growth.json similarity index 100% rename from admin/src/app/lang/zh-cn/member.growth.json rename to admin-vben/src/app/lang/zh-cn/member.growth.json diff --git a/admin/src/app/lang/zh-cn/member.label.edit.json b/admin-vben/src/app/lang/zh-cn/member.label.edit.json similarity index 100% rename from admin/src/app/lang/zh-cn/member.label.edit.json rename to admin-vben/src/app/lang/zh-cn/member.label.edit.json diff --git a/admin/src/app/lang/zh-cn/member.label.json b/admin-vben/src/app/lang/zh-cn/member.label.json similarity index 100% rename from admin/src/app/lang/zh-cn/member.label.json rename to admin-vben/src/app/lang/zh-cn/member.label.json diff --git a/admin/src/app/lang/zh-cn/member.level.json b/admin-vben/src/app/lang/zh-cn/member.level.json similarity index 100% rename from admin/src/app/lang/zh-cn/member.level.json rename to admin-vben/src/app/lang/zh-cn/member.level.json diff --git a/admin/src/app/lang/zh-cn/member.level_edit.json b/admin-vben/src/app/lang/zh-cn/member.level_edit.json similarity index 100% rename from admin/src/app/lang/zh-cn/member.level_edit.json rename to admin-vben/src/app/lang/zh-cn/member.level_edit.json diff --git a/admin/src/app/lang/zh-cn/member.member.json b/admin-vben/src/app/lang/zh-cn/member.member.json similarity index 100% rename from admin/src/app/lang/zh-cn/member.member.json rename to admin-vben/src/app/lang/zh-cn/member.member.json diff --git a/admin/src/app/lang/zh-cn/member.member_detail.json b/admin-vben/src/app/lang/zh-cn/member.member_detail.json similarity index 100% rename from admin/src/app/lang/zh-cn/member.member_detail.json rename to admin-vben/src/app/lang/zh-cn/member.member_detail.json diff --git a/admin/src/app/lang/zh-cn/member.point.json b/admin-vben/src/app/lang/zh-cn/member.point.json similarity index 100% rename from admin/src/app/lang/zh-cn/member.point.json rename to admin-vben/src/app/lang/zh-cn/member.point.json diff --git a/admin/src/app/lang/zh-cn/poster.edit.json b/admin-vben/src/app/lang/zh-cn/poster.edit.json similarity index 100% rename from admin/src/app/lang/zh-cn/poster.edit.json rename to admin-vben/src/app/lang/zh-cn/poster.edit.json diff --git a/admin/src/app/lang/zh-cn/poster.list.json b/admin-vben/src/app/lang/zh-cn/poster.list.json similarity index 100% rename from admin/src/app/lang/zh-cn/poster.list.json rename to admin-vben/src/app/lang/zh-cn/poster.list.json diff --git a/admin/src/app/lang/zh-cn/printer.edit.json b/admin-vben/src/app/lang/zh-cn/printer.edit.json similarity index 100% rename from admin/src/app/lang/zh-cn/printer.edit.json rename to admin-vben/src/app/lang/zh-cn/printer.edit.json diff --git a/admin/src/app/lang/zh-cn/printer.list.json b/admin-vben/src/app/lang/zh-cn/printer.list.json similarity index 100% rename from admin/src/app/lang/zh-cn/printer.list.json rename to admin-vben/src/app/lang/zh-cn/printer.list.json diff --git a/admin/src/app/lang/zh-cn/printer.template_edit.json b/admin-vben/src/app/lang/zh-cn/printer.template_edit.json similarity index 100% rename from admin/src/app/lang/zh-cn/printer.template_edit.json rename to admin-vben/src/app/lang/zh-cn/printer.template_edit.json diff --git a/admin/src/app/lang/zh-cn/printer.template_list.json b/admin-vben/src/app/lang/zh-cn/printer.template_list.json similarity index 100% rename from admin/src/app/lang/zh-cn/printer.template_list.json rename to admin-vben/src/app/lang/zh-cn/printer.template_list.json diff --git a/admin/src/app/lang/zh-cn/setting.adminlogin.json b/admin-vben/src/app/lang/zh-cn/setting.adminlogin.json similarity index 100% rename from admin/src/app/lang/zh-cn/setting.adminlogin.json rename to admin-vben/src/app/lang/zh-cn/setting.adminlogin.json diff --git a/admin/src/app/lang/zh-cn/setting.agreement.json b/admin-vben/src/app/lang/zh-cn/setting.agreement.json similarity index 100% rename from admin/src/app/lang/zh-cn/setting.agreement.json rename to admin-vben/src/app/lang/zh-cn/setting.agreement.json diff --git a/admin/src/app/lang/zh-cn/setting.agreement_edit.json b/admin-vben/src/app/lang/zh-cn/setting.agreement_edit.json similarity index 100% rename from admin/src/app/lang/zh-cn/setting.agreement_edit.json rename to admin-vben/src/app/lang/zh-cn/setting.agreement_edit.json diff --git a/admin/src/app/lang/zh-cn/setting.cash_out.json b/admin-vben/src/app/lang/zh-cn/setting.cash_out.json similarity index 100% rename from admin/src/app/lang/zh-cn/setting.cash_out.json rename to admin-vben/src/app/lang/zh-cn/setting.cash_out.json diff --git a/admin/src/app/lang/zh-cn/setting.copyright.json b/admin-vben/src/app/lang/zh-cn/setting.copyright.json similarity index 100% rename from admin/src/app/lang/zh-cn/setting.copyright.json rename to admin-vben/src/app/lang/zh-cn/setting.copyright.json diff --git a/admin/src/app/lang/zh-cn/setting.developer_token.json b/admin-vben/src/app/lang/zh-cn/setting.developer_token.json similarity index 100% rename from admin/src/app/lang/zh-cn/setting.developer_token.json rename to admin-vben/src/app/lang/zh-cn/setting.developer_token.json diff --git a/admin/src/app/lang/zh-cn/setting.export.json b/admin-vben/src/app/lang/zh-cn/setting.export.json similarity index 100% rename from admin/src/app/lang/zh-cn/setting.export.json rename to admin-vben/src/app/lang/zh-cn/setting.export.json diff --git a/admin/src/app/lang/zh-cn/setting.growth_rule.json b/admin-vben/src/app/lang/zh-cn/setting.growth_rule.json similarity index 100% rename from admin/src/app/lang/zh-cn/setting.growth_rule.json rename to admin-vben/src/app/lang/zh-cn/setting.growth_rule.json diff --git a/admin/src/app/lang/zh-cn/setting.layout.json b/admin-vben/src/app/lang/zh-cn/setting.layout.json similarity index 100% rename from admin/src/app/lang/zh-cn/setting.layout.json rename to admin-vben/src/app/lang/zh-cn/setting.layout.json diff --git a/admin/src/app/lang/zh-cn/setting.login.json b/admin-vben/src/app/lang/zh-cn/setting.login.json similarity index 100% rename from admin/src/app/lang/zh-cn/setting.login.json rename to admin-vben/src/app/lang/zh-cn/setting.login.json diff --git a/admin/src/app/lang/zh-cn/setting.map.json b/admin-vben/src/app/lang/zh-cn/setting.map.json similarity index 100% rename from admin/src/app/lang/zh-cn/setting.map.json rename to admin-vben/src/app/lang/zh-cn/setting.map.json diff --git a/admin/src/app/lang/zh-cn/setting.member.json b/admin-vben/src/app/lang/zh-cn/setting.member.json similarity index 100% rename from admin/src/app/lang/zh-cn/setting.member.json rename to admin-vben/src/app/lang/zh-cn/setting.member.json diff --git a/admin/src/app/lang/zh-cn/setting.notice.json b/admin-vben/src/app/lang/zh-cn/setting.notice.json similarity index 100% rename from admin/src/app/lang/zh-cn/setting.notice.json rename to admin-vben/src/app/lang/zh-cn/setting.notice.json diff --git a/admin/src/app/lang/zh-cn/setting.notice_records.json b/admin-vben/src/app/lang/zh-cn/setting.notice_records.json similarity index 100% rename from admin/src/app/lang/zh-cn/setting.notice_records.json rename to admin-vben/src/app/lang/zh-cn/setting.notice_records.json diff --git a/admin/src/app/lang/zh-cn/setting.oplatform.json b/admin-vben/src/app/lang/zh-cn/setting.oplatform.json similarity index 100% rename from admin/src/app/lang/zh-cn/setting.oplatform.json rename to admin-vben/src/app/lang/zh-cn/setting.oplatform.json diff --git a/admin/src/app/lang/zh-cn/setting.pay.json b/admin-vben/src/app/lang/zh-cn/setting.pay.json similarity index 100% rename from admin/src/app/lang/zh-cn/setting.pay.json rename to admin-vben/src/app/lang/zh-cn/setting.pay.json diff --git a/admin/src/app/lang/zh-cn/setting.sms.json b/admin-vben/src/app/lang/zh-cn/setting.sms.json similarity index 100% rename from admin/src/app/lang/zh-cn/setting.sms.json rename to admin-vben/src/app/lang/zh-cn/setting.sms.json diff --git a/admin/src/app/lang/zh-cn/setting.sms_records.json b/admin-vben/src/app/lang/zh-cn/setting.sms_records.json similarity index 100% rename from admin/src/app/lang/zh-cn/setting.sms_records.json rename to admin-vben/src/app/lang/zh-cn/setting.sms_records.json diff --git a/admin/src/app/lang/zh-cn/setting.storage.json b/admin-vben/src/app/lang/zh-cn/setting.storage.json similarity index 100% rename from admin/src/app/lang/zh-cn/setting.storage.json rename to admin-vben/src/app/lang/zh-cn/setting.storage.json diff --git a/admin/src/app/lang/zh-cn/setting.system.json b/admin-vben/src/app/lang/zh-cn/setting.system.json similarity index 100% rename from admin/src/app/lang/zh-cn/setting.system.json rename to admin-vben/src/app/lang/zh-cn/setting.system.json diff --git a/admin/src/app/lang/zh-cn/setting.transfer.json b/admin-vben/src/app/lang/zh-cn/setting.transfer.json similarity index 100% rename from admin/src/app/lang/zh-cn/setting.transfer.json rename to admin-vben/src/app/lang/zh-cn/setting.transfer.json diff --git a/admin/src/app/lang/zh-cn/setting.transfer_scene.json b/admin-vben/src/app/lang/zh-cn/setting.transfer_scene.json similarity index 100% rename from admin/src/app/lang/zh-cn/setting.transfer_scene.json rename to admin-vben/src/app/lang/zh-cn/setting.transfer_scene.json diff --git a/admin/src/app/lang/zh-cn/setting.weapp.json b/admin-vben/src/app/lang/zh-cn/setting.weapp.json similarity index 100% rename from admin/src/app/lang/zh-cn/setting.weapp.json rename to admin-vben/src/app/lang/zh-cn/setting.weapp.json diff --git a/admin/src/app/lang/zh-cn/site.group.json b/admin-vben/src/app/lang/zh-cn/site.group.json similarity index 100% rename from admin/src/app/lang/zh-cn/site.group.json rename to admin-vben/src/app/lang/zh-cn/site.group.json diff --git a/admin/src/app/lang/zh-cn/site.group_edit.json b/admin-vben/src/app/lang/zh-cn/site.group_edit.json similarity index 100% rename from admin/src/app/lang/zh-cn/site.group_edit.json rename to admin-vben/src/app/lang/zh-cn/site.group_edit.json diff --git a/admin/src/app/lang/zh-cn/site.info.json b/admin-vben/src/app/lang/zh-cn/site.info.json similarity index 100% rename from admin/src/app/lang/zh-cn/site.info.json rename to admin-vben/src/app/lang/zh-cn/site.info.json diff --git a/admin/src/app/lang/zh-cn/site.list.json b/admin-vben/src/app/lang/zh-cn/site.list.json similarity index 100% rename from admin/src/app/lang/zh-cn/site.list.json rename to admin-vben/src/app/lang/zh-cn/site.list.json diff --git a/admin/src/app/lang/zh-cn/site.manage.json b/admin-vben/src/app/lang/zh-cn/site.manage.json similarity index 100% rename from admin/src/app/lang/zh-cn/site.manage.json rename to admin-vben/src/app/lang/zh-cn/site.manage.json diff --git a/admin/src/app/lang/zh-cn/site.user.json b/admin-vben/src/app/lang/zh-cn/site.user.json similarity index 100% rename from admin/src/app/lang/zh-cn/site.user.json rename to admin-vben/src/app/lang/zh-cn/site.user.json diff --git a/admin/src/app/lang/zh-cn/site.user_info.json b/admin-vben/src/app/lang/zh-cn/site.user_info.json similarity index 100% rename from admin/src/app/lang/zh-cn/site.user_info.json rename to admin-vben/src/app/lang/zh-cn/site.user_info.json diff --git a/admin/src/app/lang/zh-cn/tools.addon.edit.json b/admin-vben/src/app/lang/zh-cn/tools.addon.edit.json similarity index 100% rename from admin/src/app/lang/zh-cn/tools.addon.edit.json rename to admin-vben/src/app/lang/zh-cn/tools.addon.edit.json diff --git a/admin/src/app/lang/zh-cn/tools.addon.index.json b/admin-vben/src/app/lang/zh-cn/tools.addon.index.json similarity index 100% rename from admin/src/app/lang/zh-cn/tools.addon.index.json rename to admin-vben/src/app/lang/zh-cn/tools.addon.index.json diff --git a/admin/src/app/lang/zh-cn/tools.addon.list.json b/admin-vben/src/app/lang/zh-cn/tools.addon.list.json similarity index 100% rename from admin/src/app/lang/zh-cn/tools.addon.list.json rename to admin-vben/src/app/lang/zh-cn/tools.addon.list.json diff --git a/admin/src/app/lang/zh-cn/tools.backup_records.json b/admin-vben/src/app/lang/zh-cn/tools.backup_records.json similarity index 100% rename from admin/src/app/lang/zh-cn/tools.backup_records.json rename to admin-vben/src/app/lang/zh-cn/tools.backup_records.json diff --git a/admin/src/app/lang/zh-cn/tools.code.edit.json b/admin-vben/src/app/lang/zh-cn/tools.code.edit.json similarity index 100% rename from admin/src/app/lang/zh-cn/tools.code.edit.json rename to admin-vben/src/app/lang/zh-cn/tools.code.edit.json diff --git a/admin/src/app/lang/zh-cn/tools.code.index.json b/admin-vben/src/app/lang/zh-cn/tools.code.index.json similarity index 100% rename from admin/src/app/lang/zh-cn/tools.code.index.json rename to admin-vben/src/app/lang/zh-cn/tools.code.index.json diff --git a/admin/src/app/lang/zh-cn/tools.code.list.json b/admin-vben/src/app/lang/zh-cn/tools.code.list.json similarity index 100% rename from admin/src/app/lang/zh-cn/tools.code.list.json rename to admin-vben/src/app/lang/zh-cn/tools.code.list.json diff --git a/admin/src/app/lang/zh-cn/tools.detection.json b/admin-vben/src/app/lang/zh-cn/tools.detection.json similarity index 100% rename from admin/src/app/lang/zh-cn/tools.detection.json rename to admin-vben/src/app/lang/zh-cn/tools.detection.json diff --git a/admin/src/app/lang/zh-cn/tools.schedule.json b/admin-vben/src/app/lang/zh-cn/tools.schedule.json similarity index 100% rename from admin/src/app/lang/zh-cn/tools.schedule.json rename to admin-vben/src/app/lang/zh-cn/tools.schedule.json diff --git a/admin/src/app/lang/zh-cn/tools.schedule_log.json b/admin-vben/src/app/lang/zh-cn/tools.schedule_log.json similarity index 100% rename from admin/src/app/lang/zh-cn/tools.schedule_log.json rename to admin-vben/src/app/lang/zh-cn/tools.schedule_log.json diff --git a/admin/src/app/lang/zh-cn/tools.updatecache.json b/admin-vben/src/app/lang/zh-cn/tools.updatecache.json similarity index 100% rename from admin/src/app/lang/zh-cn/tools.updatecache.json rename to admin-vben/src/app/lang/zh-cn/tools.updatecache.json diff --git a/admin/src/app/lang/zh-cn/tools.upgrade_records.json b/admin-vben/src/app/lang/zh-cn/tools.upgrade_records.json similarity index 100% rename from admin/src/app/lang/zh-cn/tools.upgrade_records.json rename to admin-vben/src/app/lang/zh-cn/tools.upgrade_records.json diff --git a/admin/src/app/lang/zh-cn/user.center.json b/admin-vben/src/app/lang/zh-cn/user.center.json similarity index 100% rename from admin/src/app/lang/zh-cn/user.center.json rename to admin-vben/src/app/lang/zh-cn/user.center.json diff --git a/admin/src/app/lang/zh-cn/user.edit_center.json b/admin-vben/src/app/lang/zh-cn/user.edit_center.json similarity index 100% rename from admin/src/app/lang/zh-cn/user.edit_center.json rename to admin-vben/src/app/lang/zh-cn/user.edit_center.json diff --git a/admin/src/app/lang/zh-cn/wxoplatform.setting.json b/admin-vben/src/app/lang/zh-cn/wxoplatform.setting.json similarity index 100% rename from admin/src/app/lang/zh-cn/wxoplatform.setting.json rename to admin-vben/src/app/lang/zh-cn/wxoplatform.setting.json diff --git a/admin/src/app/lang/zh-cn/wxoplatform.weapp_version.json b/admin-vben/src/app/lang/zh-cn/wxoplatform.weapp_version.json similarity index 100% rename from admin/src/app/lang/zh-cn/wxoplatform.weapp_version.json rename to admin-vben/src/app/lang/zh-cn/wxoplatform.weapp_version.json diff --git a/admin/src/app/views/app/authorize.vue b/admin-vben/src/app/views/app/authorize.vue similarity index 100% rename from admin/src/app/views/app/authorize.vue rename to admin-vben/src/app/views/app/authorize.vue diff --git a/admin/src/app/views/app/index.vue b/admin-vben/src/app/views/app/index.vue similarity index 100% rename from admin/src/app/views/app/index.vue rename to admin-vben/src/app/views/app/index.vue diff --git a/admin/src/app/views/app/marketing.vue b/admin-vben/src/app/views/app/marketing.vue similarity index 100% rename from admin/src/app/views/app/marketing.vue rename to admin-vben/src/app/views/app/marketing.vue diff --git a/admin/src/app/views/app/upgrade.vue b/admin-vben/src/app/views/app/upgrade.vue similarity index 100% rename from admin/src/app/views/app/upgrade.vue rename to admin-vben/src/app/views/app/upgrade.vue diff --git a/admin/src/app/views/auth/components/edit-menu.vue b/admin-vben/src/app/views/auth/components/edit-menu.vue similarity index 100% rename from admin/src/app/views/auth/components/edit-menu.vue rename to admin-vben/src/app/views/auth/components/edit-menu.vue diff --git a/admin/src/app/views/auth/components/edit-role.vue b/admin-vben/src/app/views/auth/components/edit-role.vue similarity index 100% rename from admin/src/app/views/auth/components/edit-role.vue rename to admin-vben/src/app/views/auth/components/edit-role.vue diff --git a/admin/src/app/views/auth/components/edit-user.vue b/admin-vben/src/app/views/auth/components/edit-user.vue similarity index 100% rename from admin/src/app/views/auth/components/edit-user.vue rename to admin-vben/src/app/views/auth/components/edit-user.vue diff --git a/admin/src/app/views/auth/components/select-menu-item.vue b/admin-vben/src/app/views/auth/components/select-menu-item.vue similarity index 100% rename from admin/src/app/views/auth/components/select-menu-item.vue rename to admin-vben/src/app/views/auth/components/select-menu-item.vue diff --git a/admin/src/app/views/auth/components/user-log-detail.vue b/admin-vben/src/app/views/auth/components/user-log-detail.vue similarity index 100% rename from admin/src/app/views/auth/components/user-log-detail.vue rename to admin-vben/src/app/views/auth/components/user-log-detail.vue diff --git a/admin/src/app/views/auth/log.vue b/admin-vben/src/app/views/auth/log.vue similarity index 100% rename from admin/src/app/views/auth/log.vue rename to admin-vben/src/app/views/auth/log.vue diff --git a/admin/src/app/views/auth/menu.vue b/admin-vben/src/app/views/auth/menu.vue similarity index 100% rename from admin/src/app/views/auth/menu.vue rename to admin-vben/src/app/views/auth/menu.vue diff --git a/admin/src/app/views/auth/role.vue b/admin-vben/src/app/views/auth/role.vue similarity index 100% rename from admin/src/app/views/auth/role.vue rename to admin-vben/src/app/views/auth/role.vue diff --git a/admin/src/app/views/auth/site_menu.vue b/admin-vben/src/app/views/auth/site_menu.vue similarity index 100% rename from admin/src/app/views/auth/site_menu.vue rename to admin-vben/src/app/views/auth/site_menu.vue diff --git a/admin/src/app/views/auth/user.vue b/admin-vben/src/app/views/auth/user.vue similarity index 100% rename from admin/src/app/views/auth/user.vue rename to admin-vben/src/app/views/auth/user.vue diff --git a/admin/src/app/views/channel/aliapp/access.vue b/admin-vben/src/app/views/channel/aliapp/access.vue similarity index 100% rename from admin/src/app/views/channel/aliapp/access.vue rename to admin-vben/src/app/views/channel/aliapp/access.vue diff --git a/admin/src/app/views/channel/aliapp/config.vue b/admin-vben/src/app/views/channel/aliapp/config.vue similarity index 100% rename from admin/src/app/views/channel/aliapp/config.vue rename to admin-vben/src/app/views/channel/aliapp/config.vue diff --git a/admin/src/app/views/channel/aliapp/course.vue b/admin-vben/src/app/views/channel/aliapp/course.vue similarity index 100% rename from admin/src/app/views/channel/aliapp/course.vue rename to admin-vben/src/app/views/channel/aliapp/course.vue diff --git a/admin/src/app/views/channel/app/access.vue b/admin-vben/src/app/views/channel/app/access.vue similarity index 100% rename from admin/src/app/views/channel/app/access.vue rename to admin-vben/src/app/views/channel/app/access.vue diff --git a/admin/src/app/views/channel/app/components/app-version-edit.vue b/admin-vben/src/app/views/channel/app/components/app-version-edit.vue similarity index 100% rename from admin/src/app/views/channel/app/components/app-version-edit.vue rename to admin-vben/src/app/views/channel/app/components/app-version-edit.vue diff --git a/admin/src/app/views/channel/app/components/generate-sing-cert.vue b/admin-vben/src/app/views/channel/app/components/generate-sing-cert.vue similarity index 100% rename from admin/src/app/views/channel/app/components/generate-sing-cert.vue rename to admin-vben/src/app/views/channel/app/components/generate-sing-cert.vue diff --git a/admin/src/app/views/channel/app/config.vue b/admin-vben/src/app/views/channel/app/config.vue similarity index 100% rename from admin/src/app/views/channel/app/config.vue rename to admin-vben/src/app/views/channel/app/config.vue diff --git a/admin/src/app/views/channel/app/version.vue b/admin-vben/src/app/views/channel/app/version.vue similarity index 100% rename from admin/src/app/views/channel/app/version.vue rename to admin-vben/src/app/views/channel/app/version.vue diff --git a/admin/src/app/views/channel/h5/config.vue b/admin-vben/src/app/views/channel/h5/config.vue similarity index 100% rename from admin/src/app/views/channel/h5/config.vue rename to admin-vben/src/app/views/channel/h5/config.vue diff --git a/admin/src/app/views/channel/pc/config.vue b/admin-vben/src/app/views/channel/pc/config.vue similarity index 100% rename from admin/src/app/views/channel/pc/config.vue rename to admin-vben/src/app/views/channel/pc/config.vue diff --git a/admin/src/app/views/channel/weapp/access.vue b/admin-vben/src/app/views/channel/weapp/access.vue similarity index 100% rename from admin/src/app/views/channel/weapp/access.vue rename to admin-vben/src/app/views/channel/weapp/access.vue diff --git a/admin/src/app/views/channel/weapp/code.vue b/admin-vben/src/app/views/channel/weapp/code.vue similarity index 100% rename from admin/src/app/views/channel/weapp/code.vue rename to admin-vben/src/app/views/channel/weapp/code.vue diff --git a/admin/src/app/views/channel/weapp/components/modify-domain.vue b/admin-vben/src/app/views/channel/weapp/components/modify-domain.vue similarity index 100% rename from admin/src/app/views/channel/weapp/components/modify-domain.vue rename to admin-vben/src/app/views/channel/weapp/components/modify-domain.vue diff --git a/admin/src/app/views/channel/weapp/components/modify-privacy-agreement.vue b/admin-vben/src/app/views/channel/weapp/components/modify-privacy-agreement.vue similarity index 100% rename from admin/src/app/views/channel/weapp/components/modify-privacy-agreement.vue rename to admin-vben/src/app/views/channel/weapp/components/modify-privacy-agreement.vue diff --git a/admin/src/app/views/channel/weapp/components/setting-list.vue b/admin-vben/src/app/views/channel/weapp/components/setting-list.vue similarity index 100% rename from admin/src/app/views/channel/weapp/components/setting-list.vue rename to admin-vben/src/app/views/channel/weapp/components/setting-list.vue diff --git a/admin/src/app/views/channel/weapp/config.vue b/admin-vben/src/app/views/channel/weapp/config.vue similarity index 100% rename from admin/src/app/views/channel/weapp/config.vue rename to admin-vben/src/app/views/channel/weapp/config.vue diff --git a/admin/src/app/views/channel/weapp/course.vue b/admin-vben/src/app/views/channel/weapp/course.vue similarity index 100% rename from admin/src/app/views/channel/weapp/course.vue rename to admin-vben/src/app/views/channel/weapp/course.vue diff --git a/admin/src/app/views/channel/weapp/template.vue b/admin-vben/src/app/views/channel/weapp/template.vue similarity index 100% rename from admin/src/app/views/channel/weapp/template.vue rename to admin-vben/src/app/views/channel/weapp/template.vue diff --git a/admin/src/app/views/channel/wechat/access.vue b/admin-vben/src/app/views/channel/wechat/access.vue similarity index 100% rename from admin/src/app/views/channel/wechat/access.vue rename to admin-vben/src/app/views/channel/wechat/access.vue diff --git a/admin/src/app/views/channel/wechat/components/menu-form.vue b/admin-vben/src/app/views/channel/wechat/components/menu-form.vue similarity index 100% rename from admin/src/app/views/channel/wechat/components/menu-form.vue rename to admin-vben/src/app/views/channel/wechat/components/menu-form.vue diff --git a/admin/src/app/views/channel/wechat/components/news-card.vue b/admin-vben/src/app/views/channel/wechat/components/news-card.vue similarity index 100% rename from admin/src/app/views/channel/wechat/components/news-card.vue rename to admin-vben/src/app/views/channel/wechat/components/news-card.vue diff --git a/admin/src/app/views/channel/wechat/components/reply-form.vue b/admin-vben/src/app/views/channel/wechat/components/reply-form.vue similarity index 100% rename from admin/src/app/views/channel/wechat/components/reply-form.vue rename to admin-vben/src/app/views/channel/wechat/components/reply-form.vue diff --git a/admin/src/app/views/channel/wechat/components/select-wechat-media.vue b/admin-vben/src/app/views/channel/wechat/components/select-wechat-media.vue similarity index 100% rename from admin/src/app/views/channel/wechat/components/select-wechat-media.vue rename to admin-vben/src/app/views/channel/wechat/components/select-wechat-media.vue diff --git a/admin/src/app/views/channel/wechat/components/upload-media.vue b/admin-vben/src/app/views/channel/wechat/components/upload-media.vue similarity index 100% rename from admin/src/app/views/channel/wechat/components/upload-media.vue rename to admin-vben/src/app/views/channel/wechat/components/upload-media.vue diff --git a/admin/src/app/views/channel/wechat/config.vue b/admin-vben/src/app/views/channel/wechat/config.vue similarity index 100% rename from admin/src/app/views/channel/wechat/config.vue rename to admin-vben/src/app/views/channel/wechat/config.vue diff --git a/admin/src/app/views/channel/wechat/course.vue b/admin-vben/src/app/views/channel/wechat/course.vue similarity index 100% rename from admin/src/app/views/channel/wechat/course.vue rename to admin-vben/src/app/views/channel/wechat/course.vue diff --git a/admin/src/app/views/channel/wechat/keyword_reply_edit.vue b/admin-vben/src/app/views/channel/wechat/keyword_reply_edit.vue similarity index 100% rename from admin/src/app/views/channel/wechat/keyword_reply_edit.vue rename to admin-vben/src/app/views/channel/wechat/keyword_reply_edit.vue diff --git a/admin/src/app/views/channel/wechat/menu.vue b/admin-vben/src/app/views/channel/wechat/menu.vue similarity index 100% rename from admin/src/app/views/channel/wechat/menu.vue rename to admin-vben/src/app/views/channel/wechat/menu.vue diff --git a/admin/src/app/views/channel/wechat/reply.vue b/admin-vben/src/app/views/channel/wechat/reply.vue similarity index 100% rename from admin/src/app/views/channel/wechat/reply.vue rename to admin-vben/src/app/views/channel/wechat/reply.vue diff --git a/admin/src/app/views/channel/wechat/template.vue b/admin-vben/src/app/views/channel/wechat/template.vue similarity index 100% rename from admin/src/app/views/channel/wechat/template.vue rename to admin-vben/src/app/views/channel/wechat/template.vue diff --git a/admin/src/app/views/dict/components/dict.vue b/admin-vben/src/app/views/dict/components/dict.vue similarity index 100% rename from admin/src/app/views/dict/components/dict.vue rename to admin-vben/src/app/views/dict/components/dict.vue diff --git a/admin/src/app/views/dict/components/edit.vue b/admin-vben/src/app/views/dict/components/edit.vue similarity index 100% rename from admin/src/app/views/dict/components/edit.vue rename to admin-vben/src/app/views/dict/components/edit.vue diff --git a/admin/src/app/views/dict/list.vue b/admin-vben/src/app/views/dict/list.vue similarity index 100% rename from admin/src/app/views/dict/list.vue rename to admin-vben/src/app/views/dict/list.vue diff --git a/admin/src/app/views/diy/components/add-theme.vue b/admin-vben/src/app/views/diy/components/add-theme.vue similarity index 100% rename from admin/src/app/views/diy/components/add-theme.vue rename to admin-vben/src/app/views/diy/components/add-theme.vue diff --git a/admin/src/app/views/diy/components/edit-active-cube.vue b/admin-vben/src/app/views/diy/components/edit-active-cube.vue similarity index 100% rename from admin/src/app/views/diy/components/edit-active-cube.vue rename to admin-vben/src/app/views/diy/components/edit-active-cube.vue diff --git a/admin/src/app/views/diy/components/edit-carousel-search.vue b/admin-vben/src/app/views/diy/components/edit-carousel-search.vue similarity index 100% rename from admin/src/app/views/diy/components/edit-carousel-search.vue rename to admin-vben/src/app/views/diy/components/edit-carousel-search.vue diff --git a/admin/src/app/views/diy/components/edit-float-btn.vue b/admin-vben/src/app/views/diy/components/edit-float-btn.vue similarity index 100% rename from admin/src/app/views/diy/components/edit-float-btn.vue rename to admin-vben/src/app/views/diy/components/edit-float-btn.vue diff --git a/admin/src/app/views/diy/components/edit-graphic-nav.vue b/admin-vben/src/app/views/diy/components/edit-graphic-nav.vue similarity index 100% rename from admin/src/app/views/diy/components/edit-graphic-nav.vue rename to admin-vben/src/app/views/diy/components/edit-graphic-nav.vue diff --git a/admin/src/app/views/diy/components/edit-horz-blank.vue b/admin-vben/src/app/views/diy/components/edit-horz-blank.vue similarity index 100% rename from admin/src/app/views/diy/components/edit-horz-blank.vue rename to admin-vben/src/app/views/diy/components/edit-horz-blank.vue diff --git a/admin/src/app/views/diy/components/edit-horz-line.vue b/admin-vben/src/app/views/diy/components/edit-horz-line.vue similarity index 100% rename from admin/src/app/views/diy/components/edit-horz-line.vue rename to admin-vben/src/app/views/diy/components/edit-horz-line.vue diff --git a/admin/src/app/views/diy/components/edit-hot-area.vue b/admin-vben/src/app/views/diy/components/edit-hot-area.vue similarity index 100% rename from admin/src/app/views/diy/components/edit-hot-area.vue rename to admin-vben/src/app/views/diy/components/edit-hot-area.vue diff --git a/admin/src/app/views/diy/components/edit-image-ads.vue b/admin-vben/src/app/views/diy/components/edit-image-ads.vue similarity index 100% rename from admin/src/app/views/diy/components/edit-image-ads.vue rename to admin-vben/src/app/views/diy/components/edit-image-ads.vue diff --git a/admin/src/app/views/diy/components/edit-member-info.vue b/admin-vben/src/app/views/diy/components/edit-member-info.vue similarity index 100% rename from admin/src/app/views/diy/components/edit-member-info.vue rename to admin-vben/src/app/views/diy/components/edit-member-info.vue diff --git a/admin/src/app/views/diy/components/edit-member-level.vue b/admin-vben/src/app/views/diy/components/edit-member-level.vue similarity index 100% rename from admin/src/app/views/diy/components/edit-member-level.vue rename to admin-vben/src/app/views/diy/components/edit-member-level.vue diff --git a/admin/src/app/views/diy/components/edit-notice.vue b/admin-vben/src/app/views/diy/components/edit-notice.vue similarity index 100% rename from admin/src/app/views/diy/components/edit-notice.vue rename to admin-vben/src/app/views/diy/components/edit-notice.vue diff --git a/admin/src/app/views/diy/components/edit-page.vue b/admin-vben/src/app/views/diy/components/edit-page.vue similarity index 100% rename from admin/src/app/views/diy/components/edit-page.vue rename to admin-vben/src/app/views/diy/components/edit-page.vue diff --git a/admin/src/app/views/diy/components/edit-picture-show.vue b/admin-vben/src/app/views/diy/components/edit-picture-show.vue similarity index 100% rename from admin/src/app/views/diy/components/edit-picture-show.vue rename to admin-vben/src/app/views/diy/components/edit-picture-show.vue diff --git a/admin/src/app/views/diy/components/edit-rich-text.vue b/admin-vben/src/app/views/diy/components/edit-rich-text.vue similarity index 100% rename from admin/src/app/views/diy/components/edit-rich-text.vue rename to admin-vben/src/app/views/diy/components/edit-rich-text.vue diff --git a/admin/src/app/views/diy/components/edit-rubik-cube.vue b/admin-vben/src/app/views/diy/components/edit-rubik-cube.vue similarity index 100% rename from admin/src/app/views/diy/components/edit-rubik-cube.vue rename to admin-vben/src/app/views/diy/components/edit-rubik-cube.vue diff --git a/admin/src/app/views/diy/components/edit-text.vue b/admin-vben/src/app/views/diy/components/edit-text.vue similarity index 100% rename from admin/src/app/views/diy/components/edit-text.vue rename to admin-vben/src/app/views/diy/components/edit-text.vue diff --git a/admin/src/app/views/diy/components/edit-theme.vue b/admin-vben/src/app/views/diy/components/edit-theme.vue similarity index 100% rename from admin/src/app/views/diy/components/edit-theme.vue rename to admin-vben/src/app/views/diy/components/edit-theme.vue diff --git a/admin/src/app/views/diy/components/theme-list.vue b/admin-vben/src/app/views/diy/components/theme-list.vue similarity index 100% rename from admin/src/app/views/diy/components/theme-list.vue rename to admin-vben/src/app/views/diy/components/theme-list.vue diff --git a/admin/src/app/views/diy/edit.vue b/admin-vben/src/app/views/diy/edit.vue similarity index 100% rename from admin/src/app/views/diy/edit.vue rename to admin-vben/src/app/views/diy/edit.vue diff --git a/admin/src/app/views/diy/index.vue b/admin-vben/src/app/views/diy/index.vue similarity index 100% rename from admin/src/app/views/diy/index.vue rename to admin-vben/src/app/views/diy/index.vue diff --git a/admin/src/app/views/diy/list.vue b/admin-vben/src/app/views/diy/list.vue similarity index 100% rename from admin/src/app/views/diy/list.vue rename to admin-vben/src/app/views/diy/list.vue diff --git a/admin/src/app/views/diy/member.vue b/admin-vben/src/app/views/diy/member.vue similarity index 100% rename from admin/src/app/views/diy/member.vue rename to admin-vben/src/app/views/diy/member.vue diff --git a/admin/src/app/views/diy/route.vue b/admin-vben/src/app/views/diy/route.vue similarity index 100% rename from admin/src/app/views/diy/route.vue rename to admin-vben/src/app/views/diy/route.vue diff --git a/admin/src/app/views/diy/tabbar.vue b/admin-vben/src/app/views/diy/tabbar.vue similarity index 100% rename from admin/src/app/views/diy/tabbar.vue rename to admin-vben/src/app/views/diy/tabbar.vue diff --git a/admin/src/app/views/diy/tabbar_edit.vue b/admin-vben/src/app/views/diy/tabbar_edit.vue similarity index 100% rename from admin/src/app/views/diy/tabbar_edit.vue rename to admin-vben/src/app/views/diy/tabbar_edit.vue diff --git a/admin/src/app/views/diy/theme_style.vue b/admin-vben/src/app/views/diy/theme_style.vue similarity index 100% rename from admin/src/app/views/diy/theme_style.vue rename to admin-vben/src/app/views/diy/theme_style.vue diff --git a/admin/src/app/views/diy_form/components/detail-form-image.vue b/admin-vben/src/app/views/diy_form/components/detail-form-image.vue similarity index 100% rename from admin/src/app/views/diy_form/components/detail-form-image.vue rename to admin-vben/src/app/views/diy_form/components/detail-form-image.vue diff --git a/admin/src/app/views/diy_form/components/detail-form-render.vue b/admin-vben/src/app/views/diy_form/components/detail-form-render.vue similarity index 100% rename from admin/src/app/views/diy_form/components/detail-form-render.vue rename to admin-vben/src/app/views/diy_form/components/detail-form-render.vue diff --git a/admin/src/app/views/diy_form/components/edit-form-address.vue b/admin-vben/src/app/views/diy_form/components/edit-form-address.vue similarity index 100% rename from admin/src/app/views/diy_form/components/edit-form-address.vue rename to admin-vben/src/app/views/diy_form/components/edit-form-address.vue diff --git a/admin/src/app/views/diy_form/components/edit-form-checkbox.vue b/admin-vben/src/app/views/diy_form/components/edit-form-checkbox.vue similarity index 100% rename from admin/src/app/views/diy_form/components/edit-form-checkbox.vue rename to admin-vben/src/app/views/diy_form/components/edit-form-checkbox.vue diff --git a/admin/src/app/views/diy_form/components/edit-form-date-scope.vue b/admin-vben/src/app/views/diy_form/components/edit-form-date-scope.vue similarity index 100% rename from admin/src/app/views/diy_form/components/edit-form-date-scope.vue rename to admin-vben/src/app/views/diy_form/components/edit-form-date-scope.vue diff --git a/admin/src/app/views/diy_form/components/edit-form-date.vue b/admin-vben/src/app/views/diy_form/components/edit-form-date.vue similarity index 100% rename from admin/src/app/views/diy_form/components/edit-form-date.vue rename to admin-vben/src/app/views/diy_form/components/edit-form-date.vue diff --git a/admin/src/app/views/diy_form/components/edit-form-email.vue b/admin-vben/src/app/views/diy_form/components/edit-form-email.vue similarity index 100% rename from admin/src/app/views/diy_form/components/edit-form-email.vue rename to admin-vben/src/app/views/diy_form/components/edit-form-email.vue diff --git a/admin/src/app/views/diy_form/components/edit-form-file.vue b/admin-vben/src/app/views/diy_form/components/edit-form-file.vue similarity index 100% rename from admin/src/app/views/diy_form/components/edit-form-file.vue rename to admin-vben/src/app/views/diy_form/components/edit-form-file.vue diff --git a/admin/src/app/views/diy_form/components/edit-form-identity.vue b/admin-vben/src/app/views/diy_form/components/edit-form-identity.vue similarity index 100% rename from admin/src/app/views/diy_form/components/edit-form-identity.vue rename to admin-vben/src/app/views/diy_form/components/edit-form-identity.vue diff --git a/admin/src/app/views/diy_form/components/edit-form-image.vue b/admin-vben/src/app/views/diy_form/components/edit-form-image.vue similarity index 100% rename from admin/src/app/views/diy_form/components/edit-form-image.vue rename to admin-vben/src/app/views/diy_form/components/edit-form-image.vue diff --git a/admin/src/app/views/diy_form/components/edit-form-input.vue b/admin-vben/src/app/views/diy_form/components/edit-form-input.vue similarity index 100% rename from admin/src/app/views/diy_form/components/edit-form-input.vue rename to admin-vben/src/app/views/diy_form/components/edit-form-input.vue diff --git a/admin/src/app/views/diy_form/components/edit-form-location.vue b/admin-vben/src/app/views/diy_form/components/edit-form-location.vue similarity index 100% rename from admin/src/app/views/diy_form/components/edit-form-location.vue rename to admin-vben/src/app/views/diy_form/components/edit-form-location.vue diff --git a/admin/src/app/views/diy_form/components/edit-form-mobile.vue b/admin-vben/src/app/views/diy_form/components/edit-form-mobile.vue similarity index 100% rename from admin/src/app/views/diy_form/components/edit-form-mobile.vue rename to admin-vben/src/app/views/diy_form/components/edit-form-mobile.vue diff --git a/admin/src/app/views/diy_form/components/edit-form-number.vue b/admin-vben/src/app/views/diy_form/components/edit-form-number.vue similarity index 100% rename from admin/src/app/views/diy_form/components/edit-form-number.vue rename to admin-vben/src/app/views/diy_form/components/edit-form-number.vue diff --git a/admin/src/app/views/diy_form/components/edit-form-radio.vue b/admin-vben/src/app/views/diy_form/components/edit-form-radio.vue similarity index 100% rename from admin/src/app/views/diy_form/components/edit-form-radio.vue rename to admin-vben/src/app/views/diy_form/components/edit-form-radio.vue diff --git a/admin/src/app/views/diy_form/components/edit-form-submit.vue b/admin-vben/src/app/views/diy_form/components/edit-form-submit.vue similarity index 100% rename from admin/src/app/views/diy_form/components/edit-form-submit.vue rename to admin-vben/src/app/views/diy_form/components/edit-form-submit.vue diff --git a/admin/src/app/views/diy_form/components/edit-form-table.vue b/admin-vben/src/app/views/diy_form/components/edit-form-table.vue similarity index 100% rename from admin/src/app/views/diy_form/components/edit-form-table.vue rename to admin-vben/src/app/views/diy_form/components/edit-form-table.vue diff --git a/admin/src/app/views/diy_form/components/edit-form-textarea.vue b/admin-vben/src/app/views/diy_form/components/edit-form-textarea.vue similarity index 100% rename from admin/src/app/views/diy_form/components/edit-form-textarea.vue rename to admin-vben/src/app/views/diy_form/components/edit-form-textarea.vue diff --git a/admin/src/app/views/diy_form/components/edit-form-time-scope.vue b/admin-vben/src/app/views/diy_form/components/edit-form-time-scope.vue similarity index 100% rename from admin/src/app/views/diy_form/components/edit-form-time-scope.vue rename to admin-vben/src/app/views/diy_form/components/edit-form-time-scope.vue diff --git a/admin/src/app/views/diy_form/components/edit-form-time.vue b/admin-vben/src/app/views/diy_form/components/edit-form-time.vue similarity index 100% rename from admin/src/app/views/diy_form/components/edit-form-time.vue rename to admin-vben/src/app/views/diy_form/components/edit-form-time.vue diff --git a/admin/src/app/views/diy_form/components/edit-form-video.vue b/admin-vben/src/app/views/diy_form/components/edit-form-video.vue similarity index 100% rename from admin/src/app/views/diy_form/components/edit-form-video.vue rename to admin-vben/src/app/views/diy_form/components/edit-form-video.vue diff --git a/admin/src/app/views/diy_form/components/edit-form-wechat-name.vue b/admin-vben/src/app/views/diy_form/components/edit-form-wechat-name.vue similarity index 100% rename from admin/src/app/views/diy_form/components/edit-form-wechat-name.vue rename to admin-vben/src/app/views/diy_form/components/edit-form-wechat-name.vue diff --git a/admin/src/app/views/diy_form/components/form-select-content.vue b/admin-vben/src/app/views/diy_form/components/form-select-content.vue similarity index 100% rename from admin/src/app/views/diy_form/components/form-select-content.vue rename to admin-vben/src/app/views/diy_form/components/form-select-content.vue diff --git a/admin/src/app/views/diy_form/components/form-submit-popup.vue b/admin-vben/src/app/views/diy_form/components/form-submit-popup.vue similarity index 100% rename from admin/src/app/views/diy_form/components/form-submit-popup.vue rename to admin-vben/src/app/views/diy_form/components/form-submit-popup.vue diff --git a/admin/src/app/views/diy_form/components/form-write-popup.vue b/admin-vben/src/app/views/diy_form/components/form-write-popup.vue similarity index 100% rename from admin/src/app/views/diy_form/components/form-write-popup.vue rename to admin-vben/src/app/views/diy_form/components/form-write-popup.vue diff --git a/admin/src/app/views/diy_form/edit.vue b/admin-vben/src/app/views/diy_form/edit.vue similarity index 100% rename from admin/src/app/views/diy_form/edit.vue rename to admin-vben/src/app/views/diy_form/edit.vue diff --git a/admin/src/app/views/diy_form/list.vue b/admin-vben/src/app/views/diy_form/list.vue similarity index 100% rename from admin/src/app/views/diy_form/list.vue rename to admin-vben/src/app/views/diy_form/list.vue diff --git a/admin/src/app/views/diy_form/records.vue b/admin-vben/src/app/views/diy_form/records.vue similarity index 100% rename from admin/src/app/views/diy_form/records.vue rename to admin-vben/src/app/views/diy_form/records.vue diff --git a/admin/src/app/views/error/404.vue b/admin-vben/src/app/views/error/404.vue similarity index 100% rename from admin/src/app/views/error/404.vue rename to admin-vben/src/app/views/error/404.vue diff --git a/admin/src/app/views/finance/account.vue b/admin-vben/src/app/views/finance/account.vue similarity index 100% rename from admin/src/app/views/finance/account.vue rename to admin-vben/src/app/views/finance/account.vue diff --git a/admin/src/app/views/finance/cash_out.vue b/admin-vben/src/app/views/finance/cash_out.vue similarity index 100% rename from admin/src/app/views/finance/cash_out.vue rename to admin-vben/src/app/views/finance/cash_out.vue diff --git a/admin/src/app/views/finance/components/refund-detail.vue b/admin-vben/src/app/views/finance/components/refund-detail.vue similarity index 100% rename from admin/src/app/views/finance/components/refund-detail.vue rename to admin-vben/src/app/views/finance/components/refund-detail.vue diff --git a/admin/src/app/views/finance/offlinepay.vue b/admin-vben/src/app/views/finance/offlinepay.vue similarity index 100% rename from admin/src/app/views/finance/offlinepay.vue rename to admin-vben/src/app/views/finance/offlinepay.vue diff --git a/admin/src/app/views/finance/pay_detail.vue b/admin-vben/src/app/views/finance/pay_detail.vue similarity index 100% rename from admin/src/app/views/finance/pay_detail.vue rename to admin-vben/src/app/views/finance/pay_detail.vue diff --git a/admin/src/app/views/finance/pay_refund.vue b/admin-vben/src/app/views/finance/pay_refund.vue similarity index 100% rename from admin/src/app/views/finance/pay_refund.vue rename to admin-vben/src/app/views/finance/pay_refund.vue diff --git a/admin/src/app/views/finance/refund_detail.vue b/admin-vben/src/app/views/finance/refund_detail.vue similarity index 100% rename from admin/src/app/views/finance/refund_detail.vue rename to admin-vben/src/app/views/finance/refund_detail.vue diff --git a/admin/src/app/views/home/edit_personal.vue b/admin-vben/src/app/views/home/edit_personal.vue similarity index 100% rename from admin/src/app/views/home/edit_personal.vue rename to admin-vben/src/app/views/home/edit_personal.vue diff --git a/admin/src/app/views/home/index.vue b/admin-vben/src/app/views/home/index.vue similarity index 100% rename from admin/src/app/views/home/index.vue rename to admin-vben/src/app/views/home/index.vue diff --git a/admin/src/app/views/home/personal.vue b/admin-vben/src/app/views/home/personal.vue similarity index 100% rename from admin/src/app/views/home/personal.vue rename to admin-vben/src/app/views/home/personal.vue diff --git a/admin/src/app/views/index/app_manage.vue b/admin-vben/src/app/views/index/app_manage.vue similarity index 100% rename from admin/src/app/views/index/app_manage.vue rename to admin-vben/src/app/views/index/app_manage.vue diff --git a/admin/src/app/views/index/index.vue b/admin-vben/src/app/views/index/index.vue similarity index 100% rename from admin/src/app/views/index/index.vue rename to admin-vben/src/app/views/index/index.vue diff --git a/admin/src/app/views/index/preview.vue b/admin-vben/src/app/views/index/preview.vue similarity index 100% rename from admin/src/app/views/index/preview.vue rename to admin-vben/src/app/views/index/preview.vue diff --git a/admin/src/app/views/index/store.vue b/admin-vben/src/app/views/index/store.vue similarity index 100% rename from admin/src/app/views/index/store.vue rename to admin-vben/src/app/views/index/store.vue diff --git a/admin/src/app/views/index/tools.vue b/admin-vben/src/app/views/index/tools.vue similarity index 100% rename from admin/src/app/views/index/tools.vue rename to admin-vben/src/app/views/index/tools.vue diff --git a/admin/src/app/views/index/wxoplatform_callback.vue b/admin-vben/src/app/views/index/wxoplatform_callback.vue similarity index 100% rename from admin/src/app/views/index/wxoplatform_callback.vue rename to admin-vben/src/app/views/index/wxoplatform_callback.vue diff --git a/admin/src/app/views/login/index.vue b/admin-vben/src/app/views/login/index.vue similarity index 100% rename from admin/src/app/views/login/index.vue rename to admin-vben/src/app/views/login/index.vue diff --git a/admin/src/app/views/marketing/components/sign-continue.vue b/admin-vben/src/app/views/marketing/components/sign-continue.vue similarity index 100% rename from admin/src/app/views/marketing/components/sign-continue.vue rename to admin-vben/src/app/views/marketing/components/sign-continue.vue diff --git a/admin/src/app/views/marketing/components/sign-day.vue b/admin-vben/src/app/views/marketing/components/sign-day.vue similarity index 100% rename from admin/src/app/views/marketing/components/sign-day.vue rename to admin-vben/src/app/views/marketing/components/sign-day.vue diff --git a/admin/src/app/views/marketing/components/verify-detail.vue b/admin-vben/src/app/views/marketing/components/verify-detail.vue similarity index 100% rename from admin/src/app/views/marketing/components/verify-detail.vue rename to admin-vben/src/app/views/marketing/components/verify-detail.vue diff --git a/admin/src/app/views/marketing/sign_config.vue b/admin-vben/src/app/views/marketing/sign_config.vue similarity index 100% rename from admin/src/app/views/marketing/sign_config.vue rename to admin-vben/src/app/views/marketing/sign_config.vue diff --git a/admin/src/app/views/marketing/sign_list.vue b/admin-vben/src/app/views/marketing/sign_list.vue similarity index 100% rename from admin/src/app/views/marketing/sign_list.vue rename to admin-vben/src/app/views/marketing/sign_list.vue diff --git a/admin/src/app/views/marketing/verifier.vue b/admin-vben/src/app/views/marketing/verifier.vue similarity index 100% rename from admin/src/app/views/marketing/verifier.vue rename to admin-vben/src/app/views/marketing/verifier.vue diff --git a/admin/src/app/views/marketing/verify.vue b/admin-vben/src/app/views/marketing/verify.vue similarity index 100% rename from admin/src/app/views/marketing/verify.vue rename to admin-vben/src/app/views/marketing/verify.vue diff --git a/admin/src/app/views/marketing/verify_detail.vue b/admin-vben/src/app/views/marketing/verify_detail.vue similarity index 100% rename from admin/src/app/views/marketing/verify_detail.vue rename to admin-vben/src/app/views/marketing/verify_detail.vue diff --git a/admin/src/app/views/marketing/verify_index.vue b/admin-vben/src/app/views/marketing/verify_index.vue similarity index 100% rename from admin/src/app/views/marketing/verify_index.vue rename to admin-vben/src/app/views/marketing/verify_index.vue diff --git a/admin/src/app/views/member/balance.vue b/admin-vben/src/app/views/member/balance.vue similarity index 100% rename from admin/src/app/views/member/balance.vue rename to admin-vben/src/app/views/member/balance.vue diff --git a/admin/src/app/views/member/commission.vue b/admin-vben/src/app/views/member/commission.vue similarity index 100% rename from admin/src/app/views/member/commission.vue rename to admin-vben/src/app/views/member/commission.vue diff --git a/admin/src/app/views/member/components/add-member.vue b/admin-vben/src/app/views/member/components/add-member.vue similarity index 100% rename from admin/src/app/views/member/components/add-member.vue rename to admin-vben/src/app/views/member/components/add-member.vue diff --git a/admin/src/app/views/member/components/benefits-discount.vue b/admin-vben/src/app/views/member/components/benefits-discount.vue similarity index 100% rename from admin/src/app/views/member/components/benefits-discount.vue rename to admin-vben/src/app/views/member/components/benefits-discount.vue diff --git a/admin/src/app/views/member/components/detail-member.vue b/admin-vben/src/app/views/member/components/detail-member.vue similarity index 100% rename from admin/src/app/views/member/components/detail-member.vue rename to admin-vben/src/app/views/member/components/detail-member.vue diff --git a/admin/src/app/views/member/components/edit-label.vue b/admin-vben/src/app/views/member/components/edit-label.vue similarity index 100% rename from admin/src/app/views/member/components/edit-label.vue rename to admin-vben/src/app/views/member/components/edit-label.vue diff --git a/admin/src/app/views/member/components/edit-member.vue b/admin-vben/src/app/views/member/components/edit-member.vue similarity index 100% rename from admin/src/app/views/member/components/edit-member.vue rename to admin-vben/src/app/views/member/components/edit-member.vue diff --git a/admin/src/app/views/member/components/gift-balance.vue b/admin-vben/src/app/views/member/components/gift-balance.vue similarity index 100% rename from admin/src/app/views/member/components/gift-balance.vue rename to admin-vben/src/app/views/member/components/gift-balance.vue diff --git a/admin/src/app/views/member/components/gift-point.vue b/admin-vben/src/app/views/member/components/gift-point.vue similarity index 100% rename from admin/src/app/views/member/components/gift-point.vue rename to admin-vben/src/app/views/member/components/gift-point.vue diff --git a/admin/src/app/views/member/components/growth-rule-register.vue b/admin-vben/src/app/views/member/components/growth-rule-register.vue similarity index 100% rename from admin/src/app/views/member/components/growth-rule-register.vue rename to admin-vben/src/app/views/member/components/growth-rule-register.vue diff --git a/admin/src/app/views/member/components/member-balance-edit.vue b/admin-vben/src/app/views/member/components/member-balance-edit.vue similarity index 100% rename from admin/src/app/views/member/components/member-balance-edit.vue rename to admin-vben/src/app/views/member/components/member-balance-edit.vue diff --git a/admin/src/app/views/member/components/member-balance-info.vue b/admin-vben/src/app/views/member/components/member-balance-info.vue similarity index 100% rename from admin/src/app/views/member/components/member-balance-info.vue rename to admin-vben/src/app/views/member/components/member-balance-info.vue diff --git a/admin/src/app/views/member/components/member-benefits.vue b/admin-vben/src/app/views/member/components/member-benefits.vue similarity index 100% rename from admin/src/app/views/member/components/member-benefits.vue rename to admin-vben/src/app/views/member/components/member-benefits.vue diff --git a/admin/src/app/views/member/components/member-commission-info.vue b/admin-vben/src/app/views/member/components/member-commission-info.vue similarity index 100% rename from admin/src/app/views/member/components/member-commission-info.vue rename to admin-vben/src/app/views/member/components/member-commission-info.vue diff --git a/admin/src/app/views/member/components/member-gift.vue b/admin-vben/src/app/views/member/components/member-gift.vue similarity index 100% rename from admin/src/app/views/member/components/member-gift.vue rename to admin-vben/src/app/views/member/components/member-gift.vue diff --git a/admin/src/app/views/member/components/member-money-info.vue b/admin-vben/src/app/views/member/components/member-money-info.vue similarity index 100% rename from admin/src/app/views/member/components/member-money-info.vue rename to admin-vben/src/app/views/member/components/member-money-info.vue diff --git a/admin/src/app/views/member/components/member-point-edit.vue b/admin-vben/src/app/views/member/components/member-point-edit.vue similarity index 100% rename from admin/src/app/views/member/components/member-point-edit.vue rename to admin-vben/src/app/views/member/components/member-point-edit.vue diff --git a/admin/src/app/views/member/components/member-point-info.vue b/admin-vben/src/app/views/member/components/member-point-info.vue similarity index 100% rename from admin/src/app/views/member/components/member-point-info.vue rename to admin-vben/src/app/views/member/components/member-point-info.vue diff --git a/admin/src/app/views/member/components/point-rule-register.vue b/admin-vben/src/app/views/member/components/point-rule-register.vue similarity index 100% rename from admin/src/app/views/member/components/point-rule-register.vue rename to admin-vben/src/app/views/member/components/point-rule-register.vue diff --git a/admin/src/app/views/member/growth.vue b/admin-vben/src/app/views/member/growth.vue similarity index 100% rename from admin/src/app/views/member/growth.vue rename to admin-vben/src/app/views/member/growth.vue diff --git a/admin/src/app/views/member/label.vue b/admin-vben/src/app/views/member/label.vue similarity index 100% rename from admin/src/app/views/member/label.vue rename to admin-vben/src/app/views/member/label.vue diff --git a/admin/src/app/views/member/level.vue b/admin-vben/src/app/views/member/level.vue similarity index 100% rename from admin/src/app/views/member/level.vue rename to admin-vben/src/app/views/member/level.vue diff --git a/admin/src/app/views/member/level_edit.vue b/admin-vben/src/app/views/member/level_edit.vue similarity index 100% rename from admin/src/app/views/member/level_edit.vue rename to admin-vben/src/app/views/member/level_edit.vue diff --git a/admin/src/app/views/member/member.vue b/admin-vben/src/app/views/member/member.vue similarity index 100% rename from admin/src/app/views/member/member.vue rename to admin-vben/src/app/views/member/member.vue diff --git a/admin/src/app/views/member/member_detail.vue b/admin-vben/src/app/views/member/member_detail.vue similarity index 100% rename from admin/src/app/views/member/member_detail.vue rename to admin-vben/src/app/views/member/member_detail.vue diff --git a/admin/src/app/views/member/point.vue b/admin-vben/src/app/views/member/point.vue similarity index 100% rename from admin/src/app/views/member/point.vue rename to admin-vben/src/app/views/member/point.vue diff --git a/admin/src/app/views/poster/components/edit-draw.vue b/admin-vben/src/app/views/poster/components/edit-draw.vue similarity index 100% rename from admin/src/app/views/poster/components/edit-draw.vue rename to admin-vben/src/app/views/poster/components/edit-draw.vue diff --git a/admin/src/app/views/poster/components/edit-friendspay-message.vue b/admin-vben/src/app/views/poster/components/edit-friendspay-message.vue similarity index 100% rename from admin/src/app/views/poster/components/edit-friendspay-message.vue rename to admin-vben/src/app/views/poster/components/edit-friendspay-message.vue diff --git a/admin/src/app/views/poster/components/edit-friendspay-money.vue b/admin-vben/src/app/views/poster/components/edit-friendspay-money.vue similarity index 100% rename from admin/src/app/views/poster/components/edit-friendspay-money.vue rename to admin-vben/src/app/views/poster/components/edit-friendspay-money.vue diff --git a/admin/src/app/views/poster/components/edit-headimg.vue b/admin-vben/src/app/views/poster/components/edit-headimg.vue similarity index 100% rename from admin/src/app/views/poster/components/edit-headimg.vue rename to admin-vben/src/app/views/poster/components/edit-headimg.vue diff --git a/admin/src/app/views/poster/components/edit-image.vue b/admin-vben/src/app/views/poster/components/edit-image.vue similarity index 100% rename from admin/src/app/views/poster/components/edit-image.vue rename to admin-vben/src/app/views/poster/components/edit-image.vue diff --git a/admin/src/app/views/poster/components/edit-nickname.vue b/admin-vben/src/app/views/poster/components/edit-nickname.vue similarity index 100% rename from admin/src/app/views/poster/components/edit-nickname.vue rename to admin-vben/src/app/views/poster/components/edit-nickname.vue diff --git a/admin/src/app/views/poster/components/edit-page.vue b/admin-vben/src/app/views/poster/components/edit-page.vue similarity index 100% rename from admin/src/app/views/poster/components/edit-page.vue rename to admin-vben/src/app/views/poster/components/edit-page.vue diff --git a/admin/src/app/views/poster/components/edit-qrcode.vue b/admin-vben/src/app/views/poster/components/edit-qrcode.vue similarity index 100% rename from admin/src/app/views/poster/components/edit-qrcode.vue rename to admin-vben/src/app/views/poster/components/edit-qrcode.vue diff --git a/admin/src/app/views/poster/components/edit-text.vue b/admin-vben/src/app/views/poster/components/edit-text.vue similarity index 100% rename from admin/src/app/views/poster/components/edit-text.vue rename to admin-vben/src/app/views/poster/components/edit-text.vue diff --git a/admin/src/app/views/poster/components/preview-draw.vue b/admin-vben/src/app/views/poster/components/preview-draw.vue similarity index 100% rename from admin/src/app/views/poster/components/preview-draw.vue rename to admin-vben/src/app/views/poster/components/preview-draw.vue diff --git a/admin/src/app/views/poster/components/preview-friendspay-message.vue b/admin-vben/src/app/views/poster/components/preview-friendspay-message.vue similarity index 100% rename from admin/src/app/views/poster/components/preview-friendspay-message.vue rename to admin-vben/src/app/views/poster/components/preview-friendspay-message.vue diff --git a/admin/src/app/views/poster/components/preview-friendspay-money.vue b/admin-vben/src/app/views/poster/components/preview-friendspay-money.vue similarity index 100% rename from admin/src/app/views/poster/components/preview-friendspay-money.vue rename to admin-vben/src/app/views/poster/components/preview-friendspay-money.vue diff --git a/admin/src/app/views/poster/components/preview-headimg.vue b/admin-vben/src/app/views/poster/components/preview-headimg.vue similarity index 100% rename from admin/src/app/views/poster/components/preview-headimg.vue rename to admin-vben/src/app/views/poster/components/preview-headimg.vue diff --git a/admin/src/app/views/poster/components/preview-image.vue b/admin-vben/src/app/views/poster/components/preview-image.vue similarity index 100% rename from admin/src/app/views/poster/components/preview-image.vue rename to admin-vben/src/app/views/poster/components/preview-image.vue diff --git a/admin/src/app/views/poster/components/preview-nickname.vue b/admin-vben/src/app/views/poster/components/preview-nickname.vue similarity index 100% rename from admin/src/app/views/poster/components/preview-nickname.vue rename to admin-vben/src/app/views/poster/components/preview-nickname.vue diff --git a/admin/src/app/views/poster/components/preview-qrcode.vue b/admin-vben/src/app/views/poster/components/preview-qrcode.vue similarity index 100% rename from admin/src/app/views/poster/components/preview-qrcode.vue rename to admin-vben/src/app/views/poster/components/preview-qrcode.vue diff --git a/admin/src/app/views/poster/components/preview-text.vue b/admin-vben/src/app/views/poster/components/preview-text.vue similarity index 100% rename from admin/src/app/views/poster/components/preview-text.vue rename to admin-vben/src/app/views/poster/components/preview-text.vue diff --git a/admin/src/app/views/poster/edit.vue b/admin-vben/src/app/views/poster/edit.vue similarity index 100% rename from admin/src/app/views/poster/edit.vue rename to admin-vben/src/app/views/poster/edit.vue diff --git a/admin/src/app/views/poster/list.vue b/admin-vben/src/app/views/poster/list.vue similarity index 100% rename from admin/src/app/views/poster/list.vue rename to admin-vben/src/app/views/poster/list.vue diff --git a/admin/src/app/views/printer/edit.vue b/admin-vben/src/app/views/printer/edit.vue similarity index 100% rename from admin/src/app/views/printer/edit.vue rename to admin-vben/src/app/views/printer/edit.vue diff --git a/admin/src/app/views/printer/list.vue b/admin-vben/src/app/views/printer/list.vue similarity index 100% rename from admin/src/app/views/printer/list.vue rename to admin-vben/src/app/views/printer/list.vue diff --git a/admin/src/app/views/printer/template_edit.vue b/admin-vben/src/app/views/printer/template_edit.vue similarity index 100% rename from admin/src/app/views/printer/template_edit.vue rename to admin-vben/src/app/views/printer/template_edit.vue diff --git a/admin/src/app/views/printer/template_list.vue b/admin-vben/src/app/views/printer/template_list.vue similarity index 100% rename from admin/src/app/views/printer/template_list.vue rename to admin-vben/src/app/views/printer/template_list.vue diff --git a/admin/src/app/views/setting/adminlogin.vue b/admin-vben/src/app/views/setting/adminlogin.vue similarity index 100% rename from admin/src/app/views/setting/adminlogin.vue rename to admin-vben/src/app/views/setting/adminlogin.vue diff --git a/admin/src/app/views/setting/agreement.vue b/admin-vben/src/app/views/setting/agreement.vue similarity index 100% rename from admin/src/app/views/setting/agreement.vue rename to admin-vben/src/app/views/setting/agreement.vue diff --git a/admin/src/app/views/setting/agreement_edit.vue b/admin-vben/src/app/views/setting/agreement_edit.vue similarity index 100% rename from admin/src/app/views/setting/agreement_edit.vue rename to admin-vben/src/app/views/setting/agreement_edit.vue diff --git a/admin/src/app/views/setting/cash_out.vue b/admin-vben/src/app/views/setting/cash_out.vue similarity index 100% rename from admin/src/app/views/setting/cash_out.vue rename to admin-vben/src/app/views/setting/cash_out.vue diff --git a/admin/src/app/views/setting/components/cron-info.vue b/admin-vben/src/app/views/setting/components/cron-info.vue similarity index 100% rename from admin/src/app/views/setting/components/cron-info.vue rename to admin-vben/src/app/views/setting/components/cron-info.vue diff --git a/admin/src/app/views/setting/components/notice-records-info.vue b/admin-vben/src/app/views/setting/components/notice-records-info.vue similarity index 100% rename from admin/src/app/views/setting/components/notice-records-info.vue rename to admin-vben/src/app/views/setting/components/notice-records-info.vue diff --git a/admin/src/app/views/setting/components/notice-sms.vue b/admin-vben/src/app/views/setting/components/notice-sms.vue similarity index 100% rename from admin/src/app/views/setting/components/notice-sms.vue rename to admin-vben/src/app/views/setting/components/notice-sms.vue diff --git a/admin/src/app/views/setting/components/notice-weapp.vue b/admin-vben/src/app/views/setting/components/notice-weapp.vue similarity index 100% rename from admin/src/app/views/setting/components/notice-weapp.vue rename to admin-vben/src/app/views/setting/components/notice-weapp.vue diff --git a/admin/src/app/views/setting/components/notice-wechat.vue b/admin-vben/src/app/views/setting/components/notice-wechat.vue similarity index 100% rename from admin/src/app/views/setting/components/notice-wechat.vue rename to admin-vben/src/app/views/setting/components/notice-wechat.vue diff --git a/admin/src/app/views/setting/components/pay-alipay.vue b/admin-vben/src/app/views/setting/components/pay-alipay.vue similarity index 100% rename from admin/src/app/views/setting/components/pay-alipay.vue rename to admin-vben/src/app/views/setting/components/pay-alipay.vue diff --git a/admin/src/app/views/setting/components/pay-friendspay.vue b/admin-vben/src/app/views/setting/components/pay-friendspay.vue similarity index 100% rename from admin/src/app/views/setting/components/pay-friendspay.vue rename to admin-vben/src/app/views/setting/components/pay-friendspay.vue diff --git a/admin/src/app/views/setting/components/pay-offlinepay.vue b/admin-vben/src/app/views/setting/components/pay-offlinepay.vue similarity index 100% rename from admin/src/app/views/setting/components/pay-offlinepay.vue rename to admin-vben/src/app/views/setting/components/pay-offlinepay.vue diff --git a/admin/src/app/views/setting/components/pay-wechatpay.vue b/admin-vben/src/app/views/setting/components/pay-wechatpay.vue similarity index 100% rename from admin/src/app/views/setting/components/pay-wechatpay.vue rename to admin-vben/src/app/views/setting/components/pay-wechatpay.vue diff --git a/admin/src/app/views/setting/components/sms-ali.vue b/admin-vben/src/app/views/setting/components/sms-ali.vue similarity index 100% rename from admin/src/app/views/setting/components/sms-ali.vue rename to admin-vben/src/app/views/setting/components/sms-ali.vue diff --git a/admin/src/app/views/setting/components/sms-niu.vue b/admin-vben/src/app/views/setting/components/sms-niu.vue similarity index 100% rename from admin/src/app/views/setting/components/sms-niu.vue rename to admin-vben/src/app/views/setting/components/sms-niu.vue diff --git a/admin/src/app/views/setting/components/sms-records-info.vue b/admin-vben/src/app/views/setting/components/sms-records-info.vue similarity index 100% rename from admin/src/app/views/setting/components/sms-records-info.vue rename to admin-vben/src/app/views/setting/components/sms-records-info.vue diff --git a/admin/src/app/views/setting/components/sms-tencent.vue b/admin-vben/src/app/views/setting/components/sms-tencent.vue similarity index 100% rename from admin/src/app/views/setting/components/sms-tencent.vue rename to admin-vben/src/app/views/setting/components/sms-tencent.vue diff --git a/admin/src/app/views/setting/components/sms_niu_login.vue b/admin-vben/src/app/views/setting/components/sms_niu_login.vue similarity index 100% rename from admin/src/app/views/setting/components/sms_niu_login.vue rename to admin-vben/src/app/views/setting/components/sms_niu_login.vue diff --git a/admin/src/app/views/setting/components/sms_recharge.vue b/admin-vben/src/app/views/setting/components/sms_recharge.vue similarity index 100% rename from admin/src/app/views/setting/components/sms_recharge.vue rename to admin-vben/src/app/views/setting/components/sms_recharge.vue diff --git a/admin/src/app/views/setting/components/sms_recharge_record.vue b/admin-vben/src/app/views/setting/components/sms_recharge_record.vue similarity index 100% rename from admin/src/app/views/setting/components/sms_recharge_record.vue rename to admin-vben/src/app/views/setting/components/sms_recharge_record.vue diff --git a/admin/src/app/views/setting/components/sms_send.vue b/admin-vben/src/app/views/setting/components/sms_send.vue similarity index 100% rename from admin/src/app/views/setting/components/sms_send.vue rename to admin-vben/src/app/views/setting/components/sms_send.vue diff --git a/admin/src/app/views/setting/components/sms_signature.vue b/admin-vben/src/app/views/setting/components/sms_signature.vue similarity index 100% rename from admin/src/app/views/setting/components/sms_signature.vue rename to admin-vben/src/app/views/setting/components/sms_signature.vue diff --git a/admin/src/app/views/setting/components/sms_template.vue b/admin-vben/src/app/views/setting/components/sms_template.vue similarity index 100% rename from admin/src/app/views/setting/components/sms_template.vue rename to admin-vben/src/app/views/setting/components/sms_template.vue diff --git a/admin/src/app/views/setting/components/storage-ali.vue b/admin-vben/src/app/views/setting/components/storage-ali.vue similarity index 100% rename from admin/src/app/views/setting/components/storage-ali.vue rename to admin-vben/src/app/views/setting/components/storage-ali.vue diff --git a/admin/src/app/views/setting/components/storage-local.vue b/admin-vben/src/app/views/setting/components/storage-local.vue similarity index 100% rename from admin/src/app/views/setting/components/storage-local.vue rename to admin-vben/src/app/views/setting/components/storage-local.vue diff --git a/admin/src/app/views/setting/components/storage-qiniu.vue b/admin-vben/src/app/views/setting/components/storage-qiniu.vue similarity index 100% rename from admin/src/app/views/setting/components/storage-qiniu.vue rename to admin-vben/src/app/views/setting/components/storage-qiniu.vue diff --git a/admin/src/app/views/setting/components/storage-tencent.vue b/admin-vben/src/app/views/setting/components/storage-tencent.vue similarity index 100% rename from admin/src/app/views/setting/components/storage-tencent.vue rename to admin-vben/src/app/views/setting/components/storage-tencent.vue diff --git a/admin/src/app/views/setting/copyright.vue b/admin-vben/src/app/views/setting/copyright.vue similarity index 100% rename from admin/src/app/views/setting/copyright.vue rename to admin-vben/src/app/views/setting/copyright.vue diff --git a/admin/src/app/views/setting/developer_token.vue b/admin-vben/src/app/views/setting/developer_token.vue similarity index 100% rename from admin/src/app/views/setting/developer_token.vue rename to admin-vben/src/app/views/setting/developer_token.vue diff --git a/admin/src/app/views/setting/export.vue b/admin-vben/src/app/views/setting/export.vue similarity index 100% rename from admin/src/app/views/setting/export.vue rename to admin-vben/src/app/views/setting/export.vue diff --git a/admin/src/app/views/setting/growth_rule.vue b/admin-vben/src/app/views/setting/growth_rule.vue similarity index 100% rename from admin/src/app/views/setting/growth_rule.vue rename to admin-vben/src/app/views/setting/growth_rule.vue diff --git a/admin/src/app/views/setting/layout.vue b/admin-vben/src/app/views/setting/layout.vue similarity index 100% rename from admin/src/app/views/setting/layout.vue rename to admin-vben/src/app/views/setting/layout.vue diff --git a/admin/src/app/views/setting/login.vue b/admin-vben/src/app/views/setting/login.vue similarity index 100% rename from admin/src/app/views/setting/login.vue rename to admin-vben/src/app/views/setting/login.vue diff --git a/admin/src/app/views/setting/map.vue b/admin-vben/src/app/views/setting/map.vue similarity index 100% rename from admin/src/app/views/setting/map.vue rename to admin-vben/src/app/views/setting/map.vue diff --git a/admin/src/app/views/setting/member.vue b/admin-vben/src/app/views/setting/member.vue similarity index 100% rename from admin/src/app/views/setting/member.vue rename to admin-vben/src/app/views/setting/member.vue diff --git a/admin/src/app/views/setting/notice.vue b/admin-vben/src/app/views/setting/notice.vue similarity index 100% rename from admin/src/app/views/setting/notice.vue rename to admin-vben/src/app/views/setting/notice.vue diff --git a/admin/src/app/views/setting/notice_records.vue b/admin-vben/src/app/views/setting/notice_records.vue similarity index 100% rename from admin/src/app/views/setting/notice_records.vue rename to admin-vben/src/app/views/setting/notice_records.vue diff --git a/admin/src/app/views/setting/oplatform.vue b/admin-vben/src/app/views/setting/oplatform.vue similarity index 100% rename from admin/src/app/views/setting/oplatform.vue rename to admin-vben/src/app/views/setting/oplatform.vue diff --git a/admin/src/app/views/setting/pay.vue b/admin-vben/src/app/views/setting/pay.vue similarity index 100% rename from admin/src/app/views/setting/pay.vue rename to admin-vben/src/app/views/setting/pay.vue diff --git a/admin/src/app/views/setting/point_rule.vue b/admin-vben/src/app/views/setting/point_rule.vue similarity index 100% rename from admin/src/app/views/setting/point_rule.vue rename to admin-vben/src/app/views/setting/point_rule.vue diff --git a/admin/src/app/views/setting/sms.vue b/admin-vben/src/app/views/setting/sms.vue similarity index 100% rename from admin/src/app/views/setting/sms.vue rename to admin-vben/src/app/views/setting/sms.vue diff --git a/admin/src/app/views/setting/sms_niu.vue b/admin-vben/src/app/views/setting/sms_niu.vue similarity index 100% rename from admin/src/app/views/setting/sms_niu.vue rename to admin-vben/src/app/views/setting/sms_niu.vue diff --git a/admin/src/app/views/setting/sms_niu_pay_result.vue b/admin-vben/src/app/views/setting/sms_niu_pay_result.vue similarity index 100% rename from admin/src/app/views/setting/sms_niu_pay_result.vue rename to admin-vben/src/app/views/setting/sms_niu_pay_result.vue diff --git a/admin/src/app/views/setting/sms_records.vue b/admin-vben/src/app/views/setting/sms_records.vue similarity index 100% rename from admin/src/app/views/setting/sms_records.vue rename to admin-vben/src/app/views/setting/sms_records.vue diff --git a/admin/src/app/views/setting/storage.vue b/admin-vben/src/app/views/setting/storage.vue similarity index 100% rename from admin/src/app/views/setting/storage.vue rename to admin-vben/src/app/views/setting/storage.vue diff --git a/admin/src/app/views/setting/system.vue b/admin-vben/src/app/views/setting/system.vue similarity index 100% rename from admin/src/app/views/setting/system.vue rename to admin-vben/src/app/views/setting/system.vue diff --git a/admin/src/app/views/setting/transfer.vue b/admin-vben/src/app/views/setting/transfer.vue similarity index 100% rename from admin/src/app/views/setting/transfer.vue rename to admin-vben/src/app/views/setting/transfer.vue diff --git a/admin/src/app/views/setting/transfer_scene.vue b/admin-vben/src/app/views/setting/transfer_scene.vue similarity index 100% rename from admin/src/app/views/setting/transfer_scene.vue rename to admin-vben/src/app/views/setting/transfer_scene.vue diff --git a/admin/src/app/views/setting/weapp.vue b/admin-vben/src/app/views/setting/weapp.vue similarity index 100% rename from admin/src/app/views/setting/weapp.vue rename to admin-vben/src/app/views/setting/weapp.vue diff --git a/admin/src/app/views/site/components/create-site-limit.vue b/admin-vben/src/app/views/site/components/create-site-limit.vue similarity index 100% rename from admin/src/app/views/site/components/create-site-limit.vue rename to admin-vben/src/app/views/site/components/create-site-limit.vue diff --git a/admin/src/app/views/site/components/edit-site.vue b/admin-vben/src/app/views/site/components/edit-site.vue similarity index 100% rename from admin/src/app/views/site/components/edit-site.vue rename to admin-vben/src/app/views/site/components/edit-site.vue diff --git a/admin/src/app/views/site/components/user-edit.vue b/admin-vben/src/app/views/site/components/user-edit.vue similarity index 100% rename from admin/src/app/views/site/components/user-edit.vue rename to admin-vben/src/app/views/site/components/user-edit.vue diff --git a/admin/src/app/views/site/components/user-info.vue b/admin-vben/src/app/views/site/components/user-info.vue similarity index 100% rename from admin/src/app/views/site/components/user-info.vue rename to admin-vben/src/app/views/site/components/user-info.vue diff --git a/admin/src/app/views/site/group.vue b/admin-vben/src/app/views/site/group.vue similarity index 100% rename from admin/src/app/views/site/group.vue rename to admin-vben/src/app/views/site/group.vue diff --git a/admin/src/app/views/site/group_edit.vue b/admin-vben/src/app/views/site/group_edit.vue similarity index 100% rename from admin/src/app/views/site/group_edit.vue rename to admin-vben/src/app/views/site/group_edit.vue diff --git a/admin/src/app/views/site/info.vue b/admin-vben/src/app/views/site/info.vue similarity index 100% rename from admin/src/app/views/site/info.vue rename to admin-vben/src/app/views/site/info.vue diff --git a/admin/src/app/views/site/list.vue b/admin-vben/src/app/views/site/list.vue similarity index 100% rename from admin/src/app/views/site/list.vue rename to admin-vben/src/app/views/site/list.vue diff --git a/admin/src/app/views/site/manage.vue b/admin-vben/src/app/views/site/manage.vue similarity index 100% rename from admin/src/app/views/site/manage.vue rename to admin-vben/src/app/views/site/manage.vue diff --git a/admin/src/app/views/site/user.vue b/admin-vben/src/app/views/site/user.vue similarity index 100% rename from admin/src/app/views/site/user.vue rename to admin-vben/src/app/views/site/user.vue diff --git a/admin/src/app/views/site/user_info.vue b/admin-vben/src/app/views/site/user_info.vue similarity index 100% rename from admin/src/app/views/site/user_info.vue rename to admin-vben/src/app/views/site/user_info.vue diff --git a/admin/src/app/views/tools/addon/edit.vue b/admin-vben/src/app/views/tools/addon/edit.vue similarity index 100% rename from admin/src/app/views/tools/addon/edit.vue rename to admin-vben/src/app/views/tools/addon/edit.vue diff --git a/admin/src/app/views/tools/addon/index.vue b/admin-vben/src/app/views/tools/addon/index.vue similarity index 100% rename from admin/src/app/views/tools/addon/index.vue rename to admin-vben/src/app/views/tools/addon/index.vue diff --git a/admin/src/app/views/tools/addon/list.vue b/admin-vben/src/app/views/tools/addon/list.vue similarity index 100% rename from admin/src/app/views/tools/addon/list.vue rename to admin-vben/src/app/views/tools/addon/list.vue diff --git a/admin/src/app/views/tools/attachment.vue b/admin-vben/src/app/views/tools/attachment.vue similarity index 100% rename from admin/src/app/views/tools/attachment.vue rename to admin-vben/src/app/views/tools/attachment.vue diff --git a/admin/src/app/views/tools/backup_records.vue b/admin-vben/src/app/views/tools/backup_records.vue similarity index 100% rename from admin/src/app/views/tools/backup_records.vue rename to admin-vben/src/app/views/tools/backup_records.vue diff --git a/admin/src/app/views/tools/cloud_compile.vue b/admin-vben/src/app/views/tools/cloud_compile.vue similarity index 100% rename from admin/src/app/views/tools/cloud_compile.vue rename to admin-vben/src/app/views/tools/cloud_compile.vue diff --git a/admin/src/app/views/tools/code/components/add-table.vue b/admin-vben/src/app/views/tools/code/components/add-table.vue similarity index 100% rename from admin/src/app/views/tools/code/components/add-table.vue rename to admin-vben/src/app/views/tools/code/components/add-table.vue diff --git a/admin/src/app/views/tools/code/components/edit-associated.vue b/admin-vben/src/app/views/tools/code/components/edit-associated.vue similarity index 100% rename from admin/src/app/views/tools/code/components/edit-associated.vue rename to admin-vben/src/app/views/tools/code/components/edit-associated.vue diff --git a/admin/src/app/views/tools/code/components/edit-verify.vue b/admin-vben/src/app/views/tools/code/components/edit-verify.vue similarity index 100% rename from admin/src/app/views/tools/code/components/edit-verify.vue rename to admin-vben/src/app/views/tools/code/components/edit-verify.vue diff --git a/admin/src/app/views/tools/code/components/edit-view-type.vue b/admin-vben/src/app/views/tools/code/components/edit-view-type.vue similarity index 100% rename from admin/src/app/views/tools/code/components/edit-view-type.vue rename to admin-vben/src/app/views/tools/code/components/edit-view-type.vue diff --git a/admin/src/app/views/tools/code/edit.vue b/admin-vben/src/app/views/tools/code/edit.vue similarity index 100% rename from admin/src/app/views/tools/code/edit.vue rename to admin-vben/src/app/views/tools/code/edit.vue diff --git a/admin/src/app/views/tools/code/index.vue b/admin-vben/src/app/views/tools/code/index.vue similarity index 100% rename from admin/src/app/views/tools/code/index.vue rename to admin-vben/src/app/views/tools/code/index.vue diff --git a/admin/src/app/views/tools/code/list.vue b/admin-vben/src/app/views/tools/code/list.vue similarity index 100% rename from admin/src/app/views/tools/code/list.vue rename to admin-vben/src/app/views/tools/code/list.vue diff --git a/admin/src/app/views/tools/detection.vue b/admin-vben/src/app/views/tools/detection.vue similarity index 100% rename from admin/src/app/views/tools/detection.vue rename to admin-vben/src/app/views/tools/detection.vue diff --git a/admin/src/app/views/tools/schedule.vue b/admin-vben/src/app/views/tools/schedule.vue similarity index 100% rename from admin/src/app/views/tools/schedule.vue rename to admin-vben/src/app/views/tools/schedule.vue diff --git a/admin/src/app/views/tools/schedule_log.vue b/admin-vben/src/app/views/tools/schedule_log.vue similarity index 100% rename from admin/src/app/views/tools/schedule_log.vue rename to admin-vben/src/app/views/tools/schedule_log.vue diff --git a/admin/src/app/views/tools/updatecache.vue b/admin-vben/src/app/views/tools/updatecache.vue similarity index 100% rename from admin/src/app/views/tools/updatecache.vue rename to admin-vben/src/app/views/tools/updatecache.vue diff --git a/admin/src/app/views/tools/upgrade_records.vue b/admin-vben/src/app/views/tools/upgrade_records.vue similarity index 100% rename from admin/src/app/views/tools/upgrade_records.vue rename to admin-vben/src/app/views/tools/upgrade_records.vue diff --git a/admin/src/app/views/wxoplatform/setting.vue b/admin-vben/src/app/views/wxoplatform/setting.vue similarity index 100% rename from admin/src/app/views/wxoplatform/setting.vue rename to admin-vben/src/app/views/wxoplatform/setting.vue diff --git a/admin/src/app/views/wxoplatform/weapp_version.vue b/admin-vben/src/app/views/wxoplatform/weapp_version.vue similarity index 100% rename from admin/src/app/views/wxoplatform/weapp_version.vue rename to admin-vben/src/app/views/wxoplatform/weapp_version.vue diff --git a/admin/src/components/diy-link/index.vue b/admin-vben/src/components/diy-link/index.vue similarity index 100% rename from admin/src/components/diy-link/index.vue rename to admin-vben/src/components/diy-link/index.vue diff --git a/admin/src/components/diy-page/index.vue b/admin-vben/src/components/diy-page/index.vue similarity index 100% rename from admin/src/components/diy-page/index.vue rename to admin-vben/src/components/diy-page/index.vue diff --git a/admin/src/components/editor/index.vue b/admin-vben/src/components/editor/index.vue similarity index 100% rename from admin/src/components/editor/index.vue rename to admin-vben/src/components/editor/index.vue diff --git a/admin/src/components/export-sure/index.vue b/admin-vben/src/components/export-sure/index.vue similarity index 100% rename from admin/src/components/export-sure/index.vue rename to admin-vben/src/components/export-sure/index.vue diff --git a/admin/src/components/heat-map/index.vue b/admin-vben/src/components/heat-map/index.vue similarity index 100% rename from admin/src/components/heat-map/index.vue rename to admin-vben/src/components/heat-map/index.vue diff --git a/admin/src/components/icon/index.vue b/admin-vben/src/components/icon/index.vue similarity index 100% rename from admin/src/components/icon/index.vue rename to admin-vben/src/components/icon/index.vue diff --git a/admin/src/components/markdown/index.vue b/admin-vben/src/components/markdown/index.vue similarity index 100% rename from admin/src/components/markdown/index.vue rename to admin-vben/src/components/markdown/index.vue diff --git a/admin/src/components/popover-input/index.vue b/admin-vben/src/components/popover-input/index.vue similarity index 100% rename from admin/src/components/popover-input/index.vue rename to admin-vben/src/components/popover-input/index.vue diff --git a/admin/src/components/range-input/index.vue b/admin-vben/src/components/range-input/index.vue similarity index 100% rename from admin/src/components/range-input/index.vue rename to admin-vben/src/components/range-input/index.vue diff --git a/admin/src/components/select-area/index.vue b/admin-vben/src/components/select-area/index.vue similarity index 100% rename from admin/src/components/select-area/index.vue rename to admin-vben/src/components/select-area/index.vue diff --git a/admin/src/components/select-icon/index.vue b/admin-vben/src/components/select-icon/index.vue similarity index 100% rename from admin/src/components/select-icon/index.vue rename to admin-vben/src/components/select-icon/index.vue diff --git a/admin/src/components/spread-popup/index.vue b/admin-vben/src/components/spread-popup/index.vue similarity index 100% rename from admin/src/components/spread-popup/index.vue rename to admin-vben/src/components/spread-popup/index.vue diff --git a/admin/src/components/upload-attachment/attachment.vue b/admin-vben/src/components/upload-attachment/attachment.vue similarity index 100% rename from admin/src/components/upload-attachment/attachment.vue rename to admin-vben/src/components/upload-attachment/attachment.vue diff --git a/admin/src/components/upload-attachment/index.vue b/admin-vben/src/components/upload-attachment/index.vue similarity index 100% rename from admin/src/components/upload-attachment/index.vue rename to admin-vben/src/components/upload-attachment/index.vue diff --git a/admin/src/components/upload-audio/index.vue b/admin-vben/src/components/upload-audio/index.vue similarity index 100% rename from admin/src/components/upload-audio/index.vue rename to admin-vben/src/components/upload-audio/index.vue diff --git a/admin/src/components/upload-file/index.vue b/admin-vben/src/components/upload-file/index.vue similarity index 100% rename from admin/src/components/upload-file/index.vue rename to admin-vben/src/components/upload-file/index.vue diff --git a/admin/src/components/upload-image/index.vue b/admin-vben/src/components/upload-image/index.vue similarity index 100% rename from admin/src/components/upload-image/index.vue rename to admin-vben/src/components/upload-image/index.vue diff --git a/admin/src/components/upload-video/index.vue b/admin-vben/src/components/upload-video/index.vue similarity index 100% rename from admin/src/components/upload-video/index.vue rename to admin-vben/src/components/upload-video/index.vue diff --git a/admin/src/components/verifition/Verify.vue b/admin-vben/src/components/verifition/Verify.vue similarity index 100% rename from admin/src/components/verifition/Verify.vue rename to admin-vben/src/components/verifition/Verify.vue diff --git a/admin/src/components/verifition/Verify/VerifyPoints.vue b/admin-vben/src/components/verifition/Verify/VerifyPoints.vue similarity index 100% rename from admin/src/components/verifition/Verify/VerifyPoints.vue rename to admin-vben/src/components/verifition/Verify/VerifyPoints.vue diff --git a/admin/src/components/verifition/Verify/VerifySlide.vue b/admin-vben/src/components/verifition/Verify/VerifySlide.vue similarity index 100% rename from admin/src/components/verifition/Verify/VerifySlide.vue rename to admin-vben/src/components/verifition/Verify/VerifySlide.vue diff --git a/admin/src/components/verifition/api/index.js b/admin-vben/src/components/verifition/api/index.js similarity index 100% rename from admin/src/components/verifition/api/index.js rename to admin-vben/src/components/verifition/api/index.js diff --git a/admin/src/components/verifition/utils/ase.js b/admin-vben/src/components/verifition/utils/ase.js similarity index 100% rename from admin/src/components/verifition/utils/ase.js rename to admin-vben/src/components/verifition/utils/ase.js diff --git a/admin/src/components/verifition/utils/axios.js b/admin-vben/src/components/verifition/utils/axios.js similarity index 100% rename from admin/src/components/verifition/utils/axios.js rename to admin-vben/src/components/verifition/utils/axios.js diff --git a/admin/src/components/verifition/utils/util.js b/admin-vben/src/components/verifition/utils/util.js similarity index 100% rename from admin/src/components/verifition/utils/util.js rename to admin-vben/src/components/verifition/utils/util.js diff --git a/admin/src/components/video-player/index.vue b/admin-vben/src/components/video-player/index.vue similarity index 100% rename from admin/src/components/video-player/index.vue rename to admin-vben/src/components/video-player/index.vue diff --git a/admin/src/lang/en/common.json b/admin-vben/src/lang/en/common.json similarity index 100% rename from admin/src/lang/en/common.json rename to admin-vben/src/lang/en/common.json diff --git a/admin/src/lang/i18n.ts b/admin-vben/src/lang/i18n.ts similarity index 100% rename from admin/src/lang/i18n.ts rename to admin-vben/src/lang/i18n.ts diff --git a/admin/src/lang/index.ts b/admin-vben/src/lang/index.ts similarity index 100% rename from admin/src/lang/index.ts rename to admin-vben/src/lang/index.ts diff --git a/admin/src/lang/language.ts b/admin-vben/src/lang/language.ts similarity index 100% rename from admin/src/lang/language.ts rename to admin-vben/src/lang/language.ts diff --git a/admin/src/lang/zh-cn/common.json b/admin-vben/src/lang/zh-cn/common.json similarity index 100% rename from admin/src/lang/zh-cn/common.json rename to admin-vben/src/lang/zh-cn/common.json diff --git a/admin/src/layout/admin/components/aside/index.vue b/admin-vben/src/layout/admin/components/aside/index.vue similarity index 100% rename from admin/src/layout/admin/components/aside/index.vue rename to admin-vben/src/layout/admin/components/aside/index.vue diff --git a/admin/src/layout/admin/components/aside/menu-item.vue b/admin-vben/src/layout/admin/components/aside/menu-item.vue similarity index 100% rename from admin/src/layout/admin/components/aside/menu-item.vue rename to admin-vben/src/layout/admin/components/aside/menu-item.vue diff --git a/admin/src/layout/admin/components/aside/side.vue b/admin-vben/src/layout/admin/components/aside/side.vue similarity index 100% rename from admin/src/layout/admin/components/aside/side.vue rename to admin-vben/src/layout/admin/components/aside/side.vue diff --git a/admin/src/layout/admin/components/header/index.vue b/admin-vben/src/layout/admin/components/header/index.vue similarity index 100% rename from admin/src/layout/admin/components/header/index.vue rename to admin-vben/src/layout/admin/components/header/index.vue diff --git a/admin/src/layout/admin/components/header/layout-setting.vue b/admin-vben/src/layout/admin/components/header/layout-setting.vue similarity index 100% rename from admin/src/layout/admin/components/header/layout-setting.vue rename to admin-vben/src/layout/admin/components/header/layout-setting.vue diff --git a/admin/src/layout/admin/components/header/message.vue b/admin-vben/src/layout/admin/components/header/message.vue similarity index 100% rename from admin/src/layout/admin/components/header/message.vue rename to admin-vben/src/layout/admin/components/header/message.vue diff --git a/admin/src/layout/admin/components/header/switch-lang.vue b/admin-vben/src/layout/admin/components/header/switch-lang.vue similarity index 100% rename from admin/src/layout/admin/components/header/switch-lang.vue rename to admin-vben/src/layout/admin/components/header/switch-lang.vue diff --git a/admin/src/layout/admin/components/header/user-info.vue b/admin-vben/src/layout/admin/components/header/user-info.vue similarity index 100% rename from admin/src/layout/admin/components/header/user-info.vue rename to admin-vben/src/layout/admin/components/header/user-info.vue diff --git a/admin/src/layout/admin/components/tabs.vue b/admin-vben/src/layout/admin/components/tabs.vue similarity index 100% rename from admin/src/layout/admin/components/tabs.vue rename to admin-vben/src/layout/admin/components/tabs.vue diff --git a/admin/src/layout/admin/index.vue b/admin-vben/src/layout/admin/index.vue similarity index 100% rename from admin/src/layout/admin/index.vue rename to admin-vben/src/layout/admin/index.vue diff --git a/admin/src/layout/admin_simplicity/components/aside/index.vue b/admin-vben/src/layout/admin_simplicity/components/aside/index.vue similarity index 100% rename from admin/src/layout/admin_simplicity/components/aside/index.vue rename to admin-vben/src/layout/admin_simplicity/components/aside/index.vue diff --git a/admin/src/layout/admin_simplicity/components/aside/menu-item.vue b/admin-vben/src/layout/admin_simplicity/components/aside/menu-item.vue similarity index 100% rename from admin/src/layout/admin_simplicity/components/aside/menu-item.vue rename to admin-vben/src/layout/admin_simplicity/components/aside/menu-item.vue diff --git a/admin/src/layout/admin_simplicity/components/aside/side.vue b/admin-vben/src/layout/admin_simplicity/components/aside/side.vue similarity index 100% rename from admin/src/layout/admin_simplicity/components/aside/side.vue rename to admin-vben/src/layout/admin_simplicity/components/aside/side.vue diff --git a/admin/src/layout/admin_simplicity/components/header/index.vue b/admin-vben/src/layout/admin_simplicity/components/header/index.vue similarity index 100% rename from admin/src/layout/admin_simplicity/components/header/index.vue rename to admin-vben/src/layout/admin_simplicity/components/header/index.vue diff --git a/admin/src/layout/admin_simplicity/components/header/layout-setting.vue b/admin-vben/src/layout/admin_simplicity/components/header/layout-setting.vue similarity index 100% rename from admin/src/layout/admin_simplicity/components/header/layout-setting.vue rename to admin-vben/src/layout/admin_simplicity/components/header/layout-setting.vue diff --git a/admin/src/layout/admin_simplicity/components/header/message.vue b/admin-vben/src/layout/admin_simplicity/components/header/message.vue similarity index 100% rename from admin/src/layout/admin_simplicity/components/header/message.vue rename to admin-vben/src/layout/admin_simplicity/components/header/message.vue diff --git a/admin/src/layout/admin_simplicity/components/header/switch-lang.vue b/admin-vben/src/layout/admin_simplicity/components/header/switch-lang.vue similarity index 100% rename from admin/src/layout/admin_simplicity/components/header/switch-lang.vue rename to admin-vben/src/layout/admin_simplicity/components/header/switch-lang.vue diff --git a/admin/src/layout/admin_simplicity/components/header/user-info.vue b/admin-vben/src/layout/admin_simplicity/components/header/user-info.vue similarity index 100% rename from admin/src/layout/admin_simplicity/components/header/user-info.vue rename to admin-vben/src/layout/admin_simplicity/components/header/user-info.vue diff --git a/admin/src/layout/admin_simplicity/components/tabs.vue b/admin-vben/src/layout/admin_simplicity/components/tabs.vue similarity index 100% rename from admin/src/layout/admin_simplicity/components/tabs.vue rename to admin-vben/src/layout/admin_simplicity/components/tabs.vue diff --git a/admin/src/layout/admin_simplicity/index.vue b/admin-vben/src/layout/admin_simplicity/index.vue similarity index 100% rename from admin/src/layout/admin_simplicity/index.vue rename to admin-vben/src/layout/admin_simplicity/index.vue diff --git a/admin/src/layout/bussiness/components/aside/index.vue b/admin-vben/src/layout/bussiness/components/aside/index.vue similarity index 100% rename from admin/src/layout/bussiness/components/aside/index.vue rename to admin-vben/src/layout/bussiness/components/aside/index.vue diff --git a/admin/src/layout/bussiness/components/aside/menu-item.vue b/admin-vben/src/layout/bussiness/components/aside/menu-item.vue similarity index 100% rename from admin/src/layout/bussiness/components/aside/menu-item.vue rename to admin-vben/src/layout/bussiness/components/aside/menu-item.vue diff --git a/admin/src/layout/bussiness/components/aside/side.vue b/admin-vben/src/layout/bussiness/components/aside/side.vue similarity index 100% rename from admin/src/layout/bussiness/components/aside/side.vue rename to admin-vben/src/layout/bussiness/components/aside/side.vue diff --git a/admin/src/layout/bussiness/components/header/index.vue b/admin-vben/src/layout/bussiness/components/header/index.vue similarity index 100% rename from admin/src/layout/bussiness/components/header/index.vue rename to admin-vben/src/layout/bussiness/components/header/index.vue diff --git a/admin/src/layout/bussiness/components/header/layout-setting.vue b/admin-vben/src/layout/bussiness/components/header/layout-setting.vue similarity index 100% rename from admin/src/layout/bussiness/components/header/layout-setting.vue rename to admin-vben/src/layout/bussiness/components/header/layout-setting.vue diff --git a/admin/src/layout/bussiness/components/header/switch-lang.vue b/admin-vben/src/layout/bussiness/components/header/switch-lang.vue similarity index 100% rename from admin/src/layout/bussiness/components/header/switch-lang.vue rename to admin-vben/src/layout/bussiness/components/header/switch-lang.vue diff --git a/admin/src/layout/bussiness/components/header/user-info.vue b/admin-vben/src/layout/bussiness/components/header/user-info.vue similarity index 100% rename from admin/src/layout/bussiness/components/header/user-info.vue rename to admin-vben/src/layout/bussiness/components/header/user-info.vue diff --git a/admin/src/layout/bussiness/components/tabs.vue b/admin-vben/src/layout/bussiness/components/tabs.vue similarity index 100% rename from admin/src/layout/bussiness/components/tabs.vue rename to admin-vben/src/layout/bussiness/components/tabs.vue diff --git a/admin/src/layout/bussiness/index.vue b/admin-vben/src/layout/bussiness/index.vue similarity index 100% rename from admin/src/layout/bussiness/index.vue rename to admin-vben/src/layout/bussiness/index.vue diff --git a/admin/src/layout/bussiness/layout.json b/admin-vben/src/layout/bussiness/layout.json similarity index 100% rename from admin/src/layout/bussiness/layout.json rename to admin-vben/src/layout/bussiness/layout.json diff --git a/admin/src/layout/darkside/components/aside/index.vue b/admin-vben/src/layout/darkside/components/aside/index.vue similarity index 100% rename from admin/src/layout/darkside/components/aside/index.vue rename to admin-vben/src/layout/darkside/components/aside/index.vue diff --git a/admin/src/layout/darkside/components/aside/menu-item.vue b/admin-vben/src/layout/darkside/components/aside/menu-item.vue similarity index 100% rename from admin/src/layout/darkside/components/aside/menu-item.vue rename to admin-vben/src/layout/darkside/components/aside/menu-item.vue diff --git a/admin/src/layout/darkside/components/aside/side.vue b/admin-vben/src/layout/darkside/components/aside/side.vue similarity index 100% rename from admin/src/layout/darkside/components/aside/side.vue rename to admin-vben/src/layout/darkside/components/aside/side.vue diff --git a/admin/src/layout/darkside/components/header/index.vue b/admin-vben/src/layout/darkside/components/header/index.vue similarity index 100% rename from admin/src/layout/darkside/components/header/index.vue rename to admin-vben/src/layout/darkside/components/header/index.vue diff --git a/admin/src/layout/darkside/components/header/layout-setting.vue b/admin-vben/src/layout/darkside/components/header/layout-setting.vue similarity index 100% rename from admin/src/layout/darkside/components/header/layout-setting.vue rename to admin-vben/src/layout/darkside/components/header/layout-setting.vue diff --git a/admin/src/layout/darkside/components/header/switch-lang.vue b/admin-vben/src/layout/darkside/components/header/switch-lang.vue similarity index 100% rename from admin/src/layout/darkside/components/header/switch-lang.vue rename to admin-vben/src/layout/darkside/components/header/switch-lang.vue diff --git a/admin/src/layout/darkside/components/header/user-info.vue b/admin-vben/src/layout/darkside/components/header/user-info.vue similarity index 100% rename from admin/src/layout/darkside/components/header/user-info.vue rename to admin-vben/src/layout/darkside/components/header/user-info.vue diff --git a/admin/src/layout/darkside/components/tabs.vue b/admin-vben/src/layout/darkside/components/tabs.vue similarity index 100% rename from admin/src/layout/darkside/components/tabs.vue rename to admin-vben/src/layout/darkside/components/tabs.vue diff --git a/admin/src/layout/darkside/index.vue b/admin-vben/src/layout/darkside/index.vue similarity index 100% rename from admin/src/layout/darkside/index.vue rename to admin-vben/src/layout/darkside/index.vue diff --git a/admin/src/layout/darkside/layout.json b/admin-vben/src/layout/darkside/layout.json similarity index 100% rename from admin/src/layout/darkside/layout.json rename to admin-vben/src/layout/darkside/layout.json diff --git a/admin/src/layout/decorate/index.vue b/admin-vben/src/layout/decorate/index.vue similarity index 100% rename from admin/src/layout/decorate/index.vue rename to admin-vben/src/layout/decorate/index.vue diff --git a/admin/src/layout/default/components/aside/index.vue b/admin-vben/src/layout/default/components/aside/index.vue similarity index 100% rename from admin/src/layout/default/components/aside/index.vue rename to admin-vben/src/layout/default/components/aside/index.vue diff --git a/admin/src/layout/default/components/aside/menu-item.vue b/admin-vben/src/layout/default/components/aside/menu-item.vue similarity index 100% rename from admin/src/layout/default/components/aside/menu-item.vue rename to admin-vben/src/layout/default/components/aside/menu-item.vue diff --git a/admin/src/layout/default/components/aside/side.vue b/admin-vben/src/layout/default/components/aside/side.vue similarity index 100% rename from admin/src/layout/default/components/aside/side.vue rename to admin-vben/src/layout/default/components/aside/side.vue diff --git a/admin/src/layout/default/components/header/index.vue b/admin-vben/src/layout/default/components/header/index.vue similarity index 100% rename from admin/src/layout/default/components/header/index.vue rename to admin-vben/src/layout/default/components/header/index.vue diff --git a/admin/src/layout/default/components/header/layout-setting.vue b/admin-vben/src/layout/default/components/header/layout-setting.vue similarity index 100% rename from admin/src/layout/default/components/header/layout-setting.vue rename to admin-vben/src/layout/default/components/header/layout-setting.vue diff --git a/admin/src/layout/default/components/header/switch-lang.vue b/admin-vben/src/layout/default/components/header/switch-lang.vue similarity index 100% rename from admin/src/layout/default/components/header/switch-lang.vue rename to admin-vben/src/layout/default/components/header/switch-lang.vue diff --git a/admin/src/layout/default/components/header/user-info.vue b/admin-vben/src/layout/default/components/header/user-info.vue similarity index 100% rename from admin/src/layout/default/components/header/user-info.vue rename to admin-vben/src/layout/default/components/header/user-info.vue diff --git a/admin/src/layout/default/components/tabs.vue b/admin-vben/src/layout/default/components/tabs.vue similarity index 100% rename from admin/src/layout/default/components/tabs.vue rename to admin-vben/src/layout/default/components/tabs.vue diff --git a/admin/src/layout/default/index.vue b/admin-vben/src/layout/default/index.vue similarity index 100% rename from admin/src/layout/default/index.vue rename to admin-vben/src/layout/default/index.vue diff --git a/admin/src/layout/default/layout.json b/admin-vben/src/layout/default/layout.json similarity index 100% rename from admin/src/layout/default/layout.json rename to admin-vben/src/layout/default/layout.json diff --git a/admin/src/layout/index.vue b/admin-vben/src/layout/index.vue similarity index 100% rename from admin/src/layout/index.vue rename to admin-vben/src/layout/index.vue diff --git a/admin/src/layout/profession/components/aside/index.vue b/admin-vben/src/layout/profession/components/aside/index.vue similarity index 100% rename from admin/src/layout/profession/components/aside/index.vue rename to admin-vben/src/layout/profession/components/aside/index.vue diff --git a/admin/src/layout/profession/components/aside/menu-item.vue b/admin-vben/src/layout/profession/components/aside/menu-item.vue similarity index 100% rename from admin/src/layout/profession/components/aside/menu-item.vue rename to admin-vben/src/layout/profession/components/aside/menu-item.vue diff --git a/admin/src/layout/profession/components/aside/side.vue b/admin-vben/src/layout/profession/components/aside/side.vue similarity index 100% rename from admin/src/layout/profession/components/aside/side.vue rename to admin-vben/src/layout/profession/components/aside/side.vue diff --git a/admin/src/layout/profession/components/header/index.vue b/admin-vben/src/layout/profession/components/header/index.vue similarity index 100% rename from admin/src/layout/profession/components/header/index.vue rename to admin-vben/src/layout/profession/components/header/index.vue diff --git a/admin/src/layout/profession/components/header/layout-setting.vue b/admin-vben/src/layout/profession/components/header/layout-setting.vue similarity index 100% rename from admin/src/layout/profession/components/header/layout-setting.vue rename to admin-vben/src/layout/profession/components/header/layout-setting.vue diff --git a/admin/src/layout/profession/components/header/switch-lang.vue b/admin-vben/src/layout/profession/components/header/switch-lang.vue similarity index 100% rename from admin/src/layout/profession/components/header/switch-lang.vue rename to admin-vben/src/layout/profession/components/header/switch-lang.vue diff --git a/admin/src/layout/profession/components/header/user-info.vue b/admin-vben/src/layout/profession/components/header/user-info.vue similarity index 100% rename from admin/src/layout/profession/components/header/user-info.vue rename to admin-vben/src/layout/profession/components/header/user-info.vue diff --git a/admin/src/layout/profession/components/tabs.vue b/admin-vben/src/layout/profession/components/tabs.vue similarity index 100% rename from admin/src/layout/profession/components/tabs.vue rename to admin-vben/src/layout/profession/components/tabs.vue diff --git a/admin/src/layout/profession/index.vue b/admin-vben/src/layout/profession/index.vue similarity index 100% rename from admin/src/layout/profession/index.vue rename to admin-vben/src/layout/profession/index.vue diff --git a/admin/src/layout/profession/layout.json b/admin-vben/src/layout/profession/layout.json similarity index 100% rename from admin/src/layout/profession/layout.json rename to admin-vben/src/layout/profession/layout.json diff --git a/admin/src/main.ts b/admin-vben/src/main.ts similarity index 100% rename from admin/src/main.ts rename to admin-vben/src/main.ts diff --git a/admin/src/router/index.ts b/admin-vben/src/router/index.ts similarity index 100% rename from admin/src/router/index.ts rename to admin-vben/src/router/index.ts diff --git a/admin/src/router/routers.ts b/admin-vben/src/router/routers.ts similarity index 100% rename from admin/src/router/routers.ts rename to admin-vben/src/router/routers.ts diff --git a/admin/src/stores/index.ts b/admin-vben/src/stores/index.ts similarity index 100% rename from admin/src/stores/index.ts rename to admin-vben/src/stores/index.ts diff --git a/admin/src/stores/modules/app.ts b/admin-vben/src/stores/modules/app.ts similarity index 100% rename from admin/src/stores/modules/app.ts rename to admin-vben/src/stores/modules/app.ts diff --git a/admin/src/stores/modules/diy.ts b/admin-vben/src/stores/modules/diy.ts similarity index 100% rename from admin/src/stores/modules/diy.ts rename to admin-vben/src/stores/modules/diy.ts diff --git a/admin/src/stores/modules/poster.ts b/admin-vben/src/stores/modules/poster.ts similarity index 100% rename from admin/src/stores/modules/poster.ts rename to admin-vben/src/stores/modules/poster.ts diff --git a/admin/src/stores/modules/style.ts b/admin-vben/src/stores/modules/style.ts similarity index 100% rename from admin/src/stores/modules/style.ts rename to admin-vben/src/stores/modules/style.ts diff --git a/admin/src/stores/modules/system.ts b/admin-vben/src/stores/modules/system.ts similarity index 100% rename from admin/src/stores/modules/system.ts rename to admin-vben/src/stores/modules/system.ts diff --git a/admin/src/stores/modules/tabbar.ts b/admin-vben/src/stores/modules/tabbar.ts similarity index 100% rename from admin/src/stores/modules/tabbar.ts rename to admin-vben/src/stores/modules/tabbar.ts diff --git a/admin/src/stores/modules/user.ts b/admin-vben/src/stores/modules/user.ts similarity index 100% rename from admin/src/stores/modules/user.ts rename to admin-vben/src/stores/modules/user.ts diff --git a/admin/src/styles/common.scss b/admin-vben/src/styles/common.scss similarity index 100% rename from admin/src/styles/common.scss rename to admin-vben/src/styles/common.scss diff --git a/admin/src/styles/element-plus.scss b/admin-vben/src/styles/element-plus.scss similarity index 100% rename from admin/src/styles/element-plus.scss rename to admin-vben/src/styles/element-plus.scss diff --git a/admin/src/styles/font/OPLUSSANS3-REGULAR.TTF b/admin-vben/src/styles/font/OPLUSSANS3-REGULAR.TTF similarity index 100% rename from admin/src/styles/font/OPLUSSANS3-REGULAR.TTF rename to admin-vben/src/styles/font/OPLUSSANS3-REGULAR.TTF diff --git a/admin/src/styles/font/PingFang-Medium.ttf b/admin-vben/src/styles/font/PingFang-Medium.ttf similarity index 100% rename from admin/src/styles/font/PingFang-Medium.ttf rename to admin-vben/src/styles/font/PingFang-Medium.ttf diff --git a/admin/src/styles/icon/addon-iconfont.css b/admin-vben/src/styles/icon/addon-iconfont.css similarity index 100% rename from admin/src/styles/icon/addon-iconfont.css rename to admin-vben/src/styles/icon/addon-iconfont.css diff --git a/admin/src/styles/icon/iconfont.css b/admin-vben/src/styles/icon/iconfont.css similarity index 100% rename from admin/src/styles/icon/iconfont.css rename to admin-vben/src/styles/icon/iconfont.css diff --git a/admin/src/styles/icon/official-iconfont.css b/admin-vben/src/styles/icon/official-iconfont.css similarity index 100% rename from admin/src/styles/icon/official-iconfont.css rename to admin-vben/src/styles/icon/official-iconfont.css diff --git a/admin/src/styles/icon/official-iconfont.json b/admin-vben/src/styles/icon/official-iconfont.json similarity index 100% rename from admin/src/styles/icon/official-iconfont.json rename to admin-vben/src/styles/icon/official-iconfont.json diff --git a/admin/src/styles/index.scss b/admin-vben/src/styles/index.scss similarity index 100% rename from admin/src/styles/index.scss rename to admin-vben/src/styles/index.scss diff --git a/admin/src/styles/tailwind.css b/admin-vben/src/styles/tailwind.css similarity index 100% rename from admin/src/styles/tailwind.css rename to admin-vben/src/styles/tailwind.css diff --git a/admin/src/types/global.d.ts b/admin-vben/src/types/global.d.ts similarity index 100% rename from admin/src/types/global.d.ts rename to admin-vben/src/types/global.d.ts diff --git a/admin/src/utils/common.ts b/admin-vben/src/utils/common.ts similarity index 100% rename from admin/src/utils/common.ts rename to admin-vben/src/utils/common.ts diff --git a/admin/src/utils/directives.ts b/admin-vben/src/utils/directives.ts similarity index 100% rename from admin/src/utils/directives.ts rename to admin-vben/src/utils/directives.ts diff --git a/admin/src/utils/lodop.ts b/admin-vben/src/utils/lodop.ts similarity index 100% rename from admin/src/utils/lodop.ts rename to admin-vben/src/utils/lodop.ts diff --git a/admin/src/utils/qqmap.ts b/admin-vben/src/utils/qqmap.ts similarity index 100% rename from admin/src/utils/qqmap.ts rename to admin-vben/src/utils/qqmap.ts diff --git a/admin/src/utils/request.ts b/admin-vben/src/utils/request.ts similarity index 100% rename from admin/src/utils/request.ts rename to admin-vben/src/utils/request.ts diff --git a/admin/src/utils/storage.ts b/admin-vben/src/utils/storage.ts similarity index 100% rename from admin/src/utils/storage.ts rename to admin-vben/src/utils/storage.ts diff --git a/admin/src/utils/test.ts b/admin-vben/src/utils/test.ts similarity index 100% rename from admin/src/utils/test.ts rename to admin-vben/src/utils/test.ts diff --git a/admin/src/vite-env.d.ts b/admin-vben/src/vite-env.d.ts similarity index 100% rename from admin/src/vite-env.d.ts rename to admin-vben/src/vite-env.d.ts diff --git a/admin/stylelint.config.mjs b/admin-vben/stylelint.config.mjs similarity index 100% rename from admin/stylelint.config.mjs rename to admin-vben/stylelint.config.mjs diff --git a/admin/tailwind.config.cjs b/admin-vben/tailwind.config.cjs similarity index 100% rename from admin/tailwind.config.cjs rename to admin-vben/tailwind.config.cjs diff --git a/admin/tea.yaml b/admin-vben/tea.yaml similarity index 100% rename from admin/tea.yaml rename to admin-vben/tea.yaml diff --git a/admin/tsconfig.json b/admin-vben/tsconfig.json similarity index 100% rename from admin/tsconfig.json rename to admin-vben/tsconfig.json diff --git a/admin/tsconfig.node.json b/admin-vben/tsconfig.node.json similarity index 100% rename from admin/tsconfig.node.json rename to admin-vben/tsconfig.node.json diff --git a/admin/turbo.json b/admin-vben/turbo.json similarity index 100% rename from admin/turbo.json rename to admin-vben/turbo.json diff --git a/admin/vben-admin.code-workspace b/admin-vben/vben-admin.code-workspace similarity index 100% rename from admin/vben-admin.code-workspace rename to admin-vben/vben-admin.code-workspace diff --git a/admin/vite.config.ts b/admin-vben/vite.config.ts similarity index 100% rename from admin/vite.config.ts rename to admin-vben/vite.config.ts diff --git a/admin/vitest.config.ts b/admin-vben/vitest.config.ts similarity index 100% rename from admin/vitest.config.ts rename to admin-vben/vitest.config.ts diff --git a/admin/vitest.workspace.ts b/admin-vben/vitest.workspace.ts similarity index 100% rename from admin/vitest.workspace.ts rename to admin-vben/vitest.workspace.ts diff --git a/database/schema.sql b/database/schema.sql deleted file mode 100644 index c33235a5..00000000 --- a/database/schema.sql +++ /dev/null @@ -1,5015 +0,0 @@ -SET NAMES utf8; - -DROP TABLE IF EXISTS `nc_addon`; - -CREATE TABLE `nc_addon` ( - `id` int NOT NULL AUTO_INCREMENT COMMENT '主键', - `title` varchar(40) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '插件名称', - `icon` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '插件图标', - `key` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '插件标识', - `desc` text COLLATE utf8mb4_general_ci COMMENT '插件描述', - `status` tinyint NOT NULL DEFAULT '1' COMMENT '状态', - `author` varchar(40) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '作者', - `version` varchar(20) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '版本号', - `create_time` int NOT NULL DEFAULT '0' COMMENT '创建时间', - `install_time` int NOT NULL DEFAULT '0' COMMENT '安装时间', - `update_time` int NOT NULL DEFAULT '0' COMMENT '更新时间', - `cover` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '封面', - `type` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'app' COMMENT '插件类型app,addon', - `support_app` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '插件支持的应用空表示通用插件', - `is_star` tinyint NOT NULL DEFAULT '1' COMMENT '是否加星', - `compile` varchar(2000) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '编译端口', - PRIMARY KEY (`id`) USING BTREE, - UNIQUE KEY `UK_title` (`title`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='插件表'; - -DROP TABLE IF EXISTS `nc_addon_log`; - -CREATE TABLE `nc_addon_log` ( - `id` int NOT NULL AUTO_INCREMENT COMMENT '主键', - `action` varchar(40) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '操作类型 install 安装 uninstall 卸载 update 更新', - `key` varchar(20) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '插件标识', - `from_version` varchar(20) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '升级前的版本号', - `to_version` varchar(20) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '升级后的版本号', - `create_time` int NOT NULL DEFAULT '0' COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='插件日志表'; - -DROP TABLE IF EXISTS `nc_applet_site_version`; - -CREATE TABLE `nc_applet_site_version` ( - `id` int NOT NULL AUTO_INCREMENT COMMENT '主键', - `site_id` int NOT NULL DEFAULT '0' COMMENT '站点id', - `version_id` int NOT NULL DEFAULT '0' COMMENT '版本id', - `type` varchar(20) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '小程序类型', - `action` varchar(20) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '操作方式 download 下载 upgrade 更新', - `create_time` int NOT NULL DEFAULT '0' COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='站点小程序版本表'; - -DROP TABLE IF EXISTS `nc_applet_version`; - -CREATE TABLE `nc_applet_version` ( - `id` int NOT NULL AUTO_INCREMENT COMMENT '主键', - `config` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '配置信息', - `type` varchar(20) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '小程序类型', - `desc` text COLLATE utf8mb4_general_ci COMMENT '插件描述', - `status` tinyint NOT NULL DEFAULT '1' COMMENT '状态 下架 上架', - `uid` varchar(40) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '发布者', - `path` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '小程序包地址', - `version` varchar(20) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '版本号', - `version_num` varchar(20) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '版本号数字(用于排序)', - `release_version` varchar(20) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '发布线上版本号', - `create_time` int NOT NULL DEFAULT '0' COMMENT '创建时间', - `delete_time` int NOT NULL DEFAULT '0' COMMENT '删除时间', - `update_time` int NOT NULL DEFAULT '0' COMMENT '更新时间', - `site_id` int NOT NULL DEFAULT '0', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='小程序版本表'; - -DROP TABLE IF EXISTS `nc_diy_form`; - -CREATE TABLE `nc_diy_form` ( - `form_id` int NOT NULL AUTO_INCREMENT COMMENT '表单id', - `site_id` int NOT NULL DEFAULT '0' COMMENT '站点id', - `page_title` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '表单名称(用于后台展示)', - `title` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '表单名称(用于前台展示)', - `type` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '表单类型', - `status` tinyint NOT NULL DEFAULT '0' COMMENT '状态(0,关闭,1:开启)', - `template` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '模板名称', - `value` longtext COLLATE utf8mb4_general_ci COMMENT '表单数据,json格式,包含展示组件', - `addon` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '所属插件标识', - `share` varchar(1000) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '分享内容', - `write_num` int NOT NULL DEFAULT '0' COMMENT '表单填写总数量', - `remark` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '备注说明', - `create_time` int NOT NULL DEFAULT '0' COMMENT '创建时间', - `update_time` int NOT NULL DEFAULT '0' COMMENT '更新时间', - PRIMARY KEY (`form_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='万能表单表'; - -DROP TABLE IF EXISTS `nc_diy_form_fields`; - -CREATE TABLE `nc_diy_form_fields` ( - `field_id` int NOT NULL AUTO_INCREMENT COMMENT '字段id', - `site_id` int NOT NULL DEFAULT '0' COMMENT '站点id', - `form_id` int NOT NULL DEFAULT '0' COMMENT '所属万能表单id', - `field_key` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '字段唯一标识', - `field_type` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '字段类型', - `field_name` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '字段名称', - `field_remark` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '字段说明', - `field_default` text COLLATE utf8mb4_general_ci COMMENT '字段默认值', - `write_num` int NOT NULL DEFAULT '0' COMMENT '字段填写总数量', - `field_required` tinyint NOT NULL DEFAULT '0' COMMENT '字段是否必填 0:否 1:是', - `field_hidden` tinyint NOT NULL DEFAULT '0' COMMENT '字段是否隐藏 0:否 1:是', - `field_unique` tinyint NOT NULL DEFAULT '0' COMMENT '字段内容防重复 0:否 1:是', - `privacy_protection` tinyint NOT NULL DEFAULT '0' COMMENT '隐私保护 0:关闭 1:开启', - `create_time` int NOT NULL DEFAULT '0' COMMENT '创建时间', - `update_time` int NOT NULL DEFAULT '0' COMMENT '更新时间', - PRIMARY KEY (`field_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='万能表单字段表'; - -DROP TABLE IF EXISTS `nc_diy_form_records`; - -CREATE TABLE `nc_diy_form_records` ( - `record_id` int NOT NULL AUTO_INCREMENT COMMENT '表单填写记录id', - `site_id` int NOT NULL DEFAULT '0' COMMENT '站点id', - `form_id` int NOT NULL DEFAULT '0' COMMENT '所属万能表单id', - `value` longtext COLLATE utf8mb4_general_ci COMMENT '填写的表单数据', - `member_id` int NOT NULL DEFAULT '0' COMMENT '填写人会员id', - `relate_id` int NOT NULL DEFAULT '0' COMMENT '关联业务id', - `create_time` int NOT NULL DEFAULT '0' COMMENT '创建时间', - PRIMARY KEY (`record_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='万能表单填写记录表'; - -DROP TABLE IF EXISTS `nc_diy_form_records_fields`; - -CREATE TABLE `nc_diy_form_records_fields` ( - `id` int NOT NULL AUTO_INCREMENT, - `site_id` int NOT NULL DEFAULT '0' COMMENT '站点id', - `form_id` int NOT NULL DEFAULT '0' COMMENT '所属万能表单id', - `form_field_id` int NOT NULL DEFAULT '0' COMMENT '关联表单字段id', - `record_id` int NOT NULL DEFAULT '0' COMMENT '关联表单填写记录id', - `member_id` int NOT NULL DEFAULT '0' COMMENT '填写会员id', - `field_key` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '字段唯一标识', - `field_type` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '字段类型', - `field_name` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '字段名称', - `field_value` longtext COLLATE utf8mb4_general_ci NOT NULL COMMENT '字段值,根据类型展示对应效果', - `field_required` tinyint NOT NULL DEFAULT '0' COMMENT '字段是否必填 0:否 1:是', - `field_hidden` tinyint NOT NULL DEFAULT '0' COMMENT '字段是否隐藏 0:否 1:是', - `field_unique` tinyint NOT NULL DEFAULT '0' COMMENT '字段内容防重复 0:否 1:是', - `privacy_protection` tinyint NOT NULL DEFAULT '0' COMMENT '隐私保护 0:关闭 1:开启', - `update_num` int NOT NULL DEFAULT '0' COMMENT '字段修改次数', - `create_time` int NOT NULL DEFAULT '0' COMMENT '创建时间', - `update_time` int NOT NULL DEFAULT '0' COMMENT '修改时间', - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='万能表单填写字段表'; - -DROP TABLE IF EXISTS `nc_diy_form_submit_config`; - -CREATE TABLE `nc_diy_form_submit_config` ( - `id` int NOT NULL AUTO_INCREMENT COMMENT '主键id', - `site_id` int NOT NULL DEFAULT '0' COMMENT '站点id', - `form_id` int NOT NULL DEFAULT '0' COMMENT '所属万能表单id', - `submit_after_action` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '填表人提交后操作,text:文字信息,voucher:核销凭证', - `tips_type` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '提示内容类型,default:默认提示,diy:自定义提示', - `tips_text` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '自定义提示内容', - `time_limit_type` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '核销凭证有效期限制类型,no_limit:不限制,specify_time:指定固定开始结束时间,submission_time:按提交时间设置有效期', - `time_limit_rule` text COLLATE utf8mb4_general_ci COMMENT '核销凭证时间限制规则,json格式', - `voucher_content_rule` text COLLATE utf8mb4_general_ci COMMENT '核销凭证内容,json格式', - `success_after_action` text COLLATE utf8mb4_general_ci COMMENT '填写成功后续操作', - `create_time` int NOT NULL DEFAULT '0' COMMENT '创建时间', - `update_time` int NOT NULL DEFAULT '0' COMMENT '更新时间', - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='万能表单提交页配置表'; - -DROP TABLE IF EXISTS `nc_diy_form_write_config`; - -CREATE TABLE `nc_diy_form_write_config` ( - `id` int NOT NULL AUTO_INCREMENT COMMENT '主键id', - `site_id` int NOT NULL DEFAULT '0' COMMENT '站点id', - `form_id` int NOT NULL DEFAULT '0' COMMENT '所属万能表单id', - `write_way` varchar(255) COLLATE utf8mb4_general_ci NOT NULL COMMENT '填写方式,no_limit:不限制,scan:仅限微信扫一扫,url:仅限链接进入', - `join_member_type` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'all_member' COMMENT '参与会员,all_member:所有会员参与,selected_member_level:指定会员等级,selected_member_label:指定会员标签', - `level_ids` text COLLATE utf8mb4_general_ci COMMENT '会员等级id集合', - `label_ids` text COLLATE utf8mb4_general_ci COMMENT '会员标签id集合', - `member_write_type` varchar(255) COLLATE utf8mb4_general_ci NOT NULL COMMENT '每人可填写次数,no_limit:不限制,diy:自定义', - `member_write_rule` text COLLATE utf8mb4_general_ci NOT NULL COMMENT '每人可填写次数自定义规则', - `form_write_type` varchar(255) COLLATE utf8mb4_general_ci NOT NULL COMMENT '表单可填写数量,no_limit:不限制,diy:自定义', - `form_write_rule` text COLLATE utf8mb4_general_ci NOT NULL COMMENT '表单可填写总数自定义规则', - `time_limit_type` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '填写时间限制类型,no_limit:不限制, specify_time:指定开始结束时间,open_day_time:设置每日开启时间', - `time_limit_rule` text COLLATE utf8mb4_general_ci NOT NULL COMMENT '填写时间限制规则', - `is_allow_update_content` tinyint NOT NULL DEFAULT '0' COMMENT '是否允许修改自己填写的内容,0:否,1:是', - `write_instruction` text COLLATE utf8mb4_general_ci COMMENT '表单填写须知', - `create_time` int NOT NULL DEFAULT '0' COMMENT '创建时间', - `update_time` int NOT NULL DEFAULT '0' COMMENT '更新时间', - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='万能表单填写配置表'; - -DROP TABLE IF EXISTS `nc_diy_page`; - -CREATE TABLE `nc_diy_page` ( - `id` int NOT NULL AUTO_INCREMENT, - `site_id` int NOT NULL DEFAULT '0' COMMENT '站点id', - `page_title` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '页面名称(用于后台展示)', - `title` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '页面标题(用于前台展示)', - `name` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '页面标识', - `type` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '页面模板', - `template` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '页面模板名称', - `mode` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'diy' COMMENT '页面展示模式,diy:自定义,fixed:固定', - `value` longtext COLLATE utf8mb4_general_ci COMMENT '页面数据,json格式', - `is_default` int NOT NULL DEFAULT '0' COMMENT '是否默认页面,1:是,0:否', - `is_change` int NOT NULL DEFAULT '0' COMMENT '数据是否发生过变化,1:变化了,2:没有', - `share` varchar(1000) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '分享内容', - `visit_count` int NOT NULL DEFAULT '0' COMMENT '访问量', - `create_time` int NOT NULL DEFAULT '0' COMMENT '创建时间', - `update_time` int NOT NULL DEFAULT '0' COMMENT '更新时间', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='自定义页面'; - -DROP TABLE IF EXISTS `nc_diy_route`; - -CREATE TABLE `nc_diy_route` ( - `id` int NOT NULL AUTO_INCREMENT, - `site_id` int NOT NULL DEFAULT '0' COMMENT '站点id', - `title` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '页面名称', - `name` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '页面标识', - `page` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '页面路径', - `share` varchar(1000) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '分享内容', - `is_share` int NOT NULL DEFAULT '0' COMMENT '是否支持分享', - `sort` int NOT NULL DEFAULT '0' COMMENT '排序', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='自定义路由'; - -DROP TABLE IF EXISTS `nc_diy_theme`; - -CREATE TABLE `nc_diy_theme` ( - `id` int NOT NULL AUTO_INCREMENT, - `title` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '标题', - `type` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '插件类型app,addon', - `addon` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '所属应用,app:系统,shop:商城、o2o:上门服务', - `mode` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '模式,default:默认【跟随系统】,diy:自定义配色', - `theme_type` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '配色类型,default:默认,diy:自定义', - `default_theme` text COLLATE utf8mb4_general_ci COMMENT '当前色调的默认值', - `theme` text COLLATE utf8mb4_general_ci COMMENT '当前色调', - `new_theme` text COLLATE utf8mb4_general_ci COMMENT '新增颜色集合', - `is_selected` tinyint NOT NULL DEFAULT '0' COMMENT '已选色调,0:否,1.是', - `create_time` int NOT NULL DEFAULT '0' COMMENT '创建时间', - `update_time` int NOT NULL DEFAULT '0' COMMENT '更新时间', - `site_id` int NOT NULL DEFAULT '0' COMMENT '站点id', - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='自定义主题配色表'; - -DROP TABLE IF EXISTS `nc_generate_column`; - -CREATE TABLE `nc_generate_column` ( - `id` int NOT NULL AUTO_INCREMENT COMMENT 'id', - `table_id` int NOT NULL DEFAULT '0' COMMENT '表id', - `column_name` varchar(100) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '字段名称', - `column_comment` varchar(300) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '字段描述', - `column_type` varchar(100) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '字段类型', - `is_required` tinyint(1) DEFAULT '0' COMMENT '是否必填 0-非必填 1-必填', - `is_pk` tinyint(1) DEFAULT '0' COMMENT '是否为主键 0-不是 1-是', - `is_insert` tinyint(1) DEFAULT '0' COMMENT '是否为插入字段 0-不是 1-是', - `is_update` tinyint(1) DEFAULT '0' COMMENT '是否为更新字段 0-不是 1-是', - `is_lists` tinyint(1) DEFAULT '1' COMMENT '是否为列表字段 0-不是 1-是', - `is_query` tinyint(1) DEFAULT '1' COMMENT '是否为查询字段 0-不是 1-是', - `is_search` tinyint(1) DEFAULT '1' COMMENT '是否搜索字段', - `query_type` varchar(100) COLLATE utf8mb4_general_ci DEFAULT '=' COMMENT '查询类型', - `view_type` varchar(100) COLLATE utf8mb4_general_ci DEFAULT 'input' COMMENT '显示类型', - `dict_type` varchar(255) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '字典类型', - `addon` varchar(255) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '远程下拉关联应用', - `model` varchar(255) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '远程下拉关联model', - `label_key` varchar(255) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '远程下拉标题字段', - `value_key` varchar(255) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '远程下拉value字段', - `create_time` int NOT NULL DEFAULT '0' COMMENT '创建时间', - `update_time` int NOT NULL DEFAULT '0' COMMENT '修改时间', - `is_delete` tinyint DEFAULT '0' COMMENT '是否为软删除字段 0-不是 1-是', - `is_order` tinyint DEFAULT '0' COMMENT '是否为排序字段 0-不是 1-是', - `validate_type` varchar(255) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '验证类型', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='代码生成表字段信息表'; - -DROP TABLE IF EXISTS `nc_generate_table`; - -CREATE TABLE `nc_generate_table` ( - `id` int NOT NULL AUTO_INCREMENT COMMENT '主键', - `table_name` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '表名', - `table_content` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '描述前缀', - `module_name` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '模块名', - `class_name` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '类名前缀', - `create_time` int NOT NULL DEFAULT '0' COMMENT '添加时间', - `edit_type` int NOT NULL DEFAULT '1' COMMENT '编辑方式 1-弹框 2-新页面', - `addon_name` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '插件名', - `order_type` int NOT NULL DEFAULT '0' COMMENT '排序方式 0-无排序 1-正序 2-倒序', - `parent_menu` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '上级菜单', - `relations` text COLLATE utf8mb4_general_ci COMMENT '关联配置', - `synchronous_number` int NOT NULL DEFAULT '0' COMMENT '同步次数', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='代码生成表'; - -DROP TABLE IF EXISTS `nc_jobs`; - -CREATE TABLE `nc_jobs` ( - `id` int NOT NULL AUTO_INCREMENT, - `queue` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', - `payload` longtext COLLATE utf8mb4_general_ci NOT NULL, - `attempts` tinyint unsigned NOT NULL DEFAULT '0', - `reserve_time` int unsigned DEFAULT '0', - `available_time` int unsigned DEFAULT '0', - `create_time` int unsigned DEFAULT '0', - PRIMARY KEY (`id`) USING BTREE, - KEY `queue` (`queue`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='消息队列任务表'; - -DROP TABLE IF EXISTS `nc_jobs_failed`; - -CREATE TABLE `nc_jobs_failed` ( - `id` int NOT NULL AUTO_INCREMENT, - `connection` text COLLATE utf8mb4_general_ci NOT NULL, - `queue` text COLLATE utf8mb4_general_ci NOT NULL, - `payload` longtext COLLATE utf8mb4_general_ci NOT NULL, - `exception` longtext COLLATE utf8mb4_general_ci NOT NULL, - `fail_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='消息队列任务失败记录表'; - -DROP TABLE IF EXISTS `nc_member`; - -CREATE TABLE `nc_member` ( - `member_id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', - `member_no` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '会员编码', - `pid` int NOT NULL DEFAULT '0' COMMENT '推广会员id', - `site_id` int NOT NULL DEFAULT '0' COMMENT '站点id', - `username` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '会员用户名', - `mobile` varchar(20) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '手机号', - `password` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '会员密码', - `nickname` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '会员昵称', - `headimg` varchar(1000) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '会员头像', - `member_level` int NOT NULL DEFAULT '0' COMMENT '会员等级', - `member_label` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '会员标签', - `wx_openid` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '微信用户openid', - `weapp_openid` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '微信小程序openid', - `wx_unionid` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '微信unionid', - `ali_openid` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '支付宝账户id', - `douyin_openid` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '抖音小程序openid', - `register_channel` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'H5' COMMENT '注册来源', - `register_type` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '注册方式', - `login_ip` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '当前登录ip', - `login_type` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'h5' COMMENT '当前登录的操作终端类型', - `login_channel` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', - `login_count` int NOT NULL DEFAULT '0' COMMENT '登录次数', - `login_time` int NOT NULL DEFAULT '0' COMMENT '当前登录时间', - `create_time` int NOT NULL DEFAULT '0' COMMENT '注册时间', - `last_visit_time` int NOT NULL DEFAULT '0' COMMENT '最后访问时间', - `last_consum_time` int NOT NULL DEFAULT '0' COMMENT '最后消费时间', - `sex` tinyint NOT NULL DEFAULT '0' COMMENT '性别 0保密 1男 2女', - `status` tinyint NOT NULL DEFAULT '1' COMMENT '用户状态 用户状态默认为1', - `birthday` varchar(20) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '出生日期', - `id_card` varchar(30) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '身份证号', - `point` int NOT NULL DEFAULT '0' COMMENT '可用积分', - `point_get` int NOT NULL DEFAULT '0' COMMENT '累计获取积分', - `balance` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '可用余额', - `balance_get` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '累计获取余额', - `money` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '可用余额(可提现)', - `money_get` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '累计获取余额(可提现)', - `money_cash_outing` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '提现中余额(可提现)', - `growth` int NOT NULL DEFAULT '0' COMMENT '成长值', - `growth_get` int NOT NULL DEFAULT '0' COMMENT '累计获得成长值', - `commission` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '当前佣金', - `commission_get` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '佣金获取', - `commission_cash_outing` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '提现中佣金', - `is_member` tinyint NOT NULL DEFAULT '0' COMMENT '是否是会员', - `member_time` int NOT NULL DEFAULT '0' COMMENT '成为会员时间', - `is_del` tinyint NOT NULL DEFAULT '0' COMMENT '0正常 1已删除', - `province_id` int NOT NULL DEFAULT '0' COMMENT '省id', - `city_id` int NOT NULL DEFAULT '0' COMMENT '市id', - `district_id` int NOT NULL DEFAULT '0' COMMENT '区县id', - `address` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '详细地址', - `location` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '定位地址', - `remark` varchar(300) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '备注', - `delete_time` int NOT NULL DEFAULT '0' COMMENT '删除时间', - `update_time` int NOT NULL DEFAULT '0' COMMENT '修改时间', - PRIMARY KEY (`member_id`) USING BTREE, - KEY `mobile` (`mobile`), - KEY `password` (`password`), - KEY `site_id` (`site_id`), - KEY `username` (`username`), - KEY `weapp_openid` (`weapp_openid`), - KEY `wx_openid` (`wx_openid`), - KEY `wx_unionid` (`wx_unionid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='会员表'; - -DROP TABLE IF EXISTS `nc_member_account_log`; - -CREATE TABLE `nc_member_account_log` ( - `id` int unsigned NOT NULL AUTO_INCREMENT, - `member_id` int NOT NULL DEFAULT '0' COMMENT '用户id', - `site_id` int NOT NULL DEFAULT '0' COMMENT '站点id', - `account_type` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'point' COMMENT '账户类型', - `account_data` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '账户数据', - `account_sum` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '变动后的账户余额', - `from_type` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '来源类型', - `related_id` varchar(50) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '关联Id', - `create_time` int NOT NULL DEFAULT '0' COMMENT '创建时间', - `memo` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '备注信息', - PRIMARY KEY (`id`) USING BTREE, - KEY `account_type` (`account_type`), - KEY `create_time` (`create_time`), - KEY `from_type` (`from_type`), - KEY `member_id` (`member_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='会员账单表'; - -DROP TABLE IF EXISTS `nc_member_address`; - -CREATE TABLE `nc_member_address` ( - `id` int unsigned NOT NULL AUTO_INCREMENT, - `member_id` int NOT NULL DEFAULT '0' COMMENT '会员id', - `site_id` int NOT NULL DEFAULT '0' COMMENT '站点id', - `name` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '用户姓名', - `mobile` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '手机', - `province_id` int NOT NULL DEFAULT '0' COMMENT '省id', - `city_id` int NOT NULL DEFAULT '0' COMMENT '市id', - `district_id` int NOT NULL DEFAULT '0' COMMENT '区县id', - `address` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '地址信息', - `address_name` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', - `full_address` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '详细地址信息', - `lng` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '经度', - `lat` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '纬度', - `is_default` tinyint NOT NULL DEFAULT '0' COMMENT '是否是默认地址', - `type` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', - PRIMARY KEY (`id`), - KEY `IDX_member_address` (`member_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='会员收货地址'; - -DROP TABLE IF EXISTS `nc_member_cash_out`; - -CREATE TABLE `nc_member_cash_out` ( - `id` int NOT NULL AUTO_INCREMENT, - `site_id` int NOT NULL DEFAULT '0' COMMENT '站点id', - `cash_out_no` varchar(50) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '提现交易号', - `member_id` int NOT NULL DEFAULT '0' COMMENT '会员id', - `account_type` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'money' COMMENT '提现账户类型', - `transfer_type` varchar(20) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '转账提现类型', - `transfer_realname` varchar(50) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '联系人名称', - `transfer_mobile` varchar(11) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '手机号', - `transfer_bank` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '银行名称', - `transfer_account` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '收款账号', - `transfer_payee` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '转账收款方(json),主要用于对接在线的打款方式', - `transfer_payment_code` varchar(500) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '收款码图片', - `transfer_fail_reason` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '失败原因', - `transfer_status` varchar(20) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '转账状态', - `transfer_time` int NOT NULL DEFAULT '0' COMMENT '转账时间', - `apply_money` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '提现申请金额', - `rate` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '提现手续费比率', - `service_money` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '提现手续费', - `money` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '提现到账金额', - `audit_time` int NOT NULL DEFAULT '0' COMMENT '审核时间', - `status` int NOT NULL DEFAULT '0' COMMENT '状态1待审核2.待转账3已转账 -1拒绝 -2 已取消', - `remark` varchar(100) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '备注', - `create_time` int NOT NULL DEFAULT '0' COMMENT '申请时间', - `refuse_reason` varchar(100) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '拒绝理由', - `update_time` int NOT NULL DEFAULT '0', - `transfer_no` varchar(50) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '转账单号', - `cancel_time` int NOT NULL DEFAULT '0' COMMENT '取消时间', - `final_transfer_type` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '转账方式', - PRIMARY KEY (`id`) USING BTREE, - KEY `member_withdraw_apply_time` (`create_time`), - KEY `member_withdraw_audit_time` (`audit_time`), - KEY `member_withdraw_site_id` (`site_id`,`member_id`), - KEY `member_withdraw_status` (`status`), - KEY `member_withdraw_withdraw_no` (`cash_out_no`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='会员提现表'; - -DROP TABLE IF EXISTS `nc_member_cash_out_account`; - -CREATE TABLE `nc_member_cash_out_account` ( - `account_id` int NOT NULL AUTO_INCREMENT, - `site_id` int NOT NULL DEFAULT '0' COMMENT '站点id', - `member_id` int NOT NULL DEFAULT '0' COMMENT '会员id', - `account_type` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '账户类型', - `bank_name` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '银行名称', - `realname` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '真实名称', - `create_time` int NOT NULL DEFAULT '0' COMMENT '创建时间', - `update_time` int NOT NULL DEFAULT '0' COMMENT '修改时间', - `account_no` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '提现账户', - `transfer_payment_code` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '收款码', - PRIMARY KEY (`account_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='会员提现账户'; - -DROP TABLE IF EXISTS `nc_member_label`; - -CREATE TABLE `nc_member_label` ( - `label_id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '标签id', - `site_id` int NOT NULL DEFAULT '0' COMMENT '站点id', - `label_name` varchar(50) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '标签名称', - `memo` varchar(1000) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '备注', - `sort` int NOT NULL DEFAULT '0' COMMENT '排序', - `create_time` int NOT NULL DEFAULT '0' COMMENT '添加时间', - `update_time` int NOT NULL DEFAULT '0' COMMENT '更新时间', - PRIMARY KEY (`label_id`) USING BTREE, - KEY `label_id` (`label_id`) USING BTREE, - KEY `site_id` (`site_id`), - KEY `sort` (`sort`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='会员标签'; - -DROP TABLE IF EXISTS `nc_member_level`; - -CREATE TABLE `nc_member_level` ( - `level_id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '会员等级', - `site_id` int NOT NULL DEFAULT '0' COMMENT '站点id', - `level_name` varchar(50) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '等级名称', - `growth` int NOT NULL DEFAULT '0' COMMENT '所需成长值', - `remark` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '备注', - `status` int NOT NULL DEFAULT '1' COMMENT '状态 0已禁用1已启用', - `create_time` int NOT NULL DEFAULT '0' COMMENT '添加时间', - `update_time` int NOT NULL DEFAULT '0' COMMENT '更新时间', - `level_benefits` text COLLATE utf8mb4_general_ci COMMENT '等级权益', - `level_gifts` text COLLATE utf8mb4_general_ci COMMENT '等级礼包', - PRIMARY KEY (`level_id`) USING BTREE, - KEY `site_id` (`site_id`), - KEY `status` (`status`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='会员等级'; - -DROP TABLE IF EXISTS `nc_member_sign`; - -CREATE TABLE `nc_member_sign` ( - `sign_id` int unsigned NOT NULL AUTO_INCREMENT, - `site_id` int NOT NULL DEFAULT '0' COMMENT '站点id', - `member_id` int NOT NULL DEFAULT '0' COMMENT '会员id', - `days` int NOT NULL DEFAULT '0' COMMENT '连续签到天数', - `day_award` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '日签奖励', - `continue_award` text COLLATE utf8mb4_general_ci NOT NULL COMMENT '连签奖励', - `continue_tag` varchar(30) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '连签奖励标识', - `create_time` int NOT NULL DEFAULT '0' COMMENT '签到时间', - `start_time` int NOT NULL DEFAULT '0' COMMENT '签到周期开始时间', - `is_sign` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否签到(0未签到 1已签到)', - PRIMARY KEY (`sign_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='会员签到表'; - -DROP TABLE IF EXISTS `nc_niu_sms_template`; - -CREATE TABLE `nc_niu_sms_template` ( - `id` int NOT NULL AUTO_INCREMENT, - `site_id` int DEFAULT '0' COMMENT '站点ID', - `sms_type` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '短信服务商类型 niuyun-牛云 aliyun-阿里云 tencent-腾讯', - `username` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '子账号名称', - `template_key` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '模版key', - `template_id` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '模版id', - `template_type` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '模版类型', - `template_content` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '模版内容', - `param_json` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '参数变量', - `status` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '上下架状态', - `audit_status` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '报备、审核状态', - `audit_msg` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '审核结果/拒绝原因', - `report_info` text COLLATE utf8mb4_general_ci COMMENT '报备、审核信息', - `create_time` int NOT NULL DEFAULT '0' COMMENT '创建时间', - `update_time` int NOT NULL DEFAULT '0' COMMENT '修改时间', - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='牛云短信模板表'; - -DROP TABLE IF EXISTS `nc_pay`; - -CREATE TABLE `nc_pay` ( - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', - `site_id` int NOT NULL DEFAULT '0' COMMENT '站点id', - `main_id` int NOT NULL DEFAULT '0' COMMENT '支付会员id', - `from_main_id` int NOT NULL DEFAULT '0' COMMENT '发起支付会员id', - `out_trade_no` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '支付流水号', - `trade_type` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '业务类型', - `trade_id` int NOT NULL DEFAULT '0' COMMENT '业务id', - `trade_no` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '交易单号', - `body` varchar(1000) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '支付主体', - `money` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '支付金额', - `voucher` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '支付票据', - `status` int NOT NULL DEFAULT '0' COMMENT '支付状态(0.待支付 1. 支付中 2. 已支付 -1已取消)', - `json` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '支付扩展用支付信息', - `create_time` int NOT NULL DEFAULT '0' COMMENT '创建时间', - `pay_time` int NOT NULL DEFAULT '0' COMMENT '支付时间', - `cancel_time` int NOT NULL DEFAULT '0' COMMENT '关闭时间', - `type` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '支付方式', - `mch_id` varchar(50) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '商户收款账号', - `main_type` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', - `channel` varchar(50) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '支付渠道', - `fail_reason` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '失败原因', - PRIMARY KEY (`id`) USING BTREE, - UNIQUE KEY `UK_ns_pay_out_trade_no` (`out_trade_no`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='支付记录表'; - -DROP TABLE IF EXISTS `nc_pay_channel`; - -CREATE TABLE `nc_pay_channel` ( - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', - `site_id` int NOT NULL DEFAULT '1' COMMENT '站点id', - `type` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '支付类型', - `channel` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '支付渠道', - `config` text COLLATE utf8mb4_general_ci NOT NULL COMMENT '支付配置', - `create_time` int NOT NULL DEFAULT '0' COMMENT '创建时间', - `update_time` int NOT NULL DEFAULT '0' COMMENT '修改时间', - `status` int NOT NULL DEFAULT '0' COMMENT '是否启用', - `sort` int NOT NULL DEFAULT '0' COMMENT '排序', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='支付渠道配置表'; - -DROP TABLE IF EXISTS `nc_pay_refund`; - -CREATE TABLE `nc_pay_refund` ( - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', - `site_id` int NOT NULL DEFAULT '0' COMMENT '站点id', - `refund_no` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '退款单号', - `out_trade_no` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '支付流水号', - `type` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '支付方式', - `channel` varchar(50) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '支付渠道', - `money` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '支付金额', - `reason` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '退款原因', - `status` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '支付状态(0.待退款 1. 退款中 2. 已退款 -1已关闭)', - `create_time` int NOT NULL DEFAULT '0' COMMENT '创建时间', - `refund_time` int NOT NULL DEFAULT '0' COMMENT '支付时间', - `close_time` int NOT NULL DEFAULT '0' COMMENT '关闭时间', - `fail_reason` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '失败原因', - `voucher` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '支付凭证', - `trade_type` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '业务类型', - `trade_id` varchar(50) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '业务关联id', - `refund_type` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '退款方式', - `main_type` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '操作人类型', - `main_id` int NOT NULL DEFAULT '0' COMMENT '操作人', - `pay_refund_no` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '外部支付方式的退款单号', - PRIMARY KEY (`id`) USING BTREE, - UNIQUE KEY `UK_ns_pay_refund_refund_no` (`refund_no`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='支付退款记录表'; - -DROP TABLE IF EXISTS `nc_pay_transfer`; - -CREATE TABLE `nc_pay_transfer` ( - `id` int NOT NULL AUTO_INCREMENT, - `site_id` int NOT NULL DEFAULT '0' COMMENT '站点id', - `trade_type` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '业务类型', - `transfer_no` varchar(50) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '转账单号', - `main_id` int NOT NULL DEFAULT '0' COMMENT '会员id', - `main_type` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '主体类型', - `transfer_type` varchar(20) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '转账类型', - `transfer_realname` varchar(50) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '联系人名称', - `transfer_mobile` varchar(11) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '手机号', - `transfer_bank` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '银行名称', - `transfer_account` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '收款账号', - `transfer_voucher` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '凭证', - `transfer_remark` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '凭证说明', - `transfer_payment_code` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '收款码图片', - `transfer_fail_reason` varchar(2000) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '失败原因', - `transfer_status` varchar(20) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '转账状态', - `money` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '转账金额', - `create_time` int NOT NULL DEFAULT '0' COMMENT '申请时间', - `transfer_time` int NOT NULL DEFAULT '0' COMMENT '转账时间', - `update_time` int NOT NULL DEFAULT '0', - `openid` varchar(50) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', - `remark` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', - `batch_id` varchar(500) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '转账批次id', - `transfer_payee` varchar(500) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '在线转账数据(json)', - `out_batch_no` varchar(500) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '扩展数据,主要用于记录接收到线上打款的业务数据编号', - `package_info` varchar(1000) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '跳转领取页面的package信息', - `extra` varchar(1000) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '扩展信息', - PRIMARY KEY (`id`) USING BTREE, - UNIQUE KEY `UK_ns_pay_transfer_transfer_no` (`transfer_no`), - KEY `member_withdraw_apply_time` (`create_time`), - KEY `member_withdraw_audit_time` (`transfer_time`), - KEY `member_withdraw_site_id` (`site_id`,`main_id`), - KEY `member_withdraw_status` (`transfer_status`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='转账表'; - -DROP TABLE IF EXISTS `nc_pay_transfer_scene`; - -CREATE TABLE `nc_pay_transfer_scene` ( - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', - `site_id` int NOT NULL DEFAULT '0' COMMENT '站点id', - `type` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '业务类型', - `scene` varchar(50) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '场景', - `infos` varchar(2000) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '转账报备背景', - `create_time` int NOT NULL DEFAULT '0' COMMENT '创建时间', - `perception` varchar(500) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '转账收款感知', - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='支付转账场景表'; - -DROP TABLE IF EXISTS `nc_site`; - -CREATE TABLE `nc_site` ( - `site_id` int NOT NULL AUTO_INCREMENT COMMENT '主键', - `site_name` varchar(50) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '站点名称', - `group_id` int NOT NULL DEFAULT '0' COMMENT '分组ID(0:不限制)', - `keywords` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '关键字', - `app_type` varchar(50) COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'admin' COMMENT '站点类型', - `logo` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '站点logo', - `desc` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '简介', - `status` tinyint NOT NULL DEFAULT '1' COMMENT '状态 1-正常 0-体验期 2-已到期', - `latitude` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '纬度', - `longitude` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '经度', - `province_id` int NOT NULL DEFAULT '0' COMMENT '省', - `city_id` int NOT NULL DEFAULT '0' COMMENT '市', - `district_id` int NOT NULL DEFAULT '0' COMMENT '区', - `address` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '详细地址', - `full_address` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '完整地址', - `phone` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '客服电话', - `business_hours` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '营业时间', - `create_time` int NOT NULL DEFAULT '0' COMMENT '创建时间', - `expire_time` bigint NOT NULL DEFAULT '0' COMMENT '到期时间(如果是0 无限期)', - `front_end_name` varchar(50) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '前台名称', - `front_end_logo` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '前台logo(长方形)', - `front_end_icon` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '前台icon(正方形)', - `icon` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网站图标', - `member_no` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '最大会员码值', - `app` text COLLATE utf8mb4_general_ci NOT NULL COMMENT '站点应用', - `addons` text COLLATE utf8mb4_general_ci NOT NULL COMMENT '站点包含的插件', - `initalled_addon` text COLLATE utf8mb4_general_ci COMMENT '站点已执行初始化方法的插件', - `site_domain` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '站点域名', - `isinit` tinyint NOT NULL DEFAULT '1' COMMENT '是否初始化', - `meta_title` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'Meta 标题', - `meta_desc` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'Meta 描述', - `meta_keyword` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'Meta 关键字', - PRIMARY KEY (`site_id`) USING BTREE, - KEY `create_time` (`create_time`), - KEY `group_id` (`group_id`) -) ENGINE=InnoDB AUTO_INCREMENT=10000 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='站点表'; - -DROP TABLE IF EXISTS `nc_site_account_log`; - -CREATE TABLE `nc_site_account_log` ( - `id` int NOT NULL AUTO_INCREMENT COMMENT '主键', - `site_id` int NOT NULL DEFAULT '0' COMMENT '站点id', - `type` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'pay' COMMENT '账单类型pay,refund,transfer', - `money` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '交易金额', - `trade_no` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '对应类型交易单号', - `create_time` int NOT NULL DEFAULT '0' COMMENT '添加时间', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='站点账单记录'; - -DROP TABLE IF EXISTS `nc_site_addon_init_record`; - -CREATE TABLE `nc_site_addon_init_record` ( - `id` int NOT NULL AUTO_INCREMENT, - `site_id` int NOT NULL DEFAULT '0', - `addon` varchar(255) NOT NULL DEFAULT '', - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='站点插件初始化记录'; - -DROP TABLE IF EXISTS `nc_site_group`; - -CREATE TABLE `nc_site_group` ( - `group_id` int NOT NULL AUTO_INCREMENT COMMENT '分组ID', - `group_name` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '分组名称', - `group_desc` text COLLATE utf8mb4_general_ci COMMENT '分组介绍', - `app` text COLLATE utf8mb4_general_ci NOT NULL COMMENT '应用', - `addon` text COLLATE utf8mb4_general_ci NOT NULL COMMENT '插件', - `create_time` int NOT NULL DEFAULT '0' COMMENT '添加时间', - `update_time` int NOT NULL DEFAULT '0' COMMENT '更新时间', - PRIMARY KEY (`group_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='店铺分组(分组权限)'; - -DROP TABLE IF EXISTS `nc_stat_hour`; - -CREATE TABLE `nc_stat_hour` ( - `id` int unsigned NOT NULL AUTO_INCREMENT, - `site_id` int NOT NULL DEFAULT '0' COMMENT '站点id', - `addon` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '插件', - `field` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '统计字段', - `field_total` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '总计', - `year` int NOT NULL DEFAULT '0' COMMENT '年', - `month` int NOT NULL DEFAULT '0' COMMENT '月', - `day` int NOT NULL DEFAULT '0' COMMENT '天', - `start_time` int NOT NULL DEFAULT '0' COMMENT '当日开始时间戳', - `last_time` int NOT NULL DEFAULT '0' COMMENT '最后执行时间', - `hour_0` decimal(10,2) NOT NULL DEFAULT '0.00', - `hour_1` decimal(10,2) NOT NULL DEFAULT '0.00', - `hour_2` decimal(10,2) NOT NULL DEFAULT '0.00', - `hour_3` decimal(10,2) NOT NULL DEFAULT '0.00', - `hour_4` decimal(10,2) NOT NULL DEFAULT '0.00', - `hour_5` decimal(10,2) NOT NULL DEFAULT '0.00', - `hour_6` decimal(10,2) NOT NULL DEFAULT '0.00', - `hour_7` decimal(10,2) NOT NULL DEFAULT '0.00', - `hour_8` decimal(10,2) NOT NULL DEFAULT '0.00', - `hour_9` decimal(10,2) NOT NULL DEFAULT '0.00', - `hour_10` decimal(10,2) NOT NULL DEFAULT '0.00', - `hour_11` decimal(10,2) NOT NULL DEFAULT '0.00', - `hour_12` decimal(10,2) NOT NULL DEFAULT '0.00', - `hour_13` decimal(10,2) NOT NULL DEFAULT '0.00', - `hour_14` decimal(10,2) NOT NULL DEFAULT '0.00', - `hour_15` decimal(10,2) NOT NULL DEFAULT '0.00', - `hour_16` decimal(10,2) NOT NULL DEFAULT '0.00', - `hour_17` decimal(10,2) NOT NULL DEFAULT '0.00', - `hour_18` decimal(10,2) NOT NULL DEFAULT '0.00', - `hour_19` decimal(10,2) NOT NULL DEFAULT '0.00', - `hour_20` decimal(10,2) NOT NULL DEFAULT '0.00', - `hour_21` decimal(10,2) NOT NULL DEFAULT '0.00', - `hour_22` decimal(10,2) NOT NULL DEFAULT '0.00', - `hour_23` decimal(10,2) NOT NULL DEFAULT '0.00', - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='小时统计表'; - -DROP TABLE IF EXISTS `nc_sys_agreement`; - -CREATE TABLE `nc_sys_agreement` ( - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', - `site_id` int NOT NULL DEFAULT '0' COMMENT '站点id', - `agreement_key` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '协议关键字', - `title` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '协议标题', - `content` text COLLATE utf8mb4_general_ci COMMENT '协议内容', - `create_time` int NOT NULL DEFAULT '0' COMMENT '添加时间', - `update_time` int NOT NULL DEFAULT '0' COMMENT '修改时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `agreement_key` (`agreement_key`), - KEY `site_id` (`site_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='协议表'; - -DROP TABLE IF EXISTS `nc_sys_area`; - -CREATE TABLE `nc_sys_area` ( - `id` int unsigned NOT NULL AUTO_INCREMENT, - `pid` int NOT NULL DEFAULT '0' COMMENT '父级', - `name` varchar(50) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '名称', - `shortname` varchar(30) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '简称', - `longitude` varchar(30) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '经度', - `latitude` varchar(30) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '纬度', - `level` smallint NOT NULL DEFAULT '0' COMMENT '级别', - `sort` mediumint NOT NULL DEFAULT '0' COMMENT '排序', - `status` tinyint NOT NULL DEFAULT '1' COMMENT '状态1有效', - PRIMARY KEY (`id`) USING BTREE, - KEY `area` (`name`,`shortname`), - KEY `level` (`level`,`sort`,`status`), - KEY `longitude` (`longitude`,`latitude`), - KEY `pid` (`pid`) -) ENGINE=InnoDB AUTO_INCREMENT=460400501 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='地址表'; - -DROP TABLE IF EXISTS `nc_sys_attachment`; - -CREATE TABLE `nc_sys_attachment` ( - `att_id` int NOT NULL AUTO_INCREMENT, - `site_id` int NOT NULL DEFAULT '0' COMMENT '站点id', - `name` varchar(100) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '附件名称', - `real_name` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '原始文件名', - `path` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '完整地址', - `dir` varchar(200) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '附件路径', - `att_size` char(30) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '附件大小', - `att_type` char(30) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '附件类型image,video', - `storage_type` varchar(20) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '图片上传类型 local本地 aliyun 阿里云oss qiniu 七牛 ....', - `cate_id` int NOT NULL DEFAULT '0' COMMENT '相关分类', - `create_time` int NOT NULL DEFAULT '0' COMMENT '上传时间', - `update_time` int NOT NULL DEFAULT '0', - `url` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网络地址', - PRIMARY KEY (`att_id`) USING BTREE, - KEY `cate_id` (`cate_id`), - KEY `create_time` (`create_time`), - KEY `site_id` (`site_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='附件管理表'; - -DROP TABLE IF EXISTS `nc_sys_attachment_category`; - -CREATE TABLE `nc_sys_attachment_category` ( - `id` int NOT NULL AUTO_INCREMENT, - `site_id` int NOT NULL DEFAULT '0' COMMENT '站点id', - `pid` int NOT NULL DEFAULT '0' COMMENT '父级ID', - `type` varchar(50) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '文件管理类型(image,video)', - `name` varchar(50) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '分类名称', - `enname` varchar(50) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '分类目录', - `sort` int NOT NULL DEFAULT '0' COMMENT '排序', - PRIMARY KEY (`id`) USING BTREE, - UNIQUE KEY `id` (`id`) USING BTREE, - KEY `pid` (`pid`), - KEY `sort` (`sort`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='附件分类表'; - -DROP TABLE IF EXISTS `nc_sys_backup_records`; - -CREATE TABLE `nc_sys_backup_records` ( - `id` int NOT NULL AUTO_INCREMENT COMMENT '主键id', - `version` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '备份版本号', - `backup_key` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '备份标识', - `content` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '备份内容', - `status` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '状态', - `fail_reason` longtext COLLATE utf8mb4_general_ci COMMENT '失败原因', - `remark` varchar(500) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '备注', - `create_time` int NOT NULL DEFAULT '0' COMMENT '创建时间', - `complete_time` int NOT NULL DEFAULT '0' COMMENT '完成时间', - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='备份记录表'; - -DROP TABLE IF EXISTS `nc_sys_config`; - -CREATE TABLE `nc_sys_config` ( - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', - `site_id` int NOT NULL DEFAULT '0' COMMENT '站点id', - `config_key` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '配置项关键字', - `value` text COLLATE utf8mb4_general_ci COMMENT '配置值json', - `status` tinyint NOT NULL DEFAULT '1' COMMENT '是否启用 1启用 0不启用', - `create_time` int NOT NULL DEFAULT '0' COMMENT '创建时间', - `update_time` int NOT NULL DEFAULT '0' COMMENT '修改时间', - `addon` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '所属插件', - PRIMARY KEY (`id`) USING BTREE, - KEY `config_key` (`config_key`,`site_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='系统配置表'; - -DROP TABLE IF EXISTS `nc_sys_cron_task`; - -CREATE TABLE `nc_sys_cron_task` ( - `id` int NOT NULL AUTO_INCREMENT, - `site_id` int NOT NULL DEFAULT '0', - `status` int NOT NULL DEFAULT '1' COMMENT '任务状态', - `count` int NOT NULL DEFAULT '0' COMMENT '执行次数', - `title` char(50) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '任务名称', - `type` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '任务模式 cron 定时任务 crond 周期任务', - `crond_type` char(200) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '任务周期', - `crond_length` int NOT NULL DEFAULT '0' COMMENT '任务周期', - `task` varchar(500) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '任务命令', - `data` longtext COLLATE utf8mb4_general_ci COMMENT '附加参数', - `status_desc` varchar(1000) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '上次执行结果', - `last_time` int NOT NULL DEFAULT '0' COMMENT '最后执行时间', - `next_time` int NOT NULL DEFAULT '0' COMMENT '下次执行时间', - `create_time` int NOT NULL DEFAULT '0' COMMENT '创建时间', - `delete_time` int NOT NULL DEFAULT '0' COMMENT '删除时间', - `update_time` int NOT NULL DEFAULT '0' COMMENT '更新时间', - `sort` int NOT NULL DEFAULT '0' COMMENT '排序', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT=' 系统任务'; - -DROP TABLE IF EXISTS `nc_sys_dict`; - -CREATE TABLE `nc_sys_dict` ( - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'id', - `name` varchar(50) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '字典名称', - `key` varchar(100) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '字典关键词', - `dictionary` text COLLATE utf8mb4_general_ci NOT NULL COMMENT '字典数据', - `memo` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', - `create_time` int NOT NULL DEFAULT '0' COMMENT '创建时间', - `update_time` int NOT NULL DEFAULT '0' COMMENT '更新时间', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='数据字典表'; - -DROP TABLE IF EXISTS `nc_sys_export`; - -CREATE TABLE `nc_sys_export` ( - `id` int NOT NULL AUTO_INCREMENT COMMENT '主键', - `site_id` int NOT NULL DEFAULT '0' COMMENT '站点ID', - `export_key` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '主题关键字', - `export_num` int NOT NULL DEFAULT '0' COMMENT '导出数据数量', - `file_path` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '文件存储路径', - `file_size` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '文件大小', - `export_status` tinyint NOT NULL DEFAULT '0' COMMENT '导出状态', - `fail_reason` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '失败原因', - `create_time` int NOT NULL DEFAULT '0' COMMENT '导出时间', - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='导出报表'; - -DROP TABLE IF EXISTS `nc_sys_menu`; - -CREATE TABLE `nc_sys_menu` ( - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '菜单ID', - `app_type` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'admin' COMMENT '应用类型', - `menu_name` varchar(32) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '菜单名称', - `menu_short_name` varchar(50) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '菜单短标题', - `menu_key` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '菜单标识(菜单输入,接口自动生成)', - `parent_key` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '父级key', - `menu_type` tinyint NOT NULL DEFAULT '1' COMMENT '菜单类型 0目录 1菜单 2按钮', - `icon` varchar(500) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '图标 菜单有效', - `api_url` varchar(100) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'api接口地址', - `router_path` varchar(128) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '菜单路由地址 前端使用', - `view_path` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '菜单文件地址', - `methods` varchar(10) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '提交方式POST GET PUT DELETE', - `sort` int NOT NULL DEFAULT '1' COMMENT '排序', - `status` tinyint unsigned NOT NULL DEFAULT '1' COMMENT '正常,禁用(禁用后不允许访问)', - `is_show` tinyint NOT NULL DEFAULT '1' COMMENT '是否显示', - `create_time` int NOT NULL DEFAULT '0', - `delete_time` int NOT NULL DEFAULT '0', - `addon` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '所属插件', - `source` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'system' COMMENT '菜单来源 system 系统文件 create 新建菜单 generator 代码生成器', - `menu_attr` varchar(50) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '菜单属性 common 公共 system 系统', - `parent_select_key` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '上级key', - PRIMARY KEY (`id`) USING BTREE, - KEY `is_show` (`is_show`), - KEY `menu_key` (`menu_key`,`app_type`), - KEY `parent_key` (`parent_key`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='菜单表'; - -DROP TABLE IF EXISTS `nc_sys_notice`; - -CREATE TABLE `nc_sys_notice` ( - `id` int NOT NULL AUTO_INCREMENT, - `site_id` int NOT NULL DEFAULT '0' COMMENT '站点ID', - `key` varchar(50) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '标识', - `sms_content` text COLLATE utf8mb4_general_ci COMMENT '短信配置参数', - `is_wechat` tinyint NOT NULL DEFAULT '0' COMMENT '公众号模板消息(0:关闭,1:开启)', - `is_weapp` tinyint NOT NULL DEFAULT '0' COMMENT '小程序订阅消息(0:关闭,1:开启)', - `is_sms` tinyint NOT NULL DEFAULT '0' COMMENT '发送短信(0:关闭,1:开启)', - `wechat_template_id` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '微信模版消息id', - `weapp_template_id` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '微信小程序订阅消息id', - `sms_id` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '短信id(对应短信配置)', - `create_time` int NOT NULL DEFAULT '0' COMMENT '添加时间', - `wechat_first` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '微信头部', - `wechat_remark` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '微信说明', - PRIMARY KEY (`id`) USING BTREE, - KEY `message_key` (`key`,`site_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='通知模型'; - -DROP TABLE IF EXISTS `nc_sys_notice_log`; - -CREATE TABLE `nc_sys_notice_log` ( - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '通知记录ID', - `site_id` int NOT NULL DEFAULT '0' COMMENT '站点id', - `key` varchar(255) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '消息key', - `notice_type` varchar(50) COLLATE utf8mb4_general_ci DEFAULT 'sms' COMMENT '消息类型(sms,wechat.weapp)', - `uid` int unsigned NOT NULL DEFAULT '0' COMMENT '通知的用户id', - `member_id` int NOT NULL DEFAULT '0' COMMENT '消息的会员id', - `nickname` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '接收人用户昵称或姓名', - `receiver` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '接收人(对应手机号,openid)', - `content` text COLLATE utf8mb4_general_ci COMMENT '消息数据', - `is_click` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '点击次数', - `is_visit` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '访问次数', - `visit_time` int NOT NULL DEFAULT '0' COMMENT '访问时间', - `create_time` int unsigned NOT NULL DEFAULT '0' COMMENT '消息时间', - `result` varchar(1000) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '结果', - `params` text COLLATE utf8mb4_general_ci, - PRIMARY KEY (`id`) USING BTREE, - KEY `member_id` (`member_id`), - KEY `message_key` (`key`), - KEY `uid` (`uid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='通知记录表'; - -DROP TABLE IF EXISTS `nc_sys_notice_sms_log`; - -CREATE TABLE `nc_sys_notice_sms_log` ( - `id` int NOT NULL AUTO_INCREMENT COMMENT 'id', - `site_id` int NOT NULL DEFAULT '0', - `mobile` varchar(11) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '手机号码', - `sms_type` varchar(32) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '发送关键字(注册、找回密码)', - `key` varchar(32) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '发送关键字(注册、找回密码)', - `template_id` varchar(50) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', - `content` text COLLATE utf8mb4_general_ci NOT NULL COMMENT '发送内容', - `params` text COLLATE utf8mb4_general_ci NOT NULL COMMENT '数据参数', - `status` varchar(32) COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'sending' COMMENT '发送状态:sending-发送中;success-发送成功;fail-发送失败', - `result` text COLLATE utf8mb4_general_ci COMMENT '短信结果', - `create_time` int NOT NULL DEFAULT '0' COMMENT '创建时间', - `send_time` int NOT NULL DEFAULT '0' COMMENT '发送时间', - `update_time` int NOT NULL DEFAULT '0' COMMENT '更新时间', - `delete_time` int NOT NULL DEFAULT '0' COMMENT '删除时间', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='短信发送表'; - -DROP TABLE IF EXISTS `nc_sys_poster`; - -CREATE TABLE `nc_sys_poster` ( - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', - `site_id` int NOT NULL DEFAULT '0' COMMENT '站点id', - `name` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '海报名称', - `type` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '海报类型', - `channel` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '海报支持渠道', - `value` text COLLATE utf8mb4_general_ci COMMENT '配置值json', - `status` tinyint NOT NULL DEFAULT '1' COMMENT '是否启用 1启用 2不启用', - `addon` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '所属插件', - `is_default` int NOT NULL DEFAULT '0' COMMENT '是否默认海报,1:是,0:否', - `create_time` int NOT NULL DEFAULT '0' COMMENT '创建时间', - `update_time` int NOT NULL DEFAULT '0' COMMENT '修改时间', - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='海报表'; - -DROP TABLE IF EXISTS `nc_sys_printer`; - -CREATE TABLE `nc_sys_printer` ( - `printer_id` int unsigned NOT NULL AUTO_INCREMENT, - `site_id` int NOT NULL DEFAULT '0' COMMENT '站点id', - `printer_name` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '打印机名称', - `brand` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '设备品牌(易联云,365,飞鹅)', - `printer_code` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '打印机编号', - `printer_key` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '打印机秘钥', - `open_id` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '开发者id', - `apikey` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '开发者密钥', - `template_type` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '小票打印模板类型,多个逗号隔开', - `trigger` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '触发打印时机', - `value` longtext COLLATE utf8mb4_general_ci COMMENT '打印模板数据,json格式', - `print_width` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '58mm' COMMENT '纸张宽度', - `status` tinyint NOT NULL DEFAULT '1' COMMENT '状态(0,关闭,1:开启)', - `create_time` int NOT NULL DEFAULT '0' COMMENT '创建时间', - `update_time` int NOT NULL DEFAULT '0' COMMENT '修改时间', - PRIMARY KEY (`printer_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='小票打印机'; - -DROP TABLE IF EXISTS `nc_sys_printer_template`; - -CREATE TABLE `nc_sys_printer_template` ( - `template_id` int unsigned NOT NULL AUTO_INCREMENT, - `site_id` int NOT NULL DEFAULT '0' COMMENT '站点id', - `template_name` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '模板名称', - `template_type` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '模板类型', - `value` longtext COLLATE utf8mb4_general_ci COMMENT '模板数据,json格式', - `create_time` int NOT NULL DEFAULT '0' COMMENT '创建时间', - `update_time` int NOT NULL DEFAULT '0' COMMENT '修改时间', - PRIMARY KEY (`template_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='小票打印模板'; - -DROP TABLE IF EXISTS `nc_sys_role`; - -CREATE TABLE `nc_sys_role` ( - `role_id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '角色id', - `site_id` int NOT NULL DEFAULT '0' COMMENT '站点id', - `role_name` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '角色名称', - `rules` text COLLATE utf8mb4_general_ci COMMENT '角色权限(menus_id)', - `status` tinyint unsigned NOT NULL DEFAULT '1' COMMENT '状态', - `create_time` int NOT NULL DEFAULT '0' COMMENT '添加时间', - `update_time` int NOT NULL DEFAULT '0' COMMENT '最后修改时间', - PRIMARY KEY (`role_id`) USING BTREE, - KEY `site_id` (`site_id`), - KEY `status` (`status`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='角色表'; - -DROP TABLE IF EXISTS `nc_sys_schedule`; - -CREATE TABLE `nc_sys_schedule` ( - `id` int NOT NULL AUTO_INCREMENT, - `site_id` int NOT NULL DEFAULT '0', - `addon` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '所属插件', - `key` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '计划任务模板key', - `status` int NOT NULL DEFAULT '1' COMMENT '任务状态 是否启用', - `time` varchar(500) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '任务周期 json结构', - `count` int NOT NULL DEFAULT '0' COMMENT '执行次数', - `last_time` int NOT NULL DEFAULT '0' COMMENT '最后执行时间', - `next_time` int NOT NULL DEFAULT '0' COMMENT '下次执行时间', - `create_time` int NOT NULL DEFAULT '0' COMMENT '创建时间', - `delete_time` int NOT NULL DEFAULT '0' COMMENT '删除时间', - `update_time` int NOT NULL DEFAULT '0' COMMENT '更新时间', - `sort` int NOT NULL DEFAULT '0' COMMENT '排序', - `name` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '任务名称', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='系统任务'; - -DROP TABLE IF EXISTS `nc_sys_schedule_log`; - -CREATE TABLE `nc_sys_schedule_log` ( - `id` int NOT NULL AUTO_INCREMENT COMMENT '执行记录id', - `schedule_id` int NOT NULL DEFAULT '0' COMMENT '任务id', - `addon` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '所属插件', - `key` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '计划任务模板key', - `name` varchar(50) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '计划任务名称', - `execute_time` int NOT NULL COMMENT '执行时间', - `execute_result` text COLLATE utf8mb4_general_ci COMMENT '日志信息', - `status` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '执行状态', - `class` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', - `job` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='计划任务执行记录'; - -DROP TABLE IF EXISTS `nc_sys_upgrade_records`; - -CREATE TABLE `nc_sys_upgrade_records` ( - `id` int NOT NULL AUTO_INCREMENT COMMENT '主键id', - `upgrade_key` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '升级标识', - `app_key` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '插件标识', - `name` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '升级名称', - `content` text COLLATE utf8mb4_general_ci COMMENT '升级内容', - `prev_version` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '前一版本', - `current_version` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '当前版本', - `status` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '状态', - `fail_reason` longtext COLLATE utf8mb4_general_ci COMMENT '失败原因', - `create_time` int NOT NULL DEFAULT '0' COMMENT '创建时间', - `complete_time` int NOT NULL DEFAULT '0' COMMENT '完成时间', - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='升级记录表'; - -DROP TABLE IF EXISTS `nc_sys_user`; - -CREATE TABLE `nc_sys_user` ( - `uid` smallint unsigned NOT NULL AUTO_INCREMENT COMMENT '系统用户ID', - `username` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '用户账号', - `head_img` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', - `password` varchar(100) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '用户密码', - `real_name` varchar(16) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '实际姓名', - `last_ip` varchar(50) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '最后一次登录ip', - `last_time` int unsigned NOT NULL DEFAULT '0' COMMENT '最后一次登录时间', - `create_time` int unsigned NOT NULL DEFAULT '0' COMMENT '添加时间', - `login_count` int unsigned NOT NULL DEFAULT '0' COMMENT '登录次数', - `status` tinyint NOT NULL DEFAULT '1', - `is_del` tinyint unsigned NOT NULL DEFAULT '0', - `delete_time` int NOT NULL DEFAULT '0' COMMENT '删除时间', - `update_time` int NOT NULL DEFAULT '0' COMMENT '更新时间', - PRIMARY KEY (`uid`) USING BTREE, - KEY `uid` (`uid`) USING BTREE, - KEY `delete_time` (`delete_time`), - KEY `is_del` (`is_del`), - KEY `password` (`password`), - KEY `update_time` (`update_time`), - KEY `username` (`username`) -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='后台管理员表'; - -DROP TABLE IF EXISTS `nc_sys_user_log`; - -CREATE TABLE `nc_sys_user_log` ( - `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '管理员操作记录ID', - `ip` varchar(50) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '登录IP', - `site_id` int NOT NULL DEFAULT '0' COMMENT '站点id', - `uid` int unsigned NOT NULL DEFAULT '0' COMMENT '管理员id', - `username` varchar(64) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '管理员姓名', - `operation` varchar(100) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '操作描述', - `url` varchar(300) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '链接', - `params` longtext COLLATE utf8mb4_general_ci COMMENT '参数', - `type` varchar(32) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '请求方式', - `create_time` int unsigned NOT NULL DEFAULT '0' COMMENT '操作时间', - PRIMARY KEY (`id`) USING BTREE, - KEY `create_time` (`create_time`), - KEY `site_id` (`site_id`), - KEY `uid` (`uid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='管理员操作记录表'; - -DROP TABLE IF EXISTS `nc_sys_user_role`; - -CREATE TABLE `nc_sys_user_role` ( - `id` int NOT NULL AUTO_INCREMENT, - `uid` int NOT NULL DEFAULT '0' COMMENT '用户id', - `site_id` int NOT NULL DEFAULT '0' COMMENT '站点id', - `role_ids` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '角色id', - `create_time` int NOT NULL DEFAULT '0' COMMENT '添加时间', - `is_admin` int NOT NULL DEFAULT '0' COMMENT '是否是超级管理员', - `status` int NOT NULL DEFAULT '1' COMMENT '状态', - `delete_time` int NOT NULL DEFAULT '0' COMMENT '删除时间', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='用户权限表'; - -DROP TABLE IF EXISTS `nc_user_create_site_limit`; - -CREATE TABLE `nc_user_create_site_limit` ( - `id` int NOT NULL AUTO_INCREMENT, - `group_id` int NOT NULL DEFAULT '0', - `uid` int NOT NULL DEFAULT '0', - `num` int NOT NULL DEFAULT '0', - `month` int NOT NULL DEFAULT '0', - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='用户站点创建限制表'; - -DROP TABLE IF EXISTS `nc_verifier`; - -CREATE TABLE `nc_verifier` ( - `id` int NOT NULL AUTO_INCREMENT, - `site_id` int NOT NULL DEFAULT '0' COMMENT '站点id', - `member_id` int NOT NULL DEFAULT '0' COMMENT '会员id', - `uid` int NOT NULL DEFAULT '0' COMMENT '用户id', - `create_time` int NOT NULL DEFAULT '0' COMMENT '添加时间', - `verify_type` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '核销类型', - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='核销员表'; - -DROP TABLE IF EXISTS `nc_verify`; - -CREATE TABLE `nc_verify` ( - `id` int unsigned NOT NULL AUTO_INCREMENT, - `site_id` int NOT NULL DEFAULT '0' COMMENT '站点id', - `code` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '核销码', - `data` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '核销参数', - `type` varchar(30) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '核销类型', - `create_time` int NOT NULL DEFAULT '0' COMMENT '核销时间', - `verifier_member_id` int NOT NULL DEFAULT '0' COMMENT '核销会员id', - `value` varchar(1000) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '核销内容', - `body` varchar(500) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '描述', - `relate_tag` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '业务标识', - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='核销记录'; - -DROP TABLE IF EXISTS `nc_weapp_version`; - -CREATE TABLE `nc_weapp_version` ( - `id` int NOT NULL AUTO_INCREMENT, - `site_id` int NOT NULL DEFAULT '0', - `version` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', - `version_no` int NOT NULL DEFAULT '1', - `desc` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '说明', - `create_time` int NOT NULL DEFAULT '0', - `status` tinyint NOT NULL DEFAULT '0' COMMENT '状态', - `update_time` int NOT NULL DEFAULT '0', - `fail_reason` text COLLATE utf8mb4_general_ci, - `task_key` varchar(20) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '上传任务key', - `from_type` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'cloud_build', - `auditid` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='小程序版本'; - -DROP TABLE IF EXISTS `nc_wechat_fans`; - -CREATE TABLE `nc_wechat_fans` ( - `fans_id` int NOT NULL AUTO_INCREMENT COMMENT '粉丝ID', - `site_id` int NOT NULL DEFAULT '0' COMMENT '站点id', - `nickname` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '昵称', - `avatar` varchar(500) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '头像', - `sex` smallint NOT NULL DEFAULT '1' COMMENT '性别', - `language` varchar(20) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '用户语言', - `country` varchar(60) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '国家', - `province` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '省', - `city` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '城市', - `district` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '行政区/县', - `openid` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '用户的标识,对当前公众号唯一 用户的唯一身份ID', - `unionid` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '粉丝unionid', - `groupid` int NOT NULL DEFAULT '0' COMMENT '粉丝所在组id', - `is_subscribe` tinyint NOT NULL DEFAULT '1' COMMENT '是否订阅', - `remark` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '备注', - `subscribe_time` int NOT NULL DEFAULT '0' COMMENT '关注时间', - `subscribe_scene` varchar(100) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '返回用户关注的渠道来源', - `unsubscribe_time` int NOT NULL DEFAULT '0' COMMENT '取消关注时间', - `update_time` int NOT NULL DEFAULT '0' COMMENT '粉丝信息最后更新时间', - `app_id` int NOT NULL DEFAULT '0' COMMENT '应用appid', - PRIMARY KEY (`fans_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='微信粉丝列表'; - -DROP TABLE IF EXISTS `nc_wechat_media`; - -CREATE TABLE `nc_wechat_media` ( - `id` int NOT NULL AUTO_INCREMENT, - `site_id` int NOT NULL DEFAULT '0' COMMENT '站点id', - `type` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '类型', - `value` text COLLATE utf8mb4_general_ci COMMENT '值', - `create_time` int NOT NULL DEFAULT '0' COMMENT '创建时间', - `update_time` int NOT NULL DEFAULT '0' COMMENT '修改时间', - `media_id` varchar(70) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '微信端返回的素材id', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='微信素材表'; - -DROP TABLE IF EXISTS `nc_wechat_reply`; - -CREATE TABLE `nc_wechat_reply` ( - `id` int unsigned NOT NULL AUTO_INCREMENT, - `name` varchar(64) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '规则名称', - `site_id` int NOT NULL DEFAULT '0' COMMENT '站点id', - `keyword` varchar(64) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '关键词', - `reply_type` varchar(30) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '回复类型 subscribe-关注回复 keyword-关键字回复 default-默认回复', - `matching_type` varchar(30) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '1' COMMENT '匹配方式:full 全匹配;like-模糊匹配', - `content` text COLLATE utf8mb4_general_ci NOT NULL COMMENT '回复内容', - `sort` int unsigned NOT NULL DEFAULT '50' COMMENT '排序', - `create_time` int NOT NULL DEFAULT '0' COMMENT '创建时间', - `update_time` int NOT NULL DEFAULT '0' COMMENT '更新时间', - `delete_time` int NOT NULL DEFAULT '0' COMMENT '删除时间', - `reply_method` varchar(50) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '回复方式 all 全部 rand随机', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='公众号消息回调表'; - -DROP TABLE IF EXISTS `nc_wx_oplatfrom_weapp_version`; - -CREATE TABLE `nc_wx_oplatfrom_weapp_version` ( - `id` int NOT NULL AUTO_INCREMENT, - `site_group_id` int NOT NULL DEFAULT '0' COMMENT '站点套餐id', - `template_id` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '代码模板 ID', - `user_version` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '代码版本号', - `user_desc` varchar(255) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '代码描述', - `task_key` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '上传任务key', - `status` tinyint NOT NULL DEFAULT '0' COMMENT '状态', - `fail_reason` text COLLATE utf8mb4_general_ci COMMENT '失败原因', - `version_no` int NOT NULL DEFAULT '0', - `create_time` int NOT NULL DEFAULT '0', - `update_time` int NOT NULL DEFAULT '0', - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='微信小程序开发平台版本表'; - - -INSERT INTO `nc_site`(site_id, site_name, group_id, keywords, app_type, logo, `desc`, status, latitude, longitude, province_id, city_id, district_id, address, full_address, phone, business_hours, create_time, expire_time, front_end_name, front_end_logo, front_end_icon, icon, member_no, app, addons, initalled_addon, site_domain, isinit) VALUES -(1, 'niucloud-admin', 0, '', 'admin', '', '', 1, '', '', 0, 0, 0, '', '', '', '', 0, 0, '', '', '', '', '0', '', '', '', '', 0); - -UPDATE `nc_site` SET site_id = 0 WHERE site_id = 1; - -INSERT INTO `nc_sys_user` VALUES ('1', 'admin', '', '$2a$10$32zCE/6SkAUCGPhtIsKwG.2XDfsW.t4SHPmhNUjLBF6uQ54Ww6uue', '', '', '0', '0', '0', '1', '0', '0', '0'); - -INSERT INTO `nc_sys_user_role` VALUES ('1', '1', '0', '', '0', '1', '1', '0'); - -INSERT INTO `nc_sys_area` VALUES - (110000, 0, '北京市', '北京', '116.40529', '39.904987', 1, 0, 1), - (110100, 110000, '北京市', '北京', '116.40529', '39.904987', 2, 0, 1), - (110101, 110100, '东城区', '东城', '116.418755', '39.917545', 3, 0, 1), - (110102, 110100, '西城区', '西城', '116.36679', '39.91531', 3, 0, 1), - (110105, 110100, '朝阳区', '朝阳', '116.48641', '39.92149', 3, 0, 1), - (110106, 110100, '丰台区', '丰台', '116.286964', '39.863644', 3, 0, 1), - (110107, 110100, '石景山区', '石景山', '116.19544', '39.9146', 3, 0, 1), - (110108, 110100, '海淀区', '海淀', '116.31032', '39.956074', 3, 0, 1), - (110109, 110100, '门头沟区', '门头沟', '116.10538', '39.937183', 3, 0, 1), - (110111, 110100, '房山区', '房山', '116.13916', '39.735535', 3, 0, 1), - (110112, 110100, '通州区', '通州', '116.6586', '39.902485', 3, 0, 1), - (110113, 110100, '顺义区', '顺义', '116.65353', '40.128937', 3, 0, 1), - (110114, 110100, '昌平区', '昌平', '116.23591', '40.218086', 3, 0, 1), - (110115, 110100, '大兴区', '大兴', '116.338036', '39.72891', 3, 0, 1), - (110116, 110100, '怀柔区', '怀柔', '116.63712', '40.324272', 3, 0, 1), - (110117, 110100, '平谷区', '平谷', '117.112335', '40.144783', 3, 0, 1), - (110118, 110100, '密云区', '密云', '116.84317', '40.37625', 3, 0, 1), - (110119, 110100, '延庆区', '延庆', '115.97503', '40.45678', 3, 0, 1), - (120000, 0, '天津市', '天津', '117.190186', '39.125595', 1, 0, 1), - (120100, 120000, '天津市', '天津', '117.190186', '39.125595', 2, 0, 1), - (120101, 120100, '和平区', '和平', '117.19591', '39.11833', 3, 0, 1), - (120102, 120100, '河东区', '河东', '117.22657', '39.122124', 3, 0, 1), - (120103, 120100, '河西区', '河西', '117.21754', '39.1019', 3, 0, 1), - (120104, 120100, '南开区', '南开', '117.16415', '39.120476', 3, 0, 1), - (120105, 120100, '河北区', '河北', '117.20157', '39.15663', 3, 0, 1), - (120106, 120100, '红桥区', '红桥', '117.1633', '39.175068', 3, 0, 1), - (120110, 120100, '东丽区', '东丽', '117.313965', '39.087765', 3, 0, 1), - (120111, 120100, '西青区', '西青', '117.012245', '39.139446', 3, 0, 1), - (120112, 120100, '津南区', '津南', '117.382545', '38.98958', 3, 0, 1), - (120113, 120100, '北辰区', '北辰', '117.13482', '39.225555', 3, 0, 1), - (120114, 120100, '武清区', '武清', '117.05796', '39.376926', 3, 0, 1), - (120115, 120100, '宝坻区', '宝坻', '117.30809', '39.716965', 3, 0, 1), - (120116, 120100, '滨海新区', '滨海', '117.654175', '39.032845', 3, 0, 1), - (120117, 120100, '宁河区', '宁河', '117.82478', '39.33091', 3, 0, 1), - (120118, 120100, '静海区', '静海', '116.97428', '38.94737', 3, 0, 1), - (120119, 120100, '蓟州区', '蓟州', '117.40829', '40.04577', 3, 0, 1), - (130000, 0, '河北省', '河北', '114.502464', '38.045475', 1, 0, 1), - (130100, 130000, '石家庄市', '石家庄', '114.502464', '38.045475', 2, 0, 1), - (130102, 130100, '长安区', '长安', '114.54815', '38.0475', 3, 0, 1), - (130104, 130100, '桥西区', '桥西', '114.46293', '38.02838', 3, 0, 1), - (130105, 130100, '新华区', '新华', '114.46597', '38.067142', 3, 0, 1), - (130107, 130100, '井陉矿区', '井陉矿', '114.05818', '38.069748', 3, 0, 1), - (130108, 130100, '裕华区', '裕华', '114.53326', '38.027695', 3, 0, 1), - (130109, 130100, '藁城区', '藁城', '114.84676', '38.02166', 3, 0, 1), - (130110, 130100, '鹿泉区', '鹿泉', '114.31344', '38.08587', 3, 0, 1), - (130111, 130100, '栾城区', '栾城', '114.64839', '37.90025', 3, 0, 1), - (130121, 130100, '井陉县', '井陉', '114.144485', '38.033615', 3, 0, 1), - (130123, 130100, '正定县', '正定', '114.569885', '38.147835', 3, 0, 1), - (130125, 130100, '行唐县', '行唐', '114.552734', '38.437424', 3, 0, 1), - (130126, 130100, '灵寿县', '灵寿', '114.37946', '38.306545', 3, 0, 1), - (130127, 130100, '高邑县', '高邑', '114.6107', '37.605713', 3, 0, 1), - (130128, 130100, '深泽县', '深泽', '115.20021', '38.18454', 3, 0, 1), - (130129, 130100, '赞皇县', '赞皇', '114.38776', '37.6602', 3, 0, 1), - (130130, 130100, '无极县', '无极', '114.977844', '38.176376', 3, 0, 1), - (130131, 130100, '平山县', '平山', '114.18414', '38.25931', 3, 0, 1), - (130132, 130100, '元氏县', '元氏', '114.52618', '37.762512', 3, 0, 1), - (130133, 130100, '赵县', '赵县', '114.77536', '37.75434', 3, 0, 1), - (130181, 130100, '辛集市', '辛集', '115.21745', '37.92904', 3, 0, 1), - (130183, 130100, '晋州市', '晋州', '115.04488', '38.027477', 3, 0, 1), - (130184, 130100, '新乐市', '新乐', '114.68578', '38.34477', 3, 0, 1), - (130200, 130000, '唐山市', '唐山', '118.17539', '39.635113', 2, 0, 1), - (130202, 130200, '路南区', '路南', '118.21082', '39.61516', 3, 0, 1), - (130203, 130200, '路北区', '路北', '118.174736', '39.628536', 3, 0, 1), - (130204, 130200, '古冶区', '古冶', '118.45429', '39.715736', 3, 0, 1), - (130205, 130200, '开平区', '开平', '118.26443', '39.67617', 3, 0, 1), - (130207, 130200, '丰南区', '丰南', '118.110794', '39.56303', 3, 0, 1), - (130208, 130200, '丰润区', '丰润', '118.15578', '39.831364', 3, 0, 1), - (130209, 130200, '曹妃甸区', '曹妃甸', '118.46023', '39.27313', 3, 0, 1), - (130224, 130200, '滦南县', '滦南', '118.68155', '39.506203', 3, 0, 1), - (130225, 130200, '乐亭县', '乐亭', '118.90534', '39.42813', 3, 0, 1), - (130227, 130200, '迁西县', '迁西', '118.30514', '40.146236', 3, 0, 1), - (130229, 130200, '玉田县', '玉田', '117.75366', '39.88732', 3, 0, 1), - (130281, 130200, '遵化市', '遵化', '117.96587', '40.188618', 3, 0, 1), - (130283, 130200, '迁安市', '迁安', '118.701935', '40.012108', 3, 0, 1), - (130284, 130200, '滦州市', '滦州', '118.70351', '39.74058', 3, 0, 1), - (130300, 130000, '秦皇岛市', '秦皇岛', '119.58658', '39.94253', 2, 0, 1), - (130302, 130300, '海港区', '海港', '119.59622', '39.94346', 3, 0, 1), - (130303, 130300, '山海关区', '山海关', '119.75359', '39.998024', 3, 0, 1), - (130304, 130300, '北戴河区', '北戴河', '119.48628', '39.825123', 3, 0, 1), - (130306, 130300, '抚宁区', '抚宁', '119.24444', '39.87634', 3, 0, 1), - (130321, 130300, '青龙满族自治县', '青龙', '118.95455', '40.40602', 3, 0, 1), - (130322, 130300, '昌黎县', '昌黎', '119.16454', '39.70973', 3, 0, 1), - (130324, 130300, '卢龙县', '卢龙', '118.881805', '39.89164', 3, 0, 1), - (130400, 130000, '邯郸市', '邯郸', '114.490685', '36.612274', 2, 0, 1), - (130402, 130400, '邯山区', '邯山', '114.484985', '36.603195', 3, 0, 1), - (130403, 130400, '丛台区', '丛台', '114.494705', '36.61108', 3, 0, 1), - (130404, 130400, '复兴区', '复兴', '114.458244', '36.615482', 3, 0, 1), - (130406, 130400, '峰峰矿区', '峰峰矿', '114.20994', '36.420486', 3, 0, 1), - (130407, 130400, '肥乡区', '肥乡', '114.80002', '36.54811', 3, 0, 1), - (130408, 130400, '永年区', '永年', '114.49095', '36.77771', 3, 0, 1), - (130423, 130400, '临漳县', '临漳', '114.6107', '36.337605', 3, 0, 1), - (130424, 130400, '成安县', '成安', '114.68036', '36.443832', 3, 0, 1), - (130425, 130400, '大名县', '大名', '115.15259', '36.283318', 3, 0, 1), - (130426, 130400, '涉县', '涉县', '113.673294', '36.563145', 3, 0, 1), - (130427, 130400, '磁县', '磁县', '114.38208', '36.367672', 3, 0, 1), - (130430, 130400, '邱县', '邱县', '115.16859', '36.81325', 3, 0, 1), - (130431, 130400, '鸡泽县', '鸡泽', '114.87852', '36.91491', 3, 0, 1), - (130432, 130400, '广平县', '广平', '114.95086', '36.483604', 3, 0, 1), - (130433, 130400, '馆陶县', '馆陶', '115.289055', '36.53946', 3, 0, 1), - (130434, 130400, '魏县', '魏县', '114.93411', '36.354248', 3, 0, 1), - (130435, 130400, '曲周县', '曲周', '114.95759', '36.7734', 3, 0, 1), - (130481, 130400, '武安市', '武安', '114.19458', '36.696114', 3, 0, 1), - (130500, 130000, '邢台市', '邢台', '114.50885', '37.0682', 2, 0, 1), - (130502, 130500, '襄都区', '桥东', '114.50713', '37.064125', 3, 0, 1), - (130503, 130500, '信都区', '桥西', '114.47369', '37.06801', 3, 0, 1), - (130505, 130500, '任泽区', '任泽', '', '', 3, 0, 1), - (130506, 130500, '南和区', '南和', '', '', 3, 0, 1), - (130522, 130500, '临城县', '临城', '114.506874', '37.444008', 3, 0, 1), - (130523, 130500, '内丘县', '内丘', '114.51152', '37.287663', 3, 0, 1), - (130524, 130500, '柏乡县', '柏乡', '114.69338', '37.483597', 3, 0, 1), - (130525, 130500, '隆尧县', '隆尧', '114.776344', '37.350925', 3, 0, 1), - (130528, 130500, '宁晋县', '宁晋', '114.92103', '37.618958', 3, 0, 1), - (130529, 130500, '巨鹿县', '巨鹿', '115.03878', '37.21768', 3, 0, 1), - (130530, 130500, '新河县', '新河', '115.247536', '37.526215', 3, 0, 1), - (130531, 130500, '广宗县', '广宗', '115.1428', '37.075546', 3, 0, 1), - (130532, 130500, '平乡县', '平乡', '115.02922', '37.069405', 3, 0, 1), - (130533, 130500, '威县', '威县', '115.27275', '36.983273', 3, 0, 1), - (130534, 130500, '清河县', '清河', '115.669', '37.05999', 3, 0, 1), - (130535, 130500, '临西县', '临西', '115.49869', '36.8642', 3, 0, 1), - (130581, 130500, '南宫市', '南宫', '115.3981', '37.35967', 3, 0, 1), - (130582, 130500, '沙河市', '沙河', '114.504906', '36.861904', 3, 0, 1), - (130600, 130000, '保定市', '保定', '115.48233', '38.867657', 2, 0, 1), - (130602, 130600, '竞秀区', '新市', '115.47066', '38.88662', 3, 0, 1), - (130606, 130600, '莲池区', '莲池', '115.49715', '38.88353', 3, 0, 1), - (130607, 130600, '满城区', '满城', '115.32217', '38.94892', 3, 0, 1), - (130608, 130600, '清苑区', '清苑', '115.48989', '38.76526', 3, 0, 1), - (130609, 130600, '徐水区', '徐水', '115.65586', '39.01865', 3, 0, 1), - (130623, 130600, '涞水县', '涞水', '115.71198', '39.393147', 3, 0, 1), - (130624, 130600, '阜平县', '阜平', '114.1988', '38.847275', 3, 0, 1), - (130626, 130600, '定兴县', '定兴', '115.7969', '39.266193', 3, 0, 1), - (130627, 130600, '唐县', '唐县', '114.98124', '38.748543', 3, 0, 1), - (130628, 130600, '高阳县', '高阳', '115.77888', '38.69009', 3, 0, 1), - (130629, 130600, '容城县', '容城', '115.86625', '39.05282', 3, 0, 1), - (130630, 130600, '涞源县', '涞源', '114.692566', '39.35755', 3, 0, 1), - (130631, 130600, '望都县', '望都', '115.15401', '38.707447', 3, 0, 1), - (130632, 130600, '安新县', '安新', '115.93198', '38.929913', 3, 0, 1), - (130633, 130600, '易县', '易县', '115.501144', '39.35297', 3, 0, 1), - (130634, 130600, '曲阳县', '曲阳', '114.704056', '38.61999', 3, 0, 1), - (130635, 130600, '蠡县', '蠡县', '115.58363', '38.49643', 3, 0, 1), - (130636, 130600, '顺平县', '顺平', '115.13275', '38.845127', 3, 0, 1), - (130637, 130600, '博野县', '博野', '115.4618', '38.45827', 3, 0, 1), - (130638, 130600, '雄县', '雄县', '116.107475', '38.990818', 3, 0, 1), - (130681, 130600, '涿州市', '涿州', '115.97341', '39.485764', 3, 0, 1), - (130682, 130600, '定州市', '定州', '114.99139', '38.5176', 3, 0, 1), - (130683, 130600, '安国市', '安国', '115.33141', '38.421368', 3, 0, 1), - (130684, 130600, '高碑店市', '高碑店', '115.882706', '39.32769', 3, 0, 1), - (130700, 130000, '张家口市', '张家口', '114.884094', '40.8119', 2, 0, 1), - (130702, 130700, '桥东区', '桥东', '114.88566', '40.813873', 3, 0, 1), - (130703, 130700, '桥西区', '桥西', '114.882126', '40.824387', 3, 0, 1), - (130705, 130700, '宣化区', '宣化区', '115.0632', '40.609367', 3, 0, 1), - (130706, 130700, '下花园区', '下花园', '115.281', '40.488644', 3, 0, 1), - (130708, 130700, '万全区', '万全', '114.74055', '40.76699', 3, 0, 1), - (130709, 130700, '崇礼区', '崇礼', '115.282349', '40.974758', 3, 0, 1), - (130722, 130700, '张北县', '张北', '114.71595', '41.151714', 3, 0, 1), - (130723, 130700, '康保县', '康保', '114.61581', '41.850044', 3, 0, 1), - (130724, 130700, '沽源县', '沽源', '115.68484', '41.66742', 3, 0, 1), - (130725, 130700, '尚义县', '尚义', '113.977715', '41.08009', 3, 0, 1), - (130726, 130700, '蔚县', '蔚县', '114.582695', '39.83718', 3, 0, 1), - (130727, 130700, '阳原县', '阳原', '114.16734', '40.11342', 3, 0, 1), - (130728, 130700, '怀安县', '怀安', '114.42236', '40.671272', 3, 0, 1), - (130730, 130700, '怀来县', '怀来', '115.52084', '40.405403', 3, 0, 1), - (130731, 130700, '涿鹿县', '涿鹿', '115.219246', '40.3787', 3, 0, 1), - (130732, 130700, '赤城县', '赤城', '115.83271', '40.912083', 3, 0, 1), - (130800, 130000, '承德市', '承德', '117.939156', '40.976204', 2, 0, 1), - (130802, 130800, '双桥区', '双桥', '117.939156', '40.976204', 3, 0, 1), - (130803, 130800, '双滦区', '双滦', '117.797485', '40.959755', 3, 0, 1), - (130804, 130800, '鹰手营子矿区', '鹰手营子矿', '117.661156', '40.546955', 3, 0, 1), - (130821, 130800, '承德县', '承德', '118.17249', '40.76864', 3, 0, 1), - (130822, 130800, '兴隆县', '兴隆', '117.507095', '40.418526', 3, 0, 1), - (130824, 130800, '滦平县', '滦平', '117.33713', '40.936646', 3, 0, 1), - (130825, 130800, '隆化县', '隆化', '117.73634', '41.316666', 3, 0, 1), - (130826, 130800, '丰宁满族自治县', '丰宁', '116.65121', '41.209904', 3, 0, 1), - (130827, 130800, '宽城满族自治县', '宽城', '118.48864', '40.607983', 3, 0, 1), - (130828, 130800, '围场满族蒙古族自治县', '围场', '117.764084', '41.949406', 3, 0, 1), - (130881, 130800, '平泉市', '平泉', '118.70065', '41.01797', 3, 0, 1), - (130900, 130000, '沧州市', '沧州', '116.85746', '38.31058', 2, 0, 1), - (130902, 130900, '新华区', '新华', '116.87305', '38.308273', 3, 0, 1), - (130903, 130900, '运河区', '运河', '116.840065', '38.307404', 3, 0, 1), - (130921, 130900, '沧县', '沧县', '117.00748', '38.219856', 3, 0, 1), - (130922, 130900, '青县', '青县', '116.83839', '38.569645', 3, 0, 1), - (130923, 130900, '东光县', '东光', '116.54206', '37.88655', 3, 0, 1), - (130924, 130900, '海兴县', '海兴', '117.496605', '38.141582', 3, 0, 1), - (130925, 130900, '盐山县', '盐山', '117.22981', '38.05614', 3, 0, 1), - (130926, 130900, '肃宁县', '肃宁', '115.83585', '38.4271', 3, 0, 1), - (130927, 130900, '南皮县', '南皮', '116.70917', '38.04244', 3, 0, 1), - (130928, 130900, '吴桥县', '吴桥', '116.39151', '37.62818', 3, 0, 1), - (130929, 130900, '献县', '献县', '116.12384', '38.18966', 3, 0, 1), - (130930, 130900, '孟村回族自治县', '孟村', '117.1051', '38.057953', 3, 0, 1), - (130981, 130900, '泊头市', '泊头', '116.57016', '38.07348', 3, 0, 1), - (130982, 130900, '任丘市', '任丘', '116.106766', '38.706512', 3, 0, 1), - (130983, 130900, '黄骅市', '黄骅', '117.3438', '38.36924', 3, 0, 1), - (130984, 130900, '河间市', '河间', '116.089455', '38.44149', 3, 0, 1), - (131000, 130000, '廊坊市', '廊坊', '116.70444', '39.523926', 2, 0, 1), - (131002, 131000, '安次区', '安次', '116.69454', '39.502567', 3, 0, 1), - (131003, 131000, '广阳区', '广阳', '116.71371', '39.52193', 3, 0, 1), - (131022, 131000, '固安县', '固安', '116.2999', '39.436466', 3, 0, 1), - (131023, 131000, '永清县', '永清', '116.49809', '39.319717', 3, 0, 1), - (131024, 131000, '香河县', '香河', '117.007164', '39.757214', 3, 0, 1), - (131025, 131000, '大城县', '大城', '116.64073', '38.699215', 3, 0, 1), - (131026, 131000, '文安县', '文安', '116.460106', '38.866802', 3, 0, 1), - (131028, 131000, '大厂回族自治县', '大厂', '116.9865', '39.889267', 3, 0, 1), - (131081, 131000, '霸州市', '霸州', '116.39202', '39.117332', 3, 0, 1), - (131082, 131000, '三河市', '三河', '117.07702', '39.982777', 3, 0, 1), - (131100, 130000, '衡水市', '衡水', '115.66599', '37.735096', 2, 0, 1), - (131102, 131100, '桃城区', '桃城', '115.69495', '37.73224', 3, 0, 1), - (131103, 131100, '冀州区', '冀州', '115.57938', '37.55085', 3, 0, 1), - (131121, 131100, '枣强县', '枣强', '115.7265', '37.511513', 3, 0, 1), - (131122, 131100, '武邑县', '武邑', '115.89242', '37.803776', 3, 0, 1), - (131123, 131100, '武强县', '武强', '115.97024', '38.03698', 3, 0, 1), - (131124, 131100, '饶阳县', '饶阳', '115.72658', '38.23267', 3, 0, 1), - (131125, 131100, '安平县', '安平', '115.51963', '38.233513', 3, 0, 1), - (131126, 131100, '故城县', '故城', '115.96674', '37.350983', 3, 0, 1), - (131127, 131100, '景县', '景县', '116.258446', '37.686623', 3, 0, 1), - (131128, 131100, '阜城县', '阜城', '116.16473', '37.869946', 3, 0, 1), - (131182, 131100, '深州市', '深州', '115.554596', '38.00347', 3, 0, 1), - (140000, 0, '山西省', '山西', '112.54925', '37.857014', 1, 0, 1), - (140100, 140000, '太原市', '太原', '112.54925', '37.857014', 2, 0, 1), - (140105, 140100, '小店区', '小店', '112.56427', '37.817974', 3, 0, 1), - (140106, 140100, '迎泽区', '迎泽', '112.55885', '37.855804', 3, 0, 1), - (140107, 140100, '杏花岭区', '杏花岭', '112.560745', '37.87929', 3, 0, 1), - (140108, 140100, '尖草坪区', '尖草坪', '112.48712', '37.93989', 3, 0, 1), - (140109, 140100, '万柏林区', '万柏林', '112.522255', '37.86265', 3, 0, 1), - (140110, 140100, '晋源区', '晋源', '112.47785', '37.71562', 3, 0, 1), - (140121, 140100, '清徐县', '清徐', '112.35796', '37.60729', 3, 0, 1), - (140122, 140100, '阳曲县', '阳曲', '112.67382', '38.058796', 3, 0, 1), - (140123, 140100, '娄烦县', '娄烦', '111.7938', '38.066036', 3, 0, 1), - (140181, 140100, '古交市', '古交', '112.174355', '37.908535', 3, 0, 1), - (140200, 140000, '大同市', '大同', '113.29526', '40.09031', 2, 0, 1), - (140212, 140200, '新荣区', '新荣', '113.141045', '40.25827', 3, 0, 1), - (140213, 140200, '平城区', '平城', '113.29798', '40.07583', 3, 0, 1), - (140214, 140200, '云冈区', '云冈', '113.14952', '40.00543', 3, 0, 1), - (140215, 140200, '云州区', '云州', '113.61217', '40.04016', 3, 0, 1), - (140221, 140200, '阳高县', '阳高', '113.74987', '40.364925', 3, 0, 1), - (140222, 140200, '天镇县', '天镇', '114.09112', '40.421337', 3, 0, 1), - (140223, 140200, '广灵县', '广灵', '114.27925', '39.76305', 3, 0, 1), - (140224, 140200, '灵丘县', '灵丘', '114.23576', '39.438866', 3, 0, 1), - (140225, 140200, '浑源县', '浑源', '113.69809', '39.6991', 3, 0, 1), - (140226, 140200, '左云县', '左云', '112.70641', '40.012875', 3, 0, 1), - (140300, 140000, '阳泉市', '阳泉', '113.58328', '37.861187', 2, 0, 1), - (140302, 140300, '城区', '城区', '113.58651', '37.86094', 3, 0, 1), - (140303, 140300, '矿区', '矿区', '113.55907', '37.870087', 3, 0, 1), - (140311, 140300, '郊区', '郊区', '113.58328', '37.861187', 3, 0, 1), - (140321, 140300, '平定县', '平定', '113.63105', '37.80029', 3, 0, 1), - (140322, 140300, '盂县', '盂县', '113.41223', '38.086132', 3, 0, 1), - (140400, 140000, '长治市', '长治', '113.113556', '36.191113', 2, 0, 1), - (140403, 140400, '潞州区', '潞州', '113.12303', '36.20346', 3, 0, 1), - (140404, 140400, '上党区', '上党', '113.05135', '36.05312', 3, 0, 1), - (140405, 140400, '屯留区', '屯留', '112.89221', '36.31553', 3, 0, 1), - (140406, 140400, '潞城区', '潞城', '113.22893', '36.33418', 3, 0, 1), - (140423, 140400, '襄垣县', '襄垣', '113.050095', '36.532852', 3, 0, 1), - (140425, 140400, '平顺县', '平顺', '113.43879', '36.200203', 3, 0, 1), - (140426, 140400, '黎城县', '黎城', '113.38737', '36.50297', 3, 0, 1), - (140427, 140400, '壶关县', '壶关', '113.20614', '36.11094', 3, 0, 1), - (140428, 140400, '长子县', '长子', '112.88466', '36.119484', 3, 0, 1), - (140429, 140400, '武乡县', '武乡', '112.8653', '36.834316', 3, 0, 1), - (140430, 140400, '沁县', '沁县', '112.70138', '36.757122', 3, 0, 1), - (140431, 140400, '沁源县', '沁源', '112.34088', '36.50078', 3, 0, 1), - (140500, 140000, '晋城市', '晋城', '112.85127', '35.497555', 2, 0, 1), - (140502, 140500, '城区', '城区', '112.8531', '35.49664', 3, 0, 1), - (140521, 140500, '沁水县', '沁水', '112.18721', '35.689472', 3, 0, 1), - (140522, 140500, '阳城县', '阳城', '112.42201', '35.482178', 3, 0, 1), - (140524, 140500, '陵川县', '陵川', '113.27888', '35.775616', 3, 0, 1), - (140525, 140500, '泽州县', '泽州', '112.89914', '35.61722', 3, 0, 1), - (140581, 140500, '高平市', '高平', '112.930695', '35.791355', 3, 0, 1), - (140600, 140000, '朔州市', '朔州', '112.43339', '39.33126', 2, 0, 1), - (140602, 140600, '朔城区', '朔城', '112.42867', '39.324524', 3, 0, 1), - (140603, 140600, '平鲁区', '平鲁', '112.29523', '39.515602', 3, 0, 1), - (140621, 140600, '山阴县', '山阴', '112.8164', '39.52677', 3, 0, 1), - (140622, 140600, '应县', '应县', '113.18751', '39.55919', 3, 0, 1), - (140623, 140600, '右玉县', '右玉', '112.46559', '39.98881', 3, 0, 1), - (140681, 140600, '怀仁市', '怀仁', '113.10012', '39.82788', 3, 0, 1), - (140700, 140000, '晋中市', '晋中', '112.736465', '37.696495', 2, 0, 1), - (140702, 140700, '榆次区', '榆次', '112.74006', '37.6976', 3, 0, 1), - (140703, 140700, '太谷区', '太谷', '112.55126', '37.42119', 3, 0, 1), - (140721, 140700, '榆社县', '榆社', '112.97352', '37.06902', 3, 0, 1), - (140722, 140700, '左权县', '左权', '113.37783', '37.079674', 3, 0, 1), - (140723, 140700, '和顺县', '和顺', '113.57292', '37.327026', 3, 0, 1), - (140724, 140700, '昔阳县', '昔阳', '113.70617', '37.60437', 3, 0, 1), - (140725, 140700, '寿阳县', '寿阳', '113.17771', '37.891136', 3, 0, 1), - (140727, 140700, '祁县', '祁县', '112.33053', '37.358738', 3, 0, 1), - (140728, 140700, '平遥县', '平遥', '112.17406', '37.195473', 3, 0, 1), - (140729, 140700, '灵石县', '灵石', '111.77276', '36.84747', 3, 0, 1), - (140781, 140700, '介休市', '介休', '111.91386', '37.027615', 3, 0, 1), - (140800, 140000, '运城市', '运城', '111.00396', '35.022778', 2, 0, 1), - (140802, 140800, '盐湖区', '盐湖', '111.000626', '35.025642', 3, 0, 1), - (140821, 140800, '临猗县', '临猗', '110.77493', '35.141884', 3, 0, 1), - (140822, 140800, '万荣县', '万荣', '110.84356', '35.41704', 3, 0, 1), - (140823, 140800, '闻喜县', '闻喜', '111.22031', '35.35384', 3, 0, 1), - (140824, 140800, '稷山县', '稷山', '110.979', '35.60041', 3, 0, 1), - (140825, 140800, '新绛县', '新绛', '111.225204', '35.613697', 3, 0, 1), - (140826, 140800, '绛县', '绛县', '111.57618', '35.49045', 3, 0, 1), - (140827, 140800, '垣曲县', '垣曲', '111.67099', '35.298294', 3, 0, 1), - (140828, 140800, '夏县', '夏县', '111.223175', '35.14044', 3, 0, 1), - (140829, 140800, '平陆县', '平陆', '111.21238', '34.837257', 3, 0, 1), - (140830, 140800, '芮城县', '芮城', '110.69114', '34.69477', 3, 0, 1), - (140881, 140800, '永济市', '永济', '110.44798', '34.865124', 3, 0, 1), - (140882, 140800, '河津市', '河津', '110.710266', '35.59715', 3, 0, 1), - (140900, 140000, '忻州市', '忻州', '112.733536', '38.41769', 2, 0, 1), - (140902, 140900, '忻府区', '忻府', '112.734116', '38.417744', 3, 0, 1), - (140921, 140900, '定襄县', '定襄', '112.963234', '38.484947', 3, 0, 1), - (140922, 140900, '五台县', '五台', '113.25901', '38.72571', 3, 0, 1), - (140923, 140900, '代县', '代县', '112.96252', '39.06514', 3, 0, 1), - (140924, 140900, '繁峙县', '繁峙', '113.26771', '39.188103', 3, 0, 1), - (140925, 140900, '宁武县', '宁武', '112.30794', '39.001717', 3, 0, 1), - (140926, 140900, '静乐县', '静乐', '111.94023', '38.355946', 3, 0, 1), - (140927, 140900, '神池县', '神池', '112.20044', '39.088467', 3, 0, 1), - (140928, 140900, '五寨县', '五寨', '111.84102', '38.91276', 3, 0, 1), - (140929, 140900, '岢岚县', '岢岚', '111.56981', '38.705624', 3, 0, 1), - (140930, 140900, '河曲县', '河曲', '111.14661', '39.381893', 3, 0, 1), - (140931, 140900, '保德县', '保德', '111.085686', '39.022575', 3, 0, 1), - (140932, 140900, '偏关县', '偏关', '111.50048', '39.442154', 3, 0, 1), - (140981, 140900, '原平市', '原平', '112.713135', '38.729187', 3, 0, 1), - (141000, 140000, '临汾市', '临汾', '111.517975', '36.08415', 2, 0, 1), - (141002, 141000, '尧都区', '尧都', '111.52294', '36.080364', 3, 0, 1), - (141021, 141000, '曲沃县', '曲沃', '111.47553', '35.641388', 3, 0, 1), - (141022, 141000, '翼城县', '翼城', '111.71351', '35.73862', 3, 0, 1), - (141023, 141000, '襄汾县', '襄汾', '111.44293', '35.87614', 3, 0, 1), - (141024, 141000, '洪洞县', '洪洞', '111.67369', '36.25574', 3, 0, 1), - (141025, 141000, '古县', '古县', '111.920204', '36.26855', 3, 0, 1), - (141026, 141000, '安泽县', '安泽', '112.25137', '36.14603', 3, 0, 1), - (141027, 141000, '浮山县', '浮山', '111.85004', '35.97136', 3, 0, 1), - (141028, 141000, '吉县', '吉县', '110.68285', '36.099354', 3, 0, 1), - (141029, 141000, '乡宁县', '乡宁', '110.85737', '35.975403', 3, 0, 1), - (141030, 141000, '大宁县', '大宁', '110.75128', '36.46383', 3, 0, 1), - (141031, 141000, '隰县', '隰县', '110.93581', '36.692677', 3, 0, 1), - (141032, 141000, '永和县', '永和', '110.63128', '36.760612', 3, 0, 1), - (141033, 141000, '蒲县', '蒲县', '111.09733', '36.411682', 3, 0, 1), - (141034, 141000, '汾西县', '汾西', '111.56302', '36.65337', 3, 0, 1), - (141081, 141000, '侯马市', '侯马', '111.37127', '35.6203', 3, 0, 1), - (141082, 141000, '霍州市', '霍州', '111.72311', '36.57202', 3, 0, 1), - (141100, 140000, '吕梁市', '吕梁', '111.13434', '37.524364', 2, 0, 1), - (141102, 141100, '离石区', '离石', '111.13446', '37.524036', 3, 0, 1), - (141121, 141100, '文水县', '文水', '112.03259', '37.436314', 3, 0, 1), - (141122, 141100, '交城县', '交城', '112.15916', '37.555157', 3, 0, 1), - (141123, 141100, '兴县', '兴县', '111.12482', '38.464134', 3, 0, 1), - (141124, 141100, '临县', '临县', '110.995964', '37.960808', 3, 0, 1), - (141125, 141100, '柳林县', '柳林', '110.89613', '37.431664', 3, 0, 1), - (141126, 141100, '石楼县', '石楼', '110.83712', '36.999428', 3, 0, 1), - (141127, 141100, '岚县', '岚县', '111.671555', '38.278652', 3, 0, 1), - (141128, 141100, '方山县', '方山', '111.238884', '37.89263', 3, 0, 1), - (141129, 141100, '中阳县', '中阳', '111.19332', '37.342052', 3, 0, 1), - (141130, 141100, '交口县', '交口', '111.18319', '36.983067', 3, 0, 1), - (141181, 141100, '孝义市', '孝义', '111.78157', '37.144474', 3, 0, 1), - (141182, 141100, '汾阳市', '汾阳', '111.78527', '37.267742', 3, 0, 1), - (150000, 0, '内蒙古自治区', '内蒙古', '111.6708', '40.81831', 1, 0, 1), - (150100, 150000, '呼和浩特市', '呼和浩特', '111.6708', '40.81831', 2, 0, 1), - (150102, 150100, '新城区', '新城', '111.68597', '40.826225', 3, 0, 1), - (150103, 150100, '回民区', '回民', '111.66216', '40.815147', 3, 0, 1), - (150104, 150100, '玉泉区', '玉泉', '111.66543', '40.79942', 3, 0, 1), - (150105, 150100, '赛罕区', '赛罕', '111.69846', '40.807835', 3, 0, 1), - (150121, 150100, '土默特左旗', '土默特左', '111.13361', '40.720417', 3, 0, 1), - (150122, 150100, '托克托县', '托克托', '111.19732', '40.27673', 3, 0, 1), - (150123, 150100, '和林格尔县', '和林格尔', '111.82414', '40.380287', 3, 0, 1), - (150124, 150100, '清水河县', '清水河', '111.67222', '39.91248', 3, 0, 1), - (150125, 150100, '武川县', '武川', '111.456566', '41.094482', 3, 0, 1), - (150200, 150000, '包头市', '包头', '109.84041', '40.65817', 2, 0, 1), - (150202, 150200, '东河区', '东河', '110.02689', '40.587055', 3, 0, 1), - (150203, 150200, '昆都仑区', '昆都仑', '109.82293', '40.661346', 3, 0, 1), - (150204, 150200, '青山区', '青山', '109.88005', '40.668556', 3, 0, 1), - (150205, 150200, '石拐区', '石拐', '110.27257', '40.672092', 3, 0, 1), - (150206, 150200, '白云鄂博矿区', '白云矿区', '109.97016', '41.769245', 3, 0, 1), - (150207, 150200, '九原区', '九原', '109.968124', '40.600582', 3, 0, 1), - (150221, 150200, '土默特右旗', '土默特右', '110.526764', '40.566433', 3, 0, 1), - (150222, 150200, '固阳县', '固阳', '110.06342', '41.030003', 3, 0, 1), - (150223, 150200, '达尔罕茂明安联合旗', '达尔罕茂明安联合', '109.84041', '40.65817', 3, 0, 1), - (150300, 150000, '乌海市', '乌海', '106.82556', '39.673733', 2, 0, 1), - (150302, 150300, '海勃湾区', '海勃湾', '106.817764', '39.673527', 3, 0, 1), - (150303, 150300, '海南区', '海南', '106.88479', '39.44153', 3, 0, 1), - (150304, 150300, '乌达区', '乌达', '106.72271', '39.50229', 3, 0, 1), - (150400, 150000, '赤峰市', '赤峰', '118.9568', '42.27532', 2, 0, 1), - (150402, 150400, '红山区', '红山', '118.96109', '42.269733', 3, 0, 1), - (150403, 150400, '元宝山区', '元宝山', '119.28988', '42.04117', 3, 0, 1), - (150404, 150400, '松山区', '松山', '118.93896', '42.281048', 3, 0, 1), - (150421, 150400, '阿鲁科尔沁旗', '阿鲁科尔沁', '120.09497', '43.87877', 3, 0, 1), - (150422, 150400, '巴林左旗', '巴林左', '119.39174', '43.980717', 3, 0, 1), - (150423, 150400, '巴林右旗', '巴林右', '118.678345', '43.52896', 3, 0, 1), - (150424, 150400, '林西县', '林西', '118.05775', '43.605328', 3, 0, 1), - (150425, 150400, '克什克腾旗', '克什克腾', '117.542465', '43.256233', 3, 0, 1), - (150426, 150400, '翁牛特旗', '翁牛特', '119.02262', '42.937126', 3, 0, 1), - (150428, 150400, '喀喇沁旗', '喀喇沁', '118.70857', '41.92778', 3, 0, 1), - (150429, 150400, '宁城县', '宁城', '119.33924', '41.598694', 3, 0, 1), - (150430, 150400, '敖汉旗', '敖汉', '119.90649', '42.28701', 3, 0, 1), - (150500, 150000, '通辽市', '通辽', '122.26312', '43.617428', 2, 0, 1), - (150502, 150500, '科尔沁区', '科尔沁', '122.264046', '43.61742', 3, 0, 1), - (150521, 150500, '科尔沁左翼中旗', '科尔沁左翼中', '123.31387', '44.127167', 3, 0, 1), - (150522, 150500, '科尔沁左翼后旗', '科尔沁左翼后', '122.355156', '42.954563', 3, 0, 1), - (150523, 150500, '开鲁县', '开鲁', '121.3088', '43.602432', 3, 0, 1), - (150524, 150500, '库伦旗', '库伦', '121.77489', '42.73469', 3, 0, 1), - (150525, 150500, '奈曼旗', '奈曼', '120.662544', '42.84685', 3, 0, 1), - (150526, 150500, '扎鲁特旗', '扎鲁特', '120.90527', '44.555294', 3, 0, 1), - (150581, 150500, '霍林郭勒市', '霍林郭勒', '119.65786', '45.53236', 3, 0, 1), - (150600, 150000, '鄂尔多斯市', '鄂尔多斯', '109.99029', '39.81718', 2, 0, 1), - (150602, 150600, '东胜区', '东胜', '109.98945', '39.81788', 3, 0, 1), - (150603, 150600, '康巴什区', '康巴什', '109.85851', '39.60837', 3, 0, 1), - (150621, 150600, '达拉特旗', '达拉特', '110.04028', '40.404076', 3, 0, 1), - (150622, 150600, '准格尔旗', '准格尔', '111.238335', '39.86522', 3, 0, 1), - (150623, 150600, '鄂托克前旗', '鄂托克前', '107.48172', '38.183258', 3, 0, 1), - (150624, 150600, '鄂托克旗', '鄂托克', '107.982605', '39.095753', 3, 0, 1), - (150625, 150600, '杭锦旗', '杭锦', '108.73632', '39.831787', 3, 0, 1), - (150626, 150600, '乌审旗', '乌审', '108.84245', '38.59661', 3, 0, 1), - (150627, 150600, '伊金霍洛旗', '伊金霍洛', '109.7874', '39.604313', 3, 0, 1), - (150700, 150000, '呼伦贝尔市', '呼伦贝尔', '119.75817', '49.215332', 2, 0, 1), - (150702, 150700, '海拉尔区', '海拉尔', '119.76492', '49.21389', 3, 0, 1), - (150703, 150700, '扎赉诺尔区', '扎赉诺尔', '117.7927', '49.486942', 3, 0, 1), - (150721, 150700, '阿荣旗', '阿荣', '123.464615', '48.130505', 3, 0, 1), - (150722, 150700, '莫力达瓦达斡尔族自治旗', '莫力达瓦', '124.5074', '48.478386', 3, 0, 1), - (150723, 150700, '鄂伦春自治旗', '鄂伦春', '123.725685', '50.590176', 3, 0, 1), - (150724, 150700, '鄂温克族自治旗', '鄂温克', '119.75404', '49.14329', 3, 0, 1), - (150725, 150700, '陈巴尔虎旗', '陈巴尔虎', '119.43761', '49.328423', 3, 0, 1), - (150726, 150700, '新巴尔虎左旗', '新巴尔虎左', '118.267456', '48.21657', 3, 0, 1), - (150727, 150700, '新巴尔虎右旗', '新巴尔虎右', '116.82599', '48.669132', 3, 0, 1), - (150781, 150700, '满洲里市', '满洲里', '117.45556', '49.59079', 3, 0, 1), - (150782, 150700, '牙克石市', '牙克石', '120.729004', '49.287025', 3, 0, 1), - (150783, 150700, '扎兰屯市', '扎兰屯', '122.7444', '48.007412', 3, 0, 1), - (150784, 150700, '额尔古纳市', '额尔古纳', '120.178635', '50.2439', 3, 0, 1), - (150785, 150700, '根河市', '根河', '121.53272', '50.780453', 3, 0, 1), - (150800, 150000, '巴彦淖尔市', '巴彦淖尔', '107.41696', '40.7574', 2, 0, 1), - (150802, 150800, '临河区', '临河', '107.417015', '40.75709', 3, 0, 1), - (150821, 150800, '五原县', '五原', '108.27066', '41.097637', 3, 0, 1), - (150822, 150800, '磴口县', '磴口', '107.00606', '40.33048', 3, 0, 1), - (150823, 150800, '乌拉特前旗', '乌拉特前', '108.656815', '40.72521', 3, 0, 1), - (150824, 150800, '乌拉特中旗', '乌拉特中', '108.51526', '41.57254', 3, 0, 1), - (150825, 150800, '乌拉特后旗', '乌拉特后', '107.07494', '41.08431', 3, 0, 1), - (150826, 150800, '杭锦后旗', '杭锦后', '107.14768', '40.888798', 3, 0, 1), - (150900, 150000, '乌兰察布市', '乌兰察布', '113.11454', '41.034126', 2, 0, 1), - (150902, 150900, '集宁区', '集宁', '113.116455', '41.034134', 3, 0, 1), - (150921, 150900, '卓资县', '卓资', '112.577705', '40.89576', 3, 0, 1), - (150922, 150900, '化德县', '化德', '114.01008', '41.899334', 3, 0, 1), - (150923, 150900, '商都县', '商都', '113.560646', '41.56016', 3, 0, 1), - (150924, 150900, '兴和县', '兴和', '113.83401', '40.872437', 3, 0, 1), - (150925, 150900, '凉城县', '凉城', '112.50091', '40.531628', 3, 0, 1), - (150926, 150900, '察哈尔右翼前旗', '察哈尔右翼前', '113.21196', '40.786858', 3, 0, 1), - (150927, 150900, '察哈尔右翼中旗', '察哈尔右翼中', '112.63356', '41.27421', 3, 0, 1), - (150928, 150900, '察哈尔右翼后旗', '察哈尔右翼后', '113.1906', '41.447212', 3, 0, 1), - (150929, 150900, '四子王旗', '四子王', '111.70123', '41.528114', 3, 0, 1), - (150981, 150900, '丰镇市', '丰镇', '113.16346', '40.437534', 3, 0, 1), - (152200, 150000, '兴安盟', '兴安', '122.07032', '46.076267', 2, 0, 1), - (152201, 152200, '乌兰浩特市', '乌兰浩特', '122.06898', '46.077236', 3, 0, 1), - (152202, 152200, '阿尔山市', '阿尔山', '119.94366', '47.177', 3, 0, 1), - (152221, 152200, '科尔沁右翼前旗', '科尔沁右翼前', '121.95754', '46.076496', 3, 0, 1), - (152222, 152200, '科尔沁右翼中旗', '科尔沁右翼中', '121.47282', '45.059647', 3, 0, 1), - (152223, 152200, '扎赉特旗', '扎赉特', '122.90933', '46.725136', 3, 0, 1), - (152224, 152200, '突泉县', '突泉', '121.56486', '45.380985', 3, 0, 1), - (152500, 150000, '锡林郭勒盟', '锡林郭勒', '116.090996', '43.94402', 2, 0, 1), - (152501, 152500, '二连浩特市', '二连浩特', '111.97981', '43.652897', 3, 0, 1), - (152502, 152500, '锡林浩特市', '锡林浩特', '116.0919', '43.9443', 3, 0, 1), - (152522, 152500, '阿巴嘎旗', '阿巴嘎', '114.97062', '44.022728', 3, 0, 1), - (152523, 152500, '苏尼特左旗', '苏尼特左', '113.65341', '43.854107', 3, 0, 1), - (152524, 152500, '苏尼特右旗', '苏尼特右', '112.65539', '42.746662', 3, 0, 1), - (152525, 152500, '东乌珠穆沁旗', '东乌珠穆沁', '116.98002', '45.510307', 3, 0, 1), - (152526, 152500, '西乌珠穆沁旗', '西乌珠穆沁', '117.61525', '44.586147', 3, 0, 1), - (152527, 152500, '太仆寺旗', '太仆寺', '115.28728', '41.8952', 3, 0, 1), - (152528, 152500, '镶黄旗', '镶黄', '113.84387', '42.239227', 3, 0, 1), - (152529, 152500, '正镶白旗', '正镶白', '115.031425', '42.286808', 3, 0, 1), - (152530, 152500, '正蓝旗', '正蓝', '116.00331', '42.245895', 3, 0, 1), - (152531, 152500, '多伦县', '多伦', '116.47729', '42.197964', 3, 0, 1), - (152900, 150000, '阿拉善盟', '阿拉善', '105.70642', '38.844814', 2, 0, 1), - (152921, 152900, '阿拉善左旗', '阿拉善左', '105.70192', '38.84724', 3, 0, 1), - (152922, 152900, '阿拉善右旗', '阿拉善右', '101.67198', '39.21159', 3, 0, 1), - (152923, 152900, '额济纳旗', '额济纳', '101.06944', '41.958813', 3, 0, 1), - (210000, 0, '辽宁省', '辽宁', '123.42909', '41.79677', 1, 0, 1), - (210100, 210000, '沈阳市', '沈阳', '123.42909', '41.79677', 2, 0, 1), - (210102, 210100, '和平区', '和平', '123.40666', '41.788074', 3, 0, 1), - (210103, 210100, '沈河区', '沈河', '123.445694', '41.79559', 3, 0, 1), - (210104, 210100, '大东区', '大东', '123.469955', '41.808502', 3, 0, 1), - (210105, 210100, '皇姑区', '皇姑', '123.40568', '41.822334', 3, 0, 1), - (210106, 210100, '铁西区', '铁西', '123.35066', '41.787807', 3, 0, 1), - (210111, 210100, '苏家屯区', '苏家屯', '123.341606', '41.665905', 3, 0, 1), - (210112, 210100, '浑南区', '东陵', '123.458984', '41.741947', 3, 0, 1), - (210113, 210100, '沈北新区', '沈北新', '123.58424', '41.91303', 3, 0, 1), - (210114, 210100, '于洪区', '于洪', '123.31083', '41.795834', 3, 0, 1), - (210115, 210100, '辽中区', '辽中', '122.76549', '41.51685', 3, 0, 1), - (210123, 210100, '康平县', '康平', '123.3527', '42.74153', 3, 0, 1), - (210124, 210100, '法库县', '法库', '123.416725', '42.507046', 3, 0, 1), - (210181, 210100, '新民市', '新民', '122.828865', '41.99651', 3, 0, 1), - (210200, 210000, '大连市', '大连', '121.61862', '38.91459', 2, 0, 1), - (210202, 210200, '中山区', '中山', '121.64376', '38.921555', 3, 0, 1), - (210203, 210200, '西岗区', '西岗', '121.61611', '38.914265', 3, 0, 1), - (210204, 210200, '沙河口区', '沙河口', '121.593704', '38.91286', 3, 0, 1), - (210211, 210200, '甘井子区', '甘井子', '121.58261', '38.975147', 3, 0, 1), - (210212, 210200, '旅顺口区', '旅顺口', '121.26713', '38.812042', 3, 0, 1), - (210213, 210200, '金州区', '金州', '121.78941', '39.052746', 3, 0, 1), - (210214, 210200, '普兰店区', '普兰店', '121.96323', '39.39443', 3, 0, 1), - (210224, 210200, '长海县', '长海', '122.58782', '39.2724', 3, 0, 1), - (210281, 210200, '瓦房店市', '瓦房店', '122.002655', '39.63065', 3, 0, 1), - (210283, 210200, '庄河市', '庄河', '122.97061', '39.69829', 3, 0, 1), - (210300, 210000, '鞍山市', '鞍山', '122.99563', '41.110626', 2, 0, 1), - (210302, 210300, '铁东区', '铁东', '122.99448', '41.110344', 3, 0, 1), - (210303, 210300, '铁西区', '铁西', '122.97183', '41.11069', 3, 0, 1), - (210304, 210300, '立山区', '立山', '123.0248', '41.150623', 3, 0, 1), - (210311, 210300, '千山区', '千山', '122.95788', '41.07072', 3, 0, 1), - (210321, 210300, '台安县', '台安', '122.42973', '41.38686', 3, 0, 1), - (210323, 210300, '岫岩满族自治县', '岫岩', '123.28833', '40.28151', 3, 0, 1), - (210381, 210300, '海城市', '海城', '122.7522', '40.85253', 3, 0, 1), - (210400, 210000, '抚顺市', '抚顺', '123.92111', '41.875957', 2, 0, 1), - (210402, 210400, '新抚区', '新抚', '123.902855', '41.86082', 3, 0, 1), - (210403, 210400, '东洲区', '东洲', '124.04722', '41.86683', 3, 0, 1), - (210404, 210400, '望花区', '望花', '123.801506', '41.851803', 3, 0, 1), - (210411, 210400, '顺城区', '顺城', '123.91717', '41.88113', 3, 0, 1), - (210421, 210400, '抚顺县', '抚顺', '124.09798', '41.922646', 3, 0, 1), - (210422, 210400, '新宾满族自治县', '新宾', '125.037544', '41.732456', 3, 0, 1), - (210423, 210400, '清原满族自治县', '清原', '124.92719', '42.10135', 3, 0, 1), - (210500, 210000, '本溪市', '本溪', '123.770515', '41.29791', 2, 0, 1), - (210502, 210500, '平山区', '平山', '123.76123', '41.29158', 3, 0, 1), - (210503, 210500, '溪湖区', '溪湖', '123.76523', '41.330055', 3, 0, 1), - (210504, 210500, '明山区', '明山', '123.76329', '41.30243', 3, 0, 1), - (210505, 210500, '南芬区', '南芬', '123.74838', '41.10409', 3, 0, 1), - (210521, 210500, '本溪满族自治县', '本溪', '124.12616', '41.300343', 3, 0, 1), - (210522, 210500, '桓仁满族自治县', '桓仁', '125.35919', '41.268997', 3, 0, 1), - (210600, 210000, '丹东市', '丹东', '124.38304', '40.124294', 2, 0, 1), - (210602, 210600, '元宝区', '元宝', '124.39781', '40.136482', 3, 0, 1), - (210603, 210600, '振兴区', '振兴', '124.36115', '40.102802', 3, 0, 1), - (210604, 210600, '振安区', '振安', '124.42771', '40.158558', 3, 0, 1), - (210624, 210600, '宽甸满族自治县', '宽甸', '124.78487', '40.73041', 3, 0, 1), - (210681, 210600, '东港市', '东港', '124.14944', '39.88347', 3, 0, 1), - (210682, 210600, '凤城市', '凤城', '124.07107', '40.457565', 3, 0, 1), - (210700, 210000, '锦州市', '锦州', '121.13574', '41.11927', 2, 0, 1), - (210702, 210700, '古塔区', '古塔', '121.13009', '41.11572', 3, 0, 1), - (210703, 210700, '凌河区', '凌河', '121.151306', '41.114662', 3, 0, 1), - (210711, 210700, '太和区', '太和', '121.1073', '41.105377', 3, 0, 1), - (210726, 210700, '黑山县', '黑山', '122.11791', '41.691803', 3, 0, 1), - (210727, 210700, '义县', '义县', '121.24283', '41.537224', 3, 0, 1), - (210781, 210700, '凌海市', '凌海', '121.364235', '41.171738', 3, 0, 1), - (210782, 210700, '北镇市', '北镇', '121.79596', '41.598763', 3, 0, 1), - (210800, 210000, '营口市', '营口', '122.23515', '40.66743', 2, 0, 1), - (210802, 210800, '站前区', '站前', '122.253235', '40.66995', 3, 0, 1), - (210803, 210800, '西市区', '西市', '122.21007', '40.663086', 3, 0, 1), - (210804, 210800, '鲅鱼圈区', '鲅鱼圈', '122.12724', '40.263645', 3, 0, 1), - (210811, 210800, '老边区', '老边', '122.38258', '40.682724', 3, 0, 1), - (210881, 210800, '盖州市', '盖州', '122.35554', '40.405235', 3, 0, 1), - (210882, 210800, '大石桥市', '大石桥', '122.5059', '40.633972', 3, 0, 1), - (210900, 210000, '阜新市', '阜新', '121.648964', '42.011795', 2, 0, 1), - (210902, 210900, '海州区', '海州', '121.65764', '42.01116', 3, 0, 1), - (210903, 210900, '新邱区', '新邱', '121.79054', '42.0866', 3, 0, 1), - (210904, 210900, '太平区', '太平', '121.677574', '42.011147', 3, 0, 1), - (210905, 210900, '清河门区', '清河门', '121.42018', '41.780476', 3, 0, 1), - (210911, 210900, '细河区', '细河', '121.65479', '42.01922', 3, 0, 1), - (210921, 210900, '阜新蒙古族自治县', '阜新', '121.743126', '42.058605', 3, 0, 1), - (210922, 210900, '彰武县', '彰武', '122.537445', '42.384823', 3, 0, 1), - (211000, 210000, '辽阳市', '辽阳', '123.18152', '41.2694', 2, 0, 1), - (211002, 211000, '白塔区', '白塔', '123.17261', '41.26745', 3, 0, 1), - (211003, 211000, '文圣区', '文圣', '123.188225', '41.266766', 3, 0, 1), - (211004, 211000, '宏伟区', '宏伟', '123.20046', '41.205746', 3, 0, 1), - (211005, 211000, '弓长岭区', '弓长岭', '123.43163', '41.15783', 3, 0, 1), - (211011, 211000, '太子河区', '太子河', '123.18533', '41.251682', 3, 0, 1), - (211021, 211000, '辽阳县', '辽阳', '123.07967', '41.21648', 3, 0, 1), - (211081, 211000, '灯塔市', '灯塔', '123.32587', '41.427837', 3, 0, 1), - (211100, 210000, '盘锦市', '盘锦', '122.06957', '41.124485', 2, 0, 1), - (211102, 211100, '双台子区', '双台子', '122.05573', '41.190365', 3, 0, 1), - (211103, 211100, '兴隆台区', '兴隆台', '122.071625', '41.12242', 3, 0, 1), - (211104, 211100, '大洼区', '大洼', '122.08245', '41.00247', 3, 0, 1), - (211122, 211100, '盘山县', '盘山', '121.98528', '41.2407', 3, 0, 1), - (211200, 210000, '铁岭市', '铁岭', '123.84428', '42.290585', 2, 0, 1), - (211202, 211200, '银州区', '银州', '123.84488', '42.29228', 3, 0, 1), - (211204, 211200, '清河区', '清河', '124.14896', '42.542976', 3, 0, 1), - (211221, 211200, '铁岭县', '铁岭', '123.72567', '42.223316', 3, 0, 1), - (211223, 211200, '西丰县', '西丰', '124.72332', '42.73809', 3, 0, 1), - (211224, 211200, '昌图县', '昌图', '124.11017', '42.784443', 3, 0, 1), - (211281, 211200, '调兵山市', '调兵山', '123.545364', '42.450733', 3, 0, 1), - (211282, 211200, '开原市', '开原', '124.04555', '42.54214', 3, 0, 1), - (211300, 210000, '朝阳市', '朝阳', '120.45118', '41.57676', 2, 0, 1), - (211302, 211300, '双塔区', '双塔', '120.44877', '41.579388', 3, 0, 1), - (211303, 211300, '龙城区', '龙城', '120.413376', '41.576748', 3, 0, 1), - (211321, 211300, '朝阳县', '朝阳', '120.40422', '41.52634', 3, 0, 1), - (211322, 211300, '建平县', '建平', '119.642365', '41.402576', 3, 0, 1), - (211324, 211300, '喀喇沁左翼蒙古族自治县', '喀左', '119.74488', '41.125427', 3, 0, 1), - (211381, 211300, '北票市', '北票', '120.76695', '41.803288', 3, 0, 1), - (211382, 211300, '凌源市', '凌源', '119.40479', '41.243088', 3, 0, 1), - (211400, 210000, '葫芦岛市', '葫芦岛', '120.85639', '40.755573', 2, 0, 1), - (211402, 211400, '连山区', '连山', '120.85937', '40.755142', 3, 0, 1), - (211403, 211400, '龙港区', '龙港', '120.83857', '40.70999', 3, 0, 1), - (211404, 211400, '南票区', '南票', '120.75231', '41.098812', 3, 0, 1), - (211421, 211400, '绥中县', '绥中', '120.34211', '40.328407', 3, 0, 1), - (211422, 211400, '建昌县', '建昌', '119.80778', '40.81287', 3, 0, 1), - (211481, 211400, '兴城市', '兴城', '120.72936', '40.61941', 3, 0, 1); - - - -INSERT INTO `nc_sys_area` VALUES - (220000, 0, '吉林省', '吉林', '125.3245', '43.88684', 1, 0, 1), - (220100, 220000, '长春市', '长春', '125.3245', '43.88684', 2, 0, 1), - (220102, 220100, '南关区', '南关', '125.337234', '43.890236', 3, 0, 1), - (220103, 220100, '宽城区', '宽城', '125.34283', '43.903824', 3, 0, 1), - (220104, 220100, '朝阳区', '朝阳', '125.31804', '43.86491', 3, 0, 1), - (220105, 220100, '二道区', '二道', '125.38473', '43.870823', 3, 0, 1), - (220106, 220100, '绿园区', '绿园', '125.27247', '43.892178', 3, 0, 1), - (220112, 220100, '双阳区', '双阳', '125.65902', '43.52517', 3, 0, 1), - (220113, 220100, '九台区', '九台', '125.83949', '44.15174', 3, 0, 1), - (220122, 220100, '农安县', '农安', '125.175285', '44.43126', 3, 0, 1), - (220182, 220100, '榆树市', '榆树', '126.55011', '44.82764', 3, 0, 1), - (220183, 220100, '德惠市', '德惠', '125.70332', '44.53391', 3, 0, 1), - (220184, 220100, '公主岭市', '公主岭', '', '', 3, 0, 1), - (220200, 220000, '吉林市', '吉林', '126.55302', '43.84358', 2, 0, 1), - (220202, 220200, '昌邑区', '昌邑', '126.57076', '43.851116', 3, 0, 1), - (220203, 220200, '龙潭区', '龙潭', '126.56143', '43.909756', 3, 0, 1), - (220204, 220200, '船营区', '船营', '126.55239', '43.843803', 3, 0, 1), - (220211, 220200, '丰满区', '丰满', '126.56076', '43.816593', 3, 0, 1), - (220221, 220200, '永吉县', '永吉', '126.501625', '43.667416', 3, 0, 1), - (220281, 220200, '蛟河市', '蛟河', '127.342735', '43.720577', 3, 0, 1), - (220282, 220200, '桦甸市', '桦甸', '126.745445', '42.97209', 3, 0, 1), - (220283, 220200, '舒兰市', '舒兰', '126.947815', '44.410908', 3, 0, 1), - (220284, 220200, '磐石市', '磐石', '126.05993', '42.942474', 3, 0, 1), - (220300, 220000, '四平市', '四平', '124.37079', '43.170345', 2, 0, 1), - (220302, 220300, '铁西区', '铁西', '124.36089', '43.17626', 3, 0, 1), - (220303, 220300, '铁东区', '铁东', '124.388466', '43.16726', 3, 0, 1), - (220322, 220300, '梨树县', '梨树', '124.3358', '43.30831', 3, 0, 1), - (220323, 220300, '伊通满族自治县', '伊通', '125.30312', '43.345463', 3, 0, 1), - (220382, 220300, '双辽市', '双辽', '123.50528', '43.518276', 3, 0, 1), - (220400, 220000, '辽源市', '辽源', '125.14535', '42.90269', 2, 0, 1), - (220402, 220400, '龙山区', '龙山', '125.145164', '42.902702', 3, 0, 1), - (220403, 220400, '西安区', '西安', '125.15142', '42.920414', 3, 0, 1), - (220421, 220400, '东丰县', '东丰', '125.529625', '42.67523', 3, 0, 1), - (220422, 220400, '东辽县', '东辽', '124.992', '42.927723', 3, 0, 1), - (220500, 220000, '通化市', '通化', '125.9365', '41.721176', 2, 0, 1), - (220502, 220500, '东昌区', '东昌', '125.936714', '41.721233', 3, 0, 1), - (220503, 220500, '二道江区', '二道江', '126.04599', '41.777565', 3, 0, 1), - (220521, 220500, '通化县', '通化', '125.75312', '41.677917', 3, 0, 1), - (220523, 220500, '辉南县', '辉南', '126.04282', '42.68346', 3, 0, 1), - (220524, 220500, '柳河县', '柳河', '125.74054', '42.281483', 3, 0, 1), - (220581, 220500, '梅河口市', '梅河口', '125.68734', '42.530003', 3, 0, 1), - (220582, 220500, '集安市', '集安', '126.1862', '41.126274', 3, 0, 1), - (220600, 220000, '白山市', '白山', '126.42784', '41.942505', 2, 0, 1), - (220602, 220600, '浑江区', '浑江', '126.42803', '41.943066', 3, 0, 1), - (220605, 220600, '江源区', '江源', '126.59088', '42.05665', 3, 0, 1), - (220621, 220600, '抚松县', '抚松', '127.273796', '42.33264', 3, 0, 1), - (220622, 220600, '靖宇县', '靖宇', '126.80839', '42.38969', 3, 0, 1), - (220623, 220600, '长白朝鲜族自治县', '长白', '128.20338', '41.41936', 3, 0, 1), - (220681, 220600, '临江市', '临江', '126.9193', '41.810688', 3, 0, 1), - (220700, 220000, '松原市', '松原', '124.82361', '45.118244', 2, 0, 1), - (220702, 220700, '宁江区', '宁江', '124.82785', '45.1765', 3, 0, 1), - (220721, 220700, '前郭尔罗斯蒙古族自治县', '前郭', '124.826805', '45.116287', 3, 0, 1), - (220722, 220700, '长岭县', '长岭', '123.98518', '44.27658', 3, 0, 1), - (220723, 220700, '乾安县', '乾安', '124.02436', '45.006847', 3, 0, 1), - (220781, 220700, '扶余市', '扶余', '126.04972', '44.99014', 3, 0, 1), - (220800, 220000, '白城市', '白城', '122.84111', '45.619026', 2, 0, 1), - (220802, 220800, '洮北区', '洮北', '122.8425', '45.61925', 3, 0, 1), - (220821, 220800, '镇赉县', '镇赉', '123.20225', '45.84609', 3, 0, 1), - (220822, 220800, '通榆县', '通榆', '123.08855', '44.80915', 3, 0, 1), - (220881, 220800, '洮南市', '洮南', '122.783775', '45.33911', 3, 0, 1), - (220882, 220800, '大安市', '大安', '124.29151', '45.50765', 3, 0, 1), - (222400, 220000, '延边朝鲜族自治州', '延边朝鲜族', '129.51323', '42.904823', 2, 0, 1), - (222401, 222400, '延吉市', '延吉', '129.5158', '42.906963', 3, 0, 1), - (222402, 222400, '图们市', '图们', '129.8467', '42.96662', 3, 0, 1), - (222403, 222400, '敦化市', '敦化', '128.22986', '43.36692', 3, 0, 1), - (222404, 222400, '珲春市', '珲春', '130.36578', '42.871056', 3, 0, 1), - (222405, 222400, '龙井市', '龙井', '129.42575', '42.77103', 3, 0, 1), - (222406, 222400, '和龙市', '和龙', '129.00874', '42.547005', 3, 0, 1), - (222424, 222400, '汪清县', '汪清', '129.76616', '43.315426', 3, 0, 1), - (222426, 222400, '安图县', '安图', '128.90187', '43.110992', 3, 0, 1), - (230000, 0, '黑龙江省', '黑龙江', '126.64246', '45.756966', 1, 0, 1), - (230100, 230000, '哈尔滨市', '哈尔滨', '126.64246', '45.756966', 2, 0, 1), - (230102, 230100, '道里区', '道里', '126.61253', '45.762035', 3, 0, 1), - (230103, 230100, '南岗区', '南岗', '126.6521', '45.75597', 3, 0, 1), - (230104, 230100, '道外区', '道外', '126.648834', '45.78454', 3, 0, 1), - (230108, 230100, '平房区', '平房', '126.62926', '45.605568', 3, 0, 1), - (230109, 230100, '松北区', '松北', '126.563065', '45.814655', 3, 0, 1), - (230110, 230100, '香坊区', '香坊', '126.66287', '45.70847', 3, 0, 1), - (230111, 230100, '呼兰区', '呼兰', '126.6033', '45.98423', 3, 0, 1), - (230112, 230100, '阿城区', '阿城', '126.95717', '45.54774', 3, 0, 1), - (230113, 230100, '双城区', '双城', '126.31227', '45.38355', 3, 0, 1), - (230123, 230100, '依兰县', '依兰', '129.5656', '46.315105', 3, 0, 1), - (230124, 230100, '方正县', '方正', '128.83614', '45.839535', 3, 0, 1), - (230125, 230100, '宾县', '宾县', '127.48594', '45.75937', 3, 0, 1), - (230126, 230100, '巴彦县', '巴彦', '127.4036', '46.08189', 3, 0, 1), - (230127, 230100, '木兰县', '木兰', '128.04268', '45.949825', 3, 0, 1), - (230128, 230100, '通河县', '通河', '128.74779', '45.97762', 3, 0, 1), - (230129, 230100, '延寿县', '延寿', '128.33188', '45.455647', 3, 0, 1), - (230183, 230100, '尚志市', '尚志', '127.96854', '45.214954', 3, 0, 1), - (230184, 230100, '五常市', '五常', '127.15759', '44.91942', 3, 0, 1), - (230200, 230000, '齐齐哈尔市', '齐齐哈尔', '123.95792', '47.34208', 2, 0, 1), - (230202, 230200, '龙沙区', '龙沙', '123.95734', '47.341736', 3, 0, 1), - (230203, 230200, '建华区', '建华', '123.95589', '47.354492', 3, 0, 1), - (230204, 230200, '铁锋区', '铁锋', '123.97356', '47.3395', 3, 0, 1), - (230205, 230200, '昂昂溪区', '昂昂溪', '123.81318', '47.156868', 3, 0, 1), - (230206, 230200, '富拉尔基区', '富拉尔基', '123.63887', '47.20697', 3, 0, 1), - (230207, 230200, '碾子山区', '碾子山', '122.88797', '47.51401', 3, 0, 1), - (230208, 230200, '梅里斯达斡尔族区', '梅里斯达斡尔族', '123.7546', '47.31111', 3, 0, 1), - (230221, 230200, '龙江县', '龙江', '123.187225', '47.336388', 3, 0, 1), - (230223, 230200, '依安县', '依安', '125.30756', '47.8901', 3, 0, 1), - (230224, 230200, '泰来县', '泰来', '123.41953', '46.39233', 3, 0, 1), - (230225, 230200, '甘南县', '甘南', '123.506035', '47.91784', 3, 0, 1), - (230227, 230200, '富裕县', '富裕', '124.46911', '47.797173', 3, 0, 1), - (230229, 230200, '克山县', '克山', '125.87435', '48.034344', 3, 0, 1), - (230230, 230200, '克东县', '克东', '126.24909', '48.03732', 3, 0, 1), - (230231, 230200, '拜泉县', '拜泉', '126.09191', '47.607365', 3, 0, 1), - (230281, 230200, '讷河市', '讷河', '124.88217', '48.481133', 3, 0, 1), - (230300, 230000, '鸡西市', '鸡西', '130.97597', '45.300045', 2, 0, 1), - (230302, 230300, '鸡冠区', '鸡冠', '130.97438', '45.30034', 3, 0, 1), - (230303, 230300, '恒山区', '恒山', '130.91063', '45.21324', 3, 0, 1), - (230304, 230300, '滴道区', '滴道', '130.84682', '45.348812', 3, 0, 1), - (230305, 230300, '梨树区', '梨树', '130.69778', '45.092194', 3, 0, 1), - (230306, 230300, '城子河区', '城子河', '131.0105', '45.33825', 3, 0, 1), - (230307, 230300, '麻山区', '麻山', '130.48112', '45.209606', 3, 0, 1), - (230321, 230300, '鸡东县', '鸡东', '131.14891', '45.250893', 3, 0, 1), - (230381, 230300, '虎林市', '虎林', '132.97388', '45.767986', 3, 0, 1), - (230382, 230300, '密山市', '密山', '131.87413', '45.54725', 3, 0, 1), - (230400, 230000, '鹤岗市', '鹤岗', '130.27748', '47.332085', 2, 0, 1), - (230402, 230400, '向阳区', '向阳', '130.29248', '47.34537', 3, 0, 1), - (230403, 230400, '工农区', '工农', '130.27666', '47.331676', 3, 0, 1), - (230404, 230400, '南山区', '南山', '130.27553', '47.31324', 3, 0, 1), - (230405, 230400, '兴安区', '兴安', '130.23618', '47.25291', 3, 0, 1), - (230406, 230400, '东山区', '东山', '130.31714', '47.337383', 3, 0, 1), - (230407, 230400, '兴山区', '兴山', '130.30534', '47.35997', 3, 0, 1), - (230421, 230400, '萝北县', '萝北', '130.82909', '47.577576', 3, 0, 1), - (230422, 230400, '绥滨县', '绥滨', '131.86052', '47.28989', 3, 0, 1), - (230500, 230000, '双鸭山市', '双鸭山', '131.1573', '46.64344', 2, 0, 1), - (230502, 230500, '尖山区', '尖山', '131.15897', '46.64296', 3, 0, 1), - (230503, 230500, '岭东区', '岭东', '131.16368', '46.591076', 3, 0, 1), - (230505, 230500, '四方台区', '四方台', '131.33318', '46.594345', 3, 0, 1), - (230506, 230500, '宝山区', '宝山', '131.4043', '46.573364', 3, 0, 1), - (230521, 230500, '集贤县', '集贤', '131.13933', '46.72898', 3, 0, 1), - (230522, 230500, '友谊县', '友谊', '131.81062', '46.775158', 3, 0, 1), - (230523, 230500, '宝清县', '宝清', '132.20642', '46.32878', 3, 0, 1), - (230524, 230500, '饶河县', '饶河', '134.02116', '46.80129', 3, 0, 1), - (230600, 230000, '大庆市', '大庆', '125.11272', '46.590733', 2, 0, 1), - (230602, 230600, '萨尔图区', '萨尔图', '125.11464', '46.596355', 3, 0, 1), - (230603, 230600, '龙凤区', '龙凤', '125.1458', '46.573948', 3, 0, 1), - (230604, 230600, '让胡路区', '让胡路', '124.86834', '46.653255', 3, 0, 1), - (230605, 230600, '红岗区', '红岗', '124.88953', '46.40305', 3, 0, 1), - (230606, 230600, '大同区', '大同', '124.81851', '46.034306', 3, 0, 1), - (230621, 230600, '肇州县', '肇州', '125.273254', '45.708687', 3, 0, 1), - (230622, 230600, '肇源县', '肇源', '125.08197', '45.518833', 3, 0, 1), - (230623, 230600, '林甸县', '林甸', '124.87774', '47.186413', 3, 0, 1), - (230624, 230600, '杜尔伯特蒙古族自治县', '杜尔伯特', '124.44626', '46.865974', 3, 0, 1), - (230700, 230000, '伊春市', '伊春', '128.8994', '47.724773', 2, 0, 1), - (230717, 230700, '伊美区', '伊美', '128.907302', '47.728208', 3, 0, 1), - (230718, 230700, '乌翠区', '乌翠', '128.66945', '47.726495', 3, 0, 1), - (230719, 230700, '友好区', '友好', '128.84071', '47.8538', 3, 0, 1), - (230722, 230700, '嘉荫县', '嘉荫', '130.39769', '48.891376', 3, 0, 1), - (230723, 230700, '汤旺县', '汤旺', '129.570968', '48.454691', 3, 0, 1), - (230724, 230700, '丰林县', '丰林', '129.53362', '48.29045', 3, 0, 1), - (230725, 230700, '大箐山县', '大箐山', '129.02057', '47.02834', 3, 0, 1), - (230726, 230700, '南岔县', '南岔', '129.28365', '47.13799', 3, 0, 1), - (230751, 230700, '金林区', '金林', '129.42899', '47.41303', 3, 0, 1), - (230781, 230700, '铁力市', '铁力', '128.03056', '46.98577', 3, 0, 1), - (230800, 230000, '佳木斯市', '佳木斯', '130.36163', '46.809605', 2, 0, 1), - (230803, 230800, '向阳区', '向阳', '130.36179', '46.809647', 3, 0, 1), - (230804, 230800, '前进区', '前进', '130.37769', '46.812344', 3, 0, 1), - (230805, 230800, '东风区', '东风', '130.40329', '46.822475', 3, 0, 1), - (230811, 230800, '郊区', '郊区', '130.36163', '46.809605', 3, 0, 1), - (230822, 230800, '桦南县', '桦南', '130.57011', '46.240116', 3, 0, 1), - (230826, 230800, '桦川县', '桦川', '130.72371', '47.02304', 3, 0, 1), - (230828, 230800, '汤原县', '汤原', '129.90446', '46.73005', 3, 0, 1), - (230881, 230800, '同江市', '同江', '132.51012', '47.65113', 3, 0, 1), - (230882, 230800, '富锦市', '富锦', '132.03795', '47.250748', 3, 0, 1), - (230883, 230800, '抚远市', '抚远', '134.30795', '48.36485', 3, 0, 1), - (230900, 230000, '七台河市', '七台河', '131.01558', '45.771267', 2, 0, 1), - (230902, 230900, '新兴区', '新兴', '130.88948', '45.79426', 3, 0, 1), - (230903, 230900, '桃山区', '桃山', '131.01585', '45.771217', 3, 0, 1), - (230904, 230900, '茄子河区', '茄子河', '131.07156', '45.77659', 3, 0, 1), - (230921, 230900, '勃利县', '勃利', '130.57503', '45.75157', 3, 0, 1), - (231000, 230000, '牡丹江市', '牡丹江', '129.6186', '44.582962', 2, 0, 1), - (231002, 231000, '东安区', '东安', '129.62329', '44.582397', 3, 0, 1), - (231003, 231000, '阳明区', '阳明', '129.63464', '44.59633', 3, 0, 1), - (231004, 231000, '爱民区', '爱民', '129.60123', '44.595444', 3, 0, 1), - (231005, 231000, '西安区', '西安', '129.61311', '44.58103', 3, 0, 1), - (231025, 231000, '林口县', '林口', '130.2684', '45.286644', 3, 0, 1), - (231081, 231000, '绥芬河市', '绥芬河', '131.16486', '44.396866', 3, 0, 1), - (231083, 231000, '海林市', '海林', '129.38791', '44.57415', 3, 0, 1), - (231084, 231000, '宁安市', '宁安', '129.47002', '44.346836', 3, 0, 1), - (231085, 231000, '穆棱市', '穆棱', '130.52708', '44.91967', 3, 0, 1), - (231086, 231000, '东宁市', '东宁', '131.12463', '44.08694', 3, 0, 1), - (231100, 230000, '黑河市', '黑河', '127.49902', '50.249584', 2, 0, 1), - (231102, 231100, '爱辉区', '爱辉', '127.49764', '50.249027', 3, 0, 1), - (231123, 231100, '逊克县', '逊克', '128.47615', '49.582973', 3, 0, 1), - (231124, 231100, '孙吴县', '孙吴', '127.32732', '49.423943', 3, 0, 1), - (231181, 231100, '北安市', '北安', '126.508736', '48.245438', 3, 0, 1), - (231182, 231100, '五大连池市', '五大连池', '126.19769', '48.512688', 3, 0, 1), - (231183, 231100, '嫩江市', '嫩江', '125.22094', '49.18572', 3, 0, 1), - (231200, 230000, '绥化市', '绥化', '126.99293', '46.637394', 2, 0, 1), - (231202, 231200, '北林区', '北林', '126.99066', '46.63491', 3, 0, 1), - (231221, 231200, '望奎县', '望奎', '126.48419', '46.83352', 3, 0, 1), - (231222, 231200, '兰西县', '兰西', '126.289314', '46.259037', 3, 0, 1), - (231223, 231200, '青冈县', '青冈', '126.11227', '46.686596', 3, 0, 1), - (231224, 231200, '庆安县', '庆安', '127.510025', '46.879204', 3, 0, 1), - (231225, 231200, '明水县', '明水', '125.90755', '47.18353', 3, 0, 1), - (231226, 231200, '绥棱县', '绥棱', '127.11112', '47.247196', 3, 0, 1), - (231281, 231200, '安达市', '安达', '125.329926', '46.410614', 3, 0, 1), - (231282, 231200, '肇东市', '肇东', '125.9914', '46.06947', 3, 0, 1), - (231283, 231200, '海伦市', '海伦', '126.96938', '47.460426', 3, 0, 1), - (232700, 230000, '大兴安岭地区', '大兴安岭', '124.711525', '52.335262', 2, 0, 1), - (232701, 232700, '漠河市', '漠河', '122.53864', '52.97209', 3, 0, 1), - (232721, 232700, '呼玛县', '呼玛', '126.6621', '51.726997', 3, 0, 1), - (232722, 232700, '塔河县', '塔河', '124.71052', '52.335228', 3, 0, 1), - (310000, 0, '上海市', '上海', '121.47264', '31.231707', 1, 0, 1), - (310100, 310000, '上海市', '上海', '121.47264', '31.231707', 2, 0, 1), - (310101, 310100, '黄浦区', '黄浦', '121.49032', '31.22277', 3, 0, 1), - (310104, 310100, '徐汇区', '徐汇', '121.43752', '31.179974', 3, 0, 1), - (310105, 310100, '长宁区', '长宁', '121.4222', '31.218122', 3, 0, 1), - (310106, 310100, '静安区', '静安', '121.44823', '31.229004', 3, 0, 1), - (310107, 310100, '普陀区', '普陀', '121.3925', '31.241701', 3, 0, 1), - (310109, 310100, '虹口区', '虹口', '121.49183', '31.26097', 3, 0, 1), - (310110, 310100, '杨浦区', '杨浦', '121.5228', '31.270756', 3, 0, 1), - (310112, 310100, '闵行区', '闵行', '121.37597', '31.111658', 3, 0, 1), - (310113, 310100, '宝山区', '宝山', '121.48994', '31.398895', 3, 0, 1), - (310114, 310100, '嘉定区', '嘉定', '121.250336', '31.383524', 3, 0, 1), - (310115, 310100, '浦东新区', '浦东', '121.5677', '31.245943', 3, 0, 1), - (310116, 310100, '金山区', '金山', '121.330734', '30.724697', 3, 0, 1), - (310117, 310100, '松江区', '松江', '121.22354', '31.03047', 3, 0, 1), - (310118, 310100, '青浦区', '青浦', '121.11302', '31.151209', 3, 0, 1), - (310120, 310100, '奉贤区', '奉贤', '121.45847', '30.912346', 3, 0, 1), - (310151, 310100, '崇明区', '崇明', '121.3973', '31.6229', 3, 0, 1), - (320000, 0, '江苏省', '江苏', '118.76741', '32.041546', 1, 0, 1), - (320100, 320000, '南京市', '南京', '118.76741', '32.041546', 2, 0, 1), - (320102, 320100, '玄武区', '玄武', '118.7922', '32.05068', 3, 0, 1), - (320104, 320100, '秦淮区', '秦淮', '118.78609', '32.033817', 3, 0, 1), - (320105, 320100, '建邺区', '建邺', '118.73269', '32.00454', 3, 0, 1), - (320106, 320100, '鼓楼区', '鼓楼', '118.76974', '32.066967', 3, 0, 1), - (320111, 320100, '浦口区', '浦口', '118.625305', '32.05839', 3, 0, 1), - (320113, 320100, '栖霞区', '栖霞', '118.8087', '32.102146', 3, 0, 1), - (320114, 320100, '雨花台区', '雨花台', '118.77207', '31.995947', 3, 0, 1), - (320115, 320100, '江宁区', '江宁', '118.850624', '31.953419', 3, 0, 1), - (320116, 320100, '六合区', '六合', '118.85065', '32.340656', 3, 0, 1), - (320117, 320100, '溧水区', '溧水', '119.0284', '31.651', 3, 0, 1), - (320118, 320100, '高淳区', '高淳', '118.8921', '31.32751', 3, 0, 1), - (320200, 320000, '无锡市', '无锡', '120.30167', '31.57473', 2, 0, 1), - (320205, 320200, '锡山区', '锡山', '120.3573', '31.58556', 3, 0, 1), - (320206, 320200, '惠山区', '惠山', '120.30354', '31.681019', 3, 0, 1), - (320211, 320200, '滨湖区', '滨湖', '120.26605', '31.550228', 3, 0, 1), - (320213, 320200, '梁溪区', '梁溪', '120.30297', '31.56597', 3, 0, 1), - (320214, 320200, '新吴区', '新吴', '120.36434', '31.49055', 3, 0, 1), - (320281, 320200, '江阴市', '江阴', '120.275894', '31.910984', 3, 0, 1), - (320282, 320200, '宜兴市', '宜兴', '119.82054', '31.364384', 3, 0, 1), - (320300, 320000, '徐州市', '徐州', '117.184814', '34.26179', 2, 0, 1), - (320302, 320300, '鼓楼区', '鼓楼', '117.19294', '34.269398', 3, 0, 1), - (320303, 320300, '云龙区', '云龙', '117.19459', '34.254807', 3, 0, 1), - (320305, 320300, '贾汪区', '贾汪', '117.45021', '34.441643', 3, 0, 1), - (320311, 320300, '泉山区', '泉山', '117.18223', '34.26225', 3, 0, 1), - (320312, 320300, '铜山区', '铜山', '117.16898', '34.18044', 3, 0, 1), - (320321, 320300, '丰县', '丰县', '116.59289', '34.696945', 3, 0, 1), - (320322, 320300, '沛县', '沛县', '116.93718', '34.729046', 3, 0, 1), - (320324, 320300, '睢宁县', '睢宁', '117.95066', '33.899223', 3, 0, 1), - (320381, 320300, '新沂市', '新沂', '118.345825', '34.36878', 3, 0, 1), - (320382, 320300, '邳州市', '邳州', '117.96392', '34.31471', 3, 0, 1), - (320400, 320000, '常州市', '常州', '119.946976', '31.772753', 2, 0, 1), - (320402, 320400, '天宁区', '天宁', '119.96378', '31.779633', 3, 0, 1), - (320404, 320400, '钟楼区', '钟楼', '119.94839', '31.78096', 3, 0, 1), - (320411, 320400, '新北区', '新北', '119.974655', '31.824663', 3, 0, 1), - (320412, 320400, '武进区', '武进', '119.95877', '31.718567', 3, 0, 1), - (320413, 320400, '金坛区', '金坛', '119.59794', '31.72322', 3, 0, 1), - (320481, 320400, '溧阳市', '溧阳', '119.487816', '31.42708', 3, 0, 1), - (320500, 320000, '苏州市', '苏州', '120.61958', '31.29938', 2, 0, 1), - (320505, 320500, '虎丘区', '虎丘', '120.56683', '31.294846', 3, 0, 1), - (320506, 320500, '吴中区', '吴中', '120.62462', '31.27084', 3, 0, 1), - (320507, 320500, '相城区', '相城', '120.61896', '31.396685', 3, 0, 1), - (320508, 320500, '姑苏区', '姑苏', '120.622246', '31.311415', 3, 0, 1), - (320509, 320500, '吴江区', '吴江', '120.64517', '31.13914', 3, 0, 1), - (320581, 320500, '常熟市', '常熟', '120.74852', '31.658155', 3, 0, 1), - (320582, 320500, '张家港市', '张家港', '120.54344', '31.865553', 3, 0, 1), - (320583, 320500, '昆山市', '昆山', '120.95814', '31.381926', 3, 0, 1), - (320585, 320500, '太仓市', '太仓', '121.112274', '31.452568', 3, 0, 1), - (320600, 320000, '南通市', '南通', '120.86461', '32.016212', 2, 0, 1), - (320602, 320600, '崇川区', '崇川', '120.86635', '32.015278', 3, 0, 1), - (320611, 320600, '港闸区', '港闸', '120.8339', '32.0403', 3, 0, 1), - (320612, 320600, '通州区', '通州', '121.07317', '32.084286', 3, 0, 1), - (320623, 320600, '如东县', '如东', '121.18609', '32.311832', 3, 0, 1), - (320681, 320600, '启东市', '启东', '121.65972', '31.810158', 3, 0, 1), - (320682, 320600, '如皋市', '如皋', '120.56632', '32.39159', 3, 0, 1), - (320684, 320600, '海门市', '海门', '121.176605', '31.893528', 3, 0, 1), - (320685, 320600, '海安市', '海安', '120.46759', '32.53308', 3, 0, 1), - (320700, 320000, '连云港市', '连云港', '119.17882', '34.600018', 2, 0, 1), - (320703, 320700, '连云区', '连云', '119.366486', '34.73953', 3, 0, 1), - (320706, 320700, '海州区', '海州', '119.137146', '34.57129', 3, 0, 1), - (320707, 320700, '赣榆区', '赣榆', '119.1773', '34.84065', 3, 0, 1), - (320722, 320700, '东海县', '东海', '118.76649', '34.522858', 3, 0, 1), - (320723, 320700, '灌云县', '灌云', '119.25574', '34.298435', 3, 0, 1), - (320724, 320700, '灌南县', '灌南', '119.35233', '34.092552', 3, 0, 1), - (320800, 320000, '淮安市', '淮安', '119.02126', '33.597507', 2, 0, 1), - (320803, 320800, '淮安区', '淮安', '119.14634', '33.5075', 3, 0, 1), - (320804, 320800, '淮阴区', '淮阴', '119.02082', '33.62245', 3, 0, 1), - (320812, 320800, '清江浦区', '清江浦', '119.02662', '33.55308', 3, 0, 1), - (320813, 320800, '洪泽区', '洪泽', '118.8735', '33.29433', 3, 0, 1), - (320826, 320800, '涟水县', '涟水', '119.266075', '33.77131', 3, 0, 1), - (320830, 320800, '盱眙县', '盱眙', '118.49382', '33.00439', 3, 0, 1), - (320831, 320800, '金湖县', '金湖', '119.01694', '33.01816', 3, 0, 1), - (320900, 320000, '盐城市', '盐城', '120.14', '33.377632', 2, 0, 1), - (320902, 320900, '亭湖区', '亭湖', '120.13608', '33.38391', 3, 0, 1), - (320903, 320900, '盐都区', '盐都', '120.139755', '33.34129', 3, 0, 1), - (320904, 320900, '大丰区', '大丰', '120.50102', '33.20107', 3, 0, 1), - (320921, 320900, '响水县', '响水', '119.579575', '34.19996', 3, 0, 1), - (320922, 320900, '滨海县', '滨海', '119.82844', '33.989887', 3, 0, 1), - (320923, 320900, '阜宁县', '阜宁', '119.805336', '33.78573', 3, 0, 1), - (320924, 320900, '射阳县', '射阳', '120.25745', '33.77378', 3, 0, 1), - (320925, 320900, '建湖县', '建湖', '119.793106', '33.472622', 3, 0, 1), - (320981, 320900, '东台市', '东台', '120.3141', '32.853172', 3, 0, 1), - (321000, 320000, '扬州市', '扬州', '119.421005', '32.393158', 2, 0, 1), - (321002, 321000, '广陵区', '广陵', '119.44227', '32.392155', 3, 0, 1), - (321003, 321000, '邗江区', '邗江', '119.39777', '32.3779', 3, 0, 1), - (321012, 321000, '江都区', '江都', '119.57006', '32.43458', 3, 0, 1), - (321023, 321000, '宝应县', '宝应', '119.32128', '33.23694', 3, 0, 1), - (321081, 321000, '仪征市', '仪征', '119.18244', '32.271965', 3, 0, 1), - (321084, 321000, '高邮市', '高邮', '119.44384', '32.785164', 3, 0, 1), - (321100, 320000, '镇江市', '镇江', '119.45275', '32.204403', 2, 0, 1), - (321102, 321100, '京口区', '京口', '119.454575', '32.206192', 3, 0, 1), - (321111, 321100, '润州区', '润州', '119.41488', '32.2135', 3, 0, 1), - (321112, 321100, '丹徒区', '丹徒', '119.43388', '32.12897', 3, 0, 1), - (321181, 321100, '丹阳市', '丹阳', '119.58191', '31.991459', 3, 0, 1), - (321182, 321100, '扬中市', '扬中', '119.82806', '32.237267', 3, 0, 1), - (321183, 321100, '句容市', '句容', '119.16714', '31.947355', 3, 0, 1), - (321200, 320000, '泰州市', '泰州', '119.91518', '32.484882', 2, 0, 1), - (321202, 321200, '海陵区', '海陵', '119.92019', '32.488407', 3, 0, 1), - (321203, 321200, '高港区', '高港', '119.88166', '32.3157', 3, 0, 1), - (321204, 321200, '姜堰区', '姜堰', '120.12673', '32.50879', 3, 0, 1), - (321281, 321200, '兴化市', '兴化', '119.840164', '32.938065', 3, 0, 1), - (321282, 321200, '靖江市', '靖江', '120.26825', '32.01817', 3, 0, 1), - (321283, 321200, '泰兴市', '泰兴', '120.020226', '32.168785', 3, 0, 1), - (321300, 320000, '宿迁市', '宿迁', '118.27516', '33.96301', 2, 0, 1), - (321302, 321300, '宿城区', '宿城', '118.278984', '33.937725', 3, 0, 1), - (321311, 321300, '宿豫区', '宿豫', '118.33001', '33.94107', 3, 0, 1), - (321322, 321300, '沭阳县', '沭阳', '118.77589', '34.129097', 3, 0, 1), - (321323, 321300, '泗阳县', '泗阳', '118.68128', '33.711433', 3, 0, 1), - (321324, 321300, '泗洪县', '泗洪', '118.21182', '33.45654', 3, 0, 1), - (330000, 0, '浙江省', '浙江', '120.15358', '30.287458', 1, 0, 1), - (330100, 330000, '杭州市', '杭州', '120.15358', '30.287458', 2, 0, 1), - (330102, 330100, '上城区', '上城', '120.17146', '30.250237', 3, 0, 1), - (330103, 330100, '下城区', '下城', '120.17276', '30.276272', 3, 0, 1), - (330104, 330100, '江干区', '江干', '120.20264', '30.266603', 3, 0, 1), - (330105, 330100, '拱墅区', '拱墅', '120.150055', '30.314697', 3, 0, 1), - (330106, 330100, '西湖区', '西湖', '120.14738', '30.272934', 3, 0, 1), - (330108, 330100, '滨江区', '滨江', '120.21062', '30.206615', 3, 0, 1), - (330109, 330100, '萧山区', '萧山', '120.27069', '30.162931', 3, 0, 1), - (330110, 330100, '余杭区', '余杭', '120.301735', '30.421186', 3, 0, 1), - (330111, 330100, '富阳区', '富阳', '119.96043', '30.04885', 3, 0, 1), - (330112, 330100, '临安区', '临安', '119.7248', '30.23383', 3, 0, 1), - (330122, 330100, '桐庐县', '桐庐', '119.68504', '29.797438', 3, 0, 1), - (330127, 330100, '淳安县', '淳安', '119.04427', '29.604177', 3, 0, 1), - (330182, 330100, '建德市', '建德', '119.27909', '29.472284', 3, 0, 1), - (330200, 330000, '宁波市', '宁波', '121.54979', '29.868387', 2, 0, 1), - (330203, 330200, '海曙区', '海曙', '121.539696', '29.874453', 3, 0, 1), - (330205, 330200, '江北区', '江北', '121.55928', '29.888361', 3, 0, 1), - (330206, 330200, '北仑区', '北仑', '121.83131', '29.90944', 3, 0, 1), - (330211, 330200, '镇海区', '镇海', '121.713165', '29.952106', 3, 0, 1), - (330212, 330200, '鄞州区', '鄞州', '121.55843', '29.831661', 3, 0, 1), - (330213, 330200, '奉化区', '奉化', '121.40686', '29.65503', 3, 0, 1), - (330225, 330200, '象山县', '象山', '121.87709', '29.470205', 3, 0, 1), - (330226, 330200, '宁海县', '宁海', '121.43261', '29.299835', 3, 0, 1), - (330281, 330200, '余姚市', '余姚', '121.156296', '30.045404', 3, 0, 1), - (330282, 330200, '慈溪市', '慈溪', '121.248055', '30.177141', 3, 0, 1), - (330300, 330000, '温州市', '温州', '120.67211', '28.000574', 2, 0, 1), - (330302, 330300, '鹿城区', '鹿城', '120.67423', '28.003351', 3, 0, 1), - (330303, 330300, '龙湾区', '龙湾', '120.763466', '27.970255', 3, 0, 1), - (330304, 330300, '瓯海区', '瓯海', '120.637146', '28.006445', 3, 0, 1), - (330305, 330300, '洞头区', '洞头', '121.1572', '27.83616', 3, 0, 1), - (330324, 330300, '永嘉县', '永嘉', '120.69097', '28.153887', 3, 0, 1), - (330326, 330300, '平阳县', '平阳', '120.564384', '27.6693', 3, 0, 1), - (330327, 330300, '苍南县', '苍南', '120.40626', '27.507744', 3, 0, 1), - (330328, 330300, '文成县', '文成', '120.09245', '27.789133', 3, 0, 1), - (330329, 330300, '泰顺县', '泰顺', '119.71624', '27.557308', 3, 0, 1), - (330381, 330300, '瑞安市', '瑞安', '120.64617', '27.779322', 3, 0, 1), - (330382, 330300, '乐清市', '乐清', '120.96715', '28.116083', 3, 0, 1), - (330383, 330300, '龙港市', '龙港', '120.553102', '27.578205', 3, 0, 1), - (330400, 330000, '嘉兴市', '嘉兴', '120.75086', '30.762653', 2, 0, 1), - (330402, 330400, '南湖区', '南湖', '120.749954', '30.764652', 3, 0, 1), - (330411, 330400, '秀洲区', '秀洲', '120.72043', '30.763323', 3, 0, 1), - (330421, 330400, '嘉善县', '嘉善', '120.92187', '30.841352', 3, 0, 1), - (330424, 330400, '海盐县', '海盐', '120.94202', '30.522223', 3, 0, 1), - (330481, 330400, '海宁市', '海宁', '120.68882', '30.525543', 3, 0, 1), - (330482, 330400, '平湖市', '平湖', '121.01466', '30.698921', 3, 0, 1), - (330483, 330400, '桐乡市', '桐乡', '120.55109', '30.629065', 3, 0, 1), - (330500, 330000, '湖州市', '湖州', '120.1024', '30.867199', 2, 0, 1), - (330502, 330500, '吴兴区', '吴兴', '120.10142', '30.867252', 3, 0, 1), - (330503, 330500, '南浔区', '南浔', '120.4172', '30.872742', 3, 0, 1), - (330521, 330500, '德清县', '德清', '119.96766', '30.534927', 3, 0, 1), - (330522, 330500, '长兴县', '长兴', '119.910126', '31.00475', 3, 0, 1), - (330523, 330500, '安吉县', '安吉', '119.68789', '30.631973', 3, 0, 1), - (330600, 330000, '绍兴市', '绍兴', '120.582115', '29.997116', 2, 0, 1), - (330602, 330600, '越城区', '越城', '120.58531', '29.996992', 3, 0, 1), - (330603, 330600, '柯桥区', '柯桥', '120.49476', '30.08189', 3, 0, 1), - (330604, 330600, '上虞区', '上虞', '120.86858', '30.03227', 3, 0, 1), - (330624, 330600, '新昌县', '新昌', '120.90566', '29.501205', 3, 0, 1), - (330681, 330600, '诸暨市', '诸暨', '120.24432', '29.713661', 3, 0, 1), - (330683, 330600, '嵊州市', '嵊州', '120.82888', '29.586605', 3, 0, 1), - (330700, 330000, '金华市', '金华', '119.649506', '29.089523', 2, 0, 1), - (330702, 330700, '婺城区', '婺城', '119.65258', '29.082607', 3, 0, 1), - (330703, 330700, '金东区', '金东', '119.68127', '29.095835', 3, 0, 1), - (330723, 330700, '武义县', '武义', '119.81916', '28.896563', 3, 0, 1), - (330726, 330700, '浦江县', '浦江', '119.893364', '29.451254', 3, 0, 1), - (330727, 330700, '磐安县', '磐安', '120.44513', '29.052628', 3, 0, 1), - (330781, 330700, '兰溪市', '兰溪', '119.46052', '29.210066', 3, 0, 1), - (330782, 330700, '义乌市', '义乌', '120.07491', '29.306864', 3, 0, 1), - (330783, 330700, '东阳市', '东阳', '120.23334', '29.262547', 3, 0, 1), - (330784, 330700, '永康市', '永康', '120.03633', '28.895292', 3, 0, 1), - (330800, 330000, '衢州市', '衢州', '118.87263', '28.941708', 2, 0, 1), - (330802, 330800, '柯城区', '柯城', '118.87304', '28.944538', 3, 0, 1), - (330803, 330800, '衢江区', '衢江', '118.95768', '28.973194', 3, 0, 1), - (330822, 330800, '常山县', '常山', '118.52165', '28.90004', 3, 0, 1), - (330824, 330800, '开化县', '开化', '118.41444', '29.136503', 3, 0, 1), - (330825, 330800, '龙游县', '龙游', '119.17252', '29.031364', 3, 0, 1), - (330881, 330800, '江山市', '江山', '118.62788', '28.734674', 3, 0, 1), - (330900, 330000, '舟山市', '舟山', '122.106865', '30.016027', 2, 0, 1), - (330902, 330900, '定海区', '定海', '122.1085', '30.016422', 3, 0, 1), - (330903, 330900, '普陀区', '普陀', '122.301956', '29.945614', 3, 0, 1), - (330921, 330900, '岱山县', '岱山', '122.20113', '30.242865', 3, 0, 1), - (330922, 330900, '嵊泗县', '嵊泗', '122.45781', '30.727165', 3, 0, 1), - (331000, 330000, '台州市', '台州', '121.4286', '28.661379', 2, 0, 1), - (331002, 331000, '椒江区', '椒江', '121.431046', '28.67615', 3, 0, 1), - (331003, 331000, '黄岩区', '黄岩', '121.26214', '28.64488', 3, 0, 1), - (331004, 331000, '路桥区', '路桥', '121.37292', '28.581799', 3, 0, 1), - (331022, 331000, '三门县', '三门', '121.37643', '29.118956', 3, 0, 1), - (331023, 331000, '天台县', '天台', '121.03123', '29.141127', 3, 0, 1), - (331024, 331000, '仙居县', '仙居', '120.73508', '28.849213', 3, 0, 1), - (331081, 331000, '温岭市', '温岭', '121.37361', '28.36878', 3, 0, 1), - (331082, 331000, '临海市', '临海', '121.131226', '28.845442', 3, 0, 1), - (331083, 331000, '玉环市', '玉环', '121.23164', '28.13589', 3, 0, 1), - (331100, 330000, '丽水市', '丽水', '119.92178', '28.451994', 2, 0, 1), - (331102, 331100, '莲都区', '莲都', '119.922295', '28.451103', 3, 0, 1), - (331121, 331100, '青田县', '青田', '120.29194', '28.135246', 3, 0, 1), - (331122, 331100, '缙云县', '缙云', '120.078964', '28.654207', 3, 0, 1), - (331123, 331100, '遂昌县', '遂昌', '119.27589', '28.5924', 3, 0, 1), - (331124, 331100, '松阳县', '松阳', '119.48529', '28.449938', 3, 0, 1), - (331125, 331100, '云和县', '云和', '119.56946', '28.111076', 3, 0, 1), - (331126, 331100, '庆元县', '庆元', '119.06723', '27.61823', 3, 0, 1), - (331127, 331100, '景宁畲族自治县', '景宁', '119.63467', '27.977247', 3, 0, 1), - (331181, 331100, '龙泉市', '龙泉', '119.13232', '28.069178', 3, 0, 1); - - INSERT INTO `nc_sys_area` VALUES - (340000, 0, '安徽省', '安徽', '117.28304', '31.86119', 1, 0, 1), - (340100, 340000, '合肥市', '合肥', '117.28304', '31.86119', 2, 0, 1), - (340102, 340100, '瑶海区', '瑶海', '117.31536', '31.86961', 3, 0, 1), - (340103, 340100, '庐阳区', '庐阳', '117.283775', '31.86901', 3, 0, 1), - (340104, 340100, '蜀山区', '蜀山', '117.26207', '31.855867', 3, 0, 1), - (340111, 340100, '包河区', '包河', '117.28575', '31.82956', 3, 0, 1), - (340121, 340100, '长丰县', '长丰', '117.164696', '32.478546', 3, 0, 1), - (340122, 340100, '肥东县', '肥东', '117.46322', '31.883991', 3, 0, 1), - (340123, 340100, '肥西县', '肥西', '117.166115', '31.719646', 3, 0, 1), - (340124, 340100, '庐江县', '庐江', '117.28736', '31.25567', 3, 0, 1), - (340181, 340100, '巢湖市', '巢湖', '117.88937', '31.62329', 3, 0, 1), - (340200, 340000, '芜湖市', '芜湖', '118.37645', '31.326319', 2, 0, 1), - (340202, 340200, '镜湖区', '镜湖', '118.37634', '31.32559', 3, 0, 1), - (340207, 340200, '鸠江区', '鸠江', '118.40018', '31.362717', 3, 0, 1), - (340209, 340200, '弋江区', '弋江', '', '', 3, 0, 1), - (340210, 340200, '湾沚区', '湾沚', '', '', 3, 0, 1), - (340211, 340200, '繁昌区', '繁昌', '', '', 3, 0, 1), - (340223, 340200, '南陵县', '南陵', '118.337105', '30.919638', 3, 0, 1), - (340281, 340200, '无为市', '无为', '117.90224', '31.30317', 3, 0, 1), - (340300, 340000, '蚌埠市', '蚌埠', '117.36323', '32.939667', 2, 0, 1), - (340302, 340300, '龙子湖区', '龙子湖', '117.38231', '32.95045', 3, 0, 1), - (340303, 340300, '蚌山区', '蚌山', '117.35579', '32.938065', 3, 0, 1), - (340304, 340300, '禹会区', '禹会', '117.35259', '32.931934', 3, 0, 1), - (340311, 340300, '淮上区', '淮上', '117.34709', '32.963146', 3, 0, 1), - (340321, 340300, '怀远县', '怀远', '117.20017', '32.956936', 3, 0, 1), - (340322, 340300, '五河县', '五河', '117.88881', '33.146202', 3, 0, 1), - (340323, 340300, '固镇县', '固镇', '117.31596', '33.31868', 3, 0, 1), - (340400, 340000, '淮南市', '淮南', '117.018326', '32.647575', 2, 0, 1), - (340402, 340400, '大通区', '大通', '117.052925', '32.632065', 3, 0, 1), - (340403, 340400, '田家庵区', '田家庵', '117.01832', '32.64434', 3, 0, 1), - (340404, 340400, '谢家集区', '谢家集', '116.86536', '32.59829', 3, 0, 1), - (340405, 340400, '八公山区', '八公山', '116.84111', '32.628227', 3, 0, 1), - (340406, 340400, '潘集区', '潘集', '116.81688', '32.782116', 3, 0, 1), - (340421, 340400, '凤台县', '凤台', '116.72277', '32.705383', 3, 0, 1), - (340422, 340400, '寿县', '寿县', '116.78708', '32.57332', 3, 0, 1), - (340500, 340000, '马鞍山市', '马鞍山', '118.507904', '31.689362', 2, 0, 1), - (340503, 340500, '花山区', '花山', '118.51131', '31.69902', 3, 0, 1), - (340504, 340500, '雨山区', '雨山', '118.4931', '31.685911', 3, 0, 1), - (340506, 340500, '博望区', '博望', '118.84374', '31.56232', 3, 0, 1), - (340521, 340500, '当涂县', '当涂', '118.489876', '31.556168', 3, 0, 1), - (340522, 340500, '含山县', '含山', '118.10241', '31.73358', 3, 0, 1), - (340523, 340500, '和县', '和县', '118.35145', '31.74423', 3, 0, 1), - (340600, 340000, '淮北市', '淮北', '116.79466', '33.971706', 2, 0, 1), - (340602, 340600, '杜集区', '杜集', '116.83392', '33.99122', 3, 0, 1), - (340603, 340600, '相山区', '相山', '116.79077', '33.970917', 3, 0, 1), - (340604, 340600, '烈山区', '烈山', '116.80946', '33.88953', 3, 0, 1), - (340621, 340600, '濉溪县', '濉溪', '116.76743', '33.91641', 3, 0, 1), - (340700, 340000, '铜陵市', '铜陵', '117.816574', '30.929935', 2, 0, 1), - (340705, 340700, '铜官区', '铜官', '117.87431', '30.95614', 3, 0, 1), - (340706, 340700, '义安区', '义安', '117.79147', '30.95271', 3, 0, 1), - (340711, 340700, '郊区', '郊区', '117.816574', '30.929935', 3, 0, 1), - (340722, 340700, '枞阳县', '枞阳', '117.22019', '30.69961', 3, 0, 1), - (340800, 340000, '安庆市', '安庆', '117.04355', '30.50883', 2, 0, 1), - (340802, 340800, '迎江区', '迎江', '117.04497', '30.506374', 3, 0, 1), - (340803, 340800, '大观区', '大观', '117.034515', '30.505632', 3, 0, 1), - (340811, 340800, '宜秀区', '宜秀', '117.07', '30.541323', 3, 0, 1), - (340822, 340800, '怀宁县', '怀宁', '116.82867', '30.734995', 3, 0, 1), - (340825, 340800, '太湖县', '太湖', '116.30522', '30.451868', 3, 0, 1), - (340826, 340800, '宿松县', '宿松', '116.1202', '30.158327', 3, 0, 1), - (340827, 340800, '望江县', '望江', '116.690926', '30.12491', 3, 0, 1), - (340828, 340800, '岳西县', '岳西', '116.36048', '30.848501', 3, 0, 1), - (340881, 340800, '桐城市', '桐城', '116.959656', '31.050575', 3, 0, 1), - (340882, 340800, '潜山市', '潜山', '116.58133', '30.63107', 3, 0, 1), - (341000, 340000, '黄山市', '黄山', '118.31732', '29.709238', 2, 0, 1), - (341002, 341000, '屯溪区', '屯溪', '118.31735', '29.709187', 3, 0, 1), - (341003, 341000, '黄山区', '黄山', '118.13664', '30.294518', 3, 0, 1), - (341004, 341000, '徽州区', '徽州', '118.339745', '29.825201', 3, 0, 1), - (341021, 341000, '歙县', '歙县', '118.428024', '29.867748', 3, 0, 1), - (341022, 341000, '休宁县', '休宁', '118.18853', '29.788877', 3, 0, 1), - (341023, 341000, '黟县', '黟县', '117.94291', '29.923813', 3, 0, 1), - (341024, 341000, '祁门县', '祁门', '117.71724', '29.853472', 3, 0, 1), - (341100, 340000, '滁州市', '滁州', '118.31626', '32.303627', 2, 0, 1), - (341102, 341100, '琅琊区', '琅琊', '118.316475', '32.3038', 3, 0, 1), - (341103, 341100, '南谯区', '南谯', '118.29695', '32.32984', 3, 0, 1), - (341122, 341100, '来安县', '来安', '118.4333', '32.45023', 3, 0, 1), - (341124, 341100, '全椒县', '全椒', '118.26858', '32.09385', 3, 0, 1), - (341125, 341100, '定远县', '定远', '117.683716', '32.527103', 3, 0, 1), - (341126, 341100, '凤阳县', '凤阳', '117.56246', '32.867146', 3, 0, 1), - (341181, 341100, '天长市', '天长', '119.011215', '32.6815', 3, 0, 1), - (341182, 341100, '明光市', '明光', '117.99805', '32.781204', 3, 0, 1), - (341200, 340000, '阜阳市', '阜阳', '115.81973', '32.89697', 2, 0, 1), - (341202, 341200, '颍州区', '颍州', '115.81391', '32.89124', 3, 0, 1), - (341203, 341200, '颍东区', '颍东', '115.85875', '32.90886', 3, 0, 1), - (341204, 341200, '颍泉区', '颍泉', '115.80453', '32.924797', 3, 0, 1), - (341221, 341200, '临泉县', '临泉', '115.26169', '33.0627', 3, 0, 1), - (341222, 341200, '太和县', '太和', '115.62724', '33.16229', 3, 0, 1), - (341225, 341200, '阜南县', '阜南', '115.59053', '32.638103', 3, 0, 1), - (341226, 341200, '颍上县', '颍上', '116.259125', '32.637066', 3, 0, 1), - (341282, 341200, '界首市', '界首', '115.362114', '33.26153', 3, 0, 1), - (341300, 340000, '宿州市', '宿州', '116.984085', '33.633892', 2, 0, 1), - (341302, 341300, '埇桥区', '埇桥', '116.98331', '33.633854', 3, 0, 1), - (341321, 341300, '砀山县', '砀山', '116.35111', '34.426247', 3, 0, 1), - (341322, 341300, '萧县', '萧县', '116.9454', '34.183266', 3, 0, 1), - (341323, 341300, '灵璧县', '灵璧', '117.55149', '33.54063', 3, 0, 1), - (341324, 341300, '泗县', '泗县', '117.885445', '33.47758', 3, 0, 1), - (341500, 340000, '六安市', '六安', '116.507675', '31.75289', 2, 0, 1), - (341502, 341500, '金安区', '金安', '116.50329', '31.754492', 3, 0, 1), - (341503, 341500, '裕安区', '裕安', '116.494545', '31.750692', 3, 0, 1), - (341504, 341500, '叶集区', '叶集', '115.9133', '31.85122', 3, 0, 1), - (341522, 341500, '霍邱县', '霍邱', '116.27888', '32.341305', 3, 0, 1), - (341523, 341500, '舒城县', '舒城', '116.94409', '31.462849', 3, 0, 1), - (341524, 341500, '金寨县', '金寨', '115.87852', '31.681623', 3, 0, 1), - (341525, 341500, '霍山县', '霍山', '116.33308', '31.402456', 3, 0, 1), - (341600, 340000, '亳州市', '亳州', '115.782936', '33.86934', 2, 0, 1), - (341602, 341600, '谯城区', '谯城', '115.78121', '33.869286', 3, 0, 1), - (341621, 341600, '涡阳县', '涡阳', '116.21155', '33.50283', 3, 0, 1), - (341622, 341600, '蒙城县', '蒙城', '116.56033', '33.260815', 3, 0, 1), - (341623, 341600, '利辛县', '利辛', '116.20778', '33.1435', 3, 0, 1), - (341700, 340000, '池州市', '池州', '117.48916', '30.656036', 2, 0, 1), - (341702, 341700, '贵池区', '贵池', '117.48834', '30.657377', 3, 0, 1), - (341721, 341700, '东至县', '东至', '117.02148', '30.096567', 3, 0, 1), - (341722, 341700, '石台县', '石台', '117.48291', '30.210323', 3, 0, 1), - (341723, 341700, '青阳县', '青阳', '117.85739', '30.63818', 3, 0, 1), - (341800, 340000, '宣城市', '宣城', '118.757996', '30.945667', 2, 0, 1), - (341802, 341800, '宣州区', '宣州', '118.758415', '30.946003', 3, 0, 1), - (341821, 341800, '郎溪县', '郎溪', '119.18502', '31.127834', 3, 0, 1), - (341823, 341800, '泾县', '泾县', '118.4124', '30.685974', 3, 0, 1), - (341824, 341800, '绩溪县', '绩溪', '118.5947', '30.065268', 3, 0, 1), - (341825, 341800, '旌德县', '旌德', '118.54308', '30.288057', 3, 0, 1), - (341881, 341800, '宁国市', '宁国', '118.983406', '30.62653', 3, 0, 1), - (341882, 341800, '广德市', '广德', '119.41705', '30.8938', 3, 0, 1), - (350000, 0, '福建省', '福建', '119.30624', '26.075302', 1, 0, 1), - (350100, 350000, '福州市', '福州', '119.30624', '26.075302', 2, 0, 1), - (350102, 350100, '鼓楼区', '鼓楼', '119.29929', '26.082285', 3, 0, 1), - (350103, 350100, '台江区', '台江', '119.31016', '26.058617', 3, 0, 1), - (350104, 350100, '仓山区', '仓山', '119.32099', '26.038912', 3, 0, 1), - (350105, 350100, '马尾区', '马尾', '119.458725', '25.991976', 3, 0, 1), - (350111, 350100, '晋安区', '晋安', '119.3286', '26.078836', 3, 0, 1), - (350112, 350100, '长乐区', '长乐', '119.52324', '25.96283', 3, 0, 1), - (350121, 350100, '闽侯县', '闽侯', '119.14512', '26.148567', 3, 0, 1), - (350122, 350100, '连江县', '连江', '119.53837', '26.202108', 3, 0, 1), - (350123, 350100, '罗源县', '罗源', '119.55264', '26.487234', 3, 0, 1), - (350124, 350100, '闽清县', '闽清', '118.868416', '26.223793', 3, 0, 1), - (350125, 350100, '永泰县', '永泰', '118.93909', '25.864824', 3, 0, 1), - (350128, 350100, '平潭县', '平潭', '119.7912', '25.503672', 3, 0, 1), - (350181, 350100, '福清市', '福清', '119.37699', '25.720402', 3, 0, 1), - (350200, 350000, '厦门市', '厦门', '118.11022', '24.490475', 2, 0, 1), - (350203, 350200, '思明区', '思明', '118.08783', '24.462059', 3, 0, 1), - (350205, 350200, '海沧区', '海沧', '118.03636', '24.492512', 3, 0, 1), - (350206, 350200, '湖里区', '湖里', '118.10943', '24.512764', 3, 0, 1), - (350211, 350200, '集美区', '集美', '118.10087', '24.572874', 3, 0, 1), - (350212, 350200, '同安区', '同安', '118.15045', '24.729334', 3, 0, 1), - (350213, 350200, '翔安区', '翔安', '118.24281', '24.63748', 3, 0, 1), - (350300, 350000, '莆田市', '莆田', '119.00756', '25.431011', 2, 0, 1), - (350302, 350300, '城厢区', '城厢', '119.00103', '25.433737', 3, 0, 1), - (350303, 350300, '涵江区', '涵江', '119.1191', '25.459272', 3, 0, 1), - (350304, 350300, '荔城区', '荔城', '119.02005', '25.430046', 3, 0, 1), - (350305, 350300, '秀屿区', '秀屿', '119.092606', '25.316141', 3, 0, 1), - (350322, 350300, '仙游县', '仙游', '118.69433', '25.35653', 3, 0, 1), - (350400, 350000, '三明市', '三明', '117.635', '26.265444', 2, 0, 1), - (350402, 350400, '梅列区', '梅列', '117.63687', '26.269209', 3, 0, 1), - (350403, 350400, '三元区', '三元', '117.607414', '26.234192', 3, 0, 1), - (350421, 350400, '明溪县', '明溪', '117.20184', '26.357374', 3, 0, 1), - (350423, 350400, '清流县', '清流', '116.81582', '26.17761', 3, 0, 1), - (350424, 350400, '宁化县', '宁化', '116.65972', '26.259932', 3, 0, 1), - (350425, 350400, '大田县', '大田', '117.84936', '25.690804', 3, 0, 1), - (350426, 350400, '尤溪县', '尤溪', '118.188576', '26.169262', 3, 0, 1), - (350427, 350400, '沙县', '沙县', '117.78909', '26.397362', 3, 0, 1), - (350428, 350400, '将乐县', '将乐', '117.47356', '26.728666', 3, 0, 1), - (350429, 350400, '泰宁县', '泰宁', '117.17752', '26.897995', 3, 0, 1), - (350430, 350400, '建宁县', '建宁', '116.84583', '26.831398', 3, 0, 1), - (350481, 350400, '永安市', '永安', '117.36445', '25.974075', 3, 0, 1), - (350500, 350000, '泉州市', '泉州', '118.589424', '24.908854', 2, 0, 1), - (350502, 350500, '鲤城区', '鲤城', '118.58893', '24.907644', 3, 0, 1), - (350503, 350500, '丰泽区', '丰泽', '118.60515', '24.896042', 3, 0, 1), - (350504, 350500, '洛江区', '洛江', '118.67031', '24.941153', 3, 0, 1), - (350505, 350500, '泉港区', '泉港', '118.912285', '25.12686', 3, 0, 1), - (350521, 350500, '惠安县', '惠安', '118.79895', '25.028719', 3, 0, 1), - (350524, 350500, '安溪县', '安溪', '118.18601', '25.056824', 3, 0, 1), - (350525, 350500, '永春县', '永春', '118.29503', '25.32072', 3, 0, 1), - (350526, 350500, '德化县', '德化', '118.24299', '25.489004', 3, 0, 1), - (350527, 350500, '金门县', '金门', '118.32322', '24.436417', 3, 0, 1), - (350581, 350500, '石狮市', '石狮', '118.6284', '24.731977', 3, 0, 1), - (350582, 350500, '晋江市', '晋江', '118.57734', '24.807322', 3, 0, 1), - (350583, 350500, '南安市', '南安', '118.38703', '24.959494', 3, 0, 1), - (350600, 350000, '漳州市', '漳州', '117.661804', '24.510897', 2, 0, 1), - (350602, 350600, '芗城区', '芗城', '117.65646', '24.509954', 3, 0, 1), - (350603, 350600, '龙文区', '龙文', '117.67139', '24.515656', 3, 0, 1), - (350622, 350600, '云霄县', '云霄', '117.34094', '23.950485', 3, 0, 1), - (350623, 350600, '漳浦县', '漳浦', '117.61402', '24.117907', 3, 0, 1), - (350624, 350600, '诏安县', '诏安', '117.17609', '23.710835', 3, 0, 1), - (350625, 350600, '长泰县', '长泰', '117.75591', '24.621475', 3, 0, 1), - (350626, 350600, '东山县', '东山', '117.42768', '23.702845', 3, 0, 1), - (350627, 350600, '南靖县', '南靖', '117.36546', '24.516424', 3, 0, 1), - (350628, 350600, '平和县', '平和', '117.313545', '24.366158', 3, 0, 1), - (350629, 350600, '华安县', '华安', '117.53631', '25.001415', 3, 0, 1), - (350681, 350600, '龙海市', '龙海', '117.81729', '24.445341', 3, 0, 1), - (350700, 350000, '南平市', '南平', '118.17846', '26.635628', 2, 0, 1), - (350702, 350700, '延平区', '延平', '118.17892', '26.63608', 3, 0, 1), - (350703, 350700, '建阳区', '建阳', '118.120427', '27.331749', 3, 0, 1), - (350721, 350700, '顺昌县', '顺昌', '117.80771', '26.79285', 3, 0, 1), - (350722, 350700, '浦城县', '浦城', '118.53682', '27.920412', 3, 0, 1), - (350723, 350700, '光泽县', '光泽', '117.3379', '27.542803', 3, 0, 1), - (350724, 350700, '松溪县', '松溪', '118.78349', '27.525785', 3, 0, 1), - (350725, 350700, '政和县', '政和', '118.85866', '27.365398', 3, 0, 1), - (350781, 350700, '邵武市', '邵武', '117.49155', '27.337952', 3, 0, 1), - (350782, 350700, '武夷山市', '武夷山', '118.0328', '27.751734', 3, 0, 1), - (350783, 350700, '建瓯市', '建瓯', '118.32176', '27.03502', 3, 0, 1), - (350800, 350000, '龙岩市', '龙岩', '117.02978', '25.091602', 2, 0, 1), - (350802, 350800, '新罗区', '新罗', '117.03072', '25.0918', 3, 0, 1), - (350803, 350800, '永定区', '永定', '116.73202', '24.72303', 3, 0, 1), - (350821, 350800, '长汀县', '长汀', '116.36101', '25.842278', 3, 0, 1), - (350823, 350800, '上杭县', '上杭', '116.424774', '25.050018', 3, 0, 1), - (350824, 350800, '武平县', '武平', '116.10093', '25.08865', 3, 0, 1), - (350825, 350800, '连城县', '连城', '116.75668', '25.708506', 3, 0, 1), - (350881, 350800, '漳平市', '漳平', '117.42073', '25.291597', 3, 0, 1), - (350900, 350000, '宁德市', '宁德', '119.527084', '26.65924', 2, 0, 1), - (350902, 350900, '蕉城区', '蕉城', '119.52722', '26.659252', 3, 0, 1), - (350921, 350900, '霞浦县', '霞浦', '120.00521', '26.882069', 3, 0, 1), - (350922, 350900, '古田县', '古田', '118.74316', '26.577492', 3, 0, 1), - (350923, 350900, '屏南县', '屏南', '118.98754', '26.910826', 3, 0, 1), - (350924, 350900, '寿宁县', '寿宁', '119.50674', '27.457798', 3, 0, 1), - (350925, 350900, '周宁县', '周宁', '119.33824', '27.103106', 3, 0, 1), - (350926, 350900, '柘荣县', '柘荣', '119.898224', '27.236162', 3, 0, 1), - (350981, 350900, '福安市', '福安', '119.650795', '27.084246', 3, 0, 1), - (350982, 350900, '福鼎市', '福鼎', '120.219765', '27.318884', 3, 0, 1), - (360000, 0, '江西省', '江西', '115.89215', '28.676493', 1, 0, 1), - (360100, 360000, '南昌市', '南昌', '115.89215', '28.676493', 2, 0, 1), - (360102, 360100, '东湖区', '东湖', '115.88967', '28.682987', 3, 0, 1), - (360103, 360100, '西湖区', '西湖', '115.91065', '28.6629', 3, 0, 1), - (360104, 360100, '青云谱区', '青云谱', '115.907295', '28.635723', 3, 0, 1), - (360111, 360100, '青山湖区', '青山湖', '115.94904', '28.689293', 3, 0, 1), - (360112, 360100, '新建区', '新建', '115.81529', '28.6925', 3, 0, 1), - (360113, 360100, '红谷滩区', '红谷滩', '115.858393', '28.698314', 3, 0, 1), - (360121, 360100, '南昌县', '南昌', '115.94247', '28.543781', 3, 0, 1), - (360123, 360100, '安义县', '安义', '115.55311', '28.841333', 3, 0, 1), - (360124, 360100, '进贤县', '进贤', '116.26767', '28.36568', 3, 0, 1), - (360200, 360000, '景德镇市', '景德镇', '117.21466', '29.29256', 2, 0, 1), - (360202, 360200, '昌江区', '昌江', '117.19502', '29.288465', 3, 0, 1), - (360203, 360200, '珠山区', '珠山', '117.21481', '29.292812', 3, 0, 1), - (360222, 360200, '浮梁县', '浮梁', '117.21761', '29.352251', 3, 0, 1), - (360281, 360200, '乐平市', '乐平', '117.12938', '28.967361', 3, 0, 1), - (360300, 360000, '萍乡市', '萍乡', '113.85219', '27.622946', 2, 0, 1), - (360302, 360300, '安源区', '安源', '113.85504', '27.625826', 3, 0, 1), - (360313, 360300, '湘东区', '湘东', '113.7456', '27.639318', 3, 0, 1), - (360321, 360300, '莲花县', '莲花', '113.95558', '27.127808', 3, 0, 1), - (360322, 360300, '上栗县', '上栗', '113.80052', '27.87704', 3, 0, 1), - (360323, 360300, '芦溪县', '芦溪', '114.04121', '27.633633', 3, 0, 1), - (360400, 360000, '九江市', '九江', '115.99281', '29.712034', 2, 0, 1), - (360402, 360400, '濂溪区', '庐山', '115.99012', '29.676174', 3, 0, 1), - (360403, 360400, '浔阳区', '浔阳', '115.99595', '29.72465', 3, 0, 1), - (360404, 360400, '柴桑区', '柴桑', '115.91135', '29.60855', 3, 0, 1), - (360423, 360400, '武宁县', '武宁', '115.105644', '29.260181', 3, 0, 1), - (360424, 360400, '修水县', '修水', '114.573425', '29.032728', 3, 0, 1), - (360425, 360400, '永修县', '永修', '115.80905', '29.018211', 3, 0, 1), - (360426, 360400, '德安县', '德安', '115.76261', '29.327475', 3, 0, 1), - (360428, 360400, '都昌县', '都昌', '116.20512', '29.275105', 3, 0, 1), - (360429, 360400, '湖口县', '湖口', '116.244316', '29.7263', 3, 0, 1), - (360430, 360400, '彭泽县', '彭泽', '116.55584', '29.898865', 3, 0, 1), - (360481, 360400, '瑞昌市', '瑞昌', '115.66908', '29.6766', 3, 0, 1), - (360482, 360400, '共青城市', '共青城', '115.81477', '29.24955', 3, 0, 1), - (360483, 360400, '庐山市', '共青城', '115.80571', '29.247885', 3, 0, 1), - (360500, 360000, '新余市', '新余', '114.93083', '27.810835', 2, 0, 1), - (360502, 360500, '渝水区', '渝水', '114.92392', '27.819172', 3, 0, 1), - (360521, 360500, '分宜县', '分宜', '114.67526', '27.8113', 3, 0, 1), - (360600, 360000, '鹰潭市', '鹰潭', '117.03384', '28.238638', 2, 0, 1), - (360602, 360600, '月湖区', '月湖', '117.03411', '28.239077', 3, 0, 1), - (360603, 360600, '余江区', '余江', '116.81834', '28.20991', 3, 0, 1), - (360681, 360600, '贵溪市', '贵溪', '117.212105', '28.283693', 3, 0, 1), - (360700, 360000, '赣州市', '赣州', '114.94028', '25.85097', 2, 0, 1), - (360702, 360700, '章贡区', '章贡', '114.93872', '25.851368', 3, 0, 1), - (360703, 360700, '南康区', '南康', '114.76535', '25.66144', 3, 0, 1), - (360704, 360700, '赣县区', '赣县', '115.01161', '25.86076', 3, 0, 1), - (360722, 360700, '信丰县', '信丰', '114.93089', '25.38023', 3, 0, 1), - (360723, 360700, '大余县', '大余', '114.36224', '25.395937', 3, 0, 1), - (360724, 360700, '上犹县', '上犹', '114.540535', '25.794285', 3, 0, 1), - (360725, 360700, '崇义县', '崇义', '114.30735', '25.68791', 3, 0, 1), - (360726, 360700, '安远县', '安远', '115.39233', '25.13459', 3, 0, 1), - (360728, 360700, '定南县', '定南', '115.03267', '24.774277', 3, 0, 1), - (360729, 360700, '全南县', '全南', '114.531586', '24.742651', 3, 0, 1), - (360730, 360700, '宁都县', '宁都', '116.01878', '26.472054', 3, 0, 1), - (360731, 360700, '于都县', '于都', '115.4112', '25.955032', 3, 0, 1), - (360732, 360700, '兴国县', '兴国', '115.3519', '26.330488', 3, 0, 1), - (360733, 360700, '会昌县', '会昌', '115.79116', '25.599125', 3, 0, 1), - (360734, 360700, '寻乌县', '寻乌', '115.6514', '24.954136', 3, 0, 1), - (360735, 360700, '石城县', '石城', '116.34225', '26.326582', 3, 0, 1), - (360781, 360700, '瑞金市', '瑞金', '116.03485', '25.875278', 3, 0, 1), - (360783, 360700, '龙南市', '龙南', '', '', 3, 0, 1), - (360800, 360000, '吉安市', '吉安', '114.986374', '27.111698', 2, 0, 1), - (360802, 360800, '吉州区', '吉州', '114.98733', '27.112368', 3, 0, 1), - (360803, 360800, '青原区', '青原', '115.016304', '27.105879', 3, 0, 1), - (360821, 360800, '吉安县', '吉安', '114.90511', '27.040043', 3, 0, 1), - (360822, 360800, '吉水县', '吉水', '115.13457', '27.213446', 3, 0, 1), - (360823, 360800, '峡江县', '峡江', '115.31933', '27.580862', 3, 0, 1), - (360824, 360800, '新干县', '新干', '115.39929', '27.755758', 3, 0, 1), - (360825, 360800, '永丰县', '永丰', '115.43556', '27.321087', 3, 0, 1), - (360826, 360800, '泰和县', '泰和', '114.90139', '26.790165', 3, 0, 1), - (360827, 360800, '遂川县', '遂川', '114.51689', '26.323706', 3, 0, 1), - (360828, 360800, '万安县', '万安', '114.78469', '26.462086', 3, 0, 1), - (360829, 360800, '安福县', '安福', '114.61384', '27.382746', 3, 0, 1), - (360830, 360800, '永新县', '永新', '114.24253', '26.944721', 3, 0, 1), - (360881, 360800, '井冈山市', '井冈山', '114.284424', '26.745918', 3, 0, 1), - (360900, 360000, '宜春市', '宜春', '114.391136', '27.8043', 2, 0, 1), - (360902, 360900, '袁州区', '袁州', '114.38738', '27.800117', 3, 0, 1), - (360921, 360900, '奉新县', '奉新', '115.3899', '28.700672', 3, 0, 1), - (360922, 360900, '万载县', '万载', '114.44901', '28.104528', 3, 0, 1), - (360923, 360900, '上高县', '上高', '114.932655', '28.234789', 3, 0, 1), - (360924, 360900, '宜丰县', '宜丰', '114.787384', '28.388288', 3, 0, 1), - (360925, 360900, '靖安县', '靖安', '115.36175', '28.86054', 3, 0, 1), - (360926, 360900, '铜鼓县', '铜鼓', '114.37014', '28.520956', 3, 0, 1), - (360981, 360900, '丰城市', '丰城', '115.786', '28.191584', 3, 0, 1), - (360982, 360900, '樟树市', '樟树', '115.54339', '28.055899', 3, 0, 1), - (360983, 360900, '高安市', '高安', '115.38153', '28.420952', 3, 0, 1), - (361000, 360000, '抚州市', '抚州', '116.35835', '27.98385', 2, 0, 1), - (361002, 361000, '临川区', '临川', '116.361404', '27.981918', 3, 0, 1), - (361003, 361000, '东乡区', '东乡', '116.60334', '28.24771', 3, 0, 1), - (361021, 361000, '南城县', '南城', '116.63945', '27.55531', 3, 0, 1), - (361022, 361000, '黎川县', '黎川', '116.91457', '27.29256', 3, 0, 1), - (361023, 361000, '南丰县', '南丰', '116.533', '27.210133', 3, 0, 1), - (361024, 361000, '崇仁县', '崇仁', '116.05911', '27.760906', 3, 0, 1), - (361025, 361000, '乐安县', '乐安', '115.83843', '27.420101', 3, 0, 1), - (361026, 361000, '宜黄县', '宜黄', '116.22302', '27.546513', 3, 0, 1), - (361027, 361000, '金溪县', '金溪', '116.77875', '27.907387', 3, 0, 1), - (361028, 361000, '资溪县', '资溪', '117.06609', '27.70653', 3, 0, 1), - (361030, 361000, '广昌县', '广昌', '116.32729', '26.838427', 3, 0, 1), - (361100, 360000, '上饶市', '上饶', '117.97118', '28.44442', 2, 0, 1), - (361102, 361100, '信州区', '信州', '117.97052', '28.445377', 3, 0, 1), - (361103, 361100, '广丰区', '广丰', '118.19133', '28.43631', 3, 0, 1), - (361104, 361100, '广信区', '广信', '117.9096', '28.44923', 3, 0, 1), - (361123, 361100, '玉山县', '玉山', '118.24441', '28.67348', 3, 0, 1), - (361124, 361100, '铅山县', '铅山', '117.71191', '28.310892', 3, 0, 1), - (361125, 361100, '横峰县', '横峰', '117.608246', '28.415104', 3, 0, 1), - (361126, 361100, '弋阳县', '弋阳', '117.435005', '28.402391', 3, 0, 1), - (361127, 361100, '余干县', '余干', '116.69107', '28.69173', 3, 0, 1), - (361128, 361100, '鄱阳县', '鄱阳', '116.673744', '28.993374', 3, 0, 1), - (361129, 361100, '万年县', '万年', '117.07015', '28.692589', 3, 0, 1), - (361130, 361100, '婺源县', '婺源', '117.86219', '29.254015', 3, 0, 1), - (361181, 361100, '德兴市', '德兴', '117.578735', '28.945034', 3, 0, 1), - (370000, 0, '山东省', '山东', '117.00092', '36.675808', 1, 0, 1), - (370100, 370000, '济南市', '济南', '117.00092', '36.675808', 2, 0, 1), - (370102, 370100, '历下区', '历下', '117.03862', '36.66417', 3, 0, 1), - (370103, 370100, '市中区', '市中', '116.99898', '36.657352', 3, 0, 1), - (370104, 370100, '槐荫区', '槐荫', '116.94792', '36.668205', 3, 0, 1), - (370105, 370100, '天桥区', '天桥', '116.996086', '36.693375', 3, 0, 1), - (370112, 370100, '历城区', '历城', '117.06374', '36.681744', 3, 0, 1), - (370113, 370100, '长清区', '长清', '116.74588', '36.56105', 3, 0, 1), - (370114, 370100, '章丘区', '章丘', '117.52627', '36.68124', 3, 0, 1), - (370115, 370100, '济阳区', '济阳', '117.17333', '36.97847', 3, 0, 1), - (370116, 370100, '莱芜区', '莱芜', '117.65992', '36.20317', 3, 0, 1), - (370117, 370100, '钢城区', '钢城', '117.81107', '36.05866', 3, 0, 1), - (370124, 370100, '平阴县', '平阴', '116.455055', '36.286922', 3, 0, 1), - (370126, 370100, '商河县', '商河', '117.15637', '37.310543', 3, 0, 1), - (370200, 370000, '青岛市', '青岛', '120.35517', '36.08298', 2, 0, 1), - (370202, 370200, '市南区', '市南', '120.395966', '36.070892', 3, 0, 1), - (370203, 370200, '市北区', '市北', '120.35503', '36.08382', 3, 0, 1), - (370211, 370200, '黄岛区', '黄岛', '119.99552', '35.875137', 3, 0, 1), - (370212, 370200, '崂山区', '崂山', '120.46739', '36.10257', 3, 0, 1), - (370213, 370200, '李沧区', '李沧', '120.421234', '36.160023', 3, 0, 1), - (370214, 370200, '城阳区', '城阳', '120.38914', '36.30683', 3, 0, 1), - (370215, 370200, '即墨区', '即墨', '120.44715', '36.38932', 3, 0, 1), - (370281, 370200, '胶州市', '胶州', '120.0062', '36.285877', 3, 0, 1), - (370283, 370200, '平度市', '平度', '119.959015', '36.78883', 3, 0, 1), - (370285, 370200, '莱西市', '莱西', '120.52622', '36.86509', 3, 0, 1), - (370300, 370000, '淄博市', '淄博', '118.047646', '36.814938', 2, 0, 1), - (370302, 370300, '淄川区', '淄川', '117.9677', '36.64727', 3, 0, 1), - (370303, 370300, '张店区', '张店', '118.05352', '36.80705', 3, 0, 1), - (370304, 370300, '博山区', '博山', '117.85823', '36.497566', 3, 0, 1), - (370305, 370300, '临淄区', '临淄', '118.306015', '36.816658', 3, 0, 1), - (370306, 370300, '周村区', '周村', '117.851036', '36.8037', 3, 0, 1), - (370321, 370300, '桓台县', '桓台', '118.101555', '36.959774', 3, 0, 1), - (370322, 370300, '高青县', '高青', '117.82984', '37.169582', 3, 0, 1), - (370323, 370300, '沂源县', '沂源', '118.16616', '36.186283', 3, 0, 1), - (370400, 370000, '枣庄市', '枣庄', '117.55796', '34.856422', 2, 0, 1), - (370402, 370400, '市中区', '市中', '117.55728', '34.85665', 3, 0, 1), - (370403, 370400, '薛城区', '薛城', '117.26529', '34.79789', 3, 0, 1), - (370404, 370400, '峄城区', '峄城', '117.58632', '34.76771', 3, 0, 1), - (370405, 370400, '台儿庄区', '台儿庄', '117.73475', '34.564816', 3, 0, 1), - (370406, 370400, '山亭区', '山亭', '117.45897', '35.096077', 3, 0, 1), - (370481, 370400, '滕州市', '滕州', '117.1621', '35.088497', 3, 0, 1), - (370500, 370000, '东营市', '东营', '118.66471', '37.434563', 2, 0, 1), - (370502, 370500, '东营区', '东营', '118.507545', '37.461567', 3, 0, 1), - (370503, 370500, '河口区', '河口', '118.52961', '37.886017', 3, 0, 1), - (370505, 370500, '垦利区', '垦利', '118.54768', '37.58748', 3, 0, 1), - (370522, 370500, '利津县', '利津', '118.248856', '37.493366', 3, 0, 1), - (370523, 370500, '广饶县', '广饶', '118.407524', '37.05161', 3, 0, 1), - (370600, 370000, '烟台市', '烟台', '121.39138', '37.539295', 2, 0, 1), - (370602, 370600, '芝罘区', '芝罘', '121.38588', '37.540924', 3, 0, 1), - (370611, 370600, '福山区', '福山', '121.26474', '37.496876', 3, 0, 1), - (370612, 370600, '牟平区', '牟平', '121.60151', '37.388355', 3, 0, 1), - (370613, 370600, '莱山区', '莱山', '121.44887', '37.47355', 3, 0, 1), - (370614, 370600, '蓬莱区', '蓬莱', '', '', 3, 0, 1), - (370681, 370600, '龙口市', '龙口', '120.52833', '37.648445', 3, 0, 1), - (370682, 370600, '莱阳市', '莱阳', '120.71115', '36.977036', 3, 0, 1), - (370683, 370600, '莱州市', '莱州', '119.94214', '37.182724', 3, 0, 1), - (370685, 370600, '招远市', '招远', '120.403145', '37.364918', 3, 0, 1), - (370686, 370600, '栖霞市', '栖霞', '120.8341', '37.305855', 3, 0, 1), - (370687, 370600, '海阳市', '海阳', '121.16839', '36.78066', 3, 0, 1), - (370700, 370000, '潍坊市', '潍坊', '119.10708', '36.70925', 2, 0, 1), - (370702, 370700, '潍城区', '潍城', '119.10378', '36.71006', 3, 0, 1), - (370703, 370700, '寒亭区', '寒亭', '119.20786', '36.772102', 3, 0, 1), - (370704, 370700, '坊子区', '坊子', '119.16633', '36.654617', 3, 0, 1), - (370705, 370700, '奎文区', '奎文', '119.13736', '36.709496', 3, 0, 1), - (370724, 370700, '临朐县', '临朐', '118.53988', '36.516373', 3, 0, 1), - (370725, 370700, '昌乐县', '昌乐', '118.84', '36.703255', 3, 0, 1), - (370781, 370700, '青州市', '青州', '118.484695', '36.697857', 3, 0, 1), - (370782, 370700, '诸城市', '诸城', '119.40318', '35.997093', 3, 0, 1), - (370783, 370700, '寿光市', '寿光', '118.73645', '36.874413', 3, 0, 1), - (370784, 370700, '安丘市', '安丘', '119.20689', '36.427418', 3, 0, 1), - (370785, 370700, '高密市', '高密', '119.757034', '36.37754', 3, 0, 1), - (370786, 370700, '昌邑市', '昌邑', '119.3945', '36.85494', 3, 0, 1), - (370800, 370000, '济宁市', '济宁', '116.58724', '35.415394', 2, 0, 1), - (370811, 370800, '任城区', '任城', '116.63102', '35.431835', 3, 0, 1), - (370812, 370800, '兖州区', '兖州', '116.7857', '35.5526', 3, 0, 1), - (370826, 370800, '微山县', '微山', '117.12861', '34.809525', 3, 0, 1), - (370827, 370800, '鱼台县', '鱼台', '116.650024', '34.997707', 3, 0, 1), - (370828, 370800, '金乡县', '金乡', '116.31036', '35.06977', 3, 0, 1), - (370829, 370800, '嘉祥县', '嘉祥', '116.34289', '35.398098', 3, 0, 1), - (370830, 370800, '汶上县', '汶上', '116.487144', '35.721745', 3, 0, 1), - (370831, 370800, '泗水县', '泗水', '117.273605', '35.653217', 3, 0, 1), - (370832, 370800, '梁山县', '梁山', '116.08963', '35.80184', 3, 0, 1), - (370881, 370800, '曲阜市', '曲阜', '116.99188', '35.59279', 3, 0, 1), - (370883, 370800, '邹城市', '邹城', '116.96673', '35.40526', 3, 0, 1), - (370900, 370000, '泰安市', '泰安', '117.12907', '36.19497', 2, 0, 1), - (370902, 370900, '泰山区', '泰山', '117.12998', '36.189312', 3, 0, 1), - (370911, 370900, '岱岳区', '岱岳', '117.0418', '36.18752', 3, 0, 1), - (370921, 370900, '宁阳县', '宁阳', '116.79929', '35.76754', 3, 0, 1), - (370923, 370900, '东平县', '东平', '116.46105', '35.930466', 3, 0, 1), - (370982, 370900, '新泰市', '新泰', '117.76609', '35.910385', 3, 0, 1), - (370983, 370900, '肥城市', '肥城', '116.7637', '36.1856', 3, 0, 1), - (371000, 370000, '威海市', '威海', '122.116394', '37.50969', 2, 0, 1), - (371002, 371000, '环翠区', '环翠', '122.11619', '37.510754', 3, 0, 1), - (371003, 371000, '文登区', '文登', '122.0581', '37.19397', 3, 0, 1), - (371082, 371000, '荣成市', '荣成', '122.4229', '37.160133', 3, 0, 1), - (371083, 371000, '乳山市', '乳山', '121.53635', '36.91962', 3, 0, 1), - (371100, 370000, '日照市', '日照', '119.461205', '35.42859', 2, 0, 1), - (371102, 371100, '东港区', '东港', '119.4577', '35.42615', 3, 0, 1), - (371103, 371100, '岚山区', '岚山', '119.31584', '35.119793', 3, 0, 1), - (371121, 371100, '五莲县', '五莲', '119.20674', '35.751938', 3, 0, 1), - (371122, 371100, '莒县', '莒县', '118.832855', '35.588116', 3, 0, 1), - (371300, 370000, '临沂市', '临沂', '118.32645', '35.06528', 2, 0, 1), - (371302, 371300, '兰山区', '兰山', '118.32767', '35.06163', 3, 0, 1), - (371311, 371300, '罗庄区', '罗庄', '118.2848', '34.997204', 3, 0, 1), - (371312, 371300, '河东区', '河东', '118.39829', '35.085003', 3, 0, 1), - (371321, 371300, '沂南县', '沂南', '118.4554', '35.547', 3, 0, 1), - (371322, 371300, '郯城县', '郯城', '118.342964', '34.614742', 3, 0, 1), - (371323, 371300, '沂水县', '沂水', '118.634544', '35.78703', 3, 0, 1), - (371324, 371300, '兰陵县', '苍山', '118.32645', '35.06528', 3, 0, 1), - (371325, 371300, '费县', '费县', '117.96887', '35.269173', 3, 0, 1), - (371326, 371300, '平邑县', '平邑', '117.63188', '35.51152', 3, 0, 1), - (371327, 371300, '莒南县', '莒南', '118.838326', '35.17591', 3, 0, 1), - (371328, 371300, '蒙阴县', '蒙阴', '117.94327', '35.712437', 3, 0, 1), - (371329, 371300, '临沭县', '临沭', '118.64838', '34.91706', 3, 0, 1), - (371400, 370000, '德州市', '德州', '116.30743', '37.453968', 2, 0, 1), - (371402, 371400, '德城区', '德城', '116.307076', '37.453922', 3, 0, 1), - (371403, 371400, '陵城区', '陵城', '116.57634', '37.33566', 3, 0, 1), - (371422, 371400, '宁津县', '宁津', '116.79372', '37.64962', 3, 0, 1), - (371423, 371400, '庆云县', '庆云', '117.39051', '37.777725', 3, 0, 1), - (371424, 371400, '临邑县', '临邑', '116.86703', '37.192043', 3, 0, 1), - (371425, 371400, '齐河县', '齐河', '116.75839', '36.795498', 3, 0, 1), - (371426, 371400, '平原县', '平原', '116.43391', '37.164467', 3, 0, 1), - (371427, 371400, '夏津县', '夏津', '116.003815', '36.9505', 3, 0, 1), - (371428, 371400, '武城县', '武城', '116.07863', '37.209526', 3, 0, 1), - (371481, 371400, '乐陵市', '乐陵', '117.21666', '37.729115', 3, 0, 1), - (371482, 371400, '禹城市', '禹城', '116.642555', '36.934486', 3, 0, 1), - (371500, 370000, '聊城市', '聊城', '115.98037', '36.456013', 2, 0, 1), - (371502, 371500, '东昌府区', '东昌府', '115.98003', '36.45606', 3, 0, 1), - (371503, 371500, '茌平区', '茌平', '116.25522', '36.58068', 3, 0, 1), - (371521, 371500, '阳谷县', '阳谷', '115.78429', '36.11371', 3, 0, 1), - (371522, 371500, '莘县', '莘县', '115.66729', '36.2376', 3, 0, 1), - (371524, 371500, '东阿县', '东阿', '116.248856', '36.336002', 3, 0, 1), - (371525, 371500, '冠县', '冠县', '115.44481', '36.483753', 3, 0, 1), - (371526, 371500, '高唐县', '高唐', '116.22966', '36.859756', 3, 0, 1), - (371581, 371500, '临清市', '临清', '115.71346', '36.842598', 3, 0, 1), - (371600, 370000, '滨州市', '滨州', '118.016975', '37.38354', 2, 0, 1), - (371602, 371600, '滨城区', '滨城', '118.02015', '37.384842', 3, 0, 1), - (371603, 371600, '沾化区', '沾化', '118.09882', '37.70058', 3, 0, 1), - (371621, 371600, '惠民县', '惠民', '117.50894', '37.483875', 3, 0, 1), - (371622, 371600, '阳信县', '阳信', '117.58133', '37.64049', 3, 0, 1), - (371623, 371600, '无棣县', '无棣', '117.616325', '37.74085', 3, 0, 1), - (371625, 371600, '博兴县', '博兴', '118.12309', '37.147003', 3, 0, 1), - (371681, 371600, '邹平市', '邹平', '117.74309', '36.86299', 3, 0, 1), - (371700, 370000, '菏泽市', '菏泽', '115.46938', '35.246532', 2, 0, 1), - (371702, 371700, '牡丹区', '牡丹', '115.47095', '35.24311', 3, 0, 1), - (371703, 371700, '定陶区', '定陶', '115.57298', '35.07095', 3, 0, 1), - (371721, 371700, '曹县', '曹县', '115.549484', '34.823254', 3, 0, 1), - (371722, 371700, '单县', '单县', '116.08262', '34.79085', 3, 0, 1), - (371723, 371700, '成武县', '成武', '115.89735', '34.947365', 3, 0, 1), - (371724, 371700, '巨野县', '巨野', '116.08934', '35.391', 3, 0, 1), - (371725, 371700, '郓城县', '郓城', '115.93885', '35.594772', 3, 0, 1), - (371726, 371700, '鄄城县', '鄄城', '115.51434', '35.560257', 3, 0, 1), - (371728, 371700, '东明县', '东明', '115.09841', '35.28964', 3, 0, 1), - (410000, 0, '河南省', '河南', '113.66541', '34.757977', 1, 0, 1), - (410100, 410000, '郑州市', '郑州', '113.66541', '34.757977', 2, 0, 1), - (410102, 410100, '中原区', '中原', '113.61157', '34.748287', 3, 0, 1), - (410103, 410100, '二七区', '二七', '113.645424', '34.730934', 3, 0, 1), - (410104, 410100, '管城回族区', '管城回族', '113.68531', '34.746452', 3, 0, 1), - (410105, 410100, '金水区', '金水', '113.686035', '34.775837', 3, 0, 1), - (410106, 410100, '上街区', '上街', '113.29828', '34.80869', 3, 0, 1), - (410108, 410100, '惠济区', '惠济', '113.61836', '34.82859', 3, 0, 1), - (410122, 410100, '中牟县', '中牟', '114.02252', '34.721977', 3, 0, 1), - (410181, 410100, '巩义市', '巩义', '112.98283', '34.75218', 3, 0, 1), - (410182, 410100, '荥阳市', '荥阳', '113.391525', '34.789078', 3, 0, 1), - (410183, 410100, '新密市', '新密', '113.380615', '34.537846', 3, 0, 1), - (410184, 410100, '新郑市', '新郑', '113.73967', '34.39422', 3, 0, 1), - (410185, 410100, '登封市', '登封', '113.037766', '34.459938', 3, 0, 1), - (410200, 410000, '开封市', '开封', '114.341446', '34.79705', 2, 0, 1), - (410202, 410200, '龙亭区', '龙亭', '114.35335', '34.79983', 3, 0, 1), - (410203, 410200, '顺河回族区', '顺河回族', '114.364876', '34.80046', 3, 0, 1), - (410204, 410200, '鼓楼区', '鼓楼', '114.3485', '34.79238', 3, 0, 1), - (410205, 410200, '禹王台区', '禹王台', '114.35024', '34.779728', 3, 0, 1), - (410212, 410200, '祥符区', '祥符', '114.44136', '34.757', 3, 0, 1), - (410221, 410200, '杞县', '杞县', '114.77047', '34.554585', 3, 0, 1), - (410222, 410200, '通许县', '通许', '114.467735', '34.477303', 3, 0, 1), - (410223, 410200, '尉氏县', '尉氏', '114.193924', '34.412254', 3, 0, 1), - (410225, 410200, '兰考县', '兰考', '114.82057', '34.8299', 3, 0, 1), - (410300, 410000, '洛阳市', '洛阳', '112.43447', '34.66304', 2, 0, 1), - (410302, 410300, '老城区', '老城', '112.477295', '34.682945', 3, 0, 1), - (410303, 410300, '西工区', '西工', '112.44323', '34.667847', 3, 0, 1), - (410304, 410300, '瀍河回族区', '瀍河回族', '112.49162', '34.68474', 3, 0, 1), - (410305, 410300, '涧西区', '涧西', '112.39925', '34.65425', 3, 0, 1), - (410306, 410300, '吉利区', '吉利', '112.58479', '34.899094', 3, 0, 1), - (410311, 410300, '洛龙区', '洛龙', '112.4647', '34.6196', 3, 0, 1), - (410322, 410300, '孟津县', '孟津', '112.44389', '34.826485', 3, 0, 1), - (410323, 410300, '新安县', '新安', '112.1414', '34.72868', 3, 0, 1), - (410324, 410300, '栾川县', '栾川', '111.618385', '33.783195', 3, 0, 1), - (410325, 410300, '嵩县', '嵩县', '112.08777', '34.13156', 3, 0, 1), - (410326, 410300, '汝阳县', '汝阳', '112.473785', '34.15323', 3, 0, 1), - (410327, 410300, '宜阳县', '宜阳', '112.17999', '34.51648', 3, 0, 1), - (410328, 410300, '洛宁县', '洛宁', '111.655396', '34.38718', 3, 0, 1), - (410329, 410300, '伊川县', '伊川', '112.42938', '34.423416', 3, 0, 1), - (410381, 410300, '偃师市', '偃师', '112.78774', '34.72304', 3, 0, 1), - (410400, 410000, '平顶山市', '平顶山', '113.30772', '33.73524', 2, 0, 1), - (410402, 410400, '新华区', '新华', '113.299065', '33.73758', 3, 0, 1), - (410403, 410400, '卫东区', '卫东', '113.310326', '33.739285', 3, 0, 1), - (410404, 410400, '石龙区', '石龙', '112.889885', '33.90154', 3, 0, 1), - (410411, 410400, '湛河区', '湛河', '113.32087', '33.72568', 3, 0, 1), - (410421, 410400, '宝丰县', '宝丰', '113.06681', '33.86636', 3, 0, 1), - (410422, 410400, '叶县', '叶县', '113.3583', '33.62125', 3, 0, 1), - (410423, 410400, '鲁山县', '鲁山', '112.9067', '33.740326', 3, 0, 1), - (410425, 410400, '郏县', '郏县', '113.22045', '33.971992', 3, 0, 1), - (410481, 410400, '舞钢市', '舞钢', '113.52625', '33.302082', 3, 0, 1); - - -INSERT INTO `nc_sys_area` VALUES - (410482, 410400, '汝州市', '汝州', '112.84534', '34.167408', 3, 0, 1), - (410500, 410000, '安阳市', '安阳', '114.352486', '36.103443', 2, 0, 1), - (410502, 410500, '文峰区', '文峰', '114.35256', '36.098103', 3, 0, 1), - (410503, 410500, '北关区', '北关', '114.352646', '36.10978', 3, 0, 1), - (410505, 410500, '殷都区', '殷都', '114.300095', '36.108974', 3, 0, 1), - (410506, 410500, '龙安区', '龙安', '114.323524', '36.09557', 3, 0, 1), - (410522, 410500, '安阳县', '安阳', '114.1302', '36.130585', 3, 0, 1), - (410523, 410500, '汤阴县', '汤阴', '114.36236', '35.922348', 3, 0, 1), - (410526, 410500, '滑县', '滑县', '114.524', '35.574627', 3, 0, 1), - (410527, 410500, '内黄县', '内黄', '114.90458', '35.9537', 3, 0, 1), - (410581, 410500, '林州市', '林州', '113.82377', '36.063404', 3, 0, 1), - (410600, 410000, '鹤壁市', '鹤壁', '114.29544', '35.748238', 2, 0, 1), - (410602, 410600, '鹤山区', '鹤山', '114.16655', '35.936127', 3, 0, 1), - (410603, 410600, '山城区', '山城', '114.184204', '35.896057', 3, 0, 1), - (410611, 410600, '淇滨区', '淇滨', '114.293915', '35.748383', 3, 0, 1), - (410621, 410600, '浚县', '浚县', '114.55016', '35.671284', 3, 0, 1), - (410622, 410600, '淇县', '淇县', '114.20038', '35.609478', 3, 0, 1), - (410700, 410000, '新乡市', '新乡', '113.88399', '35.302616', 2, 0, 1), - (410702, 410700, '红旗区', '红旗', '113.87816', '35.302685', 3, 0, 1), - (410703, 410700, '卫滨区', '卫滨', '113.866066', '35.304905', 3, 0, 1), - (410704, 410700, '凤泉区', '凤泉', '113.906715', '35.379856', 3, 0, 1), - (410711, 410700, '牧野区', '牧野', '113.89716', '35.312973', 3, 0, 1), - (410721, 410700, '新乡县', '新乡', '113.80618', '35.19002', 3, 0, 1), - (410724, 410700, '获嘉县', '获嘉', '113.65725', '35.261684', 3, 0, 1), - (410725, 410700, '原阳县', '原阳', '113.965965', '35.054', 3, 0, 1), - (410726, 410700, '延津县', '延津', '114.20098', '35.149513', 3, 0, 1), - (410727, 410700, '封丘县', '封丘', '114.42341', '35.04057', 3, 0, 1), - (410781, 410700, '卫辉市', '卫辉', '114.06586', '35.404297', 3, 0, 1), - (410782, 410700, '辉县市', '辉县', '113.80252', '35.46132', 3, 0, 1), - (410783, 410700, '长垣市', '长垣', '114.66886', '35.20049', 3, 0, 1), - (410800, 410000, '焦作市', '焦作', '113.238266', '35.23904', 2, 0, 1), - (410802, 410800, '解放区', '解放', '113.22613', '35.241352', 3, 0, 1), - (410803, 410800, '中站区', '中站', '113.17548', '35.236145', 3, 0, 1), - (410804, 410800, '马村区', '马村', '113.3217', '35.265453', 3, 0, 1), - (410811, 410800, '山阳区', '山阳', '113.26766', '35.21476', 3, 0, 1), - (410821, 410800, '修武县', '修武', '113.447464', '35.229923', 3, 0, 1), - (410822, 410800, '博爱县', '博爱', '113.06931', '35.17035', 3, 0, 1), - (410823, 410800, '武陟县', '武陟', '113.40833', '35.09885', 3, 0, 1), - (410825, 410800, '温县', '温县', '113.07912', '34.941235', 3, 0, 1), - (410882, 410800, '沁阳市', '沁阳', '112.93454', '35.08901', 3, 0, 1), - (410883, 410800, '孟州市', '孟州', '112.78708', '34.90963', 3, 0, 1), - (410900, 410000, '濮阳市', '濮阳', '115.0413', '35.768234', 2, 0, 1), - (410902, 410900, '华龙区', '华龙', '115.03184', '35.76047', 3, 0, 1), - (410922, 410900, '清丰县', '清丰', '115.107285', '35.902412', 3, 0, 1), - (410923, 410900, '南乐县', '南乐', '115.20434', '36.075203', 3, 0, 1), - (410926, 410900, '范县', '范县', '115.50421', '35.85198', 3, 0, 1), - (410927, 410900, '台前县', '台前', '115.85568', '35.996475', 3, 0, 1), - (410928, 410900, '濮阳县', '濮阳', '115.02384', '35.71035', 3, 0, 1), - (411000, 410000, '许昌市', '许昌', '113.826065', '34.022957', 2, 0, 1), - (411002, 411000, '魏都区', '魏都', '113.82831', '34.02711', 3, 0, 1), - (411003, 411000, '建安区', '建安', '', '', 3, 0, 1), - (411024, 411000, '鄢陵县', '鄢陵', '114.18851', '34.100502', 3, 0, 1), - (411025, 411000, '襄城县', '襄城', '113.493164', '33.85594', 3, 0, 1), - (411081, 411000, '禹州市', '禹州', '113.47131', '34.154404', 3, 0, 1), - (411082, 411000, '长葛市', '长葛', '113.76891', '34.219257', 3, 0, 1), - (411100, 410000, '漯河市', '漯河', '114.026405', '33.575855', 2, 0, 1), - (411102, 411100, '源汇区', '源汇', '114.017944', '33.56544', 3, 0, 1), - (411103, 411100, '郾城区', '郾城', '114.016815', '33.588898', 3, 0, 1), - (411104, 411100, '召陵区', '召陵', '114.05169', '33.567554', 3, 0, 1), - (411121, 411100, '舞阳县', '舞阳', '113.610565', '33.43628', 3, 0, 1), - (411122, 411100, '临颍县', '临颍', '113.93889', '33.80609', 3, 0, 1), - (411200, 410000, '三门峡市', '三门峡', '111.1941', '34.777336', 2, 0, 1), - (411202, 411200, '湖滨区', '湖滨', '111.19487', '34.77812', 3, 0, 1), - (411203, 411200, '陕州区', '陕州', '111.10338', '34.72054', 3, 0, 1), - (411221, 411200, '渑池县', '渑池', '111.76299', '34.76349', 3, 0, 1), - (411224, 411200, '卢氏县', '卢氏', '111.05265', '34.053993', 3, 0, 1), - (411281, 411200, '义马市', '义马', '111.869415', '34.74687', 3, 0, 1), - (411282, 411200, '灵宝市', '灵宝', '110.88577', '34.521263', 3, 0, 1), - (411300, 410000, '南阳市', '南阳', '112.54092', '32.99908', 2, 0, 1), - (411302, 411300, '宛城区', '宛城', '112.54459', '32.994858', 3, 0, 1), - (411303, 411300, '卧龙区', '卧龙', '112.528786', '32.989876', 3, 0, 1), - (411321, 411300, '南召县', '南召', '112.435585', '33.488617', 3, 0, 1), - (411322, 411300, '方城县', '方城', '113.01093', '33.25514', 3, 0, 1), - (411323, 411300, '西峡县', '西峡', '111.48577', '33.302982', 3, 0, 1), - (411324, 411300, '镇平县', '镇平', '112.23272', '33.03665', 3, 0, 1), - (411325, 411300, '内乡县', '内乡', '111.8438', '33.046356', 3, 0, 1), - (411326, 411300, '淅川县', '淅川', '111.48903', '33.136105', 3, 0, 1), - (411327, 411300, '社旗县', '社旗县', '112.93828', '33.056126', 3, 0, 1), - (411328, 411300, '唐河县', '唐河', '112.83849', '32.687893', 3, 0, 1), - (411329, 411300, '新野县', '新野', '112.36562', '32.524006', 3, 0, 1), - (411330, 411300, '桐柏县', '桐柏', '113.40606', '32.367153', 3, 0, 1), - (411381, 411300, '邓州市', '邓州', '112.09271', '32.68164', 3, 0, 1), - (411400, 410000, '商丘市', '商丘', '115.6505', '34.437054', 2, 0, 1), - (411402, 411400, '梁园区', '梁园', '115.65459', '34.436554', 3, 0, 1), - (411403, 411400, '睢阳区', '睢阳', '115.65382', '34.390537', 3, 0, 1), - (411421, 411400, '民权县', '民权', '115.14815', '34.648457', 3, 0, 1), - (411422, 411400, '睢县', '睢县', '115.07011', '34.428432', 3, 0, 1), - (411423, 411400, '宁陵县', '宁陵', '115.32005', '34.4493', 3, 0, 1), - (411424, 411400, '柘城县', '柘城', '115.307434', '34.075275', 3, 0, 1), - (411425, 411400, '虞城县', '虞城', '115.86381', '34.399635', 3, 0, 1), - (411426, 411400, '夏邑县', '夏邑', '116.13989', '34.240894', 3, 0, 1), - (411481, 411400, '永城市', '永城', '116.44967', '33.931316', 3, 0, 1), - (411500, 410000, '信阳市', '信阳', '114.07503', '32.123276', 2, 0, 1), - (411502, 411500, '浉河区', '浉河', '114.07503', '32.123276', 3, 0, 1), - (411503, 411500, '平桥区', '平桥', '114.12603', '32.098396', 3, 0, 1), - (411521, 411500, '罗山县', '罗山', '114.53342', '32.203205', 3, 0, 1), - (411522, 411500, '光山县', '光山', '114.90358', '32.0104', 3, 0, 1), - (411523, 411500, '新县', '新县', '114.87705', '31.63515', 3, 0, 1), - (411524, 411500, '商城县', '商城', '115.406296', '31.799982', 3, 0, 1), - (411525, 411500, '固始县', '固始', '115.66733', '32.183075', 3, 0, 1), - (411526, 411500, '潢川县', '潢川', '115.050125', '32.134026', 3, 0, 1), - (411527, 411500, '淮滨县', '淮滨', '115.41545', '32.45264', 3, 0, 1), - (411528, 411500, '息县', '息县', '114.740715', '32.344746', 3, 0, 1), - (411600, 410000, '周口市', '周口', '114.64965', '33.620358', 2, 0, 1), - (411602, 411600, '川汇区', '川汇', '114.65214', '33.614838', 3, 0, 1), - (411603, 411600, '淮阳区', '淮阳', '114.88614', '33.7315', 3, 0, 1), - (411621, 411600, '扶沟县', '扶沟', '114.392006', '34.05406', 3, 0, 1), - (411622, 411600, '西华县', '西华', '114.53007', '33.784378', 3, 0, 1), - (411623, 411600, '商水县', '商水', '114.60927', '33.543846', 3, 0, 1), - (411624, 411600, '沈丘县', '沈丘', '115.07838', '33.395515', 3, 0, 1), - (411625, 411600, '郸城县', '郸城', '115.189', '33.643852', 3, 0, 1), - (411627, 411600, '太康县', '太康', '114.853836', '34.06531', 3, 0, 1), - (411628, 411600, '鹿邑县', '鹿邑', '115.48639', '33.86107', 3, 0, 1), - (411681, 411600, '项城市', '项城', '114.89952', '33.443085', 3, 0, 1), - (411700, 410000, '驻马店市', '驻马店', '114.024734', '32.980167', 2, 0, 1), - (411702, 411700, '驿城区', '驿城', '114.02915', '32.97756', 3, 0, 1), - (411721, 411700, '西平县', '西平', '114.02686', '33.382317', 3, 0, 1), - (411722, 411700, '上蔡县', '上蔡', '114.26689', '33.264717', 3, 0, 1), - (411723, 411700, '平舆县', '平舆', '114.63711', '32.955627', 3, 0, 1), - (411724, 411700, '正阳县', '正阳', '114.38948', '32.601826', 3, 0, 1), - (411725, 411700, '确山县', '确山', '114.02668', '32.801537', 3, 0, 1), - (411726, 411700, '泌阳县', '泌阳', '113.32605', '32.72513', 3, 0, 1), - (411727, 411700, '汝南县', '汝南', '114.3595', '33.004536', 3, 0, 1), - (411728, 411700, '遂平县', '遂平', '114.00371', '33.14698', 3, 0, 1), - (411729, 411700, '新蔡县', '新蔡', '114.97524', '32.749947', 3, 0, 1), - (419001, 419000, '济源市', '济源', '112.60273', '35.06707', 3, 0, 1), - (420000, 0, '湖北省', '湖北', '114.29857', '30.584354', 1, 0, 1), - (420100, 420000, '武汉市', '武汉', '114.29857', '30.584354', 2, 0, 1), - (420102, 420100, '江岸区', '江岸', '114.30304', '30.594912', 3, 0, 1), - (420103, 420100, '江汉区', '江汉', '114.28311', '30.578772', 3, 0, 1), - (420104, 420100, '硚口区', '硚口', '114.264565', '30.57061', 3, 0, 1), - (420105, 420100, '汉阳区', '汉阳', '114.26581', '30.549326', 3, 0, 1), - (420106, 420100, '武昌区', '武昌', '114.30734', '30.546535', 3, 0, 1), - (420107, 420100, '青山区', '青山', '114.39707', '30.634214', 3, 0, 1), - (420111, 420100, '洪山区', '洪山', '114.40072', '30.50426', 3, 0, 1), - (420112, 420100, '东西湖区', '东西湖', '114.14249', '30.622467', 3, 0, 1), - (420113, 420100, '汉南区', '汉南', '114.08124', '30.309637', 3, 0, 1), - (420114, 420100, '蔡甸区', '蔡甸', '114.02934', '30.582186', 3, 0, 1), - (420115, 420100, '江夏区', '江夏', '114.31396', '30.349045', 3, 0, 1), - (420116, 420100, '黄陂区', '黄陂', '114.37402', '30.874155', 3, 0, 1), - (420117, 420100, '新洲区', '新洲', '114.80211', '30.84215', 3, 0, 1), - (420200, 420000, '黄石市', '黄石', '115.07705', '30.220074', 2, 0, 1), - (420202, 420200, '黄石港区', '黄石港', '115.090164', '30.212086', 3, 0, 1), - (420203, 420200, '西塞山区', '西塞山', '115.09335', '30.205364', 3, 0, 1), - (420204, 420200, '下陆区', '下陆', '114.97575', '30.177845', 3, 0, 1), - (420205, 420200, '铁山区', '铁山', '114.90137', '30.20601', 3, 0, 1), - (420222, 420200, '阳新县', '阳新', '115.21288', '29.841572', 3, 0, 1), - (420281, 420200, '大冶市', '大冶', '114.97484', '30.098804', 3, 0, 1), - (420300, 420000, '十堰市', '十堰', '110.78792', '32.646908', 2, 0, 1), - (420302, 420300, '茅箭区', '茅箭', '110.78621', '32.644463', 3, 0, 1), - (420303, 420300, '张湾区', '张湾', '110.77236', '32.652515', 3, 0, 1), - (420304, 420300, '郧阳区', '郧阳', '110.81197', '32.83488', 3, 0, 1), - (420322, 420300, '郧西县', '郧西', '110.426476', '32.99146', 3, 0, 1), - (420323, 420300, '竹山县', '竹山', '110.2296', '32.22586', 3, 0, 1), - (420324, 420300, '竹溪县', '竹溪', '109.71719', '32.315342', 3, 0, 1), - (420325, 420300, '房县', '房县', '110.74197', '32.055', 3, 0, 1), - (420381, 420300, '丹江口市', '丹江口', '111.513794', '32.538837', 3, 0, 1), - (420500, 420000, '宜昌市', '宜昌', '111.29084', '30.702637', 2, 0, 1), - (420502, 420500, '西陵区', '西陵', '111.29547', '30.702477', 3, 0, 1), - (420503, 420500, '伍家岗区', '伍家岗', '111.30721', '30.679052', 3, 0, 1), - (420504, 420500, '点军区', '点军', '111.268166', '30.692322', 3, 0, 1), - (420505, 420500, '猇亭区', '猇亭', '111.29084', '30.702637', 3, 0, 1), - (420506, 420500, '夷陵区', '夷陵', '111.326744', '30.770199', 3, 0, 1), - (420525, 420500, '远安县', '远安', '111.64331', '31.059626', 3, 0, 1), - (420526, 420500, '兴山县', '兴山', '110.7545', '31.34795', 3, 0, 1), - (420527, 420500, '秭归县', '秭归', '110.97678', '30.823908', 3, 0, 1), - (420528, 420500, '长阳土家族自治县', '长阳', '111.19848', '30.466534', 3, 0, 1), - (420529, 420500, '五峰土家族自治县', '五峰', '110.674934', '30.199251', 3, 0, 1), - (420581, 420500, '宜都市', '宜都', '111.45437', '30.387234', 3, 0, 1), - (420582, 420500, '当阳市', '当阳', '111.79342', '30.824492', 3, 0, 1), - (420583, 420500, '枝江市', '枝江', '111.7518', '30.425364', 3, 0, 1), - (420600, 420000, '襄阳市', '襄阳', '112.14415', '32.042427', 2, 0, 1), - (420602, 420600, '襄城区', '襄城', '112.15033', '32.015087', 3, 0, 1), - (420606, 420600, '樊城区', '樊城', '112.13957', '32.05859', 3, 0, 1), - (420607, 420600, '襄州区', '襄州', '112.19738', '32.085518', 3, 0, 1), - (420624, 420600, '南漳县', '南漳', '111.84442', '31.77692', 3, 0, 1), - (420625, 420600, '谷城县', '谷城', '111.640144', '32.262676', 3, 0, 1), - (420626, 420600, '保康县', '保康', '111.26224', '31.873507', 3, 0, 1), - (420682, 420600, '老河口市', '老河口', '111.675735', '32.385437', 3, 0, 1), - (420683, 420600, '枣阳市', '枣阳', '112.76527', '32.12308', 3, 0, 1), - (420684, 420600, '宜城市', '宜城', '112.261444', '31.709204', 3, 0, 1), - (420700, 420000, '鄂州市', '鄂州', '114.890594', '30.396536', 2, 0, 1), - (420702, 420700, '梁子湖区', '梁子湖', '114.68197', '30.09819', 3, 0, 1), - (420703, 420700, '华容区', '华容', '114.74148', '30.534468', 3, 0, 1), - (420704, 420700, '鄂城区', '鄂城', '114.890015', '30.39669', 3, 0, 1), - (420800, 420000, '荆门市', '荆门', '112.204254', '31.03542', 2, 0, 1), - (420802, 420800, '东宝区', '东宝', '112.2048', '31.03346', 3, 0, 1), - (420804, 420800, '掇刀区', '掇刀', '112.19841', '30.980799', 3, 0, 1), - (420822, 420800, '沙洋县', '沙洋', '112.595215', '30.70359', 3, 0, 1), - (420881, 420800, '钟祥市', '钟祥', '112.587265', '31.165573', 3, 0, 1), - (420882, 420800, '京山市', '京山', '113.11953', '31.01848', 3, 0, 1), - (420900, 420000, '孝感市', '孝感', '113.92666', '30.926422', 2, 0, 1), - (420902, 420900, '孝南区', '孝南', '113.92585', '30.925966', 3, 0, 1), - (420921, 420900, '孝昌县', '孝昌', '113.98896', '31.251617', 3, 0, 1), - (420922, 420900, '大悟县', '大悟', '114.12625', '31.565483', 3, 0, 1), - (420923, 420900, '云梦县', '云梦', '113.75062', '31.02169', 3, 0, 1), - (420981, 420900, '应城市', '应城', '113.573845', '30.939037', 3, 0, 1), - (420982, 420900, '安陆市', '安陆', '113.6904', '31.26174', 3, 0, 1), - (420984, 420900, '汉川市', '汉川', '113.835304', '30.652164', 3, 0, 1), - (421000, 420000, '荆州市', '荆州', '112.23813', '30.326857', 2, 0, 1), - (421002, 421000, '沙市区', '沙市', '112.25743', '30.315895', 3, 0, 1), - (421003, 421000, '荆州区', '荆州', '112.19535', '30.350674', 3, 0, 1), - (421022, 421000, '公安县', '公安', '112.23018', '30.059065', 3, 0, 1), - (421023, 421000, '监利县', '监利', '112.90434', '29.82008', 3, 0, 1), - (421024, 421000, '江陵县', '江陵', '112.41735', '30.033918', 3, 0, 1), - (421081, 421000, '石首市', '石首', '112.40887', '29.716436', 3, 0, 1), - (421083, 421000, '洪湖市', '洪湖', '113.47031', '29.81297', 3, 0, 1), - (421087, 421000, '松滋市', '松滋', '111.77818', '30.176037', 3, 0, 1), - (421100, 420000, '黄冈市', '黄冈', '114.879364', '30.447712', 2, 0, 1), - (421102, 421100, '黄州区', '黄州', '114.87894', '30.447435', 3, 0, 1), - (421121, 421100, '团风县', '团风', '114.87203', '30.63569', 3, 0, 1), - (421122, 421100, '红安县', '红安', '114.6151', '31.284777', 3, 0, 1), - (421123, 421100, '罗田县', '罗田', '115.39899', '30.78168', 3, 0, 1), - (421124, 421100, '英山县', '英山', '115.67753', '30.735794', 3, 0, 1), - (421125, 421100, '浠水县', '浠水', '115.26344', '30.454838', 3, 0, 1), - (421126, 421100, '蕲春县', '蕲春', '115.43397', '30.234926', 3, 0, 1), - (421127, 421100, '黄梅县', '黄梅', '115.94255', '30.075113', 3, 0, 1), - (421181, 421100, '麻城市', '麻城', '115.02541', '31.177906', 3, 0, 1), - (421182, 421100, '武穴市', '武穴', '115.56242', '29.849342', 3, 0, 1), - (421200, 420000, '咸宁市', '咸宁', '114.328964', '29.832798', 2, 0, 1), - (421202, 421200, '咸安区', '咸安', '114.33389', '29.824717', 3, 0, 1), - (421221, 421200, '嘉鱼县', '嘉鱼', '113.92155', '29.973364', 3, 0, 1), - (421222, 421200, '通城县', '通城', '113.81413', '29.246077', 3, 0, 1), - (421223, 421200, '崇阳县', '崇阳', '114.04996', '29.54101', 3, 0, 1), - (421224, 421200, '通山县', '通山', '114.493164', '29.604456', 3, 0, 1), - (421281, 421200, '赤壁市', '赤壁', '113.88366', '29.716879', 3, 0, 1), - (421300, 420000, '随州市', '随州', '113.37377', '31.717497', 2, 0, 1), - (421303, 421300, '曾都区', '曾都', '113.3712', '31.71615', 3, 0, 1), - (421321, 421300, '随县', '随县', '113.301384', '31.854246', 3, 0, 1), - (421381, 421300, '广水市', '广水', '113.8266', '31.617731', 3, 0, 1), - (422800, 420000, '恩施土家族苗族自治州', '恩施', '109.48699', '30.283113', 2, 0, 1), - (422801, 422800, '恩施市', '恩施', '109.48676', '30.282406', 3, 0, 1), - (422802, 422800, '利川市', '利川', '108.94349', '30.294247', 3, 0, 1), - (422822, 422800, '建始县', '建始', '109.72382', '30.601631', 3, 0, 1), - (422823, 422800, '巴东县', '巴东', '110.33666', '31.041403', 3, 0, 1), - (422825, 422800, '宣恩县', '宣恩', '109.48282', '29.98867', 3, 0, 1), - (422826, 422800, '咸丰县', '咸丰', '109.15041', '29.678967', 3, 0, 1), - (422827, 422800, '来凤县', '来凤', '109.408325', '29.506945', 3, 0, 1), - (422828, 422800, '鹤峰县', '鹤峰', '110.0337', '29.887299', 3, 0, 1), - (429004, 429000, '仙桃市', '仙桃', '113.45397', '30.364952', 3, 0, 1), - (429005, 420000, '潜江市', '潜江', '112.896866', '30.421215', 3, 0, 1), - (429006, 429000, '天门市', '天门', '113.16586', '30.65306', 3, 0, 1), - (429021, 429000, '神农架林区', '神农架', '114.29857', '30.584354', 3, 0, 1), - (430000, 0, '湖南省', '湖南', '112.98228', '28.19409', 1, 0, 1), - (430100, 430000, '长沙市', '长沙', '112.98228', '28.19409', 2, 0, 1), - (430102, 430100, '芙蓉区', '芙蓉', '112.98809', '28.193106', 3, 0, 1), - (430103, 430100, '天心区', '天心', '112.97307', '28.192375', 3, 0, 1), - (430104, 430100, '岳麓区', '岳麓', '112.91159', '28.213043', 3, 0, 1), - (430105, 430100, '开福区', '开福', '112.98553', '28.201336', 3, 0, 1), - (430111, 430100, '雨花区', '雨花', '113.016335', '28.109938', 3, 0, 1), - (430112, 430100, '望城区', '望城', '112.8179', '28.36121', 3, 0, 1), - (430121, 430100, '长沙县', '长沙', '113.0801', '28.237888', 3, 0, 1), - (430181, 430100, '浏阳市', '浏阳', '113.6333', '28.141111', 3, 0, 1), - (430182, 430100, '宁乡市', '宁乡', '112.55183', '28.27741', 3, 0, 1), - (430200, 430000, '株洲市', '株洲', '113.15173', '27.835806', 2, 0, 1), - (430202, 430200, '荷塘区', '荷塘', '113.162544', '27.833036', 3, 0, 1), - (430203, 430200, '芦淞区', '芦淞', '113.15517', '27.827246', 3, 0, 1), - (430204, 430200, '石峰区', '石峰', '113.11295', '27.871944', 3, 0, 1), - (430211, 430200, '天元区', '天元', '113.13625', '27.826908', 3, 0, 1), - (430212, 430200, '渌口区', '渌口', '113.14398', '27.69938', 3, 0, 1), - (430223, 430200, '攸县', '攸县', '113.34577', '27.00007', 3, 0, 1), - (430224, 430200, '茶陵县', '茶陵', '113.54651', '26.789534', 3, 0, 1), - (430225, 430200, '炎陵县', '炎陵', '113.776886', '26.489458', 3, 0, 1), - (430281, 430200, '醴陵市', '醴陵', '113.50716', '27.657873', 3, 0, 1), - (430300, 430000, '湘潭市', '湘潭', '112.94405', '27.82973', 2, 0, 1), - (430302, 430300, '雨湖区', '雨湖', '112.907425', '27.86077', 3, 0, 1), - (430304, 430300, '岳塘区', '岳塘', '112.927704', '27.828854', 3, 0, 1), - (430321, 430300, '湘潭县', '湘潭', '112.95283', '27.7786', 3, 0, 1), - (430381, 430300, '湘乡市', '湘乡', '112.525215', '27.734919', 3, 0, 1), - (430382, 430300, '韶山市', '韶山', '112.52848', '27.922682', 3, 0, 1), - (430400, 430000, '衡阳市', '衡阳', '112.6077', '26.900358', 2, 0, 1), - (430405, 430400, '珠晖区', '珠晖', '112.62633', '26.891064', 3, 0, 1), - (430406, 430400, '雁峰区', '雁峰', '112.61224', '26.893694', 3, 0, 1), - (430407, 430400, '石鼓区', '石鼓', '112.607635', '26.903908', 3, 0, 1), - (430408, 430400, '蒸湘区', '蒸湘', '112.57061', '26.89087', 3, 0, 1), - (430412, 430400, '南岳区', '南岳', '112.734146', '27.240536', 3, 0, 1), - (430421, 430400, '衡阳县', '衡阳', '112.37965', '26.962387', 3, 0, 1), - (430422, 430400, '衡南县', '衡南', '112.67746', '26.739973', 3, 0, 1), - (430423, 430400, '衡山县', '衡山', '112.86971', '27.234808', 3, 0, 1), - (430424, 430400, '衡东县', '衡东', '112.95041', '27.08353', 3, 0, 1), - (430426, 430400, '祁东县', '祁东', '112.11119', '26.78711', 3, 0, 1), - (430481, 430400, '耒阳市', '耒阳', '112.84721', '26.414162', 3, 0, 1), - (430482, 430400, '常宁市', '常宁', '112.39682', '26.406773', 3, 0, 1), - (430500, 430000, '邵阳市', '邵阳', '111.46923', '27.237843', 2, 0, 1), - (430502, 430500, '双清区', '双清', '111.47976', '27.240002', 3, 0, 1), - (430503, 430500, '大祥区', '大祥', '111.46297', '27.233593', 3, 0, 1), - (430511, 430500, '北塔区', '北塔', '111.45232', '27.245687', 3, 0, 1), - (430522, 430500, '新邵县', '新邵', '111.45976', '27.311428', 3, 0, 1), - (430523, 430500, '邵阳县', '邵阳', '111.2757', '26.989714', 3, 0, 1), - (430524, 430500, '隆回县', '隆回', '111.03879', '27.116001', 3, 0, 1), - (430525, 430500, '洞口县', '洞口', '110.57921', '27.062286', 3, 0, 1), - (430527, 430500, '绥宁县', '绥宁', '110.155075', '26.580622', 3, 0, 1), - (430528, 430500, '新宁县', '新宁', '110.859116', '26.438911', 3, 0, 1), - (430529, 430500, '城步苗族自治县', '城步', '110.313225', '26.363575', 3, 0, 1), - (430581, 430500, '武冈市', '武冈', '110.6368', '26.732086', 3, 0, 1), - (430582, 430500, '邵东市', '邵东', '111.74446', '27.25844', 3, 0, 1), - (430600, 430000, '岳阳市', '岳阳', '113.13286', '29.37029', 2, 0, 1), - (430602, 430600, '岳阳楼区', '岳阳楼', '113.12075', '29.366783', 3, 0, 1), - (430603, 430600, '云溪区', '云溪', '113.27387', '29.473394', 3, 0, 1), - (430611, 430600, '君山区', '君山', '113.00408', '29.438063', 3, 0, 1), - (430621, 430600, '岳阳县', '岳阳', '113.11607', '29.144842', 3, 0, 1), - (430623, 430600, '华容县', '华容', '112.55937', '29.524107', 3, 0, 1), - (430624, 430600, '湘阴县', '湘阴', '112.88975', '28.677498', 3, 0, 1), - (430626, 430600, '平江县', '平江', '113.59375', '28.701523', 3, 0, 1), - (430681, 430600, '汨罗市', '汨罗', '113.07942', '28.803148', 3, 0, 1), - (430682, 430600, '临湘市', '临湘', '113.450806', '29.471594', 3, 0, 1), - (430700, 430000, '常德市', '常德', '111.691345', '29.040224', 2, 0, 1), - (430702, 430700, '武陵区', '武陵', '111.69072', '29.040478', 3, 0, 1), - (430703, 430700, '鼎城区', '鼎城', '111.685326', '29.014425', 3, 0, 1), - (430721, 430700, '安乡县', '安乡', '112.17229', '29.414482', 3, 0, 1), - (430722, 430700, '汉寿县', '汉寿', '111.968506', '28.907318', 3, 0, 1), - (430723, 430700, '澧县', '澧县', '111.76168', '29.64264', 3, 0, 1), - (430724, 430700, '临澧县', '临澧', '111.6456', '29.443216', 3, 0, 1), - (430725, 430700, '桃源县', '桃源', '111.484505', '28.902735', 3, 0, 1), - (430726, 430700, '石门县', '石门', '111.37909', '29.584703', 3, 0, 1), - (430781, 430700, '津市市', '津市', '111.87961', '29.630867', 3, 0, 1), - (430800, 430000, '张家界市', '张家界', '110.47992', '29.127401', 2, 0, 1), - (430802, 430800, '永定区', '永定', '110.48456', '29.125961', 3, 0, 1), - (430811, 430800, '武陵源区', '武陵源', '110.54758', '29.347828', 3, 0, 1), - (430821, 430800, '慈利县', '慈利', '111.132706', '29.423876', 3, 0, 1), - (430822, 430800, '桑植县', '桑植', '110.16404', '29.399939', 3, 0, 1), - (430900, 430000, '益阳市', '益阳', '112.35504', '28.570066', 2, 0, 1), - (430902, 430900, '资阳区', '资阳', '112.33084', '28.592772', 3, 0, 1), - (430903, 430900, '赫山区', '赫山', '112.36095', '28.568327', 3, 0, 1), - (430921, 430900, '南县', '南县', '112.4104', '29.37218', 3, 0, 1), - (430922, 430900, '桃江县', '桃江', '112.13973', '28.520992', 3, 0, 1), - (430923, 430900, '安化县', '安化', '111.221825', '28.37742', 3, 0, 1), - (430981, 430900, '沅江市', '沅江', '112.36109', '28.839712', 3, 0, 1), - (431000, 430000, '郴州市', '郴州', '113.03207', '25.793589', 2, 0, 1), - (431002, 431000, '北湖区', '北湖', '113.03221', '25.792627', 3, 0, 1), - (431003, 431000, '苏仙区', '苏仙', '113.0387', '25.793158', 3, 0, 1), - (431021, 431000, '桂阳县', '桂阳', '112.73447', '25.737448', 3, 0, 1), - (431022, 431000, '宜章县', '宜章', '112.94788', '25.394344', 3, 0, 1), - (431023, 431000, '永兴县', '永兴', '113.11482', '26.129393', 3, 0, 1), - (431024, 431000, '嘉禾县', '嘉禾', '112.37062', '25.587309', 3, 0, 1), - (431025, 431000, '临武县', '临武', '112.56459', '25.27912', 3, 0, 1), - (431026, 431000, '汝城县', '汝城', '113.685684', '25.553759', 3, 0, 1), - (431027, 431000, '桂东县', '桂东', '113.94588', '26.073917', 3, 0, 1), - (431028, 431000, '安仁县', '安仁', '113.27217', '26.708626', 3, 0, 1), - (431081, 431000, '资兴市', '资兴', '113.23682', '25.974152', 3, 0, 1), - (431100, 430000, '永州市', '永州', '111.60802', '26.434517', 2, 0, 1), - (431102, 431100, '零陵区', '零陵', '111.62635', '26.223347', 3, 0, 1), - (431103, 431100, '冷水滩区', '冷水滩', '111.607155', '26.434364', 3, 0, 1), - (431121, 431100, '祁阳县', '祁阳', '111.85734', '26.58593', 3, 0, 1), - (431122, 431100, '东安县', '东安', '111.313034', '26.397278', 3, 0, 1), - (431123, 431100, '双牌县', '双牌', '111.66215', '25.959396', 3, 0, 1), - (431124, 431100, '道县', '道县', '111.59161', '25.518444', 3, 0, 1), - (431125, 431100, '江永县', '江永', '111.3468', '25.268154', 3, 0, 1), - (431126, 431100, '宁远县', '宁远', '111.94453', '25.584112', 3, 0, 1), - (431127, 431100, '蓝山县', '蓝山', '112.1942', '25.375256', 3, 0, 1), - (431128, 431100, '新田县', '新田', '112.220345', '25.906927', 3, 0, 1), - (431129, 431100, '江华瑶族自治县', '江华', '111.57728', '25.182596', 3, 0, 1), - (431200, 430000, '怀化市', '怀化', '109.97824', '27.550081', 2, 0, 1), - (431202, 431200, '鹤城区', '鹤城', '109.98224', '27.548473', 3, 0, 1), - (431221, 431200, '中方县', '中方', '109.94806', '27.43736', 3, 0, 1), - (431222, 431200, '沅陵县', '沅陵', '110.39916', '28.455553', 3, 0, 1), - (431223, 431200, '辰溪县', '辰溪', '110.19695', '28.005474', 3, 0, 1), - (431224, 431200, '溆浦县', '溆浦', '110.593376', '27.903803', 3, 0, 1), - (431225, 431200, '会同县', '会同', '109.72079', '26.870789', 3, 0, 1), - (431226, 431200, '麻阳苗族自治县', '麻阳', '109.80281', '27.865992', 3, 0, 1), - (431227, 431200, '新晃侗族自治县', '新晃', '109.174446', '27.359898', 3, 0, 1), - (431228, 431200, '芷江侗族自治县', '芷江', '109.687775', '27.437996', 3, 0, 1), - (431229, 431200, '靖州苗族侗族自治县', '靖州', '109.69116', '26.573511', 3, 0, 1), - (431230, 431200, '通道侗族自治县', '通道', '109.783356', '26.158348', 3, 0, 1), - (431281, 431200, '洪江市', '洪江', '109.831764', '27.201876', 3, 0, 1), - (431300, 430000, '娄底市', '娄底', '112.0085', '27.728136', 2, 0, 1), - (431302, 431300, '娄星区', '娄星', '112.008484', '27.726643', 3, 0, 1), - (431321, 431300, '双峰县', '双峰', '112.19824', '27.459126', 3, 0, 1), - (431322, 431300, '新化县', '新化', '111.30675', '27.737455', 3, 0, 1), - (431381, 431300, '冷水江市', '冷水江', '111.43468', '27.685759', 3, 0, 1), - (431382, 431300, '涟源市', '涟源', '111.670845', '27.6923', 3, 0, 1), - (433100, 430000, '湘西土家族苗族自治州', '湘西', '109.73974', '28.314297', 2, 0, 1), - (433101, 433100, '吉首市', '吉首', '109.73827', '28.314827', 3, 0, 1), - (433122, 433100, '泸溪县', '泸溪', '110.21443', '28.214516', 3, 0, 1), - (433123, 433100, '凤凰县', '凤凰', '109.59919', '27.948309', 3, 0, 1), - (433124, 433100, '花垣县', '花垣', '109.479065', '28.581352', 3, 0, 1), - (433125, 433100, '保靖县', '保靖', '109.65144', '28.709604', 3, 0, 1), - (433126, 433100, '古丈县', '古丈', '109.94959', '28.616974', 3, 0, 1), - (433127, 433100, '永顺县', '永顺', '109.853294', '28.998068', 3, 0, 1), - (433130, 433100, '龙山县', '龙山', '109.44119', '29.453438', 3, 0, 1), - (440000, 0, '广东省', '广东', '113.28064', '23.125177', 1, 0, 1), - (440100, 440000, '广州市', '广州', '113.28064', '23.125177', 2, 0, 1), - (440103, 440100, '荔湾区', '荔湾', '113.243034', '23.124943', 3, 0, 1), - (440104, 440100, '越秀区', '越秀', '113.280716', '23.125624', 3, 0, 1), - (440105, 440100, '海珠区', '海珠', '113.26201', '23.10313', 3, 0, 1), - (440106, 440100, '天河区', '天河', '113.335365', '23.13559', 3, 0, 1), - (440111, 440100, '白云区', '白云', '113.26283', '23.162281', 3, 0, 1), - (440112, 440100, '黄埔区', '黄埔', '113.45076', '23.10324', 3, 0, 1), - (440113, 440100, '番禺区', '番禺', '113.36462', '22.938581', 3, 0, 1), - (440114, 440100, '花都区', '花都', '113.21118', '23.39205', 3, 0, 1), - (440115, 440100, '南沙区', '南沙', '113.53738', '22.79453', 3, 0, 1), - (440117, 440100, '从化区', '从化', '113.58646', '23.54835', 3, 0, 1), - (440118, 440100, '增城区', '增城', '113.8109', '23.26093', 3, 0, 1), - (440200, 440000, '韶关市', '韶关', '113.591545', '24.801323', 2, 0, 1), - (440203, 440200, '武江区', '武江', '113.58829', '24.80016', 3, 0, 1), - (440204, 440200, '浈江区', '浈江', '113.59922', '24.803976', 3, 0, 1), - (440205, 440200, '曲江区', '曲江', '113.60558', '24.680195', 3, 0, 1), - (440222, 440200, '始兴县', '始兴', '114.06721', '24.948364', 3, 0, 1), - (440224, 440200, '仁化县', '仁化', '113.74863', '25.088226', 3, 0, 1), - (440229, 440200, '翁源县', '翁源', '114.13129', '24.353888', 3, 0, 1), - (440232, 440200, '乳源瑶族自治县', '乳源', '113.27842', '24.77611', 3, 0, 1), - (440233, 440200, '新丰县', '新丰', '114.20703', '24.055412', 3, 0, 1), - (440281, 440200, '乐昌市', '乐昌', '113.35241', '25.128445', 3, 0, 1), - (440282, 440200, '南雄市', '南雄', '114.31123', '25.115328', 3, 0, 1), - (440300, 440000, '深圳市', '深圳', '114.085945', '22.547', 2, 0, 1), - (440303, 440300, '罗湖区', '罗湖', '114.123886', '22.555342', 3, 0, 1), - (440304, 440300, '福田区', '福田', '114.05096', '22.54101', 3, 0, 1), - (440305, 440300, '南山区', '南山', '113.92943', '22.531221', 3, 0, 1), - (440306, 440300, '宝安区', '宝安', '113.828674', '22.754742', 3, 0, 1), - (440307, 440300, '龙岗区', '龙岗', '114.25137', '22.721512', 3, 0, 1), - (440308, 440300, '盐田区', '盐田', '114.23537', '22.555069', 3, 0, 1), - (440309, 440300, '龙华区', '龙华', '114.06031', '22.72174', 3, 0, 1), - (440310, 440300, '坪山区', '坪山', '114.34632', '22.69084', 3, 0, 1), - (440311, 440300, '光明区', '光明', '113.93588', '22.74894', 3, 0, 1), - (440400, 440000, '珠海市', '珠海', '113.553986', '22.22498', 2, 0, 1), - (440402, 440400, '香洲区', '香洲', '113.55027', '22.27125', 3, 0, 1), - (440403, 440400, '斗门区', '斗门', '113.29774', '22.209118', 3, 0, 1), - (440404, 440400, '金湾区', '金湾', '113.34507', '22.139122', 3, 0, 1), - (440500, 440000, '汕头市', '汕头', '116.708466', '23.37102', 2, 0, 1), - (440507, 440500, '龙湖区', '龙湖', '116.73202', '23.373755', 3, 0, 1), - (440511, 440500, '金平区', '金平', '116.70358', '23.367071', 3, 0, 1), - (440512, 440500, '濠江区', '濠江', '116.72953', '23.279345', 3, 0, 1), - (440513, 440500, '潮阳区', '潮阳', '116.6026', '23.262337', 3, 0, 1), - (440514, 440500, '潮南区', '潮南', '116.42361', '23.249798', 3, 0, 1), - (440515, 440500, '澄海区', '澄海', '116.76336', '23.46844', 3, 0, 1), - (440523, 440500, '南澳县', '南澳', '117.02711', '23.419561', 3, 0, 1), - (440600, 440000, '佛山市', '佛山', '113.12272', '23.028763', 2, 0, 1), - (440604, 440600, '禅城区', '禅城', '113.11241', '23.019644', 3, 0, 1), - (440605, 440600, '南海区', '南海', '113.14558', '23.031563', 3, 0, 1), - (440606, 440600, '顺德区', '顺德', '113.28182', '22.75851', 3, 0, 1), - (440607, 440600, '三水区', '三水', '112.899414', '23.16504', 3, 0, 1), - (440608, 440600, '高明区', '高明', '112.882126', '22.893854', 3, 0, 1), - (440700, 440000, '江门市', '江门', '113.09494', '22.590431', 2, 0, 1), - (440703, 440700, '蓬江区', '蓬江', '113.07859', '22.59677', 3, 0, 1), - (440704, 440700, '江海区', '江海', '113.1206', '22.57221', 3, 0, 1), - (440705, 440700, '新会区', '新会', '113.03858', '22.520247', 3, 0, 1), - (440781, 440700, '台山市', '台山', '112.79341', '22.250713', 3, 0, 1), - (440783, 440700, '开平市', '开平', '112.69226', '22.366285', 3, 0, 1), - (440784, 440700, '鹤山市', '鹤山', '112.96179', '22.768105', 3, 0, 1), - (440785, 440700, '恩平市', '恩平', '112.31405', '22.182957', 3, 0, 1), - (440800, 440000, '湛江市', '湛江', '110.364975', '21.274899', 2, 0, 1), - (440802, 440800, '赤坎区', '赤坎', '110.36163', '21.273365', 3, 0, 1), - (440803, 440800, '霞山区', '霞山', '110.40638', '21.19423', 3, 0, 1), - (440804, 440800, '坡头区', '坡头', '110.455635', '21.24441', 3, 0, 1), - (440811, 440800, '麻章区', '麻章', '110.32917', '21.265997', 3, 0, 1), - (440823, 440800, '遂溪县', '遂溪', '110.25532', '21.376915', 3, 0, 1), - (440825, 440800, '徐闻县', '徐闻', '110.17572', '20.326082', 3, 0, 1), - (440881, 440800, '廉江市', '廉江', '110.28496', '21.61128', 3, 0, 1), - (440882, 440800, '雷州市', '雷州', '110.08827', '20.908524', 3, 0, 1), - (440883, 440800, '吴川市', '吴川', '110.78051', '21.428453', 3, 0, 1), - (440900, 440000, '茂名市', '茂名', '110.91923', '21.659752', 2, 0, 1), - (440902, 440900, '茂南区', '茂南', '110.92054', '21.660425', 3, 0, 1), - (440904, 440900, '电白区', '电白', '111.01636', '21.51428', 3, 0, 1); - - -INSERT INTO `nc_sys_area` VALUES - (440981, 440900, '高州市', '高州', '110.85325', '21.915154', 3, 0, 1), - (440982, 440900, '化州市', '化州', '110.63839', '21.654953', 3, 0, 1), - (440983, 440900, '信宜市', '信宜', '110.94166', '22.35268', 3, 0, 1), - (441200, 440000, '肇庆市', '肇庆', '112.47253', '23.051546', 2, 0, 1), - (441202, 441200, '端州区', '端州', '112.47233', '23.052662', 3, 0, 1), - (441203, 441200, '鼎湖区', '鼎湖', '112.56525', '23.155823', 3, 0, 1), - (441204, 441200, '高要区', '高要', '112.45839', '23.02581', 3, 0, 1), - (441223, 441200, '广宁县', '广宁', '112.44042', '23.631487', 3, 0, 1), - (441224, 441200, '怀集县', '怀集', '112.182465', '23.913073', 3, 0, 1), - (441225, 441200, '封开县', '封开', '111.502975', '23.43473', 3, 0, 1), - (441226, 441200, '德庆县', '德庆', '111.78156', '23.14171', 3, 0, 1), - (441284, 441200, '四会市', '四会', '112.69503', '23.340324', 3, 0, 1), - (441300, 440000, '惠州市', '惠州', '114.4126', '23.079405', 2, 0, 1), - (441302, 441300, '惠城区', '惠城', '114.41398', '23.079884', 3, 0, 1), - (441303, 441300, '惠阳区', '惠阳', '114.469444', '22.78851', 3, 0, 1), - (441322, 441300, '博罗县', '博罗', '114.284256', '23.167576', 3, 0, 1), - (441323, 441300, '惠东县', '惠东', '114.72309', '22.983036', 3, 0, 1), - (441324, 441300, '龙门县', '龙门', '114.25999', '23.723894', 3, 0, 1), - (441400, 440000, '梅州市', '梅州', '116.117584', '24.299112', 2, 0, 1), - (441402, 441400, '梅江区', '梅江', '116.12116', '24.302593', 3, 0, 1), - (441403, 441400, '梅县区', '梅县', '116.08245', '24.26539', 3, 0, 1), - (441422, 441400, '大埔县', '大埔', '116.69552', '24.351587', 3, 0, 1), - (441423, 441400, '丰顺县', '丰顺', '116.18442', '23.752771', 3, 0, 1), - (441424, 441400, '五华县', '五华', '115.775', '23.925425', 3, 0, 1), - (441426, 441400, '平远县', '平远', '115.89173', '24.56965', 3, 0, 1), - (441427, 441400, '蕉岭县', '蕉岭', '116.17053', '24.653313', 3, 0, 1), - (441481, 441400, '兴宁市', '兴宁', '115.73165', '24.138077', 3, 0, 1), - (441500, 440000, '汕尾市', '汕尾', '115.364235', '22.774485', 2, 0, 1), - (441502, 441500, '城区', '城区', '115.36367', '22.776228', 3, 0, 1), - (441521, 441500, '海丰县', '海丰', '115.337326', '22.971043', 3, 0, 1), - (441523, 441500, '陆河县', '陆河', '115.65756', '23.302683', 3, 0, 1), - (441581, 441500, '陆丰市', '陆丰', '115.6442', '22.946104', 3, 0, 1), - (441600, 440000, '河源市', '河源', '114.6978', '23.746265', 2, 0, 1), - (441602, 441600, '源城区', '源城', '114.69683', '23.746256', 3, 0, 1), - (441621, 441600, '紫金县', '紫金', '115.18438', '23.633743', 3, 0, 1), - (441622, 441600, '龙川县', '龙川', '115.25642', '24.101173', 3, 0, 1), - (441623, 441600, '连平县', '连平', '114.49595', '24.364227', 3, 0, 1), - (441624, 441600, '和平县', '和平', '114.941475', '24.44318', 3, 0, 1), - (441625, 441600, '东源县', '东源', '114.742714', '23.789093', 3, 0, 1), - (441700, 440000, '阳江市', '阳江', '111.975105', '21.859222', 2, 0, 1), - (441702, 441700, '江城区', '江城', '111.96891', '21.859182', 3, 0, 1), - (441704, 441700, '阳东区', '阳东', '112.0067', '21.86829', 3, 0, 1), - (441721, 441700, '阳西县', '阳西', '111.61755', '21.75367', 3, 0, 1), - (441781, 441700, '阳春市', '阳春', '111.7905', '22.169598', 3, 0, 1), - (441800, 440000, '清远市', '清远', '113.05122', '23.685022', 2, 0, 1), - (441802, 441800, '清城区', '清城', '113.0487', '23.688976', 3, 0, 1), - (441803, 441800, '清新区', '清新', '113.01658', '23.73474', 3, 0, 1), - (441821, 441800, '佛冈县', '佛冈', '113.534096', '23.86674', 3, 0, 1), - (441823, 441800, '阳山县', '阳山', '112.63402', '24.470285', 3, 0, 1), - (441825, 441800, '连山壮族瑶族自治县', '连山', '112.086555', '24.56727', 3, 0, 1), - (441826, 441800, '连南瑶族自治县', '连南', '112.29081', '24.719097', 3, 0, 1), - (441881, 441800, '英德市', '英德', '113.4054', '24.18612', 3, 0, 1), - (441882, 441800, '连州市', '连州', '112.37927', '24.783966', 3, 0, 1), - (441900, 440000, '东莞市', '东莞', '113.74626', '23.046238', 2, 0, 1), - (442000, 440000, '中山市', '中山', '113.38239', '22.521112', 2, 0, 1), - (445100, 440000, '潮州市', '潮州', '116.6323', '23.661701', 2, 0, 1), - (445102, 445100, '湘桥区', '湘桥', '116.63365', '23.664675', 3, 0, 1), - (445103, 445100, '潮安区', '潮安', '116.67809', '23.46244', 3, 0, 1), - (445122, 445100, '饶平县', '饶平', '117.00205', '23.66817', 3, 0, 1), - (445200, 440000, '揭阳市', '揭阳', '116.355736', '23.543777', 2, 0, 1), - (445202, 445200, '榕城区', '榕城', '116.35705', '23.535524', 3, 0, 1), - (445203, 445200, '揭东区', '揭东', '116.41211', '23.56606', 3, 0, 1), - (445222, 445200, '揭西县', '揭西', '115.83871', '23.4273', 3, 0, 1), - (445224, 445200, '惠来县', '惠来', '116.29583', '23.029835', 3, 0, 1), - (445281, 445200, '普宁市', '普宁', '116.165085', '23.29788', 3, 0, 1), - (445300, 440000, '云浮市', '云浮', '112.04444', '22.929802', 2, 0, 1), - (445302, 445300, '云城区', '云城', '112.04471', '22.930826', 3, 0, 1), - (445303, 445300, '云安区', '云安', '112.00324', '23.07101', 3, 0, 1), - (445321, 445300, '新兴县', '新兴', '112.23083', '22.703203', 3, 0, 1), - (445322, 445300, '郁南县', '郁南', '111.53592', '23.237709', 3, 0, 1), - (445381, 445300, '罗定市', '罗定', '111.5782', '22.765415', 3, 0, 1), - (450000, 0, '广西壮族自治区', '广西', '108.32001', '22.82402', 1, 0, 1), - (450100, 450000, '南宁市', '南宁', '108.32001', '22.82402', 2, 0, 1), - (450102, 450100, '兴宁区', '兴宁', '108.32019', '22.819511', 3, 0, 1), - (450103, 450100, '青秀区', '青秀', '108.346115', '22.816614', 3, 0, 1), - (450105, 450100, '江南区', '江南', '108.31048', '22.799593', 3, 0, 1), - (450107, 450100, '西乡塘区', '西乡塘', '108.3069', '22.832779', 3, 0, 1), - (450108, 450100, '良庆区', '良庆', '108.322105', '22.75909', 3, 0, 1), - (450109, 450100, '邕宁区', '邕宁', '108.48425', '22.756598', 3, 0, 1), - (450110, 450100, '武鸣区', '武鸣', '108.27461', '23.15866', 3, 0, 1), - (450123, 450100, '隆安县', '隆安', '107.68866', '23.174763', 3, 0, 1), - (450124, 450100, '马山县', '马山', '108.172905', '23.711758', 3, 0, 1), - (450125, 450100, '上林县', '上林', '108.603935', '23.431768', 3, 0, 1), - (450126, 450100, '宾阳县', '宾阳', '108.816734', '23.216885', 3, 0, 1), - (450127, 450100, '横县', '横县', '109.27099', '22.68743', 3, 0, 1), - (450200, 450000, '柳州市', '柳州', '109.411705', '24.314617', 2, 0, 1), - (450202, 450200, '城中区', '城中', '109.41175', '24.312325', 3, 0, 1), - (450203, 450200, '鱼峰区', '鱼峰', '109.41537', '24.303848', 3, 0, 1), - (450204, 450200, '柳南区', '柳南', '109.395935', '24.287012', 3, 0, 1), - (450205, 450200, '柳北区', '柳北', '109.40658', '24.359144', 3, 0, 1), - (450206, 450200, '柳江区', '柳江', '109.32672', '24.25465', 3, 0, 1), - (450222, 450200, '柳城县', '柳城', '109.24581', '24.65512', 3, 0, 1), - (450223, 450200, '鹿寨县', '鹿寨', '109.74081', '24.483404', 3, 0, 1), - (450224, 450200, '融安县', '融安', '109.40362', '25.214703', 3, 0, 1), - (450225, 450200, '融水苗族自治县', '融水', '109.25275', '25.068811', 3, 0, 1), - (450226, 450200, '三江侗族自治县', '三江', '109.614845', '25.78553', 3, 0, 1), - (450300, 450000, '桂林市', '桂林', '110.29912', '25.274216', 2, 0, 1), - (450302, 450300, '秀峰区', '秀峰', '110.29244', '25.278543', 3, 0, 1), - (450303, 450300, '叠彩区', '叠彩', '110.30078', '25.301334', 3, 0, 1), - (450304, 450300, '象山区', '象山', '110.28488', '25.261986', 3, 0, 1), - (450305, 450300, '七星区', '七星', '110.31757', '25.25434', 3, 0, 1), - (450311, 450300, '雁山区', '雁山', '110.305664', '25.077646', 3, 0, 1), - (450312, 450300, '临桂区', '临桂', '110.2124', '25.23868', 3, 0, 1), - (450321, 450300, '阳朔县', '阳朔', '110.4947', '24.77534', 3, 0, 1), - (450323, 450300, '灵川县', '灵川', '110.325714', '25.40854', 3, 0, 1), - (450324, 450300, '全州县', '全州', '111.07299', '25.929897', 3, 0, 1), - (450325, 450300, '兴安县', '兴安', '110.670784', '25.609554', 3, 0, 1), - (450326, 450300, '永福县', '永福', '109.989204', '24.986692', 3, 0, 1), - (450327, 450300, '灌阳县', '灌阳', '111.16025', '25.489098', 3, 0, 1), - (450328, 450300, '龙胜各族自治县', '龙胜', '110.00942', '25.796429', 3, 0, 1), - (450329, 450300, '资源县', '资源', '110.642586', '26.0342', 3, 0, 1), - (450330, 450300, '平乐县', '平乐', '110.64282', '24.632215', 3, 0, 1), - (450332, 450300, '恭城瑶族自治县', '恭城', '110.82952', '24.833612', 3, 0, 1), - (450381, 450300, '荔浦市', '荔浦', '110.39517', '24.48887', 3, 0, 1), - (450400, 450000, '梧州市', '梧州', '111.29761', '23.474804', 2, 0, 1), - (450403, 450400, '万秀区', '万秀', '111.31582', '23.471317', 3, 0, 1), - (450405, 450400, '长洲区', '长洲', '111.27568', '23.4777', 3, 0, 1), - (450406, 450400, '龙圩区', '龙圩', '111.24603', '23.40996', 3, 0, 1), - (450421, 450400, '苍梧县', '苍梧', '111.54401', '23.845097', 3, 0, 1), - (450422, 450400, '藤县', '藤县', '110.93182', '23.373962', 3, 0, 1), - (450423, 450400, '蒙山县', '蒙山', '110.5226', '24.19983', 3, 0, 1), - (450481, 450400, '岑溪市', '岑溪', '110.998116', '22.918406', 3, 0, 1), - (450500, 450000, '北海市', '北海', '109.119255', '21.473343', 2, 0, 1), - (450502, 450500, '海城区', '海城', '109.10753', '21.468443', 3, 0, 1), - (450503, 450500, '银海区', '银海', '109.118706', '21.444908', 3, 0, 1), - (450512, 450500, '铁山港区', '铁山港', '109.45058', '21.5928', 3, 0, 1), - (450521, 450500, '合浦县', '合浦', '109.20069', '21.663553', 3, 0, 1), - (450600, 450000, '防城港市', '防城港', '108.345474', '21.614632', 2, 0, 1), - (450602, 450600, '港口区', '港口', '108.34628', '21.614407', 3, 0, 1), - (450603, 450600, '防城区', '防城', '108.35843', '21.764757', 3, 0, 1), - (450621, 450600, '上思县', '上思', '107.98214', '22.151423', 3, 0, 1), - (450681, 450600, '东兴市', '东兴', '107.97017', '21.541172', 3, 0, 1), - (450700, 450000, '钦州市', '钦州', '108.624176', '21.967127', 2, 0, 1), - (450702, 450700, '钦南区', '钦南', '108.62663', '21.966808', 3, 0, 1), - (450703, 450700, '钦北区', '钦北', '108.44911', '22.132761', 3, 0, 1), - (450721, 450700, '灵山县', '灵山', '109.293465', '22.418041', 3, 0, 1), - (450722, 450700, '浦北县', '浦北', '109.55634', '22.268335', 3, 0, 1), - (450800, 450000, '贵港市', '贵港', '109.60214', '23.0936', 2, 0, 1), - (450802, 450800, '港北区', '港北', '109.59481', '23.107677', 3, 0, 1), - (450803, 450800, '港南区', '港南', '109.60467', '23.067516', 3, 0, 1), - (450804, 450800, '覃塘区', '覃塘', '109.415695', '23.132814', 3, 0, 1), - (450821, 450800, '平南县', '平南', '110.397484', '23.544546', 3, 0, 1), - (450881, 450800, '桂平市', '桂平', '110.07467', '23.382473', 3, 0, 1), - (450900, 450000, '玉林市', '玉林', '110.154396', '22.63136', 2, 0, 1), - (450902, 450900, '玉州区', '玉州', '110.154915', '22.632132', 3, 0, 1), - (450903, 450900, '福绵区', '福绵', '110.05143', '22.579947', 3, 0, 1), - (450921, 450900, '容县', '容县', '110.55247', '22.856436', 3, 0, 1), - (450922, 450900, '陆川县', '陆川', '110.26484', '22.321054', 3, 0, 1), - (450923, 450900, '博白县', '博白', '109.98', '22.271284', 3, 0, 1), - (450924, 450900, '兴业县', '兴业', '109.87777', '22.74187', 3, 0, 1), - (450981, 450900, '北流市', '北流', '110.34805', '22.701649', 3, 0, 1), - (451000, 450000, '百色市', '百色', '106.61629', '23.897741', 2, 0, 1), - (451002, 451000, '右江区', '右江', '106.61573', '23.897675', 3, 0, 1), - (451003, 451000, '田阳区', '田阳', '106.91567', '23.73567', 3, 0, 1), - (451022, 451000, '田东县', '田东', '107.12426', '23.600445', 3, 0, 1), - (451024, 451000, '德保县', '德保', '106.618164', '23.321465', 3, 0, 1), - (451026, 451000, '那坡县', '那坡', '105.83355', '23.400785', 3, 0, 1), - (451027, 451000, '凌云县', '凌云', '106.56487', '24.345642', 3, 0, 1), - (451028, 451000, '乐业县', '乐业', '106.55964', '24.782204', 3, 0, 1), - (451029, 451000, '田林县', '田林', '106.23505', '24.290262', 3, 0, 1), - (451030, 451000, '西林县', '西林', '105.095024', '24.49204', 3, 0, 1), - (451031, 451000, '隆林各族自治县', '隆林', '105.34236', '24.774319', 3, 0, 1), - (451081, 451000, '靖西市', '靖西', '106.41769', '23.13402', 3, 0, 1), - (451082, 451000, '平果市', '平果', '107.58988', '23.32934', 3, 0, 1), - (451100, 450000, '贺州市', '贺州', '111.552055', '24.41414', 2, 0, 1), - (451102, 451100, '八步区', '八步', '111.551994', '24.412445', 3, 0, 1), - (451103, 451100, '平桂区', '平桂', '111.47971', '24.45296', 3, 0, 1), - (451121, 451100, '昭平县', '昭平', '110.81087', '24.172958', 3, 0, 1), - (451122, 451100, '钟山县', '钟山', '111.30363', '24.528566', 3, 0, 1), - (451123, 451100, '富川瑶族自治县', '富川', '111.27723', '24.81896', 3, 0, 1), - (451200, 450000, '河池市', '河池', '108.0621', '24.695898', 2, 0, 1), - (451202, 451200, '金城江区', '金城江', '108.06213', '24.695625', 3, 0, 1), - (451203, 451200, '宜州区', '宜州', '108.63656', '24.48513', 3, 0, 1), - (451221, 451200, '南丹县', '南丹', '107.54661', '24.983192', 3, 0, 1), - (451222, 451200, '天峨县', '天峨', '107.17494', '24.985964', 3, 0, 1), - (451223, 451200, '凤山县', '凤山', '107.04459', '24.544561', 3, 0, 1), - (451224, 451200, '东兰县', '东兰', '107.373695', '24.509367', 3, 0, 1), - (451225, 451200, '罗城仫佬族自治县', '罗城', '108.90245', '24.779327', 3, 0, 1), - (451226, 451200, '环江毛南族自治县', '环江', '108.25867', '24.827627', 3, 0, 1), - (451227, 451200, '巴马瑶族自治县', '巴马', '107.25313', '24.139538', 3, 0, 1), - (451228, 451200, '都安瑶族自治县', '都安', '108.10276', '23.934963', 3, 0, 1), - (451229, 451200, '大化瑶族自治县', '大化', '107.9945', '23.739595', 3, 0, 1), - (451300, 450000, '来宾市', '来宾', '109.229774', '23.733767', 2, 0, 1), - (451302, 451300, '兴宾区', '兴宾', '109.23054', '23.732925', 3, 0, 1), - (451321, 451300, '忻城县', '忻城', '108.66736', '24.06478', 3, 0, 1), - (451322, 451300, '象州县', '象州', '109.684555', '23.959824', 3, 0, 1), - (451323, 451300, '武宣县', '武宣', '109.66287', '23.604162', 3, 0, 1), - (451324, 451300, '金秀瑶族自治县', '金秀', '110.18855', '24.134941', 3, 0, 1), - (451381, 451300, '合山市', '合山', '108.88858', '23.81311', 3, 0, 1), - (451400, 450000, '崇左市', '崇左', '107.35393', '22.404108', 2, 0, 1), - (451402, 451400, '江州区', '江州', '107.35445', '22.40469', 3, 0, 1), - (451421, 451400, '扶绥县', '扶绥', '107.91153', '22.63582', 3, 0, 1), - (451422, 451400, '宁明县', '宁明', '107.06762', '22.131353', 3, 0, 1), - (451423, 451400, '龙州县', '龙州', '106.857506', '22.343716', 3, 0, 1), - (451424, 451400, '大新县', '大新', '107.200806', '22.833368', 3, 0, 1), - (451425, 451400, '天等县', '天等', '107.14244', '23.082483', 3, 0, 1), - (451481, 451400, '凭祥市', '凭祥', '106.75904', '22.108883', 3, 0, 1), - (460000, 0, '海南省', '海南', '110.33119', '20.031971', 1, 0, 1), - (460100, 460000, '海口市', '海口', '110.33119', '20.031971', 2, 0, 1), - (460105, 460100, '秀英区', '秀英', '110.282394', '20.008144', 3, 0, 1), - (460106, 460100, '龙华区', '龙华', '110.330376', '20.031027', 3, 0, 1), - (460107, 460100, '琼山区', '琼山', '110.35472', '20.00105', 3, 0, 1), - (460108, 460100, '美兰区', '美兰', '110.35657', '20.03074', 3, 0, 1), - (460200, 460000, '三亚市', '三亚', '109.50827', '18.247871', 2, 0, 1), - (460202, 460200, '海棠区', '海棠', '109.7525', '18.40005', 3, 0, 1), - (460203, 460200, '吉阳区', '吉阳', '109.57841', '18.28225', 3, 0, 1), - (460204, 460200, '天涯区', '天涯', '109.45263', '18.29921', 3, 0, 1), - (460205, 460200, '崖州区', '崖州', '109.17186', '18.35753', 3, 0, 1), - (460300, 460000, '三沙市', '三沙', '112.34882', '16.83104', 2, 0, 1), - (460321, 460300, '西沙群岛', '西沙群岛', '112.338695', '16.831839', 3, 0, 1), - (460322, 460300, '南沙群岛', '南沙群岛', '112.338695', '16.831839', 3, 0, 1), - (460323, 460300, '中沙群岛的岛礁及其海域', '中沙群岛的岛礁及其海域', '112.338695', '16.831839', 3, 0, 1), - (460400, 460000, '儋州市', '儋州', '109.58069', '19.52093', 2, 0, 1), - (469001, 469000, '五指山市', '五指山', '109.51666', '18.77692', 3, 0, 1), - (469002, 469000, '琼海市', '琼海', '110.46678', '19.246012', 3, 0, 1), - (469005, 469000, '文昌市', '文昌', '110.753975', '19.612986', 3, 0, 1), - (469006, 469000, '万宁市', '万宁', '110.388794', '18.796215', 3, 0, 1), - (469007, 469000, '东方市', '东方', '108.653786', '19.10198', 3, 0, 1), - (469021, 469000, '定安县', '定安', '110.3593', '19.68121', 3, 0, 1), - (469022, 469000, '屯昌县', '屯昌', '110.10347', '19.35182', 3, 0, 1), - (469023, 469000, '澄迈县', '澄迈', '110.00487', '19.73849', 3, 0, 1), - (469024, 469000, '临高县', '临高', '109.69077', '19.91243', 3, 0, 1), - (469025, 469000, '白沙黎族自治县', '定安', '110.349236', '19.684965', 3, 0, 1), - (469026, 469000, '昌江黎族自治县', '屯昌', '110.102776', '19.362917', 3, 0, 1), - (469027, 469000, '乐东黎族自治县', '澄迈', '110.00715', '19.737095', 3, 0, 1), - (469028, 469000, '陵水黎族自治县', '临高', '109.6877', '19.908293', 3, 0, 1), - (469029, 469000, '保亭黎族苗族自治县', '保亭黎族苗族自治县', '109.70259', '18.63905', 3, 0, 1), - (469030, 469000, '琼中黎族苗族自治县', '白沙', '109.45261', '19.224585', 3, 0, 1), - (500000, 0, '重庆市', '重庆', '106.50496', '29.533155', 1, 0, 1), - (500100, 500000, '重庆市', '重庆', '106.50496', '29.533155', 2, 0, 1), - (500101, 500100, '万州区', '万州', '108.38025', '30.807808', 3, 0, 1), - (500102, 500100, '涪陵区', '涪陵', '107.394905', '29.703651', 3, 0, 1), - (500103, 500100, '渝中区', '渝中', '106.56288', '29.556742', 3, 0, 1), - (500104, 500100, '大渡口区', '大渡口', '106.48613', '29.481003', 3, 0, 1), - (500105, 500100, '江北区', '江北', '106.532845', '29.575352', 3, 0, 1), - (500106, 500100, '沙坪坝区', '沙坪坝', '106.4542', '29.541224', 3, 0, 1), - (500107, 500100, '九龙坡区', '九龙坡', '106.48099', '29.523493', 3, 0, 1), - (500108, 500100, '南岸区', '南岸', '106.560814', '29.523993', 3, 0, 1), - (500109, 500100, '北碚区', '北碚', '106.43787', '29.82543', 3, 0, 1), - (500110, 500100, '綦江区', '綦江', '106.92852', '28.96463', 3, 0, 1), - (500111, 500100, '大足区', '大足', '105.78017', '29.48604', 3, 0, 1), - (500112, 500100, '渝北区', '渝北', '106.51285', '29.601452', 3, 0, 1), - (500113, 500100, '巴南区', '巴南', '106.519424', '29.38192', 3, 0, 1), - (500114, 500100, '黔江区', '黔江', '108.78258', '29.527548', 3, 0, 1), - (500115, 500100, '长寿区', '长寿', '107.07485', '29.833672', 3, 0, 1), - (500116, 500100, '江津区', '江津', '106.25936', '29.29014', 3, 0, 1), - (500117, 500100, '合川区', '合川', '106.27679', '29.97288', 3, 0, 1), - (500118, 500100, '永川区', '永川', '105.92709', '29.356', 3, 0, 1), - (500119, 500100, '南川区', '南川', '107.09896', '29.15788', 3, 0, 1), - (500120, 500100, '璧山区', '璧山', '106.22742', '29.59202', 3, 0, 1), - (500151, 500100, '铜梁区', '铜梁', '106.05638', '29.84475', 3, 0, 1), - (500152, 500100, '潼南区', '潼南', '105.83952', '30.19054', 3, 0, 1), - (500153, 500100, '荣昌区', '荣昌', '105.61188', '29.41671', 3, 0, 1), - (500154, 500100, '开州区', '开州', '108.39311', '31.16098', 3, 0, 1), - (500155, 500100, '梁平区', '梁平', '107.80235', '30.67373', 3, 0, 1), - (500156, 500100, '武隆区', '武隆', '107.75993', '29.32543', 3, 0, 1), - (500229, 500100, '城口县', '城口', '108.6649', '31.946293', 3, 0, 1), - (500230, 500100, '丰都县', '丰都', '107.73248', '29.866425', 3, 0, 1), - (500231, 500100, '垫江县', '垫江', '107.348694', '30.330011', 3, 0, 1), - (500233, 500100, '忠县', '忠县', '108.03752', '30.291536', 3, 0, 1), - (500235, 500100, '云阳县', '云阳', '108.6977', '30.930529', 3, 0, 1), - (500236, 500100, '奉节县', '奉节', '109.465775', '31.019966', 3, 0, 1), - (500237, 500100, '巫山县', '巫山', '109.87893', '31.074842', 3, 0, 1), - (500238, 500100, '巫溪县', '巫溪', '109.628914', '31.3966', 3, 0, 1), - (500240, 500100, '石柱土家族自治县', '石柱', '108.11245', '29.99853', 3, 0, 1), - (500241, 500100, '秀山土家族苗族自治县', '秀山', '108.99604', '28.444773', 3, 0, 1), - (500242, 500100, '酉阳土家族苗族自治县', '酉阳', '108.767204', '28.839828', 3, 0, 1), - (500243, 500100, '彭水苗族土家族自治县', '彭水', '108.16655', '29.293856', 3, 0, 1), - (510000, 0, '四川省', '四川', '104.065735', '30.659462', 1, 0, 1), - (510100, 510000, '成都市', '成都', '104.065735', '30.659462', 2, 0, 1), - (510104, 510100, '锦江区', '锦江', '104.080986', '30.657688', 3, 0, 1), - (510105, 510100, '青羊区', '青羊', '104.05573', '30.667648', 3, 0, 1), - (510106, 510100, '金牛区', '金牛', '104.04349', '30.692059', 3, 0, 1), - (510107, 510100, '武侯区', '武侯', '104.05167', '30.630861', 3, 0, 1), - (510108, 510100, '成华区', '成华', '104.10308', '30.660275', 3, 0, 1), - (510112, 510100, '龙泉驿区', '龙泉驿', '104.26918', '30.56065', 3, 0, 1), - (510113, 510100, '青白江区', '青白江', '104.25494', '30.883438', 3, 0, 1), - (510114, 510100, '新都区', '新都', '104.16022', '30.824223', 3, 0, 1), - (510115, 510100, '温江区', '温江', '103.83678', '30.697996', 3, 0, 1), - (510116, 510100, '双流区', '双流', '103.92377', '30.57447', 3, 0, 1), - (510117, 510100, '郫都区', '郫都', '103.90256', '30.79589', 3, 0, 1), - (510118, 510100, '新津区', '新津', '', '', 3, 0, 1), - (510121, 510100, '金堂县', '金堂', '104.4156', '30.858418', 3, 0, 1), - (510129, 510100, '大邑县', '大邑', '103.5224', '30.586601', 3, 0, 1), - (510131, 510100, '蒲江县', '蒲江', '103.51154', '30.194359', 3, 0, 1), - (510181, 510100, '都江堰市', '都江堰', '103.6279', '30.99114', 3, 0, 1), - (510182, 510100, '彭州市', '彭州', '103.94117', '30.98516', 3, 0, 1), - (510183, 510100, '邛崃市', '邛崃', '103.46143', '30.41327', 3, 0, 1), - (510184, 510100, '崇州市', '崇州', '103.67105', '30.631477', 3, 0, 1), - (510185, 510100, '简阳市', '简阳', '104.54733', '30.41133', 3, 0, 1), - (510300, 510000, '自贡市', '自贡', '104.773445', '29.352764', 2, 0, 1), - (510302, 510300, '自流井区', '自流井', '104.77819', '29.343231', 3, 0, 1), - (510303, 510300, '贡井区', '贡井', '104.71437', '29.345675', 3, 0, 1), - (510304, 510300, '大安区', '大安', '104.783226', '29.367136', 3, 0, 1), - (510311, 510300, '沿滩区', '沿滩', '104.87642', '29.27252', 3, 0, 1), - (510321, 510300, '荣县', '荣县', '104.423935', '29.454851', 3, 0, 1), - (510322, 510300, '富顺县', '富顺', '104.98425', '29.181282', 3, 0, 1), - (510400, 510000, '攀枝花市', '攀枝花', '101.716', '26.580446', 2, 0, 1), - (510402, 510400, '东区', '东区', '101.71513', '26.580887', 3, 0, 1), - (510403, 510400, '西区', '西区', '101.63797', '26.596775', 3, 0, 1), - (510411, 510400, '仁和区', '仁和', '101.737915', '26.497185', 3, 0, 1), - (510421, 510400, '米易县', '米易', '102.10988', '26.887474', 3, 0, 1), - (510422, 510400, '盐边县', '盐边', '101.851845', '26.67762', 3, 0, 1), - (510500, 510000, '泸州市', '泸州', '105.44335', '28.889137', 2, 0, 1), - (510502, 510500, '江阳区', '江阳', '105.44513', '28.882889', 3, 0, 1), - (510503, 510500, '纳溪区', '纳溪', '105.37721', '28.77631', 3, 0, 1), - (510504, 510500, '龙马潭区', '龙马潭', '105.43523', '28.897572', 3, 0, 1), - (510521, 510500, '泸县', '泸县', '105.376335', '29.151287', 3, 0, 1), - (510522, 510500, '合江县', '合江', '105.8341', '28.810326', 3, 0, 1), - (510524, 510500, '叙永县', '叙永', '105.437775', '28.16792', 3, 0, 1), - (510525, 510500, '古蔺县', '古蔺', '105.81336', '28.03948', 3, 0, 1), - (510600, 510000, '德阳市', '德阳', '104.39865', '31.12799', 2, 0, 1), - (510603, 510600, '旌阳区', '旌阳', '104.38965', '31.130428', 3, 0, 1), - (510604, 510600, '罗江区', '罗江', '104.51021', '31.31681', 3, 0, 1), - (510623, 510600, '中江县', '中江', '104.67783', '31.03681', 3, 0, 1), - (510681, 510600, '广汉市', '广汉', '104.281906', '30.97715', 3, 0, 1), - (510682, 510600, '什邡市', '什邡', '104.17365', '31.12688', 3, 0, 1), - (510683, 510600, '绵竹市', '绵竹', '104.200165', '31.343084', 3, 0, 1), - (510700, 510000, '绵阳市', '绵阳', '104.74172', '31.46402', 2, 0, 1), - (510703, 510700, '涪城区', '涪城', '104.740974', '31.463556', 3, 0, 1), - (510704, 510700, '游仙区', '游仙', '104.770004', '31.484772', 3, 0, 1), - (510705, 510700, '安州区', '安州', '104.56735', '31.53465', 3, 0, 1), - (510722, 510700, '三台县', '三台', '105.09032', '31.090908', 3, 0, 1), - (510723, 510700, '盐亭县', '盐亭', '105.39199', '31.22318', 3, 0, 1), - (510725, 510700, '梓潼县', '梓潼', '105.16353', '31.635225', 3, 0, 1), - (510726, 510700, '北川羌族自治县', '北川', '104.46807', '31.615864', 3, 0, 1), - (510727, 510700, '平武县', '平武', '104.530556', '32.40759', 3, 0, 1), - (510781, 510700, '江油市', '江油', '104.74443', '31.776386', 3, 0, 1), - (510800, 510000, '广元市', '广元', '105.82976', '32.433666', 2, 0, 1), - (510802, 510800, '利州区', '利州', '105.826195', '32.432278', 3, 0, 1), - (510811, 510800, '昭化区', '昭化', '105.96412', '32.32279', 3, 0, 1), - (510812, 510800, '朝天区', '朝天', '105.88917', '32.64263', 3, 0, 1), - (510821, 510800, '旺苍县', '旺苍', '106.29043', '32.22833', 3, 0, 1), - (510822, 510800, '青川县', '青川', '105.238846', '32.585655', 3, 0, 1), - (510823, 510800, '剑阁县', '剑阁', '105.52704', '32.28652', 3, 0, 1), - (510824, 510800, '苍溪县', '苍溪', '105.939705', '31.73225', 3, 0, 1), - (510900, 510000, '遂宁市', '遂宁', '105.57133', '30.513311', 2, 0, 1), - (510903, 510900, '船山区', '船山', '105.582214', '30.502647', 3, 0, 1), - (510904, 510900, '安居区', '安居', '105.45938', '30.34612', 3, 0, 1), - (510921, 510900, '蓬溪县', '蓬溪', '105.7137', '30.774883', 3, 0, 1), - (510923, 510900, '大英县', '大英', '105.25219', '30.581572', 3, 0, 1), - (510981, 510900, '射洪市', '射洪', '105.38836', '30.87113', 3, 0, 1), - (511000, 510000, '内江市', '内江', '105.06614', '29.58708', 2, 0, 1), - (511002, 511000, '市中区', '市中', '105.06547', '29.585264', 3, 0, 1), - (511011, 511000, '东兴区', '东兴', '105.0672', '29.600107', 3, 0, 1), - (511024, 511000, '威远县', '威远', '104.66833', '29.52686', 3, 0, 1), - (511025, 511000, '资中县', '资中', '104.85246', '29.775295', 3, 0, 1), - (511083, 511000, '隆昌市', '隆昌', '105.28773', '29.33948', 3, 0, 1), - (511100, 510000, '乐山市', '乐山', '103.76126', '29.582024', 2, 0, 1), - (511102, 511100, '市中区', '市中', '103.75539', '29.588327', 3, 0, 1), - (511111, 511100, '沙湾区', '沙湾', '103.54996', '29.416536', 3, 0, 1), - (511112, 511100, '五通桥区', '五通桥', '103.81683', '29.406185', 3, 0, 1), - (511113, 511100, '金口河区', '金口河', '103.07783', '29.24602', 3, 0, 1), - (511123, 511100, '犍为县', '犍为', '103.94427', '29.209782', 3, 0, 1), - (511124, 511100, '井研县', '井研', '104.06885', '29.651646', 3, 0, 1), - (511126, 511100, '夹江县', '夹江', '103.578865', '29.741018', 3, 0, 1), - (511129, 511100, '沐川县', '沐川', '103.90211', '28.956339', 3, 0, 1), - (511132, 511100, '峨边彝族自治县', '峨边', '103.262146', '29.23027', 3, 0, 1), - (511133, 511100, '马边彝族自治县', '马边', '103.54685', '28.838934', 3, 0, 1), - (511181, 511100, '峨眉山市', '峨眉山', '103.492485', '29.597479', 3, 0, 1), - (511300, 510000, '南充市', '南充', '106.08298', '30.79528', 2, 0, 1), - (511302, 511300, '顺庆区', '顺庆', '106.08409', '30.795572', 3, 0, 1), - (511303, 511300, '高坪区', '高坪', '106.10899', '30.781809', 3, 0, 1), - (511304, 511300, '嘉陵区', '嘉陵', '106.067024', '30.762976', 3, 0, 1), - (511321, 511300, '南部县', '南部', '106.061134', '31.349407', 3, 0, 1), - (511322, 511300, '营山县', '营山', '106.564896', '31.075907', 3, 0, 1), - (511323, 511300, '蓬安县', '蓬安', '106.41349', '31.027979', 3, 0, 1), - (511324, 511300, '仪陇县', '仪陇', '106.29708', '31.271261', 3, 0, 1), - (511325, 511300, '西充县', '西充', '105.89302', '30.994616', 3, 0, 1), - (511381, 511300, '阆中市', '阆中', '105.975266', '31.580465', 3, 0, 1), - (511400, 510000, '眉山市', '眉山', '103.83179', '30.048319', 2, 0, 1), - (511402, 511400, '东坡区', '东坡', '103.83155', '30.048128', 3, 0, 1), - (511403, 511400, '彭山区', '彭山', '103.87283', '30.19299', 3, 0, 1), - (511421, 511400, '仁寿县', '仁寿', '104.147644', '29.996721', 3, 0, 1), - (511423, 511400, '洪雅县', '洪雅', '103.37501', '29.904867', 3, 0, 1), - (511424, 511400, '丹棱县', '丹棱', '103.51833', '30.01275', 3, 0, 1), - (511425, 511400, '青神县', '青神', '103.84613', '29.831469', 3, 0, 1), - (511500, 510000, '宜宾市', '宜宾', '104.63082', '28.76019', 2, 0, 1), - (511502, 511500, '翠屏区', '翠屏', '104.63023', '28.76018', 3, 0, 1), - (511503, 511500, '南溪区', '南溪', '104.96953', '28.84548', 3, 0, 1), - (511504, 511500, '叙州区', '叙州', '104.53316', '28.68998', 3, 0, 1), - (511523, 511500, '江安县', '江安', '105.068695', '28.728102', 3, 0, 1), - (511524, 511500, '长宁县', '长宁', '104.92112', '28.57727', 3, 0, 1), - (511525, 511500, '高县', '高县', '104.51919', '28.435677', 3, 0, 1), - (511526, 511500, '珙县', '珙县', '104.712265', '28.449041', 3, 0, 1), - (511527, 511500, '筠连县', '筠连', '104.50785', '28.162018', 3, 0, 1), - (511528, 511500, '兴文县', '兴文', '105.23655', '28.302988', 3, 0, 1), - (511529, 511500, '屏山县', '屏山', '104.16262', '28.64237', 3, 0, 1), - (511600, 510000, '广安市', '广安', '106.63337', '30.456398', 2, 0, 1), - (511602, 511600, '广安区', '广安', '106.632904', '30.456463', 3, 0, 1), - (511603, 511600, '前锋区', '前锋', '106.89328', '30.4963', 3, 0, 1), - (511621, 511600, '岳池县', '岳池', '106.44445', '30.533539', 3, 0, 1), - (511622, 511600, '武胜县', '武胜', '106.29247', '30.344292', 3, 0, 1), - (511623, 511600, '邻水县', '邻水', '106.93497', '30.334324', 3, 0, 1), - (511681, 511600, '华蓥市', '华蓥', '106.777885', '30.380573', 3, 0, 1), - (511700, 510000, '达州市', '达州', '107.50226', '31.209484', 2, 0, 1), - (511702, 511700, '通川区', '通川', '107.50106', '31.213522', 3, 0, 1), - (511703, 511700, '达川区', '达川', '107.51177', '31.19603', 3, 0, 1), - (511722, 511700, '宣汉县', '宣汉', '107.72225', '31.355024', 3, 0, 1), - (511723, 511700, '开江县', '开江', '107.864136', '31.085537', 3, 0, 1), - (511724, 511700, '大竹县', '大竹', '107.20742', '30.736288', 3, 0, 1), - (511725, 511700, '渠县', '渠县', '106.97075', '30.836348', 3, 0, 1), - (511781, 511700, '万源市', '万源', '108.037544', '32.06777', 3, 0, 1), - (511800, 510000, '雅安市', '雅安', '103.00103', '29.987722', 2, 0, 1), - (511802, 511800, '雨城区', '雨城', '103.003395', '29.98183', 3, 0, 1), - (511803, 511800, '名山区', '名山', '103.10954', '30.06982', 3, 0, 1), - (511822, 511800, '荥经县', '荥经', '102.84467', '29.795528', 3, 0, 1), - (511823, 511800, '汉源县', '汉源', '102.67715', '29.349915', 3, 0, 1), - (511824, 511800, '石棉县', '石棉', '102.35962', '29.234062', 3, 0, 1), - (511825, 511800, '天全县', '天全', '102.76346', '30.059956', 3, 0, 1), - (511826, 511800, '芦山县', '芦山', '102.92402', '30.152906', 3, 0, 1), - (511827, 511800, '宝兴县', '宝兴', '102.81338', '30.369026', 3, 0, 1), - (511900, 510000, '巴中市', '巴中', '106.75367', '31.858809', 2, 0, 1), - (511902, 511900, '巴州区', '巴州', '106.75367', '31.858366', 3, 0, 1), - (511903, 511900, '恩阳区', '恩阳', '106.63608', '31.789442', 3, 0, 1), - (511921, 511900, '通江县', '通江', '107.24762', '31.91212', 3, 0, 1), - (511922, 511900, '南江县', '南江', '106.843414', '32.353165', 3, 0, 1), - (511923, 511900, '平昌县', '平昌', '107.10194', '31.562815', 3, 0, 1), - (512000, 510000, '资阳市', '资阳', '104.641914', '30.122211', 2, 0, 1), - (512002, 512000, '雁江区', '雁江', '104.64234', '30.121687', 3, 0, 1), - (512021, 512000, '安岳县', '安岳', '105.33676', '30.099207', 3, 0, 1), - (512022, 512000, '乐至县', '乐至', '105.03114', '30.27562', 3, 0, 1), - (513200, 510000, '阿坝藏族羌族自治州', '阿坝', '102.221375', '31.899792', 2, 0, 1), - (513201, 513200, '马尔康市', '马尔康', '102.20644', '31.90585', 3, 0, 1), - (513221, 513200, '汶川县', '汶川', '103.58067', '31.47463', 3, 0, 1), - (513222, 513200, '理县', '理县', '103.16549', '31.436764', 3, 0, 1), - (513223, 513200, '茂县', '茂县', '103.850685', '31.680407', 3, 0, 1), - (513224, 513200, '松潘县', '松潘', '103.599174', '32.63838', 3, 0, 1), - (513225, 513200, '九寨沟县', '九寨沟', '104.23634', '33.262096', 3, 0, 1), - (513226, 513200, '金川县', '金川', '102.064644', '31.476357', 3, 0, 1), - (513227, 513200, '小金县', '小金', '102.36319', '30.999016', 3, 0, 1), - (513228, 513200, '黑水县', '黑水', '102.99081', '32.06172', 3, 0, 1), - (513230, 513200, '壤塘县', '壤塘', '100.97913', '32.26489', 3, 0, 1), - (513231, 513200, '阿坝县', '阿坝', '101.70099', '32.904224', 3, 0, 1), - (513232, 513200, '若尔盖县', '若尔盖', '102.96372', '33.575935', 3, 0, 1), - (513233, 513200, '红原县', '红原', '102.54491', '32.793903', 3, 0, 1), - (513300, 510000, '甘孜藏族自治州', '甘孜', '101.96381', '30.050663', 2, 0, 1), - (513301, 513300, '康定市', '康定', '101.96308', '30.05441', 3, 0, 1), - (513322, 513300, '泸定县', '泸定', '102.23322', '29.912481', 3, 0, 1), - (513323, 513300, '丹巴县', '丹巴', '101.88612', '30.877083', 3, 0, 1), - (513324, 513300, '九龙县', '九龙', '101.50694', '29.001974', 3, 0, 1), - (513325, 513300, '雅江县', '雅江', '101.01573', '30.03225', 3, 0, 1), - (513326, 513300, '道孚县', '道孚', '101.12333', '30.978767', 3, 0, 1), - (513327, 513300, '炉霍县', '炉霍', '100.6795', '31.392673', 3, 0, 1), - (513328, 513300, '甘孜县', '甘孜', '99.99175', '31.61975', 3, 0, 1), - (513329, 513300, '新龙县', '新龙', '100.312096', '30.93896', 3, 0, 1), - (513330, 513300, '德格县', '德格', '98.57999', '31.806728', 3, 0, 1), - (513331, 513300, '白玉县', '白玉', '98.82434', '31.208805', 3, 0, 1), - (513332, 513300, '石渠县', '石渠', '98.10088', '32.975304', 3, 0, 1), - (513333, 513300, '色达县', '色达', '100.33166', '32.268776', 3, 0, 1), - (513334, 513300, '理塘县', '理塘', '100.26986', '29.991808', 3, 0, 1), - (513335, 513300, '巴塘县', '巴塘', '99.10904', '30.005724', 3, 0, 1), - (513336, 513300, '乡城县', '乡城', '99.79994', '28.930855', 3, 0, 1), - (513337, 513300, '稻城县', '稻城', '100.29669', '29.037544', 3, 0, 1), - (513338, 513300, '得荣县', '得荣', '99.28803', '28.71134', 3, 0, 1), - (513400, 510000, '凉山彝族自治州', '凉山', '102.25874', '27.886763', 2, 0, 1), - (513401, 513400, '西昌市', '西昌', '102.25876', '27.885786', 3, 0, 1), - (513422, 513400, '木里藏族自治县', '木里', '101.28018', '27.926859', 3, 0, 1), - (513423, 513400, '盐源县', '盐源', '101.50891', '27.423414', 3, 0, 1), - (513424, 513400, '德昌县', '德昌', '102.17885', '27.403828', 3, 0, 1), - (513425, 513400, '会理县', '会理', '102.24955', '26.658703', 3, 0, 1), - (513426, 513400, '会东县', '会东', '102.57899', '26.630713', 3, 0, 1), - (513427, 513400, '宁南县', '宁南', '102.75738', '27.065205', 3, 0, 1), - (513428, 513400, '普格县', '普格', '102.541084', '27.376827', 3, 0, 1), - (513429, 513400, '布拖县', '布拖', '102.8088', '27.709063', 3, 0, 1), - (513430, 513400, '金阳县', '金阳', '103.2487', '27.695915', 3, 0, 1), - (513431, 513400, '昭觉县', '昭觉', '102.843994', '28.010553', 3, 0, 1), - (513432, 513400, '喜德县', '喜德', '102.41234', '28.305487', 3, 0, 1), - (513433, 513400, '冕宁县', '冕宁', '102.170044', '28.550844', 3, 0, 1), - (513434, 513400, '越西县', '越西', '102.50887', '28.639631', 3, 0, 1), - (513435, 513400, '甘洛县', '甘洛', '102.775925', '28.977095', 3, 0, 1), - (513436, 513400, '美姑县', '美姑', '103.132', '28.327946', 3, 0, 1), - (513437, 513400, '雷波县', '雷波', '103.57159', '28.262945', 3, 0, 1), - (520000, 0, '贵州省', '贵州', '106.71348', '26.578342', 1, 0, 1), - (520100, 520000, '贵阳市', '贵阳', '106.71348', '26.578342', 2, 0, 1), - (520102, 520100, '南明区', '南明', '106.715965', '26.573744', 3, 0, 1), - (520103, 520100, '云岩区', '云岩', '106.713394', '26.58301', 3, 0, 1), - (520111, 520100, '花溪区', '花溪', '106.67079', '26.410463', 3, 0, 1), - (520112, 520100, '乌当区', '乌当', '106.76212', '26.630928', 3, 0, 1), - (520113, 520100, '白云区', '白云', '106.63303', '26.67685', 3, 0, 1), - (520115, 520100, '观山湖区', '观山湖', '106.62254', '26.6015', 3, 0, 1), - (520121, 520100, '开阳县', '开阳', '106.96944', '27.056793', 3, 0, 1), - (520122, 520100, '息烽县', '息烽', '106.73769', '27.092665', 3, 0, 1), - (520123, 520100, '修文县', '修文', '106.59922', '26.840672', 3, 0, 1), - (520181, 520100, '清镇市', '清镇', '106.470276', '26.551289', 3, 0, 1), - (520200, 520000, '六盘水市', '六盘水', '104.84674', '26.584642', 2, 0, 1), - (520201, 520200, '钟山区', '钟山', '104.846245', '26.584805', 3, 0, 1), - (520203, 520200, '六枝特区', '六枝特', '105.474236', '26.210663', 3, 0, 1), - (520221, 520200, '水城县', '水城', '104.95685', '26.540478', 3, 0, 1), - (520281, 520200, '盘州市', '盘州', '104.47158', '25.70993', 3, 0, 1), - (520300, 520000, '遵义市', '遵义', '106.93726', '27.706627', 2, 0, 1), - (520302, 520300, '红花岗区', '红花岗', '106.94379', '27.694395', 3, 0, 1), - (520303, 520300, '汇川区', '汇川', '106.93726', '27.706627', 3, 0, 1), - (520304, 520300, '播州区', '播州', '106.82922', '27.53625', 3, 0, 1), - (520322, 520300, '桐梓县', '桐梓', '106.82659', '28.13156', 3, 0, 1), - (520323, 520300, '绥阳县', '绥阳', '107.191025', '27.951342', 3, 0, 1), - (520324, 520300, '正安县', '正安', '107.44187', '28.550337', 3, 0, 1), - (520325, 520300, '道真仡佬族苗族自治县', '道真', '107.60534', '28.880089', 3, 0, 1), - (520326, 520300, '务川仡佬族苗族自治县', '务川', '107.887856', '28.521566', 3, 0, 1), - (520327, 520300, '凤冈县', '凤冈', '107.72202', '27.960857', 3, 0, 1), - (520328, 520300, '湄潭县', '湄潭', '107.485725', '27.765839', 3, 0, 1), - (520329, 520300, '余庆县', '余庆', '107.89256', '27.221552', 3, 0, 1), - (520330, 520300, '习水县', '习水', '106.20095', '28.327826', 3, 0, 1), - (520381, 520300, '赤水市', '赤水', '105.69811', '28.587057', 3, 0, 1), - (520382, 520300, '仁怀市', '仁怀', '106.412476', '27.803377', 3, 0, 1), - (520400, 520000, '安顺市', '安顺', '105.93219', '26.245544', 2, 0, 1), - (520402, 520400, '西秀区', '西秀', '105.94617', '26.248323', 3, 0, 1); - - -INSERT INTO `nc_sys_area` VALUES - (520403, 520400, '平坝区', '平坝', '106.2553', '26.40574', 3, 0, 1), - (520422, 520400, '普定县', '普定', '105.745605', '26.305794', 3, 0, 1), - (520423, 520400, '镇宁布依族苗族自治县', '镇宁', '105.768654', '26.056095', 3, 0, 1), - (520424, 520400, '关岭布依族苗族自治县', '关岭', '105.618454', '25.944248', 3, 0, 1), - (520425, 520400, '紫云苗族布依族自治县', '紫云', '106.08452', '25.751568', 3, 0, 1), - (520500, 520000, '毕节市', '毕节', '', '', 2, 0, 1), - (520502, 520500, '七星关区', '七星关', '105.30504', '27.29847', 3, 0, 1), - (520521, 520500, '大方县', '大方', '105.613', '27.14161', 3, 0, 1), - (520522, 520500, '黔西县', '黔西', '106.0323', '27.00866', 3, 0, 1), - (520523, 520500, '金沙县', '金沙', '106.22014', '27.45922', 3, 0, 1), - (520524, 520500, '织金县', '织金', '105.77488', '26.66301', 3, 0, 1), - (520525, 520500, '纳雍县', '纳雍', '105.38269', '26.7777', 3, 0, 1), - (520526, 520500, '威宁彝族回族苗族自治县', '威宁彝族回族苗族自治县', '104.27872', '26.85641', 3, 0, 1), - (520527, 520500, '赫章县', '赫章', '104.7274', '27.12328', 3, 0, 1), - (520600, 520000, '铜仁市', '铜仁', '', '', 2, 0, 1), - (520602, 520600, '碧江区', '碧江', '109.26433', '27.81621', 3, 0, 1), - (520603, 520600, '万山区', '万山', '109.21369', '27.51796', 3, 0, 1), - (520621, 520600, '江口县', '江口', '108.83967', '27.69956', 3, 0, 1), - (520622, 520600, '玉屏侗族自治县', '玉屏侗族自治县', '108.91212', '27.23637', 3, 0, 1), - (520623, 520600, '石阡县', '石阡', '108.2233', '27.51382', 3, 0, 1), - (520624, 520600, '思南县', '思南', '108.2528', '27.93886', 3, 0, 1), - (520625, 520600, '印江土家族苗族自治县', '印江土家族苗族自治县', '108.40958', '27.9941', 3, 0, 1), - (520626, 520600, '德江县', '德江', '108.11987', '28.26408', 3, 0, 1), - (520627, 520600, '沿河土家族自治县', '沿河土家族自治县', '108.50301', '28.56397', 3, 0, 1), - (520628, 520600, '松桃苗族自治县', '松桃苗族自治县', '109.20316', '28.15414', 3, 0, 1), - (522300, 520000, '黔西南布依族苗族自治州', '黔西南', '104.89797', '25.08812', 2, 0, 1), - (522301, 522300, '兴义市', '兴义', '104.89798', '25.088598', 3, 0, 1), - (522302, 522300, '兴仁市', '兴仁', '105.18639', '25.43511', 3, 0, 1), - (522323, 522300, '普安县', '普安', '104.955345', '25.786404', 3, 0, 1), - (522324, 522300, '晴隆县', '晴隆', '105.21877', '25.832882', 3, 0, 1), - (522325, 522300, '贞丰县', '贞丰', '105.65013', '25.385752', 3, 0, 1), - (522326, 522300, '望谟县', '望谟', '106.09156', '25.166668', 3, 0, 1), - (522327, 522300, '册亨县', '册亨', '105.81241', '24.983337', 3, 0, 1), - (522328, 522300, '安龙县', '安龙', '105.4715', '25.10896', 3, 0, 1), - (522600, 520000, '黔东南苗族侗族自治州', '黔东南', '107.977486', '26.583351', 2, 0, 1), - (522601, 522600, '凯里市', '凯里', '107.97754', '26.582964', 3, 0, 1), - (522622, 522600, '黄平县', '黄平', '107.90134', '26.896973', 3, 0, 1), - (522623, 522600, '施秉县', '施秉', '108.12678', '27.034657', 3, 0, 1), - (522624, 522600, '三穗县', '三穗', '108.68112', '26.959885', 3, 0, 1), - (522625, 522600, '镇远县', '镇远', '108.42365', '27.050234', 3, 0, 1), - (522626, 522600, '岑巩县', '岑巩', '108.81646', '27.173244', 3, 0, 1), - (522627, 522600, '天柱县', '天柱', '109.2128', '26.909683', 3, 0, 1), - (522628, 522600, '锦屏县', '锦屏', '109.20252', '26.680626', 3, 0, 1), - (522629, 522600, '剑河县', '剑河', '108.4405', '26.727348', 3, 0, 1), - (522630, 522600, '台江县', '台江', '108.31464', '26.669138', 3, 0, 1), - (522631, 522600, '黎平县', '黎平', '109.136505', '26.230637', 3, 0, 1), - (522632, 522600, '榕江县', '榕江', '108.52103', '25.931086', 3, 0, 1), - (522633, 522600, '从江县', '从江', '108.91265', '25.747059', 3, 0, 1), - (522634, 522600, '雷山县', '雷山', '108.07961', '26.381027', 3, 0, 1), - (522635, 522600, '麻江县', '麻江', '107.59317', '26.494802', 3, 0, 1), - (522636, 522600, '丹寨县', '丹寨', '107.79481', '26.199497', 3, 0, 1), - (522700, 520000, '黔南布依族苗族自治州', '黔南', '107.51716', '26.258219', 2, 0, 1), - (522701, 522700, '都匀市', '都匀', '107.51702', '26.258205', 3, 0, 1), - (522702, 522700, '福泉市', '福泉', '107.51351', '26.702509', 3, 0, 1), - (522722, 522700, '荔波县', '荔波', '107.8838', '25.41224', 3, 0, 1), - (522723, 522700, '贵定县', '贵定', '107.23359', '26.580807', 3, 0, 1), - (522725, 522700, '瓮安县', '瓮安', '107.47842', '27.06634', 3, 0, 1), - (522726, 522700, '独山县', '独山', '107.542755', '25.826283', 3, 0, 1), - (522727, 522700, '平塘县', '平塘', '107.32405', '25.831802', 3, 0, 1), - (522728, 522700, '罗甸县', '罗甸', '106.75001', '25.429893', 3, 0, 1), - (522729, 522700, '长顺县', '长顺', '106.44737', '26.022116', 3, 0, 1), - (522730, 522700, '龙里县', '龙里', '106.97773', '26.448809', 3, 0, 1), - (522731, 522700, '惠水县', '惠水', '106.657845', '26.128637', 3, 0, 1), - (522732, 522700, '三都水族自治县', '三都', '107.87747', '25.985184', 3, 0, 1), - (530000, 0, '云南省', '云南', '102.71225', '25.04061', 1, 0, 1), - (530100, 530000, '昆明市', '昆明', '102.71225', '25.04061', 2, 0, 1), - (530102, 530100, '五华区', '五华', '102.704414', '25.042166', 3, 0, 1), - (530103, 530100, '盘龙区', '盘龙', '102.72904', '25.070238', 3, 0, 1), - (530111, 530100, '官渡区', '官渡', '102.723434', '25.021212', 3, 0, 1), - (530112, 530100, '西山区', '西山', '102.7059', '25.02436', 3, 0, 1), - (530113, 530100, '东川区', '东川', '103.182', '26.08349', 3, 0, 1), - (530114, 530100, '呈贡区', '呈贡', '102.82147', '24.88554', 3, 0, 1), - (530115, 530100, '晋宁区', '晋宁', '102.59559', '24.66982', 3, 0, 1), - (530124, 530100, '富民县', '富民', '102.49789', '25.219667', 3, 0, 1), - (530125, 530100, '宜良县', '宜良', '103.14599', '24.918215', 3, 0, 1), - (530126, 530100, '石林彝族自治县', '石林', '103.271965', '24.754545', 3, 0, 1), - (530127, 530100, '嵩明县', '嵩明', '103.03878', '25.335087', 3, 0, 1), - (530128, 530100, '禄劝彝族苗族自治县', '禄劝', '102.46905', '25.556534', 3, 0, 1), - (530129, 530100, '寻甸回族彝族自治县', '寻甸', '103.25759', '25.559475', 3, 0, 1), - (530181, 530100, '安宁市', '安宁', '102.48554', '24.921785', 3, 0, 1), - (530300, 530000, '曲靖市', '曲靖', '103.79785', '25.501556', 2, 0, 1), - (530302, 530300, '麒麟区', '麒麟', '103.79806', '25.501268', 3, 0, 1), - (530303, 530300, '沾益区', '沾益', '103.82183', '25.60167', 3, 0, 1), - (530304, 530300, '马龙区', '马龙', '103.57834', '25.42807', 3, 0, 1), - (530322, 530300, '陆良县', '陆良', '103.655235', '25.022879', 3, 0, 1), - (530323, 530300, '师宗县', '师宗', '103.993805', '24.825682', 3, 0, 1), - (530324, 530300, '罗平县', '罗平', '104.309265', '24.885708', 3, 0, 1), - (530325, 530300, '富源县', '富源', '104.25692', '25.67064', 3, 0, 1), - (530326, 530300, '会泽县', '会泽', '103.30004', '26.41286', 3, 0, 1), - (530381, 530300, '宣威市', '宣威', '104.09554', '26.227777', 3, 0, 1), - (530400, 530000, '玉溪市', '玉溪', '102.54391', '24.35046', 2, 0, 1), - (530402, 530400, '红塔区', '红塔', '102.543465', '24.350754', 3, 0, 1), - (530403, 530400, '江川区', '江川', '102.75376', '24.28744', 3, 0, 1), - (530423, 530400, '通海县', '通海', '102.76004', '24.112206', 3, 0, 1), - (530424, 530400, '华宁县', '华宁', '102.928986', '24.189808', 3, 0, 1), - (530425, 530400, '易门县', '易门', '102.16211', '24.669598', 3, 0, 1), - (530426, 530400, '峨山彝族自治县', '峨山', '102.40436', '24.173256', 3, 0, 1), - (530427, 530400, '新平彝族傣族自治县', '新平', '101.990906', '24.0664', 3, 0, 1), - (530428, 530400, '元江哈尼族彝族傣族自治县', '元江', '101.99966', '23.597618', 3, 0, 1), - (530481, 530400, '澄江市', '澄江', '102.90819', '24.67379', 3, 0, 1), - (530500, 530000, '保山市', '保山', '99.16713', '25.111801', 2, 0, 1), - (530502, 530500, '隆阳区', '隆阳', '99.165825', '25.112144', 3, 0, 1), - (530521, 530500, '施甸县', '施甸', '99.18376', '24.730846', 3, 0, 1), - (530523, 530500, '龙陵县', '龙陵', '98.693565', '24.591911', 3, 0, 1), - (530524, 530500, '昌宁县', '昌宁', '99.61234', '24.823662', 3, 0, 1), - (530581, 530500, '腾冲市', '腾冲', '98.49097', '25.02053', 3, 0, 1), - (530600, 530000, '昭通市', '昭通', '103.71722', '27.337', 2, 0, 1), - (530602, 530600, '昭阳区', '昭阳', '103.71727', '27.336636', 3, 0, 1), - (530621, 530600, '鲁甸县', '鲁甸', '103.54933', '27.191637', 3, 0, 1), - (530622, 530600, '巧家县', '巧家', '102.92928', '26.9117', 3, 0, 1), - (530623, 530600, '盐津县', '盐津', '104.23506', '28.106922', 3, 0, 1), - (530624, 530600, '大关县', '大关', '103.89161', '27.747114', 3, 0, 1), - (530625, 530600, '永善县', '永善', '103.63732', '28.231525', 3, 0, 1), - (530626, 530600, '绥江县', '绥江', '103.9611', '28.599953', 3, 0, 1), - (530627, 530600, '镇雄县', '镇雄', '104.873055', '27.436268', 3, 0, 1), - (530628, 530600, '彝良县', '彝良', '104.04849', '27.627424', 3, 0, 1), - (530629, 530600, '威信县', '威信', '105.04869', '27.843382', 3, 0, 1), - (530681, 530600, '水富市', '水富', '104.41562', '28.63002', 3, 0, 1), - (530700, 530000, '丽江市', '丽江', '100.233025', '26.872108', 2, 0, 1), - (530702, 530700, '古城区', '古城', '100.23441', '26.872229', 3, 0, 1), - (530721, 530700, '玉龙纳西族自治县', '玉龙', '100.23831', '26.830593', 3, 0, 1), - (530722, 530700, '永胜县', '永胜', '100.7509', '26.685623', 3, 0, 1), - (530723, 530700, '华坪县', '华坪', '101.2678', '26.628834', 3, 0, 1), - (530724, 530700, '宁蒗彝族自治县', '宁蒗', '100.852425', '27.281109', 3, 0, 1), - (530800, 530000, '普洱市', '普洱', '100.97234', '22.77732', 2, 0, 1), - (530802, 530800, '思茅区', '思茅', '100.97323', '22.776594', 3, 0, 1), - (530821, 530800, '宁洱哈尼族彝族自治县', '宁洱', '101.04524', '23.062508', 3, 0, 1), - (530822, 530800, '墨江哈尼族自治县', '墨江', '101.68761', '23.428165', 3, 0, 1), - (530823, 530800, '景东彝族自治县', '景东', '100.84001', '24.448523', 3, 0, 1), - (530824, 530800, '景谷傣族彝族自治县', '景谷', '100.70142', '23.500278', 3, 0, 1), - (530825, 530800, '镇沅彝族哈尼族拉祜族自治县', '镇沅', '101.10851', '24.005713', 3, 0, 1), - (530826, 530800, '江城哈尼族彝族自治县', '江城', '101.859146', '22.58336', 3, 0, 1), - (530827, 530800, '孟连傣族拉祜族佤族自治县', '孟连', '99.5854', '22.325924', 3, 0, 1), - (530828, 530800, '澜沧拉祜族自治县', '澜沧', '99.9312', '22.553083', 3, 0, 1), - (530829, 530800, '西盟佤族自治县', '西盟', '99.594376', '22.644423', 3, 0, 1), - (530900, 530000, '临沧市', '临沧', '100.08697', '23.886566', 2, 0, 1), - (530902, 530900, '临翔区', '临翔', '100.08649', '23.886562', 3, 0, 1), - (530921, 530900, '凤庆县', '凤庆', '99.91871', '24.592737', 3, 0, 1), - (530922, 530900, '云县', '云县', '100.12563', '24.439026', 3, 0, 1), - (530923, 530900, '永德县', '永德', '99.25368', '24.028158', 3, 0, 1), - (530924, 530900, '镇康县', '镇康', '98.82743', '23.761415', 3, 0, 1), - (530925, 530900, '双江拉祜族佤族布朗族傣族自治县', '双江', '99.82442', '23.477476', 3, 0, 1), - (530926, 530900, '耿马傣族佤族自治县', '耿马', '99.4025', '23.534578', 3, 0, 1), - (530927, 530900, '沧源佤族自治县', '沧源', '99.2474', '23.146887', 3, 0, 1), - (532300, 530000, '楚雄彝族自治州', '楚雄', '101.54604', '25.041988', 2, 0, 1), - (532301, 532300, '楚雄市', '楚雄', '101.54614', '25.040913', 3, 0, 1), - (532322, 532300, '双柏县', '双柏', '101.63824', '24.685095', 3, 0, 1), - (532323, 532300, '牟定县', '牟定', '101.543045', '25.31211', 3, 0, 1), - (532324, 532300, '南华县', '南华', '101.274994', '25.192408', 3, 0, 1), - (532325, 532300, '姚安县', '姚安', '101.238396', '25.505404', 3, 0, 1), - (532326, 532300, '大姚县', '大姚', '101.3236', '25.722347', 3, 0, 1), - (532327, 532300, '永仁县', '永仁', '101.67117', '26.056316', 3, 0, 1), - (532328, 532300, '元谋县', '元谋', '101.870834', '25.703314', 3, 0, 1), - (532329, 532300, '武定县', '武定', '102.406784', '25.5301', 3, 0, 1), - (532331, 532300, '禄丰县', '禄丰', '102.07569', '25.14327', 3, 0, 1), - (532500, 530000, '红河哈尼族彝族自治州', '红河', '103.384186', '23.366776', 2, 0, 1), - (532501, 532500, '个旧市', '个旧', '103.154755', '23.360382', 3, 0, 1), - (532502, 532500, '开远市', '开远', '103.25868', '23.713833', 3, 0, 1), - (532503, 532500, '蒙自市', '蒙自', '103.36481', '23.39622', 3, 0, 1), - (532504, 532500, '弥勒市', '弥勒', '103.41499', '24.41059', 3, 0, 1), - (532523, 532500, '屏边苗族自治县', '屏边', '103.687225', '22.987013', 3, 0, 1), - (532524, 532500, '建水县', '建水', '102.820496', '23.618387', 3, 0, 1), - (532525, 532500, '石屏县', '石屏', '102.48447', '23.712568', 3, 0, 1), - (532527, 532500, '泸西县', '泸西', '103.75962', '24.532368', 3, 0, 1), - (532528, 532500, '元阳县', '元阳', '102.83706', '23.219772', 3, 0, 1), - (532529, 532500, '红河县', '红河', '102.42121', '23.36919', 3, 0, 1), - (532530, 532500, '金平苗族瑶族傣族自治县', '金平', '103.228355', '22.779982', 3, 0, 1), - (532531, 532500, '绿春县', '绿春', '102.39286', '22.99352', 3, 0, 1), - (532532, 532500, '河口瑶族自治县', '河口', '103.96159', '22.507563', 3, 0, 1), - (532600, 530000, '文山壮族苗族自治州', '文山', '104.24401', '23.36951', 2, 0, 1), - (532601, 532600, '文山市', '文山', '104.233', '23.38678', 3, 0, 1), - (532622, 532600, '砚山县', '砚山', '104.34399', '23.6123', 3, 0, 1), - (532623, 532600, '西畴县', '西畴', '104.67571', '23.437439', 3, 0, 1), - (532624, 532600, '麻栗坡县', '麻栗坡', '104.7019', '23.124203', 3, 0, 1), - (532625, 532600, '马关县', '马关', '104.39862', '23.011723', 3, 0, 1), - (532626, 532600, '丘北县', '丘北', '104.19437', '24.040981', 3, 0, 1), - (532627, 532600, '广南县', '广南', '105.05669', '24.050272', 3, 0, 1), - (532628, 532600, '富宁县', '富宁', '105.62856', '23.626493', 3, 0, 1), - (532800, 530000, '西双版纳傣族自治州', '西双版纳', '100.79794', '22.001724', 2, 0, 1), - (532801, 532800, '景洪市', '景洪', '100.79795', '22.002087', 3, 0, 1), - (532822, 532800, '勐海县', '勐海', '100.44829', '21.955866', 3, 0, 1), - (532823, 532800, '勐腊县', '勐腊', '101.567055', '21.479448', 3, 0, 1), - (532900, 530000, '大理白族自治州', '大理', '100.22567', '25.589449', 2, 0, 1), - (532901, 532900, '大理市', '大理', '100.24137', '25.593067', 3, 0, 1), - (532922, 532900, '漾濞彝族自治县', '漾濞', '99.95797', '25.669542', 3, 0, 1), - (532923, 532900, '祥云县', '祥云', '100.55402', '25.477072', 3, 0, 1), - (532924, 532900, '宾川县', '宾川', '100.57896', '25.825905', 3, 0, 1), - (532925, 532900, '弥渡县', '弥渡', '100.49067', '25.342594', 3, 0, 1), - (532926, 532900, '南涧彝族自治县', '南涧', '100.518684', '25.041279', 3, 0, 1), - (532927, 532900, '巍山彝族回族自治县', '巍山', '100.30793', '25.23091', 3, 0, 1), - (532928, 532900, '永平县', '永平', '99.53354', '25.46128', 3, 0, 1), - (532929, 532900, '云龙县', '云龙', '99.3694', '25.884954', 3, 0, 1), - (532930, 532900, '洱源县', '洱源', '99.951706', '26.111183', 3, 0, 1), - (532931, 532900, '剑川县', '剑川', '99.90588', '26.530066', 3, 0, 1), - (532932, 532900, '鹤庆县', '鹤庆', '100.17338', '26.55839', 3, 0, 1), - (533100, 530000, '德宏傣族景颇族自治州', '德宏', '98.57836', '24.436693', 2, 0, 1), - (533102, 533100, '瑞丽市', '瑞丽', '97.85588', '24.010735', 3, 0, 1), - (533103, 533100, '芒市', '芒市', '98.57761', '24.436699', 3, 0, 1), - (533122, 533100, '梁河县', '梁河', '98.298195', '24.80742', 3, 0, 1), - (533123, 533100, '盈江县', '盈江', '97.93393', '24.709541', 3, 0, 1), - (533124, 533100, '陇川县', '陇川', '97.79444', '24.184065', 3, 0, 1), - (533300, 530000, '怒江傈僳族自治州', '怒江', '98.8543', '25.850948', 2, 0, 1), - (533301, 533300, '泸水市', '泸水', '98.85804', '25.82306', 3, 0, 1), - (533323, 533300, '福贡县', '福贡', '98.86742', '26.902739', 3, 0, 1), - (533324, 533300, '贡山独龙族怒族自治县', '贡山', '98.66614', '27.738054', 3, 0, 1), - (533325, 533300, '兰坪白族普米族自治县', '兰坪', '99.42138', '26.453838', 3, 0, 1), - (533400, 530000, '迪庆藏族自治州', '迪庆', '99.70647', '27.826853', 2, 0, 1), - (533401, 533400, '香格里拉市', '香格里拉', '99.74317', '27.84254', 3, 0, 1), - (533422, 533400, '德钦县', '德钦', '98.91506', '28.483273', 3, 0, 1), - (533423, 533400, '维西傈僳族自治县', '维西', '99.286354', '27.180948', 3, 0, 1), - (540000, 0, '西藏自治区', '西藏', '91.13221', '29.66036', 1, 0, 1), - (540100, 540000, '拉萨市', '拉萨', '91.13221', '29.66036', 2, 0, 1), - (540102, 540100, '城关区', '城关', '91.13291', '29.659472', 3, 0, 1), - (540103, 540100, '堆龙德庆区', '堆龙德庆', '91.00338', '29.64602', 3, 0, 1), - (540104, 540100, '达孜区', '达孜', '91.34979', '29.66933', 3, 0, 1), - (540121, 540100, '林周县', '林周', '91.26184', '29.895754', 3, 0, 1), - (540122, 540100, '当雄县', '当雄', '91.10355', '30.47482', 3, 0, 1), - (540123, 540100, '尼木县', '尼木', '90.16554', '29.431347', 3, 0, 1), - (540124, 540100, '曲水县', '曲水', '90.73805', '29.349895', 3, 0, 1), - (540127, 540100, '墨竹工卡县', '墨竹工卡', '91.731155', '29.834658', 3, 0, 1), - (540200, 540000, '日喀则市', '日喀则', '', '', 2, 0, 1), - (540202, 540200, '桑珠孜区', '桑珠孜', '88.88697', '29.26969', 3, 0, 1), - (540221, 540200, '南木林县', '南木林', '89.09936', '29.68224', 3, 0, 1), - (540222, 540200, '江孜县', '江孜', '89.60558', '28.91152', 3, 0, 1), - (540223, 540200, '定日县', '定日', '87.12607', '28.65874', 3, 0, 1), - (540224, 540200, '萨迦县', '萨迦', '88.02172', '28.89919', 3, 0, 1), - (540225, 540200, '拉孜县', '拉孜', '87.63718', '29.08164', 3, 0, 1), - (540226, 540200, '昂仁县', '昂仁', '87.23617', '29.29482', 3, 0, 1), - (540227, 540200, '谢通门县', '谢通门', '88.26166', '29.43234', 3, 0, 1), - (540228, 540200, '白朗县', '白朗', '89.26156', '29.10919', 3, 0, 1), - (540229, 540200, '仁布县', '仁布', '89.842', '29.23089', 3, 0, 1), - (540230, 540200, '康马县', '康马', '89.68169', '28.55567', 3, 0, 1), - (540231, 540200, '定结县', '定结', '87.76606', '28.36408', 3, 0, 1), - (540232, 540200, '仲巴县', '仲巴', '84.02454', '29.72419', 3, 0, 1), - (540233, 540200, '亚东县', '亚东', '88.90708', '27.48592', 3, 0, 1), - (540234, 540200, '吉隆县', '吉隆', '85.29737', '28.85254', 3, 0, 1), - (540235, 540200, '聂拉木县', '聂拉木', '85.98232', '28.15499', 3, 0, 1), - (540236, 540200, '萨嘎县', '萨嘎', '85.23421', '29.32943', 3, 0, 1), - (540237, 540200, '岗巴县', '岗巴', '88.52015', '28.2746', 3, 0, 1), - (540300, 540000, '昌都市', '昌都', '', '', 2, 0, 1), - (540302, 540300, '卡若区', '卡若', '97.18039', '31.13831', 3, 0, 1), - (540321, 540300, '江达县', '江达', '98.21822', '31.49968', 3, 0, 1), - (540322, 540300, '贡觉县', '贡觉', '98.2708', '30.86016', 3, 0, 1), - (540323, 540300, '类乌齐县', '类乌齐', '96.6002', '31.21155', 3, 0, 1), - (540324, 540300, '丁青县', '丁青', '95.59572', '31.4125', 3, 0, 1), - (540325, 540300, '察雅县', '察雅', '97.56877', '30.65363', 3, 0, 1), - (540326, 540300, '八宿县', '八宿', '96.91785', '30.0532', 3, 0, 1), - (540327, 540300, '左贡县', '左贡', '97.84085', '29.67091', 3, 0, 1), - (540328, 540300, '芒康县', '芒康', '98.59312', '29.68008', 3, 0, 1), - (540329, 540300, '洛隆县', '洛隆', '95.82482', '30.74181', 3, 0, 1), - (540330, 540300, '边坝县', '边坝', '94.7079', '30.93345', 3, 0, 1), - (540400, 540000, '林芝市', '林芝', '', '', 2, 0, 1), - (540402, 540400, '巴宜区', '巴宜', '94.36119', '29.63654', 3, 0, 1), - (540421, 540400, '工布江达县', '工布江达', '93.24611', '29.88531', 3, 0, 1), - (540422, 540400, '米林县', '米林', '94.21315', '29.21607', 3, 0, 1), - (540423, 540400, '墨脱县', '墨脱', '95.33304', '29.32521', 3, 0, 1), - (540424, 540400, '波密县', '波密', '95.76761', '29.85903', 3, 0, 1), - (540425, 540400, '察隅县', '察隅', '97.46687', '28.66154', 3, 0, 1), - (540426, 540400, '朗县', '朗县', '93.07482', '29.04607', 3, 0, 1), - (540500, 540000, '山南市', '山南', '', '', 2, 0, 1), - (540502, 540500, '乃东区', '乃东', '91.76141', '29.22484', 3, 0, 1), - (540521, 540500, '扎囊县', '扎囊', '91.33735', '29.245', 3, 0, 1), - (540522, 540500, '贡嘎县', '贡嘎', '90.98421', '29.28947', 3, 0, 1), - (540523, 540500, '桑日县', '桑日', '92.01579', '29.25906', 3, 0, 1), - (540524, 540500, '琼结县', '琼结', '91.68385', '29.02464', 3, 0, 1), - (540525, 540500, '曲松县', '曲松', '92.20222', '29.06277', 3, 0, 1), - (540526, 540500, '措美县', '措美', '91.43361', '28.43793', 3, 0, 1), - (540527, 540500, '洛扎县', '洛扎', '90.85998', '28.38569', 3, 0, 1), - (540528, 540500, '加查县', '加查', '92.59387', '29.14023', 3, 0, 1), - (540529, 540500, '隆子县', '隆子', '92.46177', '28.40681', 3, 0, 1), - (540530, 540500, '错那县', '错那', '91.9571', '27.99099', 3, 0, 1), - (540531, 540500, '浪卡子县', '浪卡子', '90.40011', '28.96768', 3, 0, 1), - (540600, 540000, '那曲市', '那曲', '', '', 2, 0, 1), - (540602, 540600, '色尼区', '色尼', '92.05355', '31.46988', 3, 0, 1), - (540621, 540600, '嘉黎县', '嘉黎', '93.23236', '30.64087', 3, 0, 1), - (540622, 540600, '比如县', '比如', '93.6813', '31.47785', 3, 0, 1), - (540623, 540600, '聂荣县', '聂荣', '92.30327', '32.10784', 3, 0, 1), - (540624, 540600, '安多县', '安多', '91.68258', '32.265', 3, 0, 1), - (540625, 540600, '申扎县', '申扎', '88.70982', '30.93043', 3, 0, 1), - (540626, 540600, '索县', '索县', '93.78556', '31.88673', 3, 0, 1), - (540627, 540600, '班戈县', '班戈', '90.00987', '31.39199', 3, 0, 1), - (540628, 540600, '巴青县', '巴青', '94.05345', '31.9184', 3, 0, 1), - (540629, 540600, '尼玛县', '尼玛', '87.23691', '31.78448', 3, 0, 1), - (540630, 540600, '双湖县', '双湖', '88.83691', '33.18763', 3, 0, 1), - (542500, 540000, '阿里地区', '阿里', '80.1055', '32.503185', 2, 0, 1), - (542521, 542500, '普兰县', '普兰', '81.17759', '30.291897', 3, 0, 1), - (542522, 542500, '札达县', '札达', '79.80319', '31.478586', 3, 0, 1), - (542523, 542500, '噶尔县', '噶尔', '80.105', '32.503372', 3, 0, 1), - (542524, 542500, '日土县', '日土', '79.73193', '33.382454', 3, 0, 1), - (542525, 542500, '革吉县', '革吉', '81.1429', '32.38919', 3, 0, 1), - (542526, 542500, '改则县', '改则', '84.062386', '32.302074', 3, 0, 1), - (542527, 542500, '措勤县', '措勤', '85.159256', '31.016773', 3, 0, 1), - (610000, 0, '陕西省', '陕西', '108.94802', '34.26316', 1, 0, 1), - (610100, 610000, '西安市', '西安', '108.94802', '34.26316', 2, 0, 1), - (610102, 610100, '新城区', '新城', '108.9599', '34.26927', 3, 0, 1), - (610103, 610100, '碑林区', '碑林', '108.94699', '34.25106', 3, 0, 1), - (610104, 610100, '莲湖区', '莲湖', '108.9332', '34.2656', 3, 0, 1), - (610111, 610100, '灞桥区', '灞桥', '109.06726', '34.267452', 3, 0, 1), - (610112, 610100, '未央区', '未央', '108.94602', '34.30823', 3, 0, 1), - (610113, 610100, '雁塔区', '雁塔', '108.92659', '34.21339', 3, 0, 1), - (610114, 610100, '阎良区', '阎良', '109.22802', '34.66214', 3, 0, 1), - (610115, 610100, '临潼区', '临潼', '109.21399', '34.372066', 3, 0, 1), - (610116, 610100, '长安区', '长安', '108.94158', '34.157097', 3, 0, 1), - (610117, 610100, '高陵区', '高陵', '109.08822', '34.53487', 3, 0, 1), - (610118, 610100, '鄠邑区', '鄠邑', '108.60494', '34.10847', 3, 0, 1), - (610122, 610100, '蓝田县', '蓝田', '109.317635', '34.15619', 3, 0, 1), - (610124, 610100, '周至县', '周至', '108.21647', '34.161533', 3, 0, 1), - (610200, 610000, '铜川市', '铜川', '108.97961', '34.91658', 2, 0, 1), - (610202, 610200, '王益区', '王益', '109.07586', '35.0691', 3, 0, 1), - (610203, 610200, '印台区', '印台', '109.100815', '35.111927', 3, 0, 1), - (610204, 610200, '耀州区', '耀州', '108.96254', '34.910206', 3, 0, 1), - (610222, 610200, '宜君县', '宜君', '109.11828', '35.398766', 3, 0, 1), - (610300, 610000, '宝鸡市', '宝鸡', '107.14487', '34.369316', 2, 0, 1), - (610302, 610300, '渭滨区', '渭滨', '107.14447', '34.37101', 3, 0, 1), - (610303, 610300, '金台区', '金台', '107.14994', '34.37519', 3, 0, 1), - (610304, 610300, '陈仓区', '陈仓', '107.383644', '34.35275', 3, 0, 1), - (610322, 610300, '凤翔县', '凤翔', '107.40057', '34.521667', 3, 0, 1), - (610323, 610300, '岐山县', '岐山', '107.624466', '34.44296', 3, 0, 1), - (610324, 610300, '扶风县', '扶风', '107.89142', '34.375496', 3, 0, 1), - (610326, 610300, '眉县', '眉县', '107.75237', '34.272137', 3, 0, 1), - (610327, 610300, '陇县', '陇县', '106.85706', '34.89326', 3, 0, 1), - (610328, 610300, '千阳县', '千阳', '107.13299', '34.642586', 3, 0, 1), - (610329, 610300, '麟游县', '麟游', '107.79661', '34.677715', 3, 0, 1), - (610330, 610300, '凤县', '凤县', '106.525215', '33.912464', 3, 0, 1), - (610331, 610300, '太白县', '太白', '107.316536', '34.059216', 3, 0, 1), - (610400, 610000, '咸阳市', '咸阳', '108.70512', '34.33344', 2, 0, 1), - (610402, 610400, '秦都区', '秦都', '108.69864', '34.3298', 3, 0, 1), - (610403, 610400, '杨陵区', '杨陵', '108.08635', '34.27135', 3, 0, 1), - (610404, 610400, '渭城区', '渭城', '108.73096', '34.336845', 3, 0, 1), - (610422, 610400, '三原县', '三原', '108.94348', '34.613995', 3, 0, 1), - (610423, 610400, '泾阳县', '泾阳', '108.83784', '34.528492', 3, 0, 1), - (610424, 610400, '乾县', '乾县', '108.247406', '34.52726', 3, 0, 1), - (610425, 610400, '礼泉县', '礼泉', '108.428314', '34.482582', 3, 0, 1), - (610426, 610400, '永寿县', '永寿', '108.14313', '34.69262', 3, 0, 1), - (610428, 610400, '长武县', '长武', '107.79584', '35.206123', 3, 0, 1), - (610429, 610400, '旬邑县', '旬邑', '108.337234', '35.112232', 3, 0, 1), - (610430, 610400, '淳化县', '淳化', '108.58118', '34.79797', 3, 0, 1), - (610431, 610400, '武功县', '武功', '108.21286', '34.25973', 3, 0, 1), - (610481, 610400, '兴平市', '兴平', '108.488495', '34.297134', 3, 0, 1), - (610482, 610400, '彬州市', '彬州', '108.08108', '35.03565', 3, 0, 1), - (610500, 610000, '渭南市', '渭南', '109.502884', '34.499382', 2, 0, 1), - (610502, 610500, '临渭区', '临渭', '109.503296', '34.50127', 3, 0, 1), - (610503, 610500, '华州区', '华州', '109.7719', '34.51259', 3, 0, 1), - (610522, 610500, '潼关县', '潼关', '110.24726', '34.544514', 3, 0, 1), - (610523, 610500, '大荔县', '大荔', '109.94312', '34.79501', 3, 0, 1), - (610524, 610500, '合阳县', '合阳', '110.14798', '35.2371', 3, 0, 1), - (610525, 610500, '澄城县', '澄城', '109.93761', '35.184', 3, 0, 1), - (610526, 610500, '蒲城县', '蒲城', '109.58965', '34.956036', 3, 0, 1), - (610527, 610500, '白水县', '白水', '109.59431', '35.17729', 3, 0, 1), - (610528, 610500, '富平县', '富平', '109.18717', '34.746677', 3, 0, 1), - (610581, 610500, '韩城市', '韩城', '110.45239', '35.47524', 3, 0, 1), - (610582, 610500, '华阴市', '华阴', '110.08952', '34.565357', 3, 0, 1), - (610600, 610000, '延安市', '延安', '109.49081', '36.59654', 2, 0, 1), - (610602, 610600, '宝塔区', '宝塔', '109.49069', '36.59629', 3, 0, 1), - (610603, 610600, '安塞区', '安塞', '109.32897', '36.86373', 3, 0, 1), - (610621, 610600, '延长县', '延长', '110.01296', '36.578304', 3, 0, 1), - (610622, 610600, '延川县', '延川', '110.190315', '36.882065', 3, 0, 1), - (610625, 610600, '志丹县', '志丹', '108.7689', '36.823032', 3, 0, 1), - (610626, 610600, '吴起县', '吴起', '108.17698', '36.92485', 3, 0, 1), - (610627, 610600, '甘泉县', '甘泉', '109.34961', '36.27773', 3, 0, 1), - (610628, 610600, '富县', '富县', '109.38413', '35.996494', 3, 0, 1), - (610629, 610600, '洛川县', '洛川', '109.435715', '35.762135', 3, 0, 1), - (610630, 610600, '宜川县', '宜川', '110.17554', '36.050392', 3, 0, 1), - (610631, 610600, '黄龙县', '黄龙', '109.83502', '35.583275', 3, 0, 1), - (610632, 610600, '黄陵县', '黄陵', '109.26247', '35.580166', 3, 0, 1), - (610681, 610600, '子长市', '子长', '109.67538', '37.14258', 3, 0, 1), - (610700, 610000, '汉中市', '汉中', '107.02862', '33.077667', 2, 0, 1), - (610702, 610700, '汉台区', '汉台', '107.02824', '33.077675', 3, 0, 1), - (610703, 610700, '南郑区', '南郑', '106.93624', '32.99932', 3, 0, 1), - (610722, 610700, '城固县', '城固', '107.32989', '33.1531', 3, 0, 1), - (610723, 610700, '洋县', '洋县', '107.549965', '33.22328', 3, 0, 1), - (610724, 610700, '西乡县', '西乡', '107.76586', '32.98796', 3, 0, 1), - (610725, 610700, '勉县', '勉县', '106.680176', '33.155617', 3, 0, 1), - (610726, 610700, '宁强县', '宁强', '106.25739', '32.830807', 3, 0, 1), - (610727, 610700, '略阳县', '略阳', '106.1539', '33.32964', 3, 0, 1), - (610728, 610700, '镇巴县', '镇巴', '107.89531', '32.535854', 3, 0, 1), - (610729, 610700, '留坝县', '留坝', '106.92438', '33.61334', 3, 0, 1), - (610730, 610700, '佛坪县', '佛坪', '107.98858', '33.520744', 3, 0, 1), - (610800, 610000, '榆林市', '榆林', '109.741196', '38.29016', 2, 0, 1), - (610802, 610800, '榆阳区', '榆阳', '109.74791', '38.299267', 3, 0, 1), - (610803, 610800, '横山区', '横山', '109.29315', '37.95871', 3, 0, 1), - (610822, 610800, '府谷县', '府谷', '111.06965', '39.029243', 3, 0, 1), - (610824, 610800, '靖边县', '靖边', '108.80567', '37.596085', 3, 0, 1), - (610825, 610800, '定边县', '定边', '107.60128', '37.59523', 3, 0, 1), - (610826, 610800, '绥德县', '绥德', '110.26537', '37.5077', 3, 0, 1), - (610827, 610800, '米脂县', '米脂', '110.17868', '37.759083', 3, 0, 1), - (610828, 610800, '佳县', '佳县', '110.49337', '38.0216', 3, 0, 1), - (610829, 610800, '吴堡县', '吴堡', '110.73931', '37.451923', 3, 0, 1), - (610830, 610800, '清涧县', '清涧', '110.12146', '37.087704', 3, 0, 1), - (610831, 610800, '子洲县', '子洲', '110.03457', '37.611572', 3, 0, 1), - (610881, 610800, '神木市', '神木', '110.49896', '38.84239', 3, 0, 1), - (610900, 610000, '安康市', '安康', '109.029274', '32.6903', 2, 0, 1), - (610902, 610900, '汉滨区', '汉滨', '109.0291', '32.69082', 3, 0, 1), - (610921, 610900, '汉阴县', '汉阴', '108.51095', '32.89112', 3, 0, 1), - (610922, 610900, '石泉县', '石泉', '108.25051', '33.038513', 3, 0, 1), - (610923, 610900, '宁陕县', '宁陕', '108.31371', '33.312183', 3, 0, 1), - (610924, 610900, '紫阳县', '紫阳', '108.53779', '32.520176', 3, 0, 1), - (610925, 610900, '岚皋县', '岚皋', '108.900665', '32.31069', 3, 0, 1), - (610926, 610900, '平利县', '平利', '109.36186', '32.38793', 3, 0, 1), - (610927, 610900, '镇坪县', '镇坪', '109.526436', '31.883394', 3, 0, 1), - (610928, 610900, '旬阳县', '旬阳', '109.36815', '32.83357', 3, 0, 1), - (610929, 610900, '白河县', '白河', '110.11419', '32.809483', 3, 0, 1), - (611000, 610000, '商洛市', '商洛', '109.93977', '33.86832', 2, 0, 1), - (611002, 611000, '商州区', '商州', '109.93768', '33.86921', 3, 0, 1), - (611021, 611000, '洛南县', '洛南', '110.14571', '34.0885', 3, 0, 1), - (611022, 611000, '丹凤县', '丹凤', '110.33191', '33.69471', 3, 0, 1), - (611023, 611000, '商南县', '商南', '110.88544', '33.526367', 3, 0, 1), - (611024, 611000, '山阳县', '山阳', '109.88043', '33.53041', 3, 0, 1), - (611025, 611000, '镇安县', '镇安', '109.15108', '33.42398', 3, 0, 1), - (611026, 611000, '柞水县', '柞水', '109.11125', '33.682774', 3, 0, 1), - (620000, 0, '甘肃省', '甘肃', '103.823555', '36.05804', 1, 0, 1), - (620100, 620000, '兰州市', '兰州', '103.823555', '36.05804', 2, 0, 1), - (620102, 620100, '城关区', '城关', '103.841034', '36.049114', 3, 0, 1), - (620103, 620100, '七里河区', '七里河', '103.784325', '36.06673', 3, 0, 1), - (620104, 620100, '西固区', '西固', '103.62233', '36.10037', 3, 0, 1), - (620105, 620100, '安宁区', '安宁', '103.72404', '36.10329', 3, 0, 1), - (620111, 620100, '红古区', '红古', '102.86182', '36.344177', 3, 0, 1), - (620121, 620100, '永登县', '永登', '103.2622', '36.73443', 3, 0, 1), - (620122, 620100, '皋兰县', '皋兰', '103.94933', '36.331253', 3, 0, 1), - (620123, 620100, '榆中县', '榆中', '104.114975', '35.84443', 3, 0, 1), - (620200, 620000, '嘉峪关市', '嘉峪关', '98.277306', '39.78653', 2, 0, 1), - (620300, 620000, '金昌市', '金昌', '102.18789', '38.514236', 2, 0, 1), - (620302, 620300, '金川区', '金川', '102.18768', '38.513794', 3, 0, 1), - (620321, 620300, '永昌县', '永昌', '101.971954', '38.247353', 3, 0, 1), - (620400, 620000, '白银市', '白银', '104.17361', '36.54568', 2, 0, 1), - (620402, 620400, '白银区', '白银', '104.17425', '36.54565', 3, 0, 1), - (620403, 620400, '平川区', '平川', '104.81921', '36.72921', 3, 0, 1), - (620421, 620400, '靖远县', '靖远', '104.68697', '36.561424', 3, 0, 1), - (620422, 620400, '会宁县', '会宁', '105.05434', '35.692486', 3, 0, 1), - (620423, 620400, '景泰县', '景泰', '104.06639', '37.19352', 3, 0, 1), - (620500, 620000, '天水市', '天水', '105.725', '34.57853', 2, 0, 1), - (620502, 620500, '秦州区', '秦州', '105.72448', '34.578644', 3, 0, 1), - (620503, 620500, '麦积区', '麦积', '105.89763', '34.563503', 3, 0, 1), - (620521, 620500, '清水县', '清水', '106.13988', '34.75287', 3, 0, 1), - (620522, 620500, '秦安县', '秦安', '105.6733', '34.862354', 3, 0, 1), - (620523, 620500, '甘谷县', '甘谷', '105.332344', '34.747326', 3, 0, 1), - (620524, 620500, '武山县', '武山', '104.89169', '34.721954', 3, 0, 1), - (620525, 620500, '张家川回族自治县', '张家川', '106.21242', '34.993237', 3, 0, 1), - (620600, 620000, '武威市', '武威', '102.6347', '37.929996', 2, 0, 1), - (620602, 620600, '凉州区', '凉州', '102.63449', '37.93025', 3, 0, 1), - (620621, 620600, '民勤县', '民勤', '103.09065', '38.624622', 3, 0, 1), - (620622, 620600, '古浪县', '古浪', '102.89805', '37.47057', 3, 0, 1), - (620623, 620600, '天祝藏族自治县', '天祝', '103.14204', '36.97168', 3, 0, 1), - (620700, 620000, '张掖市', '张掖', '100.455475', '38.932896', 2, 0, 1), - (620702, 620700, '甘州区', '甘州', '100.454865', '38.931774', 3, 0, 1), - (620721, 620700, '肃南裕固族自治县', '肃南', '99.61709', '38.83727', 3, 0, 1), - (620722, 620700, '民乐县', '民乐', '100.81662', '38.434456', 3, 0, 1), - (620723, 620700, '临泽县', '临泽', '100.166336', '39.15215', 3, 0, 1), - (620724, 620700, '高台县', '高台', '99.81665', '39.37631', 3, 0, 1), - (620725, 620700, '山丹县', '山丹', '101.08844', '38.78484', 3, 0, 1), - (620800, 620000, '平凉市', '平凉', '106.68469', '35.54279', 2, 0, 1), - (620802, 620800, '崆峒区', '崆峒', '106.68422', '35.54173', 3, 0, 1), - (620821, 620800, '泾川县', '泾川', '107.36522', '35.33528', 3, 0, 1), - (620822, 620800, '灵台县', '灵台', '107.62059', '35.06401', 3, 0, 1), - (620823, 620800, '崇信县', '崇信', '107.03125', '35.30453', 3, 0, 1), - (620825, 620800, '庄浪县', '庄浪', '106.04198', '35.203426', 3, 0, 1), - (620826, 620800, '静宁县', '静宁', '105.73349', '35.52524', 3, 0, 1), - (620881, 620800, '华亭市', '华亭', '106.65352', '35.21756', 3, 0, 1), - (620900, 620000, '酒泉市', '酒泉', '98.510796', '39.744022', 2, 0, 1), - (620902, 620900, '肃州区', '肃州', '98.511154', '39.74386', 3, 0, 1), - (620921, 620900, '金塔县', '金塔', '98.90296', '39.983036', 3, 0, 1), - (620922, 620900, '瓜州县', '瓜州', '95.780594', '40.516525', 3, 0, 1), - (620923, 620900, '肃北蒙古族自治县', '肃北', '94.87728', '39.51224', 3, 0, 1), - (620924, 620900, '阿克塞哈萨克族自治县', '阿克塞', '94.33764', '39.63164', 3, 0, 1), - (620981, 620900, '玉门市', '玉门', '97.03721', '40.28682', 3, 0, 1), - (620982, 620900, '敦煌市', '敦煌', '94.664276', '40.141117', 3, 0, 1), - (621000, 620000, '庆阳市', '庆阳', '107.638374', '35.73422', 2, 0, 1), - (621002, 621000, '西峰区', '西峰', '107.638824', '35.73371', 3, 0, 1), - (621021, 621000, '庆城县', '庆城', '107.885666', '36.013504', 3, 0, 1), - (621022, 621000, '环县', '环县', '107.308754', '36.56932', 3, 0, 1), - (621023, 621000, '华池县', '华池', '107.98629', '36.457302', 3, 0, 1), - (621024, 621000, '合水县', '合水', '108.01987', '35.819004', 3, 0, 1), - (621025, 621000, '正宁县', '正宁', '108.36107', '35.490643', 3, 0, 1), - (621026, 621000, '宁县', '宁县', '107.92118', '35.50201', 3, 0, 1), - (621027, 621000, '镇原县', '镇原', '107.19571', '35.677807', 3, 0, 1), - (621100, 620000, '定西市', '定西', '104.6263', '35.57958', 2, 0, 1), - (621102, 621100, '安定区', '安定', '104.62577', '35.579765', 3, 0, 1), - (621121, 621100, '通渭县', '通渭', '105.2501', '35.208923', 3, 0, 1), - (621122, 621100, '陇西县', '陇西', '104.63755', '35.00341', 3, 0, 1), - (621123, 621100, '渭源县', '渭源', '104.21174', '35.133022', 3, 0, 1), - (621124, 621100, '临洮县', '临洮', '103.86218', '35.376232', 3, 0, 1), - (621125, 621100, '漳县', '漳县', '104.46676', '34.84864', 3, 0, 1), - (621126, 621100, '岷县', '岷县', '104.03988', '34.439106', 3, 0, 1), - (621200, 620000, '陇南市', '陇南', '104.92938', '33.3886', 2, 0, 1), - (621202, 621200, '武都区', '武都', '104.92986', '33.388157', 3, 0, 1), - (621221, 621200, '成县', '成县', '105.734436', '33.739864', 3, 0, 1), - (621222, 621200, '文县', '文县', '104.68245', '32.94217', 3, 0, 1), - (621223, 621200, '宕昌县', '宕昌', '104.39448', '34.042656', 3, 0, 1), - (621224, 621200, '康县', '康县', '105.609535', '33.328266', 3, 0, 1), - (621225, 621200, '西和县', '西和', '105.299736', '34.013718', 3, 0, 1), - (621226, 621200, '礼县', '礼县', '105.18162', '34.18939', 3, 0, 1), - (621227, 621200, '徽县', '徽县', '106.08563', '33.767784', 3, 0, 1), - (621228, 621200, '两当县', '两当', '106.30696', '33.91073', 3, 0, 1), - (622900, 620000, '临夏回族自治州', '临夏', '103.212006', '35.599445', 2, 0, 1); - - -INSERT INTO `nc_sys_area` VALUES - (622901, 622900, '临夏市', '临夏市', '103.21163', '35.59941', 3, 0, 1), - (622921, 622900, '临夏县', '临夏县', '102.99387', '35.49236', 3, 0, 1), - (622922, 622900, '康乐县', '康乐', '103.709854', '35.371906', 3, 0, 1), - (622923, 622900, '永靖县', '永靖', '103.31987', '35.938934', 3, 0, 1), - (622924, 622900, '广河县', '广河', '103.57619', '35.48169', 3, 0, 1), - (622925, 622900, '和政县', '和政', '103.35036', '35.425972', 3, 0, 1), - (622926, 622900, '东乡族自治县', '东乡', '103.389565', '35.66383', 3, 0, 1), - (622927, 622900, '积石山保安族东乡族撒拉族自治县', '积石山', '102.87747', '35.712906', 3, 0, 1), - (623000, 620000, '甘南藏族自治州', '甘南', '102.91101', '34.986355', 2, 0, 1), - (623001, 623000, '合作市', '合作', '102.91149', '34.985973', 3, 0, 1), - (623021, 623000, '临潭县', '临潭', '103.35305', '34.69164', 3, 0, 1), - (623022, 623000, '卓尼县', '卓尼', '103.50851', '34.588165', 3, 0, 1), - (623023, 623000, '舟曲县', '舟曲', '104.37027', '33.782963', 3, 0, 1), - (623024, 623000, '迭部县', '迭部', '103.22101', '34.055347', 3, 0, 1), - (623025, 623000, '玛曲县', '玛曲', '102.07577', '33.99807', 3, 0, 1), - (623026, 623000, '碌曲县', '碌曲', '102.488495', '34.589592', 3, 0, 1), - (623027, 623000, '夏河县', '夏河', '102.520744', '35.20085', 3, 0, 1), - (630000, 0, '青海省', '青海', '101.778915', '36.623177', 1, 0, 1), - (630100, 630000, '西宁市', '西宁', '101.778915', '36.623177', 2, 0, 1), - (630102, 630100, '城东区', '城东', '101.7961', '36.616043', 3, 0, 1), - (630103, 630100, '城中区', '城中', '101.78455', '36.62118', 3, 0, 1), - (630104, 630100, '城西区', '城西', '101.76365', '36.628323', 3, 0, 1), - (630105, 630100, '城北区', '城北', '101.7613', '36.64845', 3, 0, 1), - (630106, 630100, '湟中区', '湟中', '101.57164', '36.50087', 3, 0, 1), - (630121, 630100, '大通回族土族自治县', '大通', '101.68418', '36.931343', 3, 0, 1), - (630123, 630100, '湟源县', '湟源', '101.263435', '36.68482', 3, 0, 1), - (630200, 630000, '海东市', '海东', '', '', 2, 0, 1), - (630202, 630200, '乐都区', '乐都', '102.40173', '36.48209', 3, 0, 1), - (630203, 630200, '平安区', '平安', '102.10848', '36.50029', 3, 0, 1), - (630222, 630200, '民和回族土族自治县', '民和回族土族自治县', '102.83087', '36.32026', 3, 0, 1), - (630223, 630200, '互助土族自治县', '互助土族自治县', '101.95842', '36.84412', 3, 0, 1), - (630224, 630200, '化隆回族自治县', '化隆回族自治县', '102.26404', '36.09493', 3, 0, 1), - (630225, 630200, '循化撒拉族自治县', '循化撒拉族自治县', '102.4891', '35.8508', 3, 0, 1), - (632200, 630000, '海北藏族自治州', '海北', '100.90106', '36.959435', 2, 0, 1), - (632221, 632200, '门源回族自治县', '门源', '101.61846', '37.37663', 3, 0, 1), - (632222, 632200, '祁连县', '祁连', '100.24978', '38.175407', 3, 0, 1), - (632223, 632200, '海晏县', '海晏', '100.90049', '36.95954', 3, 0, 1), - (632224, 632200, '刚察县', '刚察', '100.13842', '37.326263', 3, 0, 1), - (632300, 630000, '黄南藏族自治州', '黄南', '102.01999', '35.517742', 2, 0, 1), - (632301, 632300, '同仁市', '同仁', '', '', 3, 0, 1), - (632322, 632300, '尖扎县', '尖扎', '102.03195', '35.938206', 3, 0, 1), - (632323, 632300, '泽库县', '泽库', '101.469345', '35.036842', 3, 0, 1), - (632324, 632300, '河南蒙古族自治县', '河南', '101.61188', '34.734524', 3, 0, 1), - (632500, 630000, '海南藏族自治州', '海南藏族', '100.619545', '36.280354', 2, 0, 1), - (632521, 632500, '共和县', '共和', '100.6196', '36.280285', 3, 0, 1), - (632522, 632500, '同德县', '同德', '100.57947', '35.254494', 3, 0, 1), - (632523, 632500, '贵德县', '贵德', '101.431854', '36.040455', 3, 0, 1), - (632524, 632500, '兴海县', '兴海', '99.98696', '35.58909', 3, 0, 1), - (632525, 632500, '贵南县', '贵南', '100.74792', '35.587086', 3, 0, 1), - (632600, 630000, '果洛藏族自治州', '果洛', '100.24214', '34.4736', 2, 0, 1), - (632621, 632600, '玛沁县', '玛沁', '100.24353', '34.473385', 3, 0, 1), - (632622, 632600, '班玛县', '班玛', '100.73795', '32.931587', 3, 0, 1), - (632623, 632600, '甘德县', '甘德', '99.90259', '33.966988', 3, 0, 1), - (632624, 632600, '达日县', '达日', '99.65172', '33.753258', 3, 0, 1), - (632625, 632600, '久治县', '久治', '101.484886', '33.430218', 3, 0, 1), - (632626, 632600, '玛多县', '玛多', '98.21134', '34.91528', 3, 0, 1), - (632700, 630000, '玉树藏族自治州', '玉树', '97.00852', '33.004047', 2, 0, 1), - (632701, 632700, '玉树市', '玉树', '97.00862', '32.99336', 3, 0, 1), - (632722, 632700, '杂多县', '杂多', '95.29343', '32.891888', 3, 0, 1), - (632723, 632700, '称多县', '称多', '97.11089', '33.367886', 3, 0, 1), - (632724, 632700, '治多县', '治多', '95.616844', '33.85232', 3, 0, 1), - (632725, 632700, '囊谦县', '囊谦', '96.4798', '32.203205', 3, 0, 1), - (632726, 632700, '曲麻莱县', '曲麻莱', '95.800674', '34.12654', 3, 0, 1), - (632800, 630000, '海西蒙古族藏族自治州', '海西', '97.37079', '37.374664', 2, 0, 1), - (632801, 632800, '格尔木市', '格尔木', '94.90578', '36.401543', 3, 0, 1), - (632802, 632800, '德令哈市', '德令哈', '97.37014', '37.374554', 3, 0, 1), - (632803, 632800, '茫崖市', '茫崖', '90.85616', '38.24763', 3, 0, 1), - (632821, 632800, '乌兰县', '乌兰', '98.47985', '36.93039', 3, 0, 1), - (632822, 632800, '都兰县', '都兰', '98.089165', '36.298553', 3, 0, 1), - (632823, 632800, '天峻县', '天峻', '99.02078', '37.29906', 3, 0, 1), - (640000, 0, '宁夏回族自治区', '宁夏', '106.278175', '38.46637', 1, 0, 1), - (640100, 640000, '银川市', '银川', '106.278175', '38.46637', 2, 0, 1), - (640104, 640100, '兴庆区', '兴庆', '106.2784', '38.46747', 3, 0, 1), - (640105, 640100, '西夏区', '西夏', '106.13212', '38.492424', 3, 0, 1), - (640106, 640100, '金凤区', '金凤', '106.228485', '38.477352', 3, 0, 1), - (640121, 640100, '永宁县', '永宁', '106.253784', '38.28043', 3, 0, 1), - (640122, 640100, '贺兰县', '贺兰', '106.3459', '38.55456', 3, 0, 1), - (640181, 640100, '灵武市', '灵武', '106.3347', '38.09406', 3, 0, 1), - (640200, 640000, '石嘴山市', '石嘴山', '106.376175', '39.01333', 2, 0, 1), - (640202, 640200, '大武口区', '大武口', '106.37665', '39.014156', 3, 0, 1), - (640205, 640200, '惠农区', '惠农', '106.77551', '39.230095', 3, 0, 1), - (640221, 640200, '平罗县', '平罗', '106.54489', '38.90674', 3, 0, 1), - (640300, 640000, '吴忠市', '吴忠', '106.19941', '37.986164', 2, 0, 1), - (640302, 640300, '利通区', '利通', '106.19942', '37.985966', 3, 0, 1), - (640303, 640300, '红寺堡区', '红寺堡', '106.067314', '37.421616', 3, 0, 1), - (640323, 640300, '盐池县', '盐池', '107.40541', '37.78422', 3, 0, 1), - (640324, 640300, '同心县', '同心', '105.914764', '36.9829', 3, 0, 1), - (640381, 640300, '青铜峡市', '青铜峡', '106.07539', '38.021507', 3, 0, 1), - (640400, 640000, '固原市', '固原', '106.28524', '36.004562', 2, 0, 1), - (640402, 640400, '原州区', '原州', '106.28477', '36.005337', 3, 0, 1), - (640422, 640400, '西吉县', '西吉', '105.731804', '35.965385', 3, 0, 1), - (640423, 640400, '隆德县', '隆德', '106.12344', '35.618233', 3, 0, 1), - (640424, 640400, '泾源县', '泾源', '106.33868', '35.49344', 3, 0, 1), - (640425, 640400, '彭阳县', '彭阳', '106.64151', '35.849976', 3, 0, 1), - (640500, 640000, '中卫市', '中卫', '105.18957', '37.51495', 2, 0, 1), - (640502, 640500, '沙坡头区', '沙坡头', '105.19054', '37.514565', 3, 0, 1), - (640521, 640500, '中宁县', '中宁', '105.67578', '37.489735', 3, 0, 1), - (640522, 640500, '海原县', '海原', '105.64732', '36.562008', 3, 0, 1), - (650000, 0, '新疆维吾尔自治区', '新疆', '87.61773', '43.792816', 1, 0, 1), - (650100, 650000, '乌鲁木齐市', '乌鲁木齐', '87.61773', '43.792816', 2, 0, 1), - (650102, 650100, '天山区', '天山', '87.62012', '43.79643', 3, 0, 1), - (650103, 650100, '沙依巴克区', '沙依巴克', '87.59664', '43.78887', 3, 0, 1), - (650104, 650100, '新市区', '新市', '87.56065', '43.87088', 3, 0, 1), - (650105, 650100, '水磨沟区', '水磨沟', '87.61309', '43.816746', 3, 0, 1), - (650106, 650100, '头屯河区', '头屯河', '87.42582', '43.876053', 3, 0, 1), - (650107, 650100, '达坂城区', '达坂城', '88.30994', '43.36181', 3, 0, 1), - (650109, 650100, '米东区', '米东', '87.6918', '43.960983', 3, 0, 1), - (650121, 650100, '乌鲁木齐县', '乌鲁木齐', '1.0', '0.0', 3, 0, 1), - (650200, 650000, '克拉玛依市', '克拉玛依', '84.87395', '45.595886', 2, 0, 1), - (650202, 650200, '独山子区', '独山子', '84.88227', '44.327206', 3, 0, 1), - (650203, 650200, '克拉玛依区', '克拉玛依', '84.86892', '45.600475', 3, 0, 1), - (650204, 650200, '白碱滩区', '白碱滩', '85.12988', '45.689022', 3, 0, 1), - (650205, 650200, '乌尔禾区', '乌尔禾', '85.69777', '46.08776', 3, 0, 1), - (650400, 650000, '吐鲁番市', '吐鲁番', '', '', 2, 0, 1), - (650402, 650400, '高昌区', '高昌', '89.18596', '42.94244', 3, 0, 1), - (650421, 650400, '鄯善县', '鄯善', '90.21341', '42.86887', 3, 0, 1), - (650422, 650400, '托克逊县', '托克逊', '88.65384', '42.79181', 3, 0, 1), - (650500, 650000, '哈密市', '哈密', '', '', 2, 0, 1), - (650502, 650500, '伊州区', '伊州', '93.51465', '42.82699', 3, 0, 1), - (650521, 650500, '巴里坤哈萨克自治县', '巴里坤哈萨克自治县', '93.01654', '43.59873', 3, 0, 1), - (650522, 650500, '伊吾县', '伊吾', '94.69741', '43.25451', 3, 0, 1), - (652300, 650000, '昌吉回族自治州', '昌吉', '87.30401', '44.014576', 2, 0, 1), - (652301, 652300, '昌吉市', '昌吉', '87.304115', '44.013184', 3, 0, 1), - (652302, 652300, '阜康市', '阜康', '87.98384', '44.152153', 3, 0, 1), - (652323, 652300, '呼图壁县', '呼图壁', '86.88861', '44.189342', 3, 0, 1), - (652324, 652300, '玛纳斯县', '玛纳斯', '86.21769', '44.305626', 3, 0, 1), - (652325, 652300, '奇台县', '奇台', '89.59144', '44.021996', 3, 0, 1), - (652327, 652300, '吉木萨尔县', '吉木萨尔', '89.18129', '43.99716', 3, 0, 1), - (652328, 652300, '木垒哈萨克自治县', '木垒', '90.28283', '43.832443', 3, 0, 1), - (652700, 650000, '博尔塔拉蒙古自治州', '博尔塔拉', '82.074776', '44.90326', 2, 0, 1), - (652701, 652700, '博乐市', '博乐', '82.072235', '44.903088', 3, 0, 1), - (652702, 652700, '阿拉山口市', '阿拉山口', '82.074776', '44.90326', 3, 0, 1), - (652722, 652700, '精河县', '精河', '82.89294', '44.605644', 3, 0, 1), - (652723, 652700, '温泉县', '温泉', '81.03099', '44.97375', 3, 0, 1), - (652800, 650000, '巴音郭楞蒙古自治州', '巴音郭楞', '86.15097', '41.76855', 2, 0, 1), - (652801, 652800, '库尔勒市', '库尔勒', '86.14595', '41.763123', 3, 0, 1), - (652822, 652800, '轮台县', '轮台', '84.24854', '41.781265', 3, 0, 1), - (652823, 652800, '尉犁县', '尉犁', '86.26341', '41.33743', 3, 0, 1), - (652824, 652800, '若羌县', '若羌', '88.16881', '39.023808', 3, 0, 1), - (652825, 652800, '且末县', '且末', '85.53263', '38.13856', 3, 0, 1), - (652826, 652800, '焉耆回族自治县', '焉耆', '86.5698', '42.06435', 3, 0, 1), - (652827, 652800, '和静县', '和静', '86.39107', '42.31716', 3, 0, 1), - (652828, 652800, '和硕县', '和硕', '86.864944', '42.268864', 3, 0, 1), - (652829, 652800, '博湖县', '博湖', '86.63158', '41.980167', 3, 0, 1), - (652900, 650000, '阿克苏地区', '阿克苏', '80.26507', '41.17071', 2, 0, 1), - (652901, 652900, '阿克苏市', '阿克苏', '80.2629', '41.171272', 3, 0, 1), - (652902, 652900, '库车市', '库车', '82.96212', '41.71741', 3, 0, 1), - (652922, 652900, '温宿县', '温宿', '80.24327', '41.272995', 3, 0, 1), - (652924, 652900, '沙雅县', '沙雅', '82.78077', '41.22627', 3, 0, 1), - (652925, 652900, '新和县', '新和', '82.610825', '41.551174', 3, 0, 1), - (652926, 652900, '拜城县', '拜城', '81.86988', '41.7961', 3, 0, 1), - (652927, 652900, '乌什县', '乌什', '79.230804', '41.21587', 3, 0, 1), - (652928, 652900, '阿瓦提县', '阿瓦提', '80.378426', '40.63842', 3, 0, 1), - (652929, 652900, '柯坪县', '柯坪', '79.04785', '40.50624', 3, 0, 1), - (653000, 650000, '克孜勒苏柯尔克孜自治州', '克孜勒苏柯尔克孜', '76.17283', '39.713432', 2, 0, 1), - (653001, 653000, '阿图什市', '阿图什', '76.17394', '39.7129', 3, 0, 1), - (653022, 653000, '阿克陶县', '阿克陶', '75.94516', '39.14708', 3, 0, 1), - (653023, 653000, '阿合奇县', '阿合奇', '78.450165', '40.93757', 3, 0, 1), - (653024, 653000, '乌恰县', '乌恰', '75.25969', '39.716633', 3, 0, 1), - (653100, 650000, '喀什地区', '喀什', '75.989136', '39.467663', 2, 0, 1), - (653101, 653100, '喀什市', '喀什', '75.98838', '39.46786', 3, 0, 1), - (653121, 653100, '疏附县', '疏附', '75.863075', '39.378307', 3, 0, 1), - (653122, 653100, '疏勒县', '疏勒', '76.05365', '39.39946', 3, 0, 1), - (653123, 653100, '英吉沙县', '英吉沙', '76.17429', '38.92984', 3, 0, 1), - (653124, 653100, '泽普县', '泽普', '77.27359', '38.191216', 3, 0, 1), - (653125, 653100, '莎车县', '莎车', '77.248886', '38.414497', 3, 0, 1), - (653126, 653100, '叶城县', '叶城', '77.42036', '37.884678', 3, 0, 1), - (653127, 653100, '麦盖提县', '麦盖提', '77.651535', '38.903385', 3, 0, 1), - (653128, 653100, '岳普湖县', '岳普湖', '76.7724', '39.23525', 3, 0, 1), - (653129, 653100, '伽师县', '伽师', '76.74198', '39.494324', 3, 0, 1), - (653130, 653100, '巴楚县', '巴楚', '78.55041', '39.783478', 3, 0, 1), - (653131, 653100, '塔什库尔干塔吉克自治县', '塔什库尔干', '75.228065', '37.775436', 3, 0, 1), - (653200, 650000, '和田地区', '和田', '79.92533', '37.110687', 2, 0, 1), - (653201, 653200, '和田市', '和田市', '79.92754', '37.108944', 3, 0, 1), - (653221, 653200, '和田县', '和田县', '79.81907', '37.12003', 3, 0, 1), - (653222, 653200, '墨玉县', '墨玉', '79.736626', '37.27151', 3, 0, 1), - (653223, 653200, '皮山县', '皮山', '78.2823', '37.616333', 3, 0, 1), - (653224, 653200, '洛浦县', '洛浦', '80.18404', '37.074375', 3, 0, 1), - (653225, 653200, '策勒县', '策勒', '80.80357', '37.00167', 3, 0, 1), - (653226, 653200, '于田县', '于田', '81.66785', '36.85463', 3, 0, 1), - (653227, 653200, '民丰县', '民丰', '82.69235', '37.06491', 3, 0, 1), - (654000, 650000, '伊犁哈萨克自治州', '伊犁', '81.31795', '43.92186', 2, 0, 1), - (654002, 654000, '伊宁市', '伊宁市', '81.316345', '43.92221', 3, 0, 1), - (654003, 654000, '奎屯市', '奎屯', '84.9016', '44.423447', 3, 0, 1), - (654004, 654000, '霍尔果斯市', '霍尔果斯', '80.41317', '44.19865', 3, 0, 1), - (654021, 654000, '伊宁县', '伊宁县', '81.52467', '43.977875', 3, 0, 1), - (654022, 654000, '察布查尔锡伯自治县', '察布查尔', '81.15087', '43.838882', 3, 0, 1), - (654023, 654000, '霍城县', '霍城', '80.872505', '44.04991', 3, 0, 1), - (654024, 654000, '巩留县', '巩留', '82.22704', '43.481617', 3, 0, 1), - (654025, 654000, '新源县', '新源', '83.25849', '43.43425', 3, 0, 1), - (654026, 654000, '昭苏县', '昭苏', '81.12603', '43.157764', 3, 0, 1), - (654027, 654000, '特克斯县', '特克斯', '81.84006', '43.214863', 3, 0, 1), - (654028, 654000, '尼勒克县', '尼勒克', '82.50412', '43.789738', 3, 0, 1), - (654200, 650000, '塔城地区', '塔城', '82.98573', '46.7463', 2, 0, 1), - (654201, 654200, '塔城市', '塔城', '82.983986', '46.74628', 3, 0, 1), - (654202, 654200, '乌苏市', '乌苏', '84.67763', '44.430115', 3, 0, 1), - (654221, 654200, '额敏县', '额敏', '83.622116', '46.522556', 3, 0, 1), - (654223, 654200, '沙湾县', '沙湾', '85.622505', '44.329544', 3, 0, 1), - (654224, 654200, '托里县', '托里', '83.60469', '45.935863', 3, 0, 1), - (654225, 654200, '裕民县', '裕民', '82.982155', '46.20278', 3, 0, 1), - (654226, 654200, '和布克赛尔蒙古自治县', '和布克赛尔', '85.73355', '46.793', 3, 0, 1), - (654300, 650000, '阿勒泰地区', '阿勒泰', '88.13963', '47.848392', 2, 0, 1), - (654301, 654300, '阿勒泰市', '阿勒泰', '88.13874', '47.84891', 3, 0, 1), - (654321, 654300, '布尔津县', '布尔津', '86.86186', '47.70453', 3, 0, 1), - (654322, 654300, '富蕴县', '富蕴', '89.524994', '46.993107', 3, 0, 1), - (654323, 654300, '福海县', '福海', '87.49457', '47.11313', 3, 0, 1), - (654324, 654300, '哈巴河县', '哈巴河', '86.41896', '48.059284', 3, 0, 1), - (654325, 654300, '青河县', '青河', '90.38156', '46.672447', 3, 0, 1), - (654326, 654300, '吉木乃县', '吉木乃', '85.87606', '47.43463', 3, 0, 1), - (659001, 659000, '石河子市', '石河子', '86.04108', '44.305885', 3, 0, 1), - (659002, 659000, '阿拉尔市', '阿拉尔', '81.28588', '40.541916', 3, 0, 1), - (659003, 659000, '图木舒克市', '图木舒克', '79.07798', '39.867317', 3, 0, 1), - (659004, 659000, '五家渠市', '五家渠', '87.526886', '44.1674', 3, 0, 1), - (659005, 659000, '北屯市', '北屯', '87.80014', '47.36327', 3, 0, 1), - (659006, 659000, '铁门关市', '铁门关', '85.67583', '41.86868', 3, 0, 1), - (659007, 659000, '双河市', '双河', '82.35501', '44.84418', 3, 0, 1), - (659008, 659000, '可克达拉市', '可克达拉', '81.04476', '43.94799', 3, 0, 1), - (659009, 659000, '昆玉市', '昆玉', '79.29133', '37.20948', 3, 0, 1), - (659010, 659000, '胡杨河市', '胡杨河', '84.827387', '44.69295', 3, 0, 1), - (714368, 0, '香港特别行政区', '香港特别行政区', '114.173355', '22.320048', 1, 0, 1), - (714390, 0, '澳门特别行政区', '澳门特别行政区', '113.549090', '22.198951', 1, 0, 1), - (714401, 0, '台湾', '台湾', '121.509062', '25.044332', 1, 0, 1), - (714402, 714401, '彰化县', '彰化县', '120.416000', '24.000000', 2, 0, 1), - (714403, 714402, '芳苑乡', '芳苑乡', '120.416000', '24.000000', 3, 0, 1), - (714632, 714402, '芬园乡', '芬园乡', '120.416000', '24.000000', 3, 0, 1), - (714701, 714402, '福兴乡', '福兴乡', '120.416000', '24.000000', 3, 0, 1), - (714777, 714402, '和美镇', '和美镇', '120.416000', '24.000000', 3, 0, 1), - (715055, 714402, '花坛乡', '花坛乡', '120.416000', '24.000000', 3, 0, 1), - (715172, 714402, '鹿港镇', '鹿港镇', '120.416000', '24.000000', 3, 0, 1), - (715490, 714402, '埤头乡', '埤头乡', '120.464542', '23.890392', 3, 0, 1), - (715602, 714402, '埔心乡', '埔心乡', '120.416000', '24.000000', 3, 0, 1), - (715745, 714402, '埔盐乡', '埔盐乡', '120.416000', '24.000000', 3, 0, 1), - (715795, 714402, '伸港乡', '伸港乡', '120.416000', '24.000000', 3, 0, 1), - (715960, 714402, '社头乡', '社头乡', '120.416000', '24.000000', 3, 0, 1), - (716105, 714402, '田尾乡', '田尾乡', '120.416000', '24.000000', 3, 0, 1), - (716202, 714402, '田中镇', '田中镇', '120.416000', '24.000000', 3, 0, 1), - (716341, 714402, '线西乡', '线西乡', '120.416000', '24.000000', 3, 0, 1), - (716421, 714402, '溪湖镇', '溪湖镇', '120.416000', '24.000000', 3, 0, 1), - (716750, 714402, '秀水乡', '秀水乡', '120.416000', '24.000000', 3, 0, 1), - (716874, 714402, '溪州乡', '溪州乡', '120.492906', '23.853578', 3, 0, 1), - (717107, 714402, '永靖乡', '永靖乡', '120.416000', '24.000000', 3, 0, 1), - (717238, 714402, '员林市', '员林市', '120.416000', '24.000000', 3, 0, 1), - (717447, 714402, '竹塘乡', '竹塘乡', '120.416000', '24.000000', 3, 0, 1), - (717531, 714401, '新北市', '新北市', '121.465746', '25.012366', 2, 0, 1), - (717532, 717531, '八里区', '八里区', '121.465746', '25.012366', 3, 0, 1), - (717645, 717531, '板桥区', '板桥区', '121.465746', '25.012366', 3, 0, 1), - (717902, 717531, '贡寮区', '贡寮区', '121.465746', '25.012366', 3, 0, 1), - (717955, 717531, '金山区', '金山区', '121.465746', '25.012366', 3, 0, 1), - (718036, 717531, '林口区', '林口区', '121.465746', '25.012366', 3, 0, 1), - (718195, 717531, '芦洲区', '芦洲区', '121.465746', '25.012366', 3, 0, 1), - (718266, 717531, '坪林区', '坪林区', '121.465746', '25.012366', 3, 0, 1), - (718327, 717531, '平溪区', '平溪区', '121.465746', '25.012366', 3, 0, 1), - (718375, 717531, '瑞芳区', '瑞芳区', '121.465746', '25.012366', 3, 0, 1), - (718490, 717531, '三重区', '三重区', '121.465746', '25.012366', 3, 0, 1), - (718786, 717531, '三峡区', '三峡区', '121.465746', '25.012366', 3, 0, 1), - (718879, 717531, '三芝区', '三芝区', '121.465746', '25.012366', 3, 0, 1), - (718980, 717531, '深坑区', '深坑区', '121.465746', '25.012366', 3, 0, 1), - (719023, 717531, '石碇区', '石碇区', '121.465746', '25.012366', 3, 0, 1), - (719115, 717531, '石门区', '石门区', '121.465746', '25.012366', 3, 0, 1), - (719155, 717531, '双溪区', '双溪区', '121.465746', '25.012366', 3, 0, 1), - (719243, 717531, '树林区', '树林区', '121.465746', '25.012366', 3, 0, 1), - (719382, 717531, '泰山区', '泰山区', '121.465746', '25.012366', 3, 0, 1), - (719498, 717531, '淡水区', '淡水区', '121.465746', '25.012366', 3, 0, 1), - (719731, 717531, '土城区', '土城区', '121.465746', '25.012366', 3, 0, 1), - (719868, 714401, '澎湖县', '澎湖县', '119.566417', '23.569733', 2, 0, 1), - (719869, 719868, '白沙乡', '白沙乡', '119.566417', '23.569733', 3, 0, 1), - (719890, 719868, '湖西乡', '湖西乡', '119.566417', '23.569733', 3, 0, 1), - (719916, 719868, '马公市', '马公市', '119.566417', '23.569733', 3, 0, 1), - (720065, 719868, '七美乡', '七美乡', '119.566417', '23.569733', 3, 0, 1), - (720090, 719868, '望安乡', '望安乡', '119.566417', '23.569733', 3, 0, 1), - (720102, 719868, '西屿乡', '西屿乡', '119.566417', '23.569733', 3, 0, 1), - (720118, 714401, '屏东县', '屏东县', '120.487928', '22.682802', 2, 0, 1), - (720119, 720118, '三地门乡', '三地门乡', '120.487928', '22.682802', 3, 0, 1), - (720142, 720118, '狮子乡', '狮子乡', '120.487928', '22.682802', 3, 0, 1), - (720163, 720118, '泰武乡', '泰武乡', '120.626012', '22.591307', 3, 0, 1), - (720186, 720118, '万丹乡', '万丹乡', '120.486423', '22.588123', 3, 0, 1), - (720415, 720118, '万峦乡', '万峦乡', '120.566478', '22.571966', 3, 0, 1), - (720480, 720118, '雾臺乡', '雾臺乡', '120.727653', '22.743675', 3, 0, 1), - (720502, 720118, '新埤乡', '新埤乡', '120.545190', '22.465998', 3, 0, 1), - (720553, 720118, '新园乡', '新园乡', '120.459758', '22.544147', 3, 0, 1), - (720649, 720118, '盐埔乡', '盐埔乡', '120.487928', '22.682802', 3, 0, 1), - (720748, 720118, '竹田乡', '竹田乡', '120.487928', '22.682802', 3, 0, 1), - (720835, 720118, '长治乡', '长治乡', '120.487928', '22.682802', 3, 0, 1), - (720975, 720118, '潮州镇', '潮州镇', '120.487928', '22.682802', 3, 0, 1), - (721293, 720118, '车城乡', '车城乡', '120.707694', '22.072115', 3, 0, 1), - (721335, 720118, '春日乡', '春日乡', '120.622000', '22.368284', 3, 0, 1), - (721344, 720118, '东港镇', '东港镇', '120.487928', '22.682802', 3, 0, 1), - (721490, 720118, '枋寮乡', '枋寮乡', '120.487928', '22.682802', 3, 0, 1), - (721617, 720118, '枋山乡', '枋山乡', '120.647762', '22.262550', 3, 0, 1), - (721638, 720118, '高树乡', '高树乡', '120.595945', '22.825131', 3, 0, 1), - (721805, 720118, '恆春镇', '恆春镇', '120.487928', '22.682802', 3, 0, 1), - (721930, 720118, '佳冬乡', '佳冬乡', '120.545370', '22.417786', 3, 0, 1), - (722024, 714401, '臺中市', '臺中市', '0.000000', '0.000000', 2, 0, 1), - (722025, 722024, '梧栖区', '梧栖区', '0.000000', '0.000000', 3, 0, 1), - (722212, 722024, '乌日区', '乌日区', '0.000000', '0.000000', 3, 0, 1), - (722402, 722024, '新社区', '新社区', '0.000000', '0.000000', 3, 0, 1), - (722474, 722024, '西屯区', '西屯区', '0.000000', '0.000000', 3, 0, 1), - (722699, 722024, '北屯区', '北屯区', '0.000000', '0.000000', 3, 0, 1), - (722879, 722024, '中区', '中区', '0.000000', '0.000000', 3, 0, 1), - (722923, 722024, '大肚区', '大肚区', '0.000000', '0.000000', 3, 0, 1), - (723021, 722024, '大甲区', '大甲区', '0.000000', '0.000000', 3, 0, 1), - (723211, 722024, '大里区', '大里区', '0.000000', '0.000000', 3, 0, 1), - (723592, 722024, '大雅区', '大雅区', '0.000000', '0.000000', 3, 0, 1), - (723756, 722024, '大安区', '大安区', '0.000000', '0.000000', 3, 0, 1), - (723802, 722024, '东势区', '东势区', '0.000000', '0.000000', 3, 0, 1), - (723966, 722024, '东区', '东区', '0.000000', '0.000000', 3, 0, 1), - (724148, 722024, '丰原区', '丰原区', '0.000000', '0.000000', 3, 0, 1), - (724424, 722024, '和平区', '和平区', '0.000000', '0.000000', 3, 0, 1), - (724504, 722024, '后里区', '后里区', '0.000000', '0.000000', 3, 0, 1), - (724656, 722024, '龙井区', '龙井区', '0.000000', '0.000000', 3, 0, 1), - (724797, 722024, '南屯区', '南屯区', '0.000000', '0.000000', 3, 0, 1), - (724872, 722024, '北区', '北区', '0.000000', '0.000000', 3, 0, 1), - (725199, 722024, '清水区', '清水区', '0.000000', '0.000000', 3, 0, 1), - (725488, 714401, '臺南市', '臺南市', '0.000000', '0.000000', 2, 0, 1), - (725489, 725488, '佳里区', '佳里区', '0.000000', '0.000000', 3, 0, 1), - (725588, 725488, '将军区', '将军区', '0.000000', '0.000000', 3, 0, 1), - (725620, 725488, '六甲区', '六甲区', '0.000000', '0.000000', 3, 0, 1), - (725679, 725488, '柳营区', '柳营区', '0.000000', '0.000000', 3, 0, 1), - (725795, 725488, '龙崎区', '龙崎区', '0.000000', '0.000000', 3, 0, 1), - (725841, 725488, '麻豆区', '麻豆区', '0.000000', '0.000000', 3, 0, 1), - (725927, 725488, '南化区', '南化区', '0.000000', '0.000000', 3, 0, 1), - (725938, 725488, '楠西区', '楠西区', '0.000000', '0.000000', 3, 0, 1), - (725973, 725488, '北区', '北区', '0.000000', '0.000000', 3, 0, 1), - (726300, 725488, '七股区', '七股区', '0.000000', '0.000000', 3, 0, 1), - (726338, 725488, '仁德区', '仁德区', '0.000000', '0.000000', 3, 0, 1), - (726539, 725488, '善化区', '善化区', '0.000000', '0.000000', 3, 0, 1), - (726675, 725488, '山上区', '山上区', '0.000000', '0.000000', 3, 0, 1), - (726691, 725488, '南区', '南区', '120.679305', '24.133453', 3, 0, 1), - (727041, 725488, '中西区', '中西区', '0.000000', '0.000000', 3, 0, 1), - (727251, 725488, '下营区', '下营区', '0.000000', '0.000000', 3, 0, 1), - (727339, 725488, '西港区', '西港区', '0.000000', '0.000000', 3, 0, 1), - (727375, 725488, '新化区', '新化区', '0.000000', '0.000000', 3, 0, 1), - (727425, 725488, '新市区', '新市区', '0.000000', '0.000000', 3, 0, 1), - (727529, 725488, '新营区', '新营区', '0.000000', '0.000000', 3, 0, 1), - (727730, 714401, '臺北市', '臺北市', '121.517057', '25.048074', 2, 0, 1), - (727731, 727730, '北投区', '北投区', '121.517057', '25.048074', 3, 0, 1), - (727897, 727730, '大同区', '大同区', '121.517057', '25.048074', 3, 0, 1), - (728070, 727730, '大安区', '大安区', '121.517057', '25.048074', 3, 0, 1), - (728116, 727730, '南港区', '南港区', '121.517057', '25.048074', 3, 0, 1), - (728220, 727730, '内湖区', '内湖区', '121.517057', '25.048074', 3, 0, 1), - (728340, 727730, '士林区', '士林区', '121.517057', '25.048074', 3, 0, 1), - (728550, 727730, '松山区', '松山区', '121.517057', '25.048074', 3, 0, 1), - (728713, 727730, '万华区', '万华区', '121.517057', '25.048074', 3, 0, 1), - (728920, 727730, '文山区', '文山区', '121.517057', '25.048074', 3, 0, 1), - (729073, 727730, '信义区', '信义区', '121.517057', '25.048074', 3, 0, 1), - (729277, 727730, '中山区', '中山区', '121.517057', '25.048074', 3, 0, 1), - (729583, 727730, '中正区', '中正区', '121.517057', '25.048074', 3, 0, 1), - (729928, 714401, '臺东县', '臺东县', '0.000000', '0.000000', 2, 0, 1), - (729929, 729928, '卑南乡', '卑南乡', '121.117213', '22.781744', 3, 0, 1), - (729994, 729928, '长滨乡', '长滨乡', '0.000000', '0.000000', 3, 0, 1), - (730033, 729928, '成功镇', '成功镇', '0.000000', '0.000000', 3, 0, 1), - (730107, 729928, '池上乡', '池上乡', '121.212999', '23.123275', 3, 0, 1), - (730196, 729928, '达仁乡', '达仁乡', '120.878316', '22.296142', 3, 0, 1), - (730219, 729928, '大武乡', '大武乡', '0.000000', '0.000000', 3, 0, 1), - (730268, 729928, '东河乡', '东河乡', '0.000000', '0.000000', 3, 0, 1), - (730308, 729928, '关山镇', '关山镇', '121.158084', '23.047483', 3, 0, 1), - (730384, 729928, '海端乡', '海端乡', '121.172009', '23.101079', 3, 0, 1), - (730409, 729928, '金峰乡', '金峰乡', '0.000000', '0.000000', 3, 0, 1), - (730416, 729928, '兰屿乡', '兰屿乡', '0.000000', '0.000000', 3, 0, 1), - (730423, 729928, '绿岛乡', '绿岛乡', '0.000000', '0.000000', 3, 0, 1), - (730438, 729928, '鹿野乡', '鹿野乡', '0.000000', '0.000000', 3, 0, 1), - (730510, 729928, '太麻里乡', '太麻里乡', '120.999365', '22.610919', 3, 0, 1), - (730565, 729928, '臺东市', '臺东市', '0.000000', '0.000000', 3, 0, 1), - (730832, 729928, '延平乡', '延平乡', '0.000000', '0.000000', 3, 0, 1), - (730843, 714401, '桃园市', '桃园市', '121.083000', '25.000000', 2, 0, 1), - (730844, 730843, '八德区', '八德区', '121.083000', '25.000000', 3, 0, 1), - (731212, 730843, '大溪区', '大溪区', '121.083000', '25.000000', 3, 0, 1), - (731471, 730843, '大园区', '大园区', '121.083000', '25.000000', 3, 0, 1), - (731767, 730843, '復兴区', '復兴区', '121.083000', '25.000000', 3, 0, 1), - (731835, 730843, '观音区', '观音区', '121.083000', '25.000000', 3, 0, 1), - (732079, 730843, '龟山区', '龟山区', '121.083000', '25.000000', 3, 0, 1), - (732469, 730843, '龙潭区', '龙潭区', '121.083000', '25.000000', 3, 0, 1), - (732800, 730843, '芦竹区', '芦竹区', '121.083000', '25.000000', 3, 0, 1), - (733144, 730843, '平镇区', '平镇区', '121.083000', '25.000000', 3, 0, 1), - (733179, 730843, '桃园区', '桃园区', '121.083000', '25.000000', 3, 0, 1), - (733390, 730843, '新屋区', '新屋区', '121.083000', '25.000000', 3, 0, 1), - (733537, 730843, '杨梅区', '杨梅区', '121.083000', '25.000000', 3, 0, 1), - (733876, 730843, '中坜区', '中坜区', '121.083000', '25.000000', 3, 0, 1), - (734179, 714401, '宜兰县', '宜兰县', '121.500000', '24.600000', 2, 0, 1), - (734180, 734179, '大同乡', '大同乡', '121.500000', '24.600000', 3, 0, 1), - (734246, 734179, '钓鱼臺', '钓鱼臺', '121.500000', '24.600000', 3, 0, 1), - (734248, 734179, '冬山乡', '冬山乡', '121.500000', '24.600000', 3, 0, 1), - (734579, 734179, '礁溪乡', '礁溪乡', '121.500000', '24.600000', 3, 0, 1), - (734681, 734179, '罗东镇', '罗东镇', '121.500000', '24.600000', 3, 0, 1), - (734842, 734179, '南澳乡', '南澳乡', '121.500000', '24.600000', 3, 0, 1), - (734865, 734179, '三星乡', '三星乡', '121.500000', '24.600000', 3, 0, 1), - (735104, 734179, '苏澳镇', '苏澳镇', '121.500000', '24.600000', 3, 0, 1), - (735319, 734179, '头城镇', '头城镇', '121.500000', '24.600000', 3, 0, 1), - (735419, 734179, '五结乡', '五结乡', '121.796468', '24.685615', 3, 0, 1), - (735620, 734179, '宜兰市', '宜兰市', '121.500000', '24.600000', 3, 0, 1), - (735851, 734179, '员山乡', '员山乡', '121.500000', '24.600000', 3, 0, 1), - (735970, 734179, '壮围乡', '壮围乡', '121.500000', '24.600000', 3, 0, 1), - (736051, 714401, '南投县', '南投县', '120.830000', '23.830000', 2, 0, 1), - (736052, 736051, '草屯镇', '草屯镇', '120.830000', '23.830000', 3, 0, 1), - (736305, 736051, '国姓乡', '国姓乡', '120.830000', '23.830000', 3, 0, 1), - (736356, 736051, '集集镇', '集集镇', '120.830000', '23.830000', 3, 0, 1), - (736449, 736051, '鹿谷乡', '鹿谷乡', '120.830000', '23.830000', 3, 0, 1), - (736522, 736051, '名间乡', '名间乡', '120.830000', '23.830000', 3, 0, 1), - (736622, 736051, '南投市', '南投市', '120.830000', '23.830000', 3, 0, 1), - (736887, 736051, '埔里镇', '埔里镇', '120.830000', '23.830000', 3, 0, 1), - (737266, 736051, '仁爱乡', '仁爱乡', '120.830000', '23.830000', 3, 0, 1), - (737337, 736051, '水里乡', '水里乡', '120.830000', '23.830000', 3, 0, 1), - (737496, 736051, '信义乡', '信义乡', '120.830000', '23.830000', 3, 0, 1), - (737533, 736051, '鱼池乡', '鱼池乡', '120.830000', '23.830000', 3, 0, 1), - (737591, 736051, '中寮乡', '中寮乡', '120.830000', '23.830000', 3, 0, 1), - (737625, 736051, '竹山镇', '竹山镇', '120.830000', '23.830000', 3, 0, 1), - (737856, 714401, '南海岛', '南海岛', '0.000000', '0.000000', 2, 0, 1), - (737857, 737856, '东沙群岛', '东沙群岛', '0.000000', '0.000000', 3, 0, 1), - (737859, 737856, '南沙群岛', '南沙群岛', '0.000000', '0.000000', 3, 0, 1), - (737861, 714401, '苗栗县', '苗栗县', '120.818985', '24.561601', 2, 0, 1), - (737862, 737861, '头屋乡', '头屋乡', '120.818985', '24.561601', 3, 0, 1), - (737894, 737861, '西湖乡', '西湖乡', '120.743700', '24.556610', 3, 0, 1), - (737948, 737861, '苑里镇', '苑里镇', '120.818985', '24.561601', 3, 0, 1), - (738050, 737861, '造桥乡', '造桥乡', '120.818985', '24.561601', 3, 0, 1), - (738158, 737861, '竹南镇', '竹南镇', '120.872636', '24.685510', 3, 0, 1), - (738454, 737861, '卓兰镇', '卓兰镇', '120.823440', '24.309510', 3, 0, 1), - (738528, 737861, '大湖乡', '大湖乡', '120.863640', '24.422548', 3, 0, 1), - (738619, 737861, '公馆乡', '公馆乡', '120.818985', '24.561601', 3, 0, 1), - (738695, 737861, '后龙镇', '后龙镇', '120.786474', '24.612613', 3, 0, 1), - (738882, 737861, '苗栗市', '苗栗市', '120.819288', '24.561582', 3, 0, 1), - (739250, 737861, '南庄乡', '南庄乡', '120.818985', '24.561601', 3, 0, 1), - (739302, 737861, '三湾乡', '三湾乡', '120.818985', '24.561601', 3, 0, 1), - (739369, 737861, '三义乡', '三义乡', '120.765515', '24.413037', 3, 0, 1), - (739419, 737861, '狮潭乡', '狮潭乡', '120.918024', '24.540004', 3, 0, 1), - (739465, 737861, '泰安乡', '泰安乡', '120.818985', '24.561601', 3, 0, 1), - (739487, 737861, '铜锣乡', '铜锣乡', '120.786475', '24.489502', 3, 0, 1), - (739564, 737861, '通霄镇', '通霄镇', '120.676696', '24.489084', 3, 0, 1), - (739642, 737861, '头份市', '头份市', '120.818985', '24.561601', 3, 0, 1), - (739957, 714401, '嘉义市', '嘉义市', '120.452538', '23.481568', 2, 0, 1), - (739958, 739957, '东区', '东区', '120.452538', '23.481568', 3, 0, 1), - (740140, 739957, '西区', '西区', '120.452538', '23.481568', 3, 0, 1), - (740510, 714401, '嘉义县', '嘉义县', '120.452538', '23.481568', 2, 0, 1), - (740511, 740510, '阿里山乡', '阿里山乡', '120.452538', '23.481568', 3, 0, 1), - (740536, 740510, '布袋镇', '布袋镇', '120.452538', '23.481568', 3, 0, 1), - (740625, 740510, '大林镇', '大林镇', '120.452538', '23.481568', 3, 0, 1), - (740746, 740510, '大埔乡', '大埔乡', '120.452538', '23.481568', 3, 0, 1), - (740792, 740510, '东石乡', '东石乡', '120.452538', '23.481568', 3, 0, 1), - (740845, 740510, '番路乡', '番路乡', '120.452538', '23.481568', 3, 0, 1), - (740943, 740510, '六脚乡', '六脚乡', '120.452538', '23.481568', 3, 0, 1), - (740975, 740510, '鹿草乡', '鹿草乡', '120.452538', '23.481568', 3, 0, 1), - (741010, 740510, '梅山乡', '梅山乡', '120.452538', '23.481568', 3, 0, 1), - (741137, 740510, '民雄乡', '民雄乡', '120.452538', '23.481568', 3, 0, 1), - (741312, 740510, '朴子市', '朴子市', '120.452538', '23.481568', 3, 0, 1), - (741451, 740510, '水上乡', '水上乡', '120.452538', '23.481568', 3, 0, 1), - (741550, 740510, '太保市', '太保市', '120.332737', '23.459115', 3, 0, 1), - (741646, 740510, '溪口乡', '溪口乡', '120.452538', '23.481568', 3, 0, 1), - (741688, 740510, '新港乡', '新港乡', '120.452538', '23.481568', 3, 0, 1), - (741750, 740510, '义竹乡', '义竹乡', '120.452538', '23.481568', 3, 0, 1), - (741785, 740510, '中埔乡', '中埔乡', '120.452538', '23.481568', 3, 0, 1), - (741936, 740510, '竹崎乡', '竹崎乡', '120.452538', '23.481568', 3, 0, 1), - (742126, 714401, '新竹市', '新竹市', '120.968798', '24.806738', 2, 0, 1), - (742127, 742126, '东区', '东区', '120.973544', '24.805226', 3, 0, 1), - (742309, 742126, '北区', '北区', '120.968798', '24.806738', 3, 0, 1), - (742636, 714401, '新竹县', '新竹县', '120.968798', '24.806738', 2, 0, 1), - (742637, 742636, '峨眉乡', '峨眉乡', '120.968798', '24.806738', 3, 0, 1), - (742674, 742636, '关西镇', '关西镇', '120.968798', '24.806738', 3, 0, 1), - (742797, 742636, '横山乡', '横山乡', '120.968798', '24.806738', 3, 0, 1), - (742852, 742636, '湖口乡', '湖口乡', '120.968798', '24.806738', 3, 0, 1), - (743201, 742636, '尖石乡', '尖石乡', '120.968798', '24.806738', 3, 0, 1), - (743246, 742636, '芎林乡', '芎林乡', '120.968798', '24.806738', 3, 0, 1), - (743298, 742636, '五峰乡', '五峰乡', '120.968798', '24.806738', 3, 0, 1), - (743319, 742636, '新丰乡', '新丰乡', '120.968798', '24.806738', 3, 0, 1), - (743414, 742636, '新埔镇', '新埔镇', '120.968798', '24.806738', 3, 0, 1), - (743527, 742636, '竹北市', '竹北市', '120.968798', '24.806738', 3, 0, 1), - (743565, 742636, '竹东镇', '竹东镇', '120.968798', '24.806738', 3, 0, 1), - (743725, 742636, '宝山乡', '宝山乡', '120.968798', '24.806738', 3, 0, 1), - (743888, 742636, '北埔乡', '北埔乡', '120.968798', '24.806738', 3, 0, 1), - (743938, 714401, '花莲县', '花莲县', '121.300000', '23.830000', 2, 0, 1), - (743939, 743938, '卓溪乡', '卓溪乡', '121.301890', '23.344908', 3, 0, 1), - (743956, 743938, '丰滨乡', '丰滨乡', '121.300000', '23.830000', 3, 0, 1), - (743993, 743938, '凤林镇', '凤林镇', '121.300000', '23.830000', 3, 0, 1), - (744128, 743938, '富里乡', '富里乡', '121.244694', '23.175468', 3, 0, 1), - (744185, 743938, '光復乡', '光復乡', '121.300000', '23.830000', 3, 0, 1), - (744246, 743938, '花莲市', '花莲市', '121.606927', '23.981993', 3, 0, 1), - (744625, 743938, '吉安乡', '吉安乡', '121.300000', '23.830000', 3, 0, 1), - (745050, 743938, '瑞穗乡', '瑞穗乡', '121.373373', '23.496080', 3, 0, 1), - (745196, 743938, '寿丰乡', '寿丰乡', '121.506030', '23.869774', 3, 0, 1), - (745354, 743938, '万荣乡', '万荣乡', '121.300000', '23.830000', 3, 0, 1), - (745363, 743938, '新城乡', '新城乡', '121.604120', '24.039243', 3, 0, 1), - (745486, 743938, '秀林乡', '秀林乡', '121.300000', '23.830000', 3, 0, 1), - (745532, 743938, '玉里镇', '玉里镇', '121.312109', '23.334236', 3, 0, 1), - (745674, 714401, '高雄市', '高雄市', '120.311922', '22.620856', 2, 0, 1), - (745675, 745674, '阿莲区', '阿莲区', '120.311922', '22.620856', 3, 0, 1), - (745715, 745674, '大寮区', '大寮区', '120.311922', '22.620856', 3, 0, 1), - (746083, 745674, '大社区', '大社区', '120.311922', '22.620856', 3, 0, 1), - (746199, 745674, '大树区', '大树区', '120.311922', '22.620856', 3, 0, 1), - (746294, 745674, '凤山区', '凤山区', '120.311922', '22.620856', 3, 0, 1), - (746624, 745674, '冈山区', '冈山区', '120.311922', '22.620856', 3, 0, 1), - (746906, 745674, '鼓山区', '鼓山区', '120.311922', '22.620856', 3, 0, 1), - (747053, 745674, '湖内区', '湖内区', '120.311922', '22.620856', 3, 0, 1), - (747108, 745674, '甲仙区', '甲仙区', '120.587980', '23.083957', 3, 0, 1), - (747150, 745674, '苓雅区', '苓雅区', '120.311922', '22.620856', 3, 0, 1), - (747342, 745674, '林园区', '林园区', '120.311922', '22.620856', 3, 0, 1), - (747481, 745674, '六龟区', '六龟区', '120.311922', '22.620856', 3, 0, 1), - (747536, 745674, '路竹区', '路竹区', '120.311922', '22.620856', 3, 0, 1), - (747643, 745674, '茂林区', '茂林区', '120.311922', '22.620856', 3, 0, 1), - (747647, 745674, '美浓区', '美浓区', '120.542419', '22.894882', 3, 0, 1), - (747764, 745674, '弥陀区', '弥陀区', '120.250672', '22.781561', 3, 0, 1), - (747894, 745674, '那玛夏区', '那玛夏区', '120.311922', '22.620856', 3, 0, 1), - (747902, 745674, '楠梓区', '楠梓区', '120.311922', '22.620856', 3, 0, 1), - (748258, 745674, '内门区', '内门区', '120.311922', '22.620856', 3, 0, 1), - (748344, 745674, '鸟松区', '鸟松区', '120.311922', '22.620856', 3, 0, 1), - (748553, 714401, '基隆市', '基隆市', '121.746248', '25.130741', 2, 0, 1), - (748554, 748553, '安乐区', '安乐区', '121.746248', '25.130741', 3, 0, 1), - (748581, 748553, '暖暖区', '暖暖区', '121.746248', '25.130741', 3, 0, 1), - (748599, 748553, '七堵区', '七堵区', '121.746248', '25.130741', 3, 0, 1), - (748670, 748553, '仁爱区', '仁爱区', '121.746248', '25.130741', 3, 0, 1), - (748716, 748553, '信义区', '信义区', '121.746248', '25.130741', 3, 0, 1), - (748920, 748553, '中山区', '中山区', '121.746248', '25.130741', 3, 0, 1), - (749226, 748553, '中正区', '中正区', '121.768000', '25.151647', 3, 0, 1), - (749571, 714401, '金门县', '金门县', '118.317089', '24.432706', 2, 0, 1), - (749572, 749571, '金城镇', '金城镇', '118.317089', '24.432706', 3, 0, 1), - (749647, 749571, '金湖镇', '金湖镇', '118.317089', '24.432706', 3, 0, 1), - (749752, 749571, '金宁乡', '金宁乡', '118.317089', '24.432706', 3, 0, 1), - (749810, 749571, '金沙镇', '金沙镇', '118.317089', '24.432706', 3, 0, 1), - (749894, 749571, '烈屿乡', '烈屿乡', '118.317089', '24.432706', 3, 0, 1), - (749928, 749571, '乌坵乡', '乌坵乡', '118.317089', '24.432706', 3, 0, 1), - (749930, 714401, '连江县', '连江县', '119.539704', '26.197364', 2, 0, 1), - (749931, 749930, '北竿乡', '北竿乡', '119.539704', '26.197364', 3, 0, 1), - (749938, 749930, '东引乡', '东引乡', '119.539704', '26.197364', 3, 0, 1), - (749941, 749930, '莒光乡', '莒光乡', '119.539704', '26.197364', 3, 0, 1), - (749947, 749930, '南竿乡', '南竿乡', '119.539704', '26.197364', 3, 0, 1), - (749957, 714401, '云林县', '云林县', '120.527173', '23.696887', 2, 0, 1), - (749958, 749957, '褒忠乡', '褒忠乡', '120.309069', '23.695652', 3, 0, 1), - (749991, 749957, '北港镇', '北港镇', '120.296759', '23.572428', 3, 0, 1), - (750170, 749957, '莿桐乡', '莿桐乡', '120.497033', '23.757251', 3, 0, 1), - (750218, 749957, '大埤乡', '大埤乡', '120.527173', '23.696887', 3, 0, 1), - (750291, 749957, '东势乡', '东势乡', '120.527173', '23.696887', 3, 0, 1), - (750363, 749957, '斗六市', '斗六市', '120.527173', '23.696887', 3, 0, 1), - (750795, 749957, '斗南镇', '斗南镇', '120.527173', '23.696887', 3, 0, 1), - (751009, 749957, '二崙乡', '二崙乡', '120.527173', '23.696887', 3, 0, 1), - (751071, 749957, '古坑乡', '古坑乡', '120.558553', '23.644734', 3, 0, 1), - (751147, 749957, '虎尾镇', '虎尾镇', '120.429231', '23.707796', 3, 0, 1), - (751400, 749957, '口湖乡', '口湖乡', '120.178640', '23.585506', 3, 0, 1), - (751493, 749957, '林内乡', '林内乡', '120.527173', '23.696887', 3, 0, 1), - (751555, 749957, '崙背乡', '崙背乡', '120.527173', '23.696887', 3, 0, 1), - (751674, 749957, '麦寮乡', '麦寮乡', '120.527173', '23.696887', 3, 0, 1), - (751764, 749957, '水林乡', '水林乡', '120.241228', '23.571067', 3, 0, 1), - (751832, 749957, '四湖乡', '四湖乡', '120.220781', '23.635426', 3, 0, 1), - (751907, 749957, '臺西乡', '臺西乡', '120.196139', '23.702821', 3, 0, 1), - (751956, 749957, '土库镇', '土库镇', '120.527173', '23.696887', 3, 0, 1), - (752034, 749957, '西螺镇', '西螺镇', '120.457123', '23.797412', 3, 0, 1), - (752149, 749957, '元长乡', '元长乡', '120.311052', '23.649577', 3, 0, 1), - (752150, 714368, '香港特别行政区', '香港特别行政区', '', '', 2, 0, 1), - (752151, 752150, '中西区', '中西区', '', '', 3, 0, 1), - (752152, 752150, '东区', '东区', '', '', 3, 0, 1), - (752153, 752150, '九龙城区', '九龙城区', '', '', 3, 0, 1), - (752154, 752150, '观塘区', '观塘区', '114.231268', '22.309430', 3, 0, 1), - (752155, 752150, '南区', '南区', '114.174134', '22.246760', 3, 0, 1), - (752156, 752150, '深水埗区', '深水埗区', '', '', 3, 0, 1), - (752157, 752150, '湾仔区', '湾仔区', '', '', 3, 0, 1), - (752158, 752150, '黄大仙区', '黄大仙区', '', '', 3, 0, 1), - (752159, 752150, '油尖旺区', '油尖旺区', '', '', 3, 0, 1), - (752160, 752150, '离岛区', '离岛区', '', '', 3, 0, 1), - (752161, 752150, '葵青区', '葵青区', '', '', 3, 0, 1), - (752162, 752150, '北区', '北区', '', '', 3, 0, 1), - (752163, 752150, '西贡区', '西贡区', '', '', 3, 0, 1), - (752164, 752150, '沙田区', '沙田区', '', '', 3, 0, 1), - (752165, 752150, '屯门区', '屯门区', '', '', 3, 0, 1), - (752166, 752150, '大埔区', '大埔区', '', '', 3, 0, 1), - (752167, 752150, '荃湾区', '荃湾区', '', '', 3, 0, 1), - (752168, 752150, '元朗区', '元朗区', '', '', 3, 0, 1), - (752169, 714390, '澳门特别行政区', '澳门特别行政区', '', '', 2, 0, 1), - (752170, 752169, '澳门半岛', '澳门半岛', '', '', 3, 0, 1), - (752171, 752169, '凼仔', '凼仔', '', '', 3, 0, 1), - (752172, 752169, '路凼城', '路凼城', '', '', 3, 0, 1), - (752173, 752169, '路环', '路环', '', '', 3, 0, 1), - (752177, 440300, '龙华区', '龙华区', '', '', 3, 0, 1), - (441900003, 441900, '东城街道办事处', '东城街道办事处', '113.754635', '23.002896', 3, 0, 1), - (441900004, 441900, '南城街道办事处', '南城街道办事处', '113.753133', '22.987560', 3, 0, 1), - (441900005, 441900, '万江街道办事处', '万江街道办事处', '113.740409', '23.052146', 3, 0, 1), - (441900006, 441900, '莞城街道办事处', '莞城街道办事处', '113.751050', '23.053413', 3, 0, 1), - (441900101, 441900, '石碣镇', '石碣镇', '113.802109', '23.094111', 3, 0, 1), - (441900102, 441900, '石龙镇', '石龙镇', '113.751765', '23.020536', 3, 0, 1), - (441900103, 441900, '茶山镇', '茶山镇', '113.751765', '23.020536', 3, 0, 1), - (441900104, 441900, '石排镇', '石排镇', '113.751765', '23.020536', 3, 0, 1), - (441900105, 441900, '企石镇', '企石镇', '113.751765', '23.020536', 3, 0, 1), - (441900106, 441900, '横沥镇', '横沥镇', '113.751765', '23.020536', 3, 0, 1), - (441900107, 441900, '桥头镇', '桥头镇', '113.751765', '23.020536', 3, 0, 1), - (441900108, 441900, '谢岗镇', '谢岗镇', '114.141456', '22.972083', 3, 0, 1), - (441900109, 441900, '东坑镇', '东坑镇', '113.948089', '22.989033', 3, 0, 1), - (441900110, 441900, '常平镇', '常平镇', '113.992186', '22.975601', 3, 0, 1), - (441900111, 441900, '寮步镇', '寮步镇', '113.818996', '23.025373', 3, 0, 1), - (441900112, 441900, '樟木头镇', '樟木头镇', '114.083278', '22.914909', 3, 0, 1); - -INSERT INTO `nc_sys_area` VALUES - (441900113, 441900, '大朗镇', '大朗镇', '113.915820', '22.915996', 3, 0, 1), - (441900114, 441900, '黄江镇', '黄江镇', '113.996039', '22.877840', 3, 0, 1), - (441900115, 441900, '清溪镇', '清溪镇', '114.164330', '22.844557', 3, 0, 1), - (441900116, 441900, '塘厦镇', '塘厦镇', '113.774481', '22.791051', 3, 0, 1), - (441900117, 441900, '凤岗镇', '凤岗镇', '113.751765', '23.020536', 3, 0, 1), - (441900118, 441900, '大岭山镇', '大岭山镇', '113.842223', '22.899965', 3, 0, 1), - (441900119, 441900, '长安镇', '长安镇', '113.794060', '22.803590', 3, 0, 1), - (441900121, 441900, '虎门镇', '虎门镇', '113.672560', '22.814835', 3, 0, 1), - (441900122, 441900, '厚街镇', '厚街镇', '113.751765', '23.020536', 3, 0, 1), - (441900123, 441900, '沙田镇', '沙田镇', '113.751765', '23.020536', 3, 0, 1), - (441900124, 441900, '道滘镇', '道滘镇', '113.751765', '23.020536', 3, 0, 1), - (441900125, 441900, '洪梅镇', '洪梅镇', '113.608903', '22.994717', 3, 0, 1), - (441900126, 441900, '麻涌镇', '麻涌镇', '113.751765', '23.020536', 3, 0, 1), - (441900127, 441900, '望牛墩镇', '望牛墩镇', '113.656243', '23.055331', 3, 0, 1), - (441900128, 441900, '中堂镇', '中堂镇', '113.751765', '23.020536', 3, 0, 1), - (441900129, 441900, '高埗镇', '高埗镇', '113.722126', '23.078713', 3, 0, 1), - (441900401, 441900, '松山湖管委会', '松山湖管委会', '113.909208', '22.960541', 3, 0, 1), - (441900402, 441900, '虎门港管委会', '虎门港管委会', '113.583070', '22.864175', 3, 0, 1), - (441900403, 441900, '东莞生态园', '东莞生态园', '113.927452', '23.063210', 3, 0, 1), - (442000001, 442000, '石岐区街道办事处', '石岐区街道办事处', '113.384930', '22.532046', 3, 0, 1), - (442000002, 442000, '东区街道办事处', '东区街道办事处', '113.392782', '22.517645', 3, 0, 1), - (442000003, 442000, '火炬开发区街道办事处', '火炬开发区街道办事处', '113.480528', '22.566086', 3, 0, 1), - (442000004, 442000, '西区街道办事处', '西区街道办事处', '113.392782', '22.517645', 3, 0, 1), - (442000005, 442000, '南区街道办事处', '南区街道办事处', '113.358509', '22.472530', 3, 0, 1), - (442000006, 442000, '五桂山街道办事处', '五桂山街道办事处', '113.463397', '22.421549', 3, 0, 1), - (442000100, 442000, '小榄镇', '小榄镇', '113.250897', '22.672099', 3, 0, 1), - (442000101, 442000, '黄圃镇', '黄圃镇', '113.335242', '22.709897', 3, 0, 1), - (442000102, 442000, '民众镇', '民众镇', '113.392782', '22.517645', 3, 0, 1), - (442000103, 442000, '东凤镇', '东凤镇', '113.392782', '22.517645', 3, 0, 1), - (442000104, 442000, '东升镇', '东升镇', '113.294393', '22.616908', 3, 0, 1), - (442000105, 442000, '古镇镇', '古镇镇', '113.190869', '22.613406', 3, 0, 1), - (442000106, 442000, '沙溪镇', '沙溪镇', '113.392782', '22.517645', 3, 0, 1), - (442000107, 442000, '坦洲镇', '坦洲镇', '113.460373', '22.265182', 3, 0, 1), - (442000108, 442000, '港口镇', '港口镇', '113.247148', '22.683616', 3, 0, 1), - (442000109, 442000, '三角镇', '三角镇', '113.422371', '22.684688', 3, 0, 1), - (442000110, 442000, '横栏镇', '横栏镇', '113.265845', '22.523201', 3, 0, 1), - (442000111, 442000, '南头镇', '南头镇', '113.392782', '22.517645', 3, 0, 1), - (442000112, 442000, '阜沙镇', '阜沙镇', '113.392782', '22.517645', 3, 0, 1), - (442000113, 442000, '南朗镇', '南朗镇', '113.392782', '22.517645', 3, 0, 1), - (442000114, 442000, '三乡镇', '三乡镇', '113.441614', '22.357754', 3, 0, 1), - (442000115, 442000, '板芙镇', '板芙镇', '113.392782', '22.517645', 3, 0, 1), - (442000116, 442000, '大涌镇', '大涌镇', '113.392782', '22.517645', 3, 0, 1), - (442000117, 442000, '神湾镇', '神湾镇', '113.392782', '22.517645', 3, 0, 1), - (460400100, 460400, '那大镇', '那大镇', '110.349228', '20.017377', 3, 0, 1), - (460400101, 460400, '和庆镇', '和庆镇', '109.640856', '19.525399', 3, 0, 1), - (460400102, 460400, '南丰镇', '南丰镇', '110.349228', '20.017377', 3, 0, 1), - (460400103, 460400, '大成镇', '大成镇', '110.349228', '20.017377', 3, 0, 1), - (460400104, 460400, '雅星镇', '雅星镇', '110.349228', '20.017377', 3, 0, 1), - (460400105, 460400, '兰洋镇', '兰洋镇', '110.349228', '20.017377', 3, 0, 1), - (460400106, 460400, '光村镇', '光村镇', '110.349228', '20.017377', 3, 0, 1), - (460400107, 460400, '木棠镇', '木棠镇', '110.349228', '20.017377', 3, 0, 1), - (460400108, 460400, '海头镇', '海头镇', '110.349228', '20.017377', 3, 0, 1), - (460400109, 460400, '峨蔓镇', '峨蔓镇', '110.349228', '20.017377', 3, 0, 1), - (460400110, 460400, '三都镇', '三都镇', '110.349228', '20.017377', 3, 0, 1), - (460400111, 460400, '王五镇', '王五镇', '110.349228', '20.017377', 3, 0, 1), - (460400112, 460400, '白马井镇', '白马井镇', '109.218734', '19.696407', 3, 0, 1), - (460400113, 460400, '中和镇', '中和镇', '110.349228', '20.017377', 3, 0, 1), - (460400114, 460400, '排浦镇', '排浦镇', '110.349228', '20.017377', 3, 0, 1), - (460400115, 460400, '东成镇', '东成镇', '110.349228', '20.017377', 3, 0, 1), - (460400116, 460400, '新州镇', '新州镇', '110.349228', '20.017377', 3, 0, 1), - (460400400, 460400, '国营西培农场', '国营西培农场', '109.455554', '19.476422', 3, 0, 1), - (460400404, 460400, '国营西联农场', '国营西联农场', '109.539074', '19.673015', 3, 0, 1), - (460400405, 460400, '国营蓝洋农场', '国营蓝洋农场', '109.670723', '19.458984', 3, 0, 1), - (460400407, 460400, '国营八一农场', '国营八一农场', '109.364519', '19.413460', 3, 0, 1), - (460400499, 460400, '洋浦经济开发区', '洋浦经济开发区', '109.202064', '19.736941', 3, 0, 1), - (460400500, 460400, '华南热作学院', '华南热作学院', '109.494073', '19.505382', 3, 0, 1); diff --git a/docker/Dockerfile b/docker/Dockerfile deleted file mode 100644 index 63b9741f..00000000 --- a/docker/Dockerfile +++ /dev/null @@ -1,25 +0,0 @@ -FROM node:20-alpine AS builder -WORKDIR /app - -# Install dependencies -COPY package*.json ./ -RUN npm ci --omit=dev - -# Copy source -COPY . . - -# Build (if needed) -RUN npm run build || true - -FROM node:20-alpine -WORKDIR /app - -ENV NODE_ENV=production - -COPY --from=builder /app /app - -EXPOSE 3000 - -CMD ["node", "dist/main.js"] - - diff --git a/docker/auto-test.sh b/docker/auto-test.sh deleted file mode 100755 index 2d830b69..00000000 --- a/docker/auto-test.sh +++ /dev/null @@ -1,106 +0,0 @@ -#!/bin/bash - -# WWJCloud Docker 自动测试脚本 -# ======================================== - -# 颜色定义 -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -BLUE='\033[0;34m' -NC='\033[0m' # No Color - -# 日志函数 -log_info() { echo -e "${BLUE}[INFO]${NC} $1"; } -log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; } -log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1"; } -log_error() { echo -e "${RED}[ERROR]${NC} $1"; } - -# 测试计数器 -TESTS_PASSED=0 -TESTS_FAILED=0 -TOTAL_TESTS=0 - -# 测试函数 -run_test() { - local test_name="$1" - local test_command="$2" - - TOTAL_TESTS=$((TOTAL_TESTS + 1)) - log_info "测试 $TOTAL_TESTS: $test_name" - - if eval "$test_command" >/dev/null 2>&1; then - log_success "✅ $test_name - 通过" - TESTS_PASSED=$((TESTS_PASSED + 1)) - return 0 - else - log_error "❌ $test_name - 失败" - TESTS_FAILED=$((TESTS_FAILED + 1)) - return 1 - fi -} - -# 主测试函数 -main() { - echo "🚀 WWJCloud Docker 自动测试开始..." - echo "========================================" - - # 1. 检查容器状态 - log_info "检查容器运行状态..." - run_test "MySQL 容器运行" "docker ps | grep wwjcloud-mysql | grep Up" - run_test "Redis 容器运行" "docker ps | grep wwjcloud-redis | grep Up" - - # 2. 等待服务就绪 - log_info "等待服务完全启动..." - sleep 10 - - # 3. 测试 MySQL 连接 - log_info "测试 MySQL 数据库连接..." - run_test "MySQL Root 用户连接" "docker exec wwjcloud-mysql mysql -u root -pwwjcloud -e 'SELECT 1;'" - run_test "MySQL wwjcloud 用户连接" "docker exec wwjcloud-mysql mysql -u wwjcloud -pwwjcloud -e 'SELECT 1;'" - run_test "MySQL 数据库存在" "docker exec wwjcloud-mysql mysql -u wwjcloud -pwwjcloud -e 'USE wwjcloud; SHOW TABLES;'" - - # 4. 测试 Redis 连接 - log_info "测试 Redis 缓存连接..." - run_test "Redis 连接测试" "docker exec wwjcloud-redis redis-cli -a redis123456 ping" - run_test "Redis 读写测试" "docker exec wwjcloud-redis redis-cli -a redis123456 set test_key 'test_value' && docker exec wwjcloud-redis redis-cli -a redis123456 get test_key" - - # 5. 测试网络连通性 - log_info "测试网络连通性..." - run_test "MySQL 端口访问" "nc -z localhost 3306" - run_test "Redis 端口访问" "nc -z localhost 6379" - - # 6. 测试健康检查 - log_info "测试服务健康状态..." - run_test "MySQL 健康检查" "docker exec wwjcloud-mysql mysqladmin ping -h localhost -u root -pwwjcloud" - run_test "Redis 健康检查" "docker exec wwjcloud-redis redis-cli -a redis123456 ping" - - # 7. 测试数据持久化 - log_info "测试数据持久化..." - run_test "MySQL 数据写入" "docker exec wwjcloud-mysql mysql -u wwjcloud -pwwjcloud -e 'USE wwjcloud; CREATE TABLE IF NOT EXISTS test_table (id INT PRIMARY KEY, name VARCHAR(50));'" - run_test "MySQL 数据读取" "docker exec wwjcloud-mysql mysql -u wwjcloud -pwwjcloud -e 'USE wwjcloud; INSERT INTO test_table VALUES (2, \"test2\") ON DUPLICATE KEY UPDATE name=\"test2\"; SELECT * FROM test_table;'" - - # 输出测试结果 - echo "" - echo "========================================" - echo "📊 测试结果汇总" - echo "========================================" - echo "总测试数: $TOTAL_TESTS" - echo "通过: $TESTS_PASSED" - echo "失败: $TESTS_FAILED" - - if [ $TESTS_FAILED -eq 0 ]; then - log_success "🎉 所有测试通过!WWJCloud Docker 环境运行正常" - echo "" - echo "🌐 访问信息:" - echo "MySQL: localhost:3306 (用户: wwjcloud, 密码: wwjcloud, 数据库: wwjcloud)" - echo "Redis: localhost:6379 (密码: redis123456)" - exit 0 - else - log_error "❌ 有 $TESTS_FAILED 个测试失败,请检查服务状态" - exit 1 - fi -} - -# 运行主函数 -main "$@" diff --git a/docker/docker-compose.dev.yml b/docker/docker-compose.dev.yml deleted file mode 100644 index 84badfc7..00000000 --- a/docker/docker-compose.dev.yml +++ /dev/null @@ -1,66 +0,0 @@ -version: '3.8' - -# 开发环境的Docker Compose配置 -# 使用方式: docker-compose -f docker-compose.dev.yml up - -services: - # ======================================== - # MySQL 数据库(开发) - # ======================================== - mysql: - image: mysql:8.0 - container_name: wwjcloud-mysql-dev - restart: unless-stopped - environment: - MYSQL_ROOT_PASSWORD: root123456 - MYSQL_DATABASE: wwjcloud - MYSQL_USER: wwjcloud - MYSQL_PASSWORD: wwjcloud123 - TZ: Asia/Shanghai - ports: - - "3306:3306" - volumes: - - mysql_dev_data:/var/lib/mysql - - ./sql:/docker-entrypoint-initdb.d - command: - - --character-set-server=utf8mb4 - - --collation-server=utf8mb4_unicode_ci - - --default-authentication-plugin=mysql_native_password - healthcheck: - test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-proot123456"] - interval: 10s - timeout: 5s - retries: 5 - networks: - - wwjcloud-dev-network - - # ======================================== - # Redis 缓存(开发) - # ======================================== - redis: - image: redis:7-alpine - container_name: wwjcloud-redis-dev - restart: unless-stopped - ports: - - "6379:6379" - volumes: - - redis_dev_data:/data - command: redis-server --appendonly yes --requirepass redis123456 - healthcheck: - test: ["CMD", "redis-cli", "-a", "redis123456", "ping"] - interval: 10s - timeout: 3s - retries: 5 - networks: - - wwjcloud-dev-network - -volumes: - mysql_dev_data: - driver: local - redis_dev_data: - driver: local - -networks: - wwjcloud-dev-network: - driver: bridge - diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml deleted file mode 100644 index 098c9df8..00000000 --- a/docker/docker-compose.yml +++ /dev/null @@ -1,180 +0,0 @@ -version: '3.8' - -services: - # ======================================== - # MySQL 数据库 - # ======================================== - mysql: - image: mysql:8.0 - container_name: wwjcloud-mysql - restart: unless-stopped - environment: - MYSQL_ROOT_PASSWORD: wwjcloud - MYSQL_DATABASE: wwjcloud - MYSQL_USER: wwjcloud - MYSQL_PASSWORD: wwjcloud - TZ: Asia/Shanghai - ports: - - "3306:3306" - volumes: - - wwjcloud_mysql_data:/var/lib/mysql - - ../../sql:/docker-entrypoint-initdb.d - command: - - --character-set-server=utf8mb4 - - --collation-server=utf8mb4_unicode_ci - - --default-authentication-plugin=mysql_native_password - healthcheck: - test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-pwwjcloud"] - interval: 10s - timeout: 5s - retries: 5 - networks: - - wwjcloud-network - - # ======================================== - # Redis 缓存 - # ======================================== - redis: - image: redis:7-alpine - container_name: wwjcloud-redis - restart: unless-stopped - ports: - - "6379:6379" - volumes: - - wwjcloud_redis_data:/data - command: redis-server --appendonly yes --requirepass redis123456 - healthcheck: - test: ["CMD", "redis-cli", "-a", "redis123456", "ping"] - interval: 10s - timeout: 3s - retries: 5 - networks: - - wwjcloud-network - - # ======================================== - # NestJS 后端服务 - # ======================================== - nestjs-backend: - build: - context: .. - dockerfile: docker/Dockerfile - container_name: wwjcloud-nestjs - restart: unless-stopped - ports: - - "3000:3000" - environment: - NODE_ENV: production - # App配置 - APP_NAME: wwjcloud - APP_VERSION: 1.0.0 - APP_PORT: 3000 - APP_ENVIRONMENT: production - APP_TIMEZONE: Asia/Shanghai - APP_KEY: wwjcloud-super-secret-key-2024 - APP_DEFAULT_LANGUAGE: zh_CN - APP_SUPPORTED_LOCALES: zh_CN,en_US - # 数据库配置 - DB_HOST: mysql - DB_PORT: 3306 - DB_USERNAME: wwjcloud - DB_PASSWORD: wwjcloud - DB_DATABASE: wwjcloud - DB_SYNC: false - DB_LOGGING: false - DB_CONN_LIMIT: 10 - DB_ACQUIRE_TIMEOUT_MS: 60000 - DB_QUERY_TIMEOUT_MS: 60000 - DB_CACHE_DURATION_MS: 300000 - DB_TIMEZONE: +08:00 - DB_CHARSET: utf8mb4 - # Redis配置 - REDIS_HOST: redis - REDIS_PORT: 6379 - REDIS_PASSWORD: redis123456 - REDIS_DB: 0 - REDIS_KEY_PREFIX: "wwjcloud:" - # JWT配置 - JWT_SECRET: your-super-secret-jwt-key-change-in-production-32-chars - JWT_EXPIRES_IN: 7d - JWT_ALGORITHM: HS256 - # Kafka配置 - KAFKA_CLIENT_ID: wwjcloud-nestjs - KAFKA_BROKERS: kafka:9092 - KAFKA_GROUP_ID: wwjcloud-group - KAFKA_TOPIC_PREFIX: wwjcloud - # 缓存配置 - CACHE_TTL: 3600 - CACHE_MAX_ITEMS: 1000 - CACHE_PREFIX: "cache:" - # 日志配置 - LOG_LEVEL: info - LOG_FORMAT: json - # 上传配置 - UPLOAD_PATH: /app/uploads - UPLOAD_MAX_SIZE: 10485760 - UPLOAD_ALLOWED_TYPES: image/jpeg,image/png,image/gif,application/pdf - # 限流配置 - THROTTLE_TTL: 60 - THROTTLE_LIMIT: 100 - # 健康检查配置 - STARTUP_HEALTH_CHECK: true - STARTUP_HEALTH_TIMEOUT_MS: 30000 - # Swagger配置 - SWAGGER_ENABLED: true - SWAGGER_TITLE: WWJCloud API - SWAGGER_DESCRIPTION: WWJCloud NestJS API Documentation - SWAGGER_VERSION: 1.0.0 - SWAGGER_AUTH_ENABLED: true - SWAGGER_TOKEN: wwjcloud-swagger-token - depends_on: - mysql: - condition: service_healthy - redis: - condition: service_healthy - healthcheck: - test: ["CMD", "node", "-e", "require('http').get('http://localhost:3000/health', (r) => {process.exit(r.statusCode === 200 ? 0 : 1)})"] - interval: 30s - timeout: 10s - retries: 3 - start_period: 40s - networks: - - wwjcloud-network - - # ======================================== - # Admin 前端管理面板 - # ======================================== - admin-frontend: - build: - context: ../admin - dockerfile: Dockerfile - container_name: wwjcloud-admin - restart: unless-stopped - ports: - - "80:80" - depends_on: - nestjs-backend: - condition: service_healthy - healthcheck: - test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost/"] - interval: 30s - timeout: 3s - retries: 3 - networks: - - wwjcloud-network - -# ======================================== -# 数据卷 -# ======================================== -volumes: - wwjcloud_mysql_data: - driver: local - wwjcloud_redis_data: - driver: local - -# ======================================== -# 网络 -# ======================================== -networks: - wwjcloud-network: - driver: bridge - diff --git a/docker/docker-test-migration.sh b/docker/docker-test-migration.sh deleted file mode 100755 index 8db28aa9..00000000 --- a/docker/docker-test-migration.sh +++ /dev/null @@ -1,361 +0,0 @@ -#!/bin/bash - -# ======================================== -# Docker 迁移功能自动测试脚本 -# ======================================== - -set -e # 遇到错误立即退出 - -echo "🚀 开始Docker迁移功能自动测试..." -echo "==================================================" - -# 颜色定义 -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -BLUE='\033[0;34m' -NC='\033[0m' # No Color - -# 错误计数 -ERROR_COUNT=0 - -# 记录错误函数 -record_error() { - echo -e "${RED}❌ 错误: $1${NC}" - ERROR_COUNT=$((ERROR_COUNT + 1)) -} - -# 记录成功函数 -record_success() { - echo -e "${GREEN}✅ 成功: $1${NC}" -} - -# 记录警告函数 -record_warning() { - echo -e "${YELLOW}⚠️ 警告: $1${NC}" -} - -# 记录信息函数 -record_info() { - echo -e "${BLUE}ℹ️ 信息: $1${NC}" -} - -############################################################ -# 使用脚本所在目录的 docker-compose.yml -############################################################ -SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd) -export COMPOSE_FILE="$SCRIPT_DIR/docker-compose.yml" -record_info "使用的 Compose 文件: $COMPOSE_FILE" - -# 清理旧容器与孤儿,确保干净环境 -record_info "清理旧容器与孤儿..." -docker-compose down -v --remove-orphans >/dev/null 2>&1 || true -record_success "环境清理完成" - -echo "📋 测试阶段1: 环境准备" -echo "==================================================" - -# 检查Docker是否运行 -if ! docker info > /dev/null 2>&1; then - record_error "Docker未运行,请启动Docker" - exit 1 -fi -record_success "Docker运行正常" - -# 检查Docker Compose是否可用 -if ! docker-compose --version > /dev/null 2>&1; then - record_error "Docker Compose不可用" - exit 1 -fi -record_success "Docker Compose可用" - -# 停止并清理现有容器 -record_info "清理现有容器..." -docker-compose down -v --remove-orphans > /dev/null 2>&1 || true -record_success "现有容器已清理" - -echo "" -echo "📋 测试阶段2: 迁移工具测试" -echo "==================================================" - -# 测试迁移工具 -record_info "测试迁移工具..." -cd "$SCRIPT_DIR/../../tools" - -# 测试PHP文件发现工具 -if node -e "const PHPFileDiscovery = require('./php-file-discovery.js'); const discovery = new PHPFileDiscovery(); discovery.run(); console.log('PHP文件发现工具测试通过');" 2>/dev/null; then - record_success "PHP文件发现工具正常" -else - record_error "PHP文件发现工具失败" -fi - -# 测试业务逻辑转换器 -if node -e "const BusinessLogicConverter = require('./generators/business-logic-converter.js'); const converter = new BusinessLogicConverter(); console.log('业务逻辑转换器测试通过');" 2>/dev/null; then - record_success "业务逻辑转换器正常" -else - record_error "业务逻辑转换器失败" -fi - -# 测试控制器生成器 -if node -e "const ControllerGenerator = require('./generators/controller-generator.js'); const generator = new ControllerGenerator(); console.log('控制器生成器测试通过');" 2>/dev/null; then - record_success "控制器生成器正常" -else - record_error "控制器生成器失败" -fi - -# 测试服务生成器 -if node -e "const ServiceGenerator = require('./generators/service-generator.js'); const generator = new ServiceGenerator(); console.log('服务生成器测试通过');" 2>/dev/null; then - record_success "服务生成器正常" -else - record_error "服务生成器失败" -fi - -# 测试实体生成器 -if node -e "const EntityGenerator = require('./generators/entity-generator.js'); const generator = new EntityGenerator(); console.log('实体生成器测试通过');" 2>/dev/null; then - record_success "实体生成器正常" -else - record_error "实体生成器失败" -fi - -# 测试迁移协调器 -if node -e "const MigrationCoordinator = require('./migration-coordinator.js'); const coordinator = new MigrationCoordinator(); console.log('迁移协调器测试通过');" 2>/dev/null; then - record_success "迁移协调器正常" -else - record_error "迁移协调器失败" -fi - -cd "$SCRIPT_DIR/../.." - -echo "" -echo "📋 测试阶段3: 构建Docker镜像" -echo "==================================================" - -# 构建NestJS后端镜像 -record_info "构建NestJS后端镜像..." -if docker-compose build nestjs-backend; then - record_success "NestJS后端镜像构建成功" -else - record_error "NestJS后端镜像构建失败" -fi - -# 构建Admin前端镜像 -record_info "构建Admin前端镜像..." -if docker-compose build admin-frontend; then - record_success "Admin前端镜像构建成功" -else - record_error "Admin前端镜像构建失败" -fi - -echo "" -echo "📋 测试阶段4: 启动服务" -echo "==================================================" - -# 启动基础服务(MySQL和Redis) -record_info "启动MySQL和Redis服务..." -if docker-compose up -d mysql redis; then - record_success "MySQL和Redis服务启动成功" -else - record_error "MySQL和Redis服务启动失败" -fi - -# 等待数据库就绪 -record_info "等待数据库就绪..." -sleep 30 - -# 检查MySQL健康状态 -if docker-compose exec -T mysql mysqladmin ping -h localhost -u root -proot123456 > /dev/null 2>&1; then - record_success "MySQL数据库连接正常" -else - record_error "MySQL数据库连接失败" -fi - -# 检查Redis健康状态 -if docker-compose exec -T redis redis-cli -a redis123456 ping > /dev/null 2>&1; then - record_success "Redis缓存连接正常" -else - record_error "Redis缓存连接失败" -fi - -echo "" -echo "📋 测试阶段5: 启动NestJS后端" -echo "==================================================" - -# 启动NestJS后端 -record_info "启动NestJS后端服务..." -if docker-compose up -d nestjs-backend; then - record_success "NestJS后端服务启动成功" -else - record_error "NestJS后端服务启动失败" -fi - -# 等待NestJS服务就绪 -record_info "等待NestJS服务就绪..." -sleep 60 - -# 检查NestJS健康状态 -if curl -f http://localhost:3000/health > /dev/null 2>&1; then - record_success "NestJS后端健康检查通过" -else - record_error "NestJS后端健康检查失败" - # 显示NestJS日志 - record_info "NestJS服务日志:" - docker-compose logs nestjs-backend --tail=50 -fi - -echo "" -echo "📋 测试阶段6: 启动Admin前端" -echo "==================================================" - -# 启动Admin前端 -record_info "启动Admin前端服务..." -if docker-compose up -d admin-frontend; then - record_success "Admin前端服务启动成功" -else - record_error "Admin前端服务启动失败" -fi - -# 等待Admin前端就绪 -record_info "等待Admin前端就绪..." -sleep 30 - -# 检查Admin前端健康状态 -if curl -f http://localhost/ > /dev/null 2>&1; then - record_success "Admin前端健康检查通过" -else - record_error "Admin前端健康检查失败" - # 显示Admin前端日志 - record_info "Admin前端服务日志:" - docker-compose logs admin-frontend --tail=50 -fi - -echo "" -echo "📋 测试阶段7: API接口测试" -echo "==================================================" - -# 测试关键API接口 -record_info "测试关键API接口..." - -# 测试健康检查接口 -if curl -f http://localhost:3000/health > /dev/null 2>&1; then - record_success "健康检查接口正常" -else - record_error "健康检查接口失败" -fi - -# 测试API根路径 -if curl -f http://localhost:3000/api > /dev/null 2>&1; then - record_success "API根路径正常" -else - record_warning "API根路径可能未配置" -fi - -# 测试Admin API路径 -if curl -f http://localhost:3000/adminapi > /dev/null 2>&1; then - record_success "Admin API路径正常" -else - record_warning "Admin API路径可能未配置" -fi - -echo "" -echo "📋 测试阶段8: 数据库连接测试" -echo "==================================================" - -# 测试数据库连接 -record_info "测试数据库连接..." -if docker-compose exec -T nestjs-backend node -e " -const mysql = require('mysql2/promise'); -async function test() { - try { - const connection = await mysql.createConnection({ - host: 'mysql', - user: 'wwjcloud', - password: 'wwjcloud123', - database: 'wwjcloud' - }); - await connection.execute('SELECT 1'); - await connection.end(); - console.log('数据库连接测试成功'); - } catch (error) { - console.error('数据库连接测试失败:', error.message); - process.exit(1); - } -} -test(); -" 2>/dev/null; then - record_success "数据库连接测试通过" -else - record_error "数据库连接测试失败" -fi - -echo "" -echo "📋 测试阶段9: 服务状态检查" -echo "==================================================" - -# 检查所有服务状态 -record_info "检查所有服务状态..." -docker-compose ps - -echo "" -echo "📋 测试阶段10: 日志检查" -echo "==================================================" - -# 检查NestJS日志中的错误 -record_info "检查NestJS服务日志..." -NESTJS_ERRORS=$(docker-compose logs nestjs-backend 2>&1 | grep -i "error\|exception\|failed" | wc -l) -if [ "$NESTJS_ERRORS" -eq 0 ]; then - record_success "NestJS服务无错误日志" -else - record_warning "NestJS服务发现 $NESTJS_ERRORS 个错误日志" - docker-compose logs nestjs-backend 2>&1 | grep -i "error\|exception\|failed" | head -10 -fi - -# 检查Admin前端日志中的错误 -record_info "检查Admin前端日志..." -ADMIN_ERRORS=$(docker-compose logs admin-frontend 2>&1 | grep -i "error\|exception\|failed" | wc -l) -if [ "$ADMIN_ERRORS" -eq 0 ]; then - record_success "Admin前端无错误日志" -else - record_warning "Admin前端发现 $ADMIN_ERRORS 个错误日志" - docker-compose logs admin-frontend 2>&1 | grep -i "error\|exception\|failed" | head -10 -fi - -echo "" -echo "📊 测试结果汇总" -echo "==================================================" - -if [ $ERROR_COUNT -eq 0 ]; then - echo -e "${GREEN}🎉 所有测试通过!迁移功能完全正常!${NC}" - echo -e "${GREEN}✅ 错误数量: 0${NC}" - echo -e "${GREEN}✅ 迁移工具: 正常${NC}" - echo -e "${GREEN}✅ Docker构建: 成功${NC}" - echo -e "${GREEN}✅ 服务启动: 成功${NC}" - echo -e "${GREEN}✅ API接口: 正常${NC}" - echo -e "${GREEN}✅ 数据库连接: 正常${NC}" -else - echo -e "${RED}❌ 测试发现问题!${NC}" - echo -e "${RED}❌ 错误数量: $ERROR_COUNT${NC}" - echo -e "${YELLOW}⚠️ 请检查上述错误信息并修复${NC}" -fi - -echo "" -echo "📋 服务访问信息" -echo "==================================================" -echo -e "${BLUE}🌐 Admin前端: http://localhost${NC}" -echo -e "${BLUE}🔧 NestJS后端: http://localhost:3000${NC}" -echo -e "${BLUE}💾 MySQL数据库: localhost:3306${NC}" -echo -e "${BLUE}🗄️ Redis缓存: localhost:6379${NC}" - -echo "" -echo "📋 清理命令" -echo "==================================================" -echo -e "${YELLOW}停止所有服务: docker-compose down${NC}" -echo -e "${YELLOW}停止并清理数据: docker-compose down -v${NC}" -echo -e "${YELLOW}查看服务日志: docker-compose logs [service-name]${NC}" - -# 如果测试失败,退出码为1 -if [ $ERROR_COUNT -gt 0 ]; then - exit 1 -fi - -echo "" -echo -e "${GREEN}🎊 Docker迁移功能自动测试完成!${NC}" diff --git a/docker/start-all.sh b/docker/start-all.sh deleted file mode 100644 index 23ff5668..00000000 --- a/docker/start-all.sh +++ /dev/null @@ -1,68 +0,0 @@ -#!/bin/bash - -set -e - -# Resolve compose file -SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd) -COMPOSE_FILE="$SCRIPT_DIR/docker-compose.yml" - -echo "📦 Using compose file: $COMPOSE_FILE" -export COMPOSE_FILE="$COMPOSE_FILE" - -echo "🧹 Cleaning up any existing stack (containers, orphans)..." -docker-compose down -v --remove-orphans || true - -# Remove any leftover containers with conflicting names -echo "🧹 Removing leftover named containers if exist..." -docker rm -f wwjcloud-redis >/dev/null 2>&1 || true -docker rm -f wwjcloud-mysql >/dev/null 2>&1 || true -docker rm -f wwjcloud-nestjs >/dev/null 2>&1 || true - -if [ "$SKIP_BUILD" = "1" ]; then - echo "⏭️ Skipping image builds (using local images). Set SKIP_BUILD=0 to force build." -else - echo "🚀 Building images (backend, admin)..." - docker-compose build nestjs-backend admin-frontend -fi - -echo "🧩 Starting MySQL and Redis..." -docker-compose up -d mysql redis - -echo "⏳ Waiting for DB services to be ready..." -sleep 20 - -echo "🚀 Starting backend..." -if [ "$SKIP_BUILD" = "1" ]; then - docker-compose up -d --no-build nestjs-backend -else - docker-compose up -d nestjs-backend -fi - -echo "⏳ Waiting for backend health..." -ATTEMPTS=0 -until curl -sf http://localhost:3000/health > /dev/null 2>&1 || [ $ATTEMPTS -ge 15 ]; do - ATTEMPTS=$((ATTEMPTS+1)) - sleep 4 -done - -echo "🚀 Starting admin frontend..." -if [ "$SKIP_BUILD" = "1" ]; then - docker-compose up -d --no-build admin-frontend -else - docker-compose up -d admin-frontend -fi - -echo "⏳ Waiting for admin to be ready..." -sleep 15 - -echo "✅ Services are up." -echo "🌐 Admin: http://localhost" -echo "🔧 API: http://localhost:3000" - -echo "📊 Status:" -docker-compose ps - -echo "📦 Docker containers:" -docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" - - diff --git a/docker/start-dev.sh b/docker/start-dev.sh deleted file mode 100755 index 7e15b5d0..00000000 --- a/docker/start-dev.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/bash - -echo "╔════════════════════════════════════════════════════════════════════════════╗" -echo "║ 🚀 启动开发环境(MySQL + Redis) ║" -echo "╚════════════════════════════════════════════════════════════════════════════╝" -echo "" - -SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd) -COMPOSE_DEV="$SCRIPT_DIR/docker-compose.dev.yml" -export COMPOSE_FILE="$COMPOSE_DEV" - -# 步骤1: 启动MySQL和Redis -echo "📦 步骤1: 启动MySQL和Redis容器..." -docker-compose up -d - -# 等待服务就绪 -echo "⏳ 等待MySQL和Redis就绪..." -sleep 10 - -# 检查服务状态 -echo "" -echo "📊 服务状态:" -docker-compose ps - -echo "" -echo "✅ MySQL和Redis已启动!" -echo "" -echo "🔗 连接信息:" -echo " MySQL: localhost:3306" -echo " Redis: localhost:6379" -echo "" -echo "📋 下一步:" -echo " 1. 启动NestJS: cd $SCRIPT_DIR/.. && npm run start:dev" -echo " 2. 启动Admin: cd $SCRIPT_DIR/../admin && npm run dev" -echo "" diff --git a/docker/start-prod.sh b/docker/start-prod.sh deleted file mode 100755 index 9fa11792..00000000 --- a/docker/start-prod.sh +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/bash - -echo "╔════════════════════════════════════════════════════════════════════════════╗" -echo "║ 🚀 启动生产环境(完整Docker部署) ║" -echo "╚════════════════════════════════════════════════════════════════════════════╝" -echo "" - -SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd) -COMPOSE_FILE_PATH="$SCRIPT_DIR/docker-compose.yml" -export COMPOSE_FILE="$COMPOSE_FILE_PATH" - -# 步骤1: 构建并启动所有服务 -echo "📦 步骤1: 构建并启动所有服务..." -docker-compose up -d --build - -echo "" -echo "⏳ 等待所有服务启动..." -sleep 30 - -# 步骤2: 检查服务状态 -echo "" -echo "📊 服务状态:" -docker-compose ps - -echo "" -echo "📊 健康检查:" -docker-compose exec nestjs-backend node -e "require('http').get('http://localhost:3000/health', (r) => {console.log('NestJS:', r.statusCode === 200 ? '✅ 健康' : '❌ 异常')})" 2>/dev/null || echo "NestJS: ⏳ 等待启动..." - -echo "" -echo "✅ 所有服务已启动!" -echo "" -echo "🌐 访问地址:" -echo " Admin管理面板: http://localhost" -echo " NestJS API: http://localhost:3000" -echo " MySQL: localhost:3306" -echo " Redis: localhost:6379" -echo "" -echo "📋 常用命令:" -echo " 查看日志: docker-compose logs -f" -echo " 停止服务: docker-compose down" -echo " 重启服务: docker-compose restart" -echo "" diff --git a/docs/REPOSITORY-STRATEGY.md b/docs/REPOSITORY-STRATEGY.md new file mode 100644 index 00000000..611ee52f --- /dev/null +++ b/docs/REPOSITORY-STRATEGY.md @@ -0,0 +1,138 @@ +# 🏗️ WWJCloud 仓库管理策略 + +## 📋 概述 + +本文档定义了 WWJCloud 项目的仓库管理策略,确保开发-发布分离,避免代码污染,保证用户获得稳定版本。 + +## 🎯 核心原则 + +### 1. 三层隔离架构 +- **v0.1.1-branch**: 纯净底板,永不变更,AI开发安全回退点 +- **主仓库**: 开发环境,高频推送,实时同步开发进度 +- **子仓库**: 发布环境,低频推送,面向最终用户 + +### 2. 严格的推送规则 +- ❌ **禁止**: 主仓库直接推送到 wwjcloud.git +- ❌ **禁止**: 从 v0.1.1-branch 推送任何更改 +- ✅ **允许**: 子仓库推送稳定版本到 wwjcloud.git +- ✅ **允许**: 主仓库推送开发进度到 wwjcloud-nsetjs.git + +## 🏛️ 仓库架构 + +``` +wwjcloud-nsetjs (主仓库) +├── origin → https://gitee.com/wanwujie/wwjcloud-nsetjs.git +└── wwjcloud-nest/ (子仓库) + ├── origin → https://gitee.com/wanwujie/wwjcloud.git + ├── master (开发分支) + ├── v0.1.1-branch (纯净底板) + └── v0.1.1-stable (保护标签) +``` + +## 🔄 工作流程 + +### 日常开发流程 + +```bash +# 1. 在主仓库进行开发 +cd /path/to/wwjcloud-nsetjs +# ... 进行开发工作 ... + +# 2. 推送开发进度(高频) +./push_dev.sh +``` + +### 版本发布流程 + +```bash +# 1. 确保开发完成并测试通过 +cd wwjcloud-nest + +# 2. 推送稳定版本给用户(低频) +../push_wwjcloud_nest.sh +``` + +### 紧急重置流程 + +```bash +# 当AI开发出现错误污染时 +cd wwjcloud-nest +git checkout v0.1.1-branch +git checkout -b fix-$(date +%Y%m%d) +# 基于纯净版本重新开发 +``` + +## 🛡️ 安全机制 + +### 1. 自动检查 +- ✅ 目录检查:确保在正确的仓库目录 +- ✅ 远程检查:验证远程仓库配置正确性 +- ✅ 分支检查:防止从保护分支推送 +- ✅ 污染检查:自动移除危险的远程配置 + +### 2. 保护措施 +- 🔒 v0.1.1-branch 设为只读 +- 🏷️ v0.1.1-stable 标签保护 +- 🚫 主仓库禁止 wwjcloud 远程 +- ⚠️ 推送前确认机制 + +## 📜 脚本说明 + +### push_dev.sh (开发推送) +- **用途**: 日常开发推送到主仓库 +- **频率**: 高频(随时) +- **目标**: wwjcloud-nsetjs.git +- **检查**: 自动移除危险远程配置 + +### push_wwjcloud_nest.sh (发布推送) +- **用途**: 稳定版本推送给用户 +- **频率**: 低频(版本稳定时) +- **目标**: wwjcloud.git +- **检查**: 严格的安全验证 + +## 🚨 常见问题 + +### Q: 为什么主仓库不能有 wwjcloud 远程? +**A**: 防止意外推送开发代码到用户仓库,造成代码污染。 + +### Q: 如何确保 v0.1.1-branch 不被修改? +**A**: +1. 创建了 v0.1.1-stable 保护标签 +2. 脚本自动检查并阻止从该分支推送 +3. 作为只读的安全回退点 + +### Q: 如果推送脚本检测到问题怎么办? +**A**: 脚本会: +1. 显示具体错误信息 +2. 提供解决建议 +3. 自动修复(如移除危险远程) +4. 阻止危险操作 + +## 🎯 最佳实践 + +### 开发阶段 +1. 在主仓库进行所有开发工作 +2. 使用 `./push_dev.sh` 频繁同步进度 +3. 定期测试确保代码质量 + +### 发布阶段 +1. 确保所有功能完整且测试通过 +2. 切换到 wwjcloud-nest 目录 +3. 使用 `../push_wwjcloud_nest.sh` 发布稳定版本 +4. 确认用户可以正常使用 + +### 紧急情况 +1. 发现代码污染时立即停止开发 +2. 使用 v0.1.1-branch 作为安全回退点 +3. 基于纯净版本重新开始开发 + +## 📊 监控指标 + +- **开发推送频率**: 每日多次 +- **发布推送频率**: 每周1-2次 +- **代码污染事件**: 0次(目标) +- **紧急重置次数**: 最小化 + +--- + +**⚠️ 重要提醒**: 严格遵循本策略,确保代码质量和用户体验! \ No newline at end of file diff --git a/eslint.config.mjs b/eslint.config.mjs deleted file mode 100644 index caebf6e7..00000000 --- a/eslint.config.mjs +++ /dev/null @@ -1,34 +0,0 @@ -// @ts-check -import eslint from '@eslint/js'; -import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended'; -import globals from 'globals'; -import tseslint from 'typescript-eslint'; - -export default tseslint.config( - { - ignores: ['eslint.config.mjs'], - }, - eslint.configs.recommended, - ...tseslint.configs.recommendedTypeChecked, - eslintPluginPrettierRecommended, - { - languageOptions: { - globals: { - ...globals.node, - ...globals.jest, - }, - sourceType: 'commonjs', - parserOptions: { - projectService: true, - tsconfigRootDir: import.meta.dirname, - }, - }, - }, - { - rules: { - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/no-floating-promises': 'warn', - '@typescript-eslint/no-unsafe-argument': 'warn' - }, - }, -); \ No newline at end of file diff --git a/nest-cli.json b/nest-cli.json deleted file mode 100644 index f9aa683b..00000000 --- a/nest-cli.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/nest-cli", - "collection": "@nestjs/schematics", - "sourceRoot": "src", - "compilerOptions": { - "deleteOutDir": true - } -} diff --git a/package.json b/package.json deleted file mode 100644 index 18b6f8cc..00000000 --- a/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "scripts": { - "contracts:extract": "node tools/extract-admin-routes.js", - "contracts:compare": "node tools/compare-admin-routes.js", - "check:routes": "node tools/check-routes.js", - "gen:controllers": "node tools/gen-controllers.js" - }, - "dependencies": { - "@nestjs/terminus": "^11.0.0", - "alipay-sdk": "^4.14.0", - "axios": "^1.11.0", - "wechatpay-node-v3": "^2.2.1" - }, - "devDependencies": { - "typescript": "^5.9.2" - } -} diff --git a/push_dev.sh b/push_dev.sh new file mode 100755 index 00000000..cf31bba2 --- /dev/null +++ b/push_dev.sh @@ -0,0 +1,123 @@ +#!/bin/bash + +# WWJCloud 开发推送脚本 +# 功能:用于日常开发推送到主仓库 (wwjcloud-nsetjs.git) +# 作者:WWJCloud Team +# 版本:v1.0 + +set -e + +# 颜色定义 +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +# 检查当前目录 +check_directory() { + if [[ ! -d ".git" ]]; then + echo -e "${RED}❌ 错误:当前目录不是Git仓库${NC}" + exit 1 + fi + + # 检查是否在主仓库目录 + if [[ -f "wwjcloud-nest/package.json" ]]; then + echo -e "${GREEN}✅ 检测到主仓库环境${NC}" + else + echo -e "${RED}❌ 错误:此脚本只能在主仓库根目录运行${NC}" + echo -e "${YELLOW}💡 提示:请在包含 wwjcloud-nest 子目录的主仓库根目录运行${NC}" + exit 1 + fi +} + +# 检查远程仓库配置 +check_remote() { + local remote_url=$(git remote get-url origin 2>/dev/null || echo "") + if [[ "$remote_url" != *"wwjcloud-nsetjs.git"* ]]; then + echo -e "${RED}❌ 错误:当前仓库的origin不是wwjcloud-nsetjs.git${NC}" + echo -e "${YELLOW}当前origin: $remote_url${NC}" + exit 1 + fi + + # 确保没有wwjcloud远程(避免污染) + if git remote | grep -q "wwjcloud"; then + echo -e "${RED}❌ 危险:检测到wwjcloud远程配置!${NC}" + echo -e "${YELLOW}💡 正在自动移除以避免污染...${NC}" + git remote remove wwjcloud + echo -e "${GREEN}✅ 已移除危险的wwjcloud远程${NC}" + fi +} + +# 检查分支状态 +check_branch_status() { + # 获取当前分支 + current_branch=$(git branch --show-current) + echo -e "${BLUE}📍 当前分支:$current_branch${NC}" + + # 检查工作区状态 + if ! git diff-index --quiet HEAD --; then + echo -e "${YELLOW}⚠️ 检测到未提交的更改${NC}" + git status --short + echo -e "${YELLOW}💡 是否要添加并提交这些更改? (y/N)${NC}" + read -r confirm + if [[ "$confirm" =~ ^[Yy]$ ]]; then + git add . + echo -e "${BLUE}📝 请输入提交信息:${NC}" + read -r commit_msg + if [[ -z "$commit_msg" ]]; then + commit_msg="feat: 开发进度更新 $(date '+%Y-%m-%d %H:%M')" + fi + git commit -m "$commit_msg" + echo -e "${GREEN}✅ 更改已提交${NC}" + else + echo -e "${RED}❌ 存在未提交更改,推送已取消${NC}" + exit 1 + fi + fi +} + +# 推送到开发仓库 +push_to_dev() { + echo -e "${GREEN}🚀 开始推送到开发仓库...${NC}" + + # 显示即将推送的提交 + echo -e "${BLUE}📋 最近的提交:${NC}" + git log --oneline -3 + + # 执行推送 + echo -e "${GREEN}📤 推送到 origin (wwjcloud-nsetjs.git)...${NC}" + git push origin HEAD + + echo -e "${GREEN}✅ 开发推送完成!${NC}" + echo -e "${BLUE}💻 开发进度已同步到主仓库${NC}" +} + +# 显示使用提示 +show_usage() { + echo -e "${BLUE}📖 使用说明:${NC}" + echo -e "${YELLOW} 开发推送:${NC} ./push_dev.sh" + echo -e "${YELLOW} 发布推送:${NC} cd wwjcloud-nest && ../push_wwjcloud_nest.sh" + echo -e "${YELLOW} 紧急重置:${NC} cd wwjcloud-nest && git checkout v0.1.1-branch" +} + +# 主函数 +main() { + echo -e "${BLUE}💻 WWJCloud 开发推送脚本 v1.0${NC}" + echo -e "${BLUE}====================================${NC}" + + # 执行检查 + check_directory + check_remote + check_branch_status + + # 执行推送 + push_to_dev + + # 显示使用提示 + echo "" + show_usage +} + +# 运行主函数 +main "$@" \ No newline at end of file diff --git a/push_wwjcloud_nest.sh b/push_wwjcloud_nest.sh old mode 100644 new mode 100755 index 907f5467..527ee7a7 --- a/push_wwjcloud_nest.sh +++ b/push_wwjcloud_nest.sh @@ -1,38 +1,103 @@ #!/bin/bash -# 检查是否在正确的目录 -if [ ! -d "wwjcloud-nest" ]; then - echo "错误: 在目录中找不到 wwjcloud-nest 文件夹" - exit 1 -fi +# WWJCloud 安全推送脚本 +# 功能:只允许从 wwjcloud-nest 子仓库推送到 wwjcloud 远程 +# 作者:WWJCloud Team +# 版本:v1.0 -# 检查Git状态 -echo "=== Git 状态检查 ===" -git status +set -e -echo "" -echo "=== 添加 wwjcloud-nest 到 Git ===" -git add wwjcloud-nest/ +# 颜色定义 +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color -echo "" -echo "=== 检查暂存区状态 ===" -git status +# 检查当前目录 +check_directory() { + if [[ ! -d ".git" ]]; then + echo -e "${RED}❌ 错误:当前目录不是Git仓库${NC}" + exit 1 + fi + + # 检查是否在 wwjcloud-nest 目录 + current_dir=$(basename "$PWD") + if [[ "$current_dir" != "wwjcloud-nest" ]]; then + echo -e "${RED}❌ 错误:此脚本只能在 wwjcloud-nest 目录中运行${NC}" + echo -e "${YELLOW}💡 提示:请切换到 wwjcloud-nest 目录后再运行${NC}" + exit 1 + fi +} -echo "" -echo "=== 提交变更 ===" -git commit -m "feat: 新增 WWJCloud-NestJS 企业级框架 +# 检查远程仓库配置 +check_remote() { + local remote_url=$(git remote get-url origin 2>/dev/null || echo "") + if [[ "$remote_url" != *"wwjcloud.git"* ]]; then + echo -e "${RED}❌ 错误:当前仓库的origin不是wwjcloud.git${NC}" + echo -e "${YELLOW}当前origin: $remote_url${NC}" + exit 1 + fi +} -- ✅ Config层: 配置中心,支持动态配置和热更新 -- ✅ Common层: 基础设施层(缓存/日志/监控/异常) -- ✅ Vendor层: 第三方服务集成(支付/短信/上传/通知) -- ✅ Core层: 多租户架构和部署管理 -- ✅ 完整的企业级开发基础设施 -- 🎯 对标Java Spring Boot和PHP ThinkPHP" +# 检查分支状态 +check_branch_status() { + # 检查是否有未提交的更改 + if ! git diff-index --quiet HEAD --; then + echo -e "${RED}❌ 错误:存在未提交的更改${NC}" + echo -e "${YELLOW}💡 请先提交所有更改:git add . && git commit -m \"your message\"${NC}" + exit 1 + fi + + # 获取当前分支 + current_branch=$(git branch --show-current) + echo -e "${BLUE}📍 当前分支:$current_branch${NC}" + + # 检查是否在保护分支 + if [[ "$current_branch" == "v0.1.1-branch" ]]; then + echo -e "${RED}❌ 错误:不能从v0.1.1-branch推送(这是纯净底板)${NC}" + echo -e "${YELLOW}💡 请切换到master分支:git checkout master${NC}" + exit 1 + fi +} -echo "" -echo "=== 推送到远程仓库 ===" -git push origin master +# 推送到wwjcloud远程(发布版本) +push_to_release() { + echo -e "${GREEN}🚀 开始推送到发布仓库...${NC}" + + # 显示即将推送的提交 + echo -e "${BLUE}📋 即将推送的提交:${NC}" + git log --oneline -5 + + # 确认推送 + echo -e "${YELLOW}⚠️ 这将推送到用户可见的发布仓库,确认继续? (y/N)${NC}" + read -r confirm + if [[ ! "$confirm" =~ ^[Yy]$ ]]; then + echo -e "${YELLOW}❌ 推送已取消${NC}" + exit 0 + fi + + # 执行推送 + echo -e "${GREEN}📤 推送到 origin (wwjcloud.git)...${NC}" + git push origin HEAD + + echo -e "${GREEN}✅ 发布推送完成!${NC}" + echo -e "${BLUE}🌐 用户现在可以看到最新版本${NC}" +} -echo "" -echo "🎉 WWJCloud-NestJS 框架推送完成!" -echo "远程仓库地址: https://gitee.com/wanwujie/wwjcloud-nsetjs.git" +# 主函数 +main() { + echo -e "${BLUE}🔒 WWJCloud 安全推送脚本 v1.0${NC}" + echo -e "${BLUE}================================${NC}" + + # 执行检查 + check_directory + check_remote + check_branch_status + + # 执行推送 + push_to_release +} + +# 运行主函数 +main "$@" diff --git a/src/app.controller.spec.ts b/src/app.controller.spec.ts deleted file mode 100644 index d22f3890..00000000 --- a/src/app.controller.spec.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { AppController } from './app.controller'; -import { AppService } from './app.service'; - -describe('AppController', () => { - let appController: AppController; - - beforeEach(async () => { - const app: TestingModule = await Test.createTestingModule({ - controllers: [AppController], - providers: [AppService], - }).compile(); - - appController = app.get(AppController); - }); - - describe('root', () => { - it('should return "Hello World!"', () => { - expect(appController.getHello()).toBe('Hello World!'); - }); - }); -}); diff --git a/src/app.controller.ts b/src/app.controller.ts deleted file mode 100644 index cce879ee..00000000 --- a/src/app.controller.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Controller, Get } from '@nestjs/common'; -import { AppService } from './app.service'; - -@Controller() -export class AppController { - constructor(private readonly appService: AppService) {} - - @Get() - getHello(): string { - return this.appService.getHello(); - } -} diff --git a/src/app.module.ts b/src/app.module.ts deleted file mode 100644 index 1e6a7d0e..00000000 --- a/src/app.module.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { Module, MiddlewareConsumer, NestModule } from '@nestjs/common'; -import { AppController } from './app.controller'; -import { AppService } from './app.service'; -import { ConfigModule } from '@wwjConfig/config.module'; -import { CommonModule } from '@wwjCommon/common.module'; -import { VendorModule } from '@wwjVendor/vendor.module'; -import { CoreModule } from '@wwjCore/core.module'; - -/** - * 应用根模块 - * 基于 NestJS 官方示例实现 - * 参考: https://docs.nestjs.cn/fundamentals/module-ref - * - * 模块结构: - * - ConfigModule: 配置中心(静态+动态配置) - * - CommonModule: 基础设施层 - * - VendorModule: 第三方服务集成层 - * - CoreModule: 核心业务模块层 - */ -@Module({ - imports: [ConfigModule, CommonModule, VendorModule, CoreModule], - controllers: [AppController], - providers: [AppService], -}) -export class AppModule implements NestModule { - configure(consumer: MiddlewareConsumer) { - // 这里可以配置全局中间件 - // 例如:日志中间件、CORS 中间件等 - // consumer - // .apply(LoggerMiddleware) - // .forRoutes('*'); - } -} diff --git a/src/app.service.ts b/src/app.service.ts deleted file mode 100644 index 927d7cca..00000000 --- a/src/app.service.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Injectable } from '@nestjs/common'; - -@Injectable() -export class AppService { - getHello(): string { - return 'Hello World!'; - } -} diff --git a/src/common/base/base.entity.ts b/src/common/base/base.entity.ts deleted file mode 100644 index 6d4ee008..00000000 --- a/src/common/base/base.entity.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { - PrimaryGeneratedColumn, - Column, - CreateDateColumn, - UpdateDateColumn, - DeleteDateColumn, - VersionColumn, -} from 'typeorm'; - -/** - * 基础实体 - * 包含公共字段:ID、创建时间、更新时间、删除时间、是否删除、站点ID - * 对应 Java: BaseEntity - */ -export abstract class BaseEntity { - @PrimaryGeneratedColumn() - id: number; - - @CreateDateColumn({ - name: 'create_time', - type: 'timestamp', - comment: '创建时间', - }) - createTime: Date; - - @UpdateDateColumn({ - name: 'update_time', - type: 'timestamp', - comment: '更新时间', - }) - updateTime: Date; - - @DeleteDateColumn({ - name: 'delete_time', - type: 'timestamp', - nullable: true, - comment: '删除时间', - }) - deleteTime: Date | null; - - @Column({ - name: 'is_delete', - type: 'tinyint', - default: 0, - comment: '是否删除 0:否 1:是', - }) - isDelete: number; - - @Column({ - name: 'site_id', - type: 'int', - default: 0, - comment: '站点ID', - }) - siteId: number; - - @VersionColumn({ - name: 'version', - type: 'int', - default: 1, - comment: '版本号', - }) - version: number; -} diff --git a/src/common/base/base.module.ts b/src/common/base/base.module.ts deleted file mode 100644 index 28ab55e2..00000000 --- a/src/common/base/base.module.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Module, Global } from '@nestjs/common'; - -/** - * 基础类模块 - 基础设施层 - * 提供基础实体、仓储、服务等抽象类 - * 对应 Java: BaseEntity, BaseMapper, BaseService - * - * 注意:此模块只提供抽象类,不提供具体实现 - * 抽象类不需要在 providers 中注册 - */ -@Global() -@Module({ - providers: [], - exports: [], -}) -export class BaseModule {} diff --git a/src/common/base/base.repository.ts b/src/common/base/base.repository.ts deleted file mode 100644 index 7a49edea..00000000 --- a/src/common/base/base.repository.ts +++ /dev/null @@ -1,114 +0,0 @@ -import { - Repository, - FindManyOptions, - FindOneOptions, - DeepPartial, -} from 'typeorm'; -import { BaseEntity } from './base.entity'; - -/** - * 基础仓储 - * 提供通用的 CRUD、分页、软删除等操作 - * 对应 Java: BaseMapper - */ -export abstract class BaseRepository { - constructor(protected readonly repository: Repository) {} - - /** - * 创建实体 - */ - async create(entity: Partial): Promise { - const newEntity = this.repository.create(entity as any); - const result = await this.repository.save(newEntity); - return Array.isArray(result) ? result[0] : result; - } - - /** - * 批量创建 - */ - async createMany(entities: Partial[]): Promise { - const newEntities = this.repository.create(entities as any); - return this.repository.save(newEntities); - } - - /** - * 根据ID查找 - */ - async findById(id: number): Promise { - return this.repository.findOne({ where: { id } } as FindOneOptions); - } - - /** - * 查找单个实体 - */ - async findOne(options: FindOneOptions): Promise { - return this.repository.findOne(options); - } - - /** - * 查找多个实体 - */ - async find(options?: FindManyOptions): Promise { - return this.repository.find(options); - } - - /** - * 分页查询 - */ - async paginate( - page: number, - limit: number, - options?: FindManyOptions, - ): Promise<{ data: T[]; total: number; page: number; limit: number }> { - const [data, total] = await this.repository.findAndCount({ - ...options, - skip: (page - 1) * limit, - take: limit, - }); - return { - data, - total, - page, - limit, - }; - } - - /** - * 更新实体 - */ - async update(id: number, entity: Partial): Promise { - await this.repository.update(id, entity as any); - return this.findById(id); - } - - /** - * 软删除 - */ - async softDelete(id: number): Promise { - const result = await this.repository.softDelete(id); - return (result.affected || 0) > 0; - } - - /** - * 硬删除 - */ - async hardDelete(id: number): Promise { - const result = await this.repository.delete(id); - return (result.affected || 0) > 0; - } - - /** - * 批量软删除 - */ - async softDeleteMany(ids: number[]): Promise { - const result = await this.repository.softDelete(ids); - return (result.affected || 0) > 0; - } - - /** - * 统计数量 - */ - async count(options?: FindManyOptions): Promise { - return this.repository.count(options); - } -} diff --git a/src/common/base/base.service.ts b/src/common/base/base.service.ts deleted file mode 100644 index e140e5a1..00000000 --- a/src/common/base/base.service.ts +++ /dev/null @@ -1,178 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import { Repository, FindManyOptions, FindOneOptions } from 'typeorm'; -import { BaseEntity } from './base.entity'; -import { PageResult } from '../response/page-result.class'; - -/** - * 基础服务 - * 提供通用的业务逻辑抽象 - * 基于PHP和Java的BaseService统一设计 - * - * 特点: - * 1. 使用TypeORM原生Repository - * 2. 统一分页格式 (与Java PageResult一致) - * 3. 不处理响应格式 (由Controller层处理) - * 4. 专注于业务逻辑 - */ -@Injectable() -export abstract class BaseService { - constructor(protected readonly repository: Repository) {} - - /** - * 创建实体 - * @param entity 实体数据 - * @returns Promise - */ - async create(entity: Partial): Promise { - const newEntity = this.repository.create(entity as any); - const result = await this.repository.save(newEntity); - return Array.isArray(result) ? result[0] : result; - } - - /** - * 批量创建 - * @param entities 实体数组 - * @returns Promise - */ - async createMany(entities: Partial[]): Promise { - const newEntities = this.repository.create(entities as any); - return this.repository.save(newEntities); - } - - /** - * 根据ID查找 - * @param id 主键ID - * @returns Promise - */ - async findById(id: number): Promise { - return this.repository.findOne({ where: { id } } as FindOneOptions); - } - - /** - * 查找单个实体 - * @param options 查询选项 - * @returns Promise - */ - async findOne(options: FindOneOptions): Promise { - return this.repository.findOne(options); - } - - /** - * 查找多个实体 - * @param options 查询选项 - * @returns Promise - */ - async find(options?: FindManyOptions): Promise { - return this.repository.find(options); - } - - /** - * 分页查询 - * 返回格式与Java PageResult一致 - * @param page 页码 - * @param limit 每页数量 - * @param options 查询选项 - * @returns Promise> - */ - async paginate( - page: number = 1, - limit: number = 15, - options?: FindManyOptions, - ): Promise> { - const [data, total] = await this.repository.findAndCount({ - ...options, - skip: (page - 1) * limit, - take: limit, - }); - - return new PageResult(page, limit, total, data); - } - - /** - * 更新实体 - * @param id 主键ID - * @param entity 更新数据 - * @returns Promise - */ - async update(id: number, entity: Partial): Promise { - await this.repository.update(id, entity as any); - return this.findById(id); - } - - /** - * 软删除 - * @param id 主键ID - * @returns Promise - */ - async delete(id: number): Promise { - const result = await this.repository.softDelete(id); - return (result.affected || 0) > 0; - } - - /** - * 硬删除 - * @param id 主键ID - * @returns Promise - */ - async hardDelete(id: number): Promise { - const result = await this.repository.delete(id); - return (result.affected || 0) > 0; - } - - /** - * 批量软删除 - * @param ids 主键ID数组 - * @returns Promise - */ - async deleteMany(ids: number[]): Promise { - const result = await this.repository.softDelete(ids); - return (result.affected || 0) > 0; - } - - /** - * 统计数量 - * @param options 查询选项 - * @returns Promise - */ - async count(options?: FindManyOptions): Promise { - return this.repository.count(options); - } - - /** - * 根据条件查找单个实体 - * @param where 查询条件 - * @returns Promise - */ - async findOneBy(where: Partial): Promise { - return this.repository.findOne({ where } as FindOneOptions); - } - - /** - * 根据条件查找多个实体 - * @param where 查询条件 - * @returns Promise - */ - async findManyBy(where: Partial): Promise { - return this.repository.find({ where } as FindManyOptions); - } - - /** - * 检查实体是否存在 - * @param id 主键ID - * @returns Promise - */ - async exists(id: number): Promise { - const count = await this.repository.count({ where: { id } } as FindManyOptions); - return count > 0; - } - - /** - * 根据条件检查实体是否存在 - * @param where 查询条件 - * @returns Promise - */ - async existsBy(where: Partial): Promise { - const count = await this.repository.count({ where } as FindManyOptions); - return count > 0; - } -} \ No newline at end of file diff --git a/src/common/cache/cache.interface.ts b/src/common/cache/cache.interface.ts deleted file mode 100644 index 3a6281a1..00000000 --- a/src/common/cache/cache.interface.ts +++ /dev/null @@ -1,172 +0,0 @@ -/** - * 缓存接口定义 - * 基于 NestJS 官方示例实现 - * 参考: https://docs.nestjs.cn/fundamentals/dependency-injection - * 对应 Java: Cached 接口 - */ -export interface CacheInterface { - /** - * 获取缓存 - * @param key 缓存键 - * @returns 缓存值 - */ - get(key: string): Promise; - - /** - * 设置缓存 - * @param key 缓存键 - * @param value 缓存值 - * @param ttl 过期时间(秒) - */ - set(key: string, value: any, ttl?: number): Promise; - - /** - * 删除缓存 - * @param key 缓存键 - */ - del(key: string): Promise; - - /** - * 批量删除缓存 - * @param keys 缓存键数组 - */ - delMany(keys: string[]): Promise; - - /** - * 检查缓存是否存在 - * @param key 缓存键 - * @returns 是否存在 - */ - exists(key: string): Promise; - - /** - * 设置过期时间 - * @param key 缓存键 - * @param ttl 过期时间(秒) - */ - expire(key: string, ttl: number): Promise; - - /** - * 获取过期时间 - * @param key 缓存键 - * @returns 过期时间(秒) - */ - ttl(key: string): Promise; - - /** - * 获取所有键 - * @param pattern 匹配模式 - * @returns 键数组 - */ - keys(pattern?: string): Promise; - - /** - * 清空所有缓存 - */ - flush(): Promise; - - /** - * 获取缓存统计信息 - * @returns 统计信息 - */ - stats(): Promise; -} - -/** - * 缓存统计信息 - */ -export interface CacheStats { - hits: number; - misses: number; - keys: number; - memory: number; - uptime: number; -} - -/** - * 缓存配置 - */ -export interface CacheConfig { - host: string; - port: number; - password?: string; - db?: number; - keyPrefix?: string; - defaultTtl?: number; - maxRetries?: number; - retryDelayOnFailover?: number; -} - -/** - * 缓存装饰器选项 - */ -export interface CacheOptions { - /** - * 缓存键 - */ - key?: string; - - /** - * 过期时间(秒) - */ - ttl?: number; - - /** - * 是否启用缓存 - */ - enabled?: boolean; - - /** - * 缓存条件 - */ - condition?: (args: any[], result: any) => boolean; -} - -/** - * 缓存辅助函数 - */ -export interface CacheHelper { - execute(key: string): Promise; -} - -/** - * 分组缓存接口 - */ -export interface GroupCacheInterface { - /** - * 设置分组缓存 - * @param group 分组名 - * @param key 缓存键 - * @param value 缓存值 - * @param ttl 过期时间(秒) - */ - set(group: string, key: string, value: any, ttl?: number): Promise; - - /** - * 获取分组缓存 - * @param group 分组名 - * @param key 缓存键 - * @returns 缓存值 - */ - get(group: string, key: string): Promise; - - /** - * 删除分组缓存 - * @param group 分组名 - * @param key 缓存键 - */ - del(group: string, key: string): Promise; - - /** - * 清空分组缓存 - * @param group 分组名 - */ - clear(group: string): Promise; - - /** - * 获取分组所有键 - * @param group 分组名 - * @returns 键数组 - */ - keys(group: string): Promise; -} diff --git a/src/common/cache/cache.module.ts b/src/common/cache/cache.module.ts deleted file mode 100644 index 424a6fd6..00000000 --- a/src/common/cache/cache.module.ts +++ /dev/null @@ -1,170 +0,0 @@ -import { Module, Global } from '@nestjs/common'; -import { ConfigModule, ConfigService } from '@nestjs/config'; -import { CacheService } from './cache.service'; -import { CacheInterface, GroupCacheInterface } from './cache.interface'; - -/** - * 缓存模块 - * 基于 NestJS 官方示例实现 - * 参考: https://docs.nestjs.cn/fundamentals/dependency-injection - * 对应 Java: CacheConfig - */ -@Global() -@Module({ - imports: [ConfigModule], - providers: [ - { - provide: 'CACHE_PROVIDER', - useFactory: (configService: ConfigService) => { - // 这里会根据配置选择具体的缓存实现 - // 默认使用内存缓存,生产环境使用 Redis - const cacheType = configService.get('cache.type', 'memory'); - - if (cacheType === 'redis') { - // 返回 Redis 缓存实现 - return { - async get(key: string): Promise { - // Redis 实现占位符 - return null; - }, - async set(key: string, value: any, ttl?: number): Promise { - // Redis 实现占位符 - }, - async del(key: string): Promise { - // Redis 实现占位符 - }, - async delMany(keys: string[]): Promise { - // Redis 实现占位符 - }, - async exists(key: string): Promise { - return false; - }, - async expire(key: string, ttl: number): Promise { - // Redis 实现占位符 - }, - async ttl(key: string): Promise { - return -1; - }, - async keys(pattern?: string): Promise { - return []; - }, - async flush(): Promise { - // Redis 实现占位符 - }, - async stats(): Promise { - return { hits: 0, misses: 0, keys: 0, memory: 0, uptime: 0 }; - }, - }; - } else { - // 返回内存缓存实现 - const memoryCache = new Map(); - return { - async get(key: string): Promise { - const item = memoryCache.get(key); - if (!item) return null; - if (item.expire && Date.now() > item.expire) { - memoryCache.delete(key); - return null; - } - return item.value; - }, - async set(key: string, value: any, ttl?: number): Promise { - const expire = ttl ? Date.now() + ttl * 1000 : null; - memoryCache.set(key, { value, expire }); - }, - async del(key: string): Promise { - memoryCache.delete(key); - }, - async delMany(keys: string[]): Promise { - keys.forEach((key) => memoryCache.delete(key)); - }, - async exists(key: string): Promise { - return memoryCache.has(key); - }, - async expire(key: string, ttl: number): Promise { - const item = memoryCache.get(key); - if (item) { - item.expire = Date.now() + ttl * 1000; - memoryCache.set(key, item); - } - }, - async ttl(key: string): Promise { - const item = memoryCache.get(key); - if (!item || !item.expire) return -1; - return Math.max(0, Math.floor((item.expire - Date.now()) / 1000)); - }, - async keys(pattern?: string): Promise { - return Array.from(memoryCache.keys()); - }, - async flush(): Promise { - memoryCache.clear(); - }, - async stats(): Promise { - return { - hits: 0, - misses: 0, - keys: memoryCache.size, - memory: 0, - uptime: 0, - }; - }, - }; - } - }, - inject: [ConfigService], - }, - { - provide: 'GROUP_CACHE_PROVIDER', - useFactory: (configService: ConfigService) => { - // 分组缓存实现 - const groupCache = new Map(); - return { - async set( - group: string, - key: string, - value: any, - ttl?: number, - ): Promise { - const groupKey = `${group}:${key}`; - const expire = ttl ? Date.now() + ttl * 1000 : null; - groupCache.set(groupKey, { value, expire }); - }, - async get(group: string, key: string): Promise { - const groupKey = `${group}:${key}`; - const item = groupCache.get(groupKey); - if (!item) return null; - if (item.expire && Date.now() > item.expire) { - groupCache.delete(groupKey); - return null; - } - return item.value; - }, - async del(group: string, key: string): Promise { - const groupKey = `${group}:${key}`; - groupCache.delete(groupKey); - }, - async clear(group: string): Promise { - for (const [key] of groupCache) { - if (key.startsWith(`${group}:`)) { - groupCache.delete(key); - } - } - }, - async keys(group: string): Promise { - const keys: string[] = []; - for (const [key] of groupCache) { - if (key.startsWith(`${group}:`)) { - keys.push(key.replace(`${group}:`, '')); - } - } - return keys; - }, - }; - }, - inject: [ConfigService], - }, - CacheService, - ], - exports: [CacheService], -}) -export class CacheModule {} diff --git a/src/common/cache/cache.service.ts b/src/common/cache/cache.service.ts deleted file mode 100644 index 81af04c4..00000000 --- a/src/common/cache/cache.service.ts +++ /dev/null @@ -1,328 +0,0 @@ -import { Injectable, Inject, Logger } from '@nestjs/common'; -import type { - CacheInterface, - CacheOptions, - CacheHelper, - GroupCacheInterface, -} from './cache.interface'; - -/** - * 缓存服务 - * 基于 NestJS 官方示例实现 - * 参考: https://docs.nestjs.cn/fundamentals/dependency-injection - * 对应 Java: CachedService - */ -@Injectable() -export class CacheService implements CacheInterface { - private readonly logger = new Logger(CacheService.name); - - constructor( - @Inject('CACHE_PROVIDER') private readonly cacheProvider: CacheInterface, - @Inject('GROUP_CACHE_PROVIDER') - private readonly groupCacheProvider: GroupCacheInterface, - ) {} - - /** - * 获取缓存 - */ - async get(key: string): Promise { - try { - return await this.cacheProvider.get(key); - } catch (error) { - this.logger.error(`Failed to get cache key: ${key}`, error); - return null; - } - } - - /** - * 设置缓存 - */ - async set(key: string, value: any, ttl?: number): Promise { - try { - await this.cacheProvider.set(key, value, ttl); - } catch (error) { - this.logger.error(`Failed to set cache key: ${key}`, error); - } - } - - /** - * 删除缓存 - */ - async del(key: string): Promise { - try { - await this.cacheProvider.del(key); - } catch (error) { - this.logger.error(`Failed to delete cache key: ${key}`, error); - } - } - - /** - * 批量删除缓存 - */ - async delMany(keys: string[]): Promise { - try { - await this.cacheProvider.delMany(keys); - } catch (error) { - this.logger.error( - `Failed to delete cache keys: ${keys.join(', ')}`, - error, - ); - } - } - - /** - * 检查缓存是否存在 - */ - async exists(key: string): Promise { - try { - return await this.cacheProvider.exists(key); - } catch (error) { - this.logger.error(`Failed to check cache key: ${key}`, error); - return false; - } - } - - /** - * 设置过期时间 - */ - async expire(key: string, ttl: number): Promise { - try { - await this.cacheProvider.expire(key, ttl); - } catch (error) { - this.logger.error(`Failed to set expire for cache key: ${key}`, error); - } - } - - /** - * 获取过期时间 - */ - async ttl(key: string): Promise { - try { - return await this.cacheProvider.ttl(key); - } catch (error) { - this.logger.error(`Failed to get ttl for cache key: ${key}`, error); - return -1; - } - } - - /** - * 获取所有键 - */ - async keys(pattern?: string): Promise { - try { - return await this.cacheProvider.keys(pattern); - } catch (error) { - this.logger.error( - `Failed to get cache keys with pattern: ${pattern}`, - error, - ); - return []; - } - } - - /** - * 清空所有缓存 - */ - async flush(): Promise { - try { - await this.cacheProvider.flush(); - } catch (error) { - this.logger.error('Failed to flush cache', error); - } - } - - /** - * 获取缓存统计信息 - */ - async stats() { - try { - return await this.cacheProvider.stats(); - } catch (error) { - this.logger.error('Failed to get cache stats', error); - return { - hits: 0, - misses: 0, - keys: 0, - memory: 0, - uptime: 0, - }; - } - } - - /** - * 缓存装饰器实现 - * 对应 Java: cache(String key, CacheHelper cacheHelper) - */ - async cache(key: string, cacheHelper: CacheHelper): Promise { - return this.cacheWithOptions({ key }, cacheHelper); - } - - /** - * 带选项的缓存 - * 对应 Java: cache(boolean cache, String key, CacheHelper cacheHelper) - */ - async cacheWithOptions( - options: CacheOptions, - cacheHelper: CacheHelper, - ): Promise { - const { key, ttl, enabled = true, condition } = options; - - if (!enabled || !key) { - return await cacheHelper.execute(key || ''); - } - - try { - // 尝试从缓存获取 - let result = await this.get(key); - - if (result === null) { - // 缓存未命中,执行函数 - result = await cacheHelper.execute(key); - - if (result !== null && result !== undefined) { - // 检查缓存条件 - if (!condition || condition([], result)) { - await this.set(key, result, ttl); - } - } - } - - return result; - } catch (error) { - this.logger.error(`Cache operation failed for key: ${key}`, error); - // 降级到直接执行 - return await cacheHelper.execute(key); - } - } - - /** - * 记住结果(带参数) - * 对应 Java: remember(List paramList, CacheHelper cacheHelper) - */ - async remember(paramList: any[], cacheHelper: CacheHelper): Promise { - const key = this.computeUniqueKey(paramList); - return this.cache(key, cacheHelper); - } - - /** - * 记住对象结果 - * 对应 Java: rememberObject(List paramList, CacheHelper cacheHelper) - */ - async rememberObject( - paramList: any[], - cacheHelper: CacheHelper, - ): Promise { - return this.remember(paramList, cacheHelper); - } - - /** - * 分组缓存 - * 对应 Java: tag(String group) - */ - tag(group: string) { - return { - set: (key: string, value: any, ttl?: number) => - this.groupCacheProvider.set(group, key, value, ttl), - get: (key: string) => this.groupCacheProvider.get(group, key), - del: (key: string) => this.groupCacheProvider.del(group, key), - clear: () => this.groupCacheProvider.clear(group), - keys: () => this.groupCacheProvider.keys(group), - }; - } - - /** - * 计算唯一键 - * 对应 Java: CacheUtils.computeUniqueKey(paramList) - */ - private computeUniqueKey(paramList: any[]): string { - if (!paramList || paramList.length === 0) { - return 'empty'; - } - - const keyParts = paramList.map((param) => { - if (param === null || param === undefined) { - return 'null'; - } - if (typeof param === 'object') { - return JSON.stringify(param); - } - return String(param); - }); - - return keyParts.join(':'); - } - - /** - * 批量操作 - */ - async mget(keys: string[]): Promise<(T | null)[]> { - const results: (T | null)[] = []; - for (const key of keys) { - results.push(await this.get(key)); - } - return results; - } - - /** - * 批量设置 - */ - async mset( - keyValuePairs: Array<{ key: string; value: any; ttl?: number }>, - ): Promise { - for (const { key, value, ttl } of keyValuePairs) { - await this.set(key, value, ttl); - } - } - - /** - * 原子递增 - */ - async incr(key: string, increment: number = 1): Promise { - const current = (await this.get(key)) || 0; - const newValue = current + increment; - await this.set(key, newValue); - return newValue; - } - - /** - * 原子递减 - */ - async decr(key: string, decrement: number = 1): Promise { - return this.incr(key, -decrement); - } - - /** - * 设置哈希字段 - */ - async hset(key: string, field: string, value: any): Promise { - const hash = (await this.get>(key)) || {}; - hash[field] = value; - await this.set(key, hash); - } - - /** - * 获取哈希字段 - */ - async hget(key: string, field: string): Promise { - const hash = await this.get>(key); - return hash ? hash[field] || null : null; - } - - /** - * 删除哈希字段 - */ - async hdel(key: string, field: string): Promise { - const hash = await this.get>(key); - if (hash) { - delete hash[field]; - await this.set(key, hash); - } - } - - /** - * 获取哈希所有字段 - */ - async hgetall(key: string): Promise> { - return (await this.get>(key)) || {}; - } -} diff --git a/src/common/cache/decorators/cache-evict.decorator.ts b/src/common/cache/decorators/cache-evict.decorator.ts deleted file mode 100644 index 5b461e2e..00000000 --- a/src/common/cache/decorators/cache-evict.decorator.ts +++ /dev/null @@ -1,120 +0,0 @@ -import { SetMetadata } from '@nestjs/common'; - -/** - * 缓存清除键生成器 - */ -export type CacheEvictKeyGenerator = ( - target: any, - methodName: string, - args: any[], -) => string | string[]; - -/** - * 缓存清除装饰器选项 - */ -export interface CacheEvictOptions { - /** - * 要清除的缓存键 - */ - key?: string | string[] | CacheEvictKeyGenerator; - - /** - * 是否在方法执行前清除 - */ - beforeInvocation?: boolean; - - /** - * 是否清除所有缓存 - */ - allEntries?: boolean; - - /** - * 缓存分组 - */ - group?: string; - - /** - * 是否启用 - */ - enabled?: boolean; -} - -/** - * 缓存清除装饰器元数据键 - */ -export const CACHE_EVICT_METADATA_KEY = 'cacheEvict'; - -/** - * 缓存清除装饰器 - * 基于 NestJS 官方示例实现 - * 参考: https://docs.nestjs.cn/fundamentals/custom-decorators - * 对应 Java: @CacheEvict - */ -export const CacheEvict = (options: CacheEvictOptions = {}) => { - return (target: any, propertyKey: string, descriptor: PropertyDescriptor) => { - SetMetadata(CACHE_EVICT_METADATA_KEY, { - key: options.key || propertyKey, - beforeInvocation: options.beforeInvocation || false, - allEntries: options.allEntries || false, - group: options.group, - enabled: options.enabled !== false, - })(target, propertyKey, descriptor); - - return descriptor; - }; -}; - -/** - * 默认缓存清除键生成器 - */ -export const defaultCacheEvictKeyGenerator: CacheEvictKeyGenerator = ( - target, - methodName, - args, -) => { - const className = target.constructor.name; - const argsStr = args - .map((arg) => { - if (arg === null || arg === undefined) { - return 'null'; - } - if (typeof arg === 'object') { - return JSON.stringify(arg); - } - return String(arg); - }) - .join(':'); - - return `${className}:${methodName}:${argsStr}`; -}; - -/** - * 简化版缓存清除装饰器 - * @param key 要清除的缓存键 - */ -export const EvictCache = (key?: string) => { - return CacheEvict({ key }); -}; - -/** - * 清除所有缓存装饰器 - */ -export const EvictAllCache = () => { - return CacheEvict({ allEntries: true }); -}; - -/** - * 分组缓存清除装饰器 - * @param group 分组名 - */ -export const EvictGroupCache = (group: string) => { - return CacheEvict({ group, allEntries: true }); -}; - -/** - * 方法执行前清除缓存装饰器 - * @param key 要清除的缓存键 - */ -export const EvictCacheBefore = (key?: string) => { - return CacheEvict({ key, beforeInvocation: true }); -}; diff --git a/src/common/cache/decorators/cacheable.decorator.ts b/src/common/cache/decorators/cacheable.decorator.ts deleted file mode 100644 index 11e746dc..00000000 --- a/src/common/cache/decorators/cacheable.decorator.ts +++ /dev/null @@ -1,124 +0,0 @@ -import { SetMetadata } from '@nestjs/common'; - -/** - * 缓存键生成器 - */ -export type CacheKeyGenerator = ( - target: any, - methodName: string, - args: any[], -) => string; - -/** - * 缓存条件检查器 - */ -export type CacheCondition = (args: any[], result: any) => boolean; - -/** - * 缓存装饰器选项 - */ -export interface CacheableOptions { - /** - * 缓存键 - */ - key?: string | CacheKeyGenerator; - - /** - * 过期时间(秒) - */ - ttl?: number; - - /** - * 是否启用缓存 - */ - enabled?: boolean; - - /** - * 缓存条件 - */ - condition?: CacheCondition; - - /** - * 缓存分组 - */ - group?: string; -} - -/** - * 缓存装饰器元数据键 - */ -export const CACHEABLE_METADATA_KEY = 'cacheable'; - -/** - * 缓存装饰器 - * 基于 NestJS 官方示例实现 - * 参考: https://docs.nestjs.cn/fundamentals/custom-decorators - * 对应 Java: @Cacheable - */ -export const Cacheable = (options: CacheableOptions = {}) => { - return (target: any, propertyKey: string, descriptor: PropertyDescriptor) => { - SetMetadata(CACHEABLE_METADATA_KEY, { - key: options.key || propertyKey, - ttl: options.ttl || 300, // 默认5分钟 - enabled: options.enabled !== false, - condition: options.condition, - group: options.group, - })(target, propertyKey, descriptor); - - return descriptor; - }; -}; - -/** - * 默认缓存键生成器 - */ -export const defaultCacheKeyGenerator: CacheKeyGenerator = ( - target, - methodName, - args, -) => { - const className = target.constructor.name; - const argsStr = args - .map((arg) => { - if (arg === null || arg === undefined) { - return 'null'; - } - if (typeof arg === 'object') { - return JSON.stringify(arg); - } - return String(arg); - }) - .join(':'); - - return `${className}:${methodName}:${argsStr}`; -}; - -/** - * 简化版缓存装饰器 - * @param ttl 过期时间(秒) - * @param key 缓存键 - */ -export const Cache = (ttl: number = 300, key?: string) => { - return Cacheable({ ttl, key }); -}; - -/** - * 分组缓存装饰器 - * @param group 分组名 - * @param ttl 过期时间(秒) - */ -export const GroupCache = (group: string, ttl: number = 300) => { - return Cacheable({ group, ttl }); -}; - -/** - * 条件缓存装饰器 - * @param condition 缓存条件 - * @param ttl 过期时间(秒) - */ -export const ConditionalCache = ( - condition: CacheCondition, - ttl: number = 300, -) => { - return Cacheable({ condition, ttl }); -}; diff --git a/src/common/common.module.ts b/src/common/common.module.ts deleted file mode 100644 index 5253f1cc..00000000 --- a/src/common/common.module.ts +++ /dev/null @@ -1,98 +0,0 @@ -import { Module, Global } from '@nestjs/common'; -import { ConfigModule } from '@nestjs/config'; -import { CacheModule } from './cache/cache.module'; -import { MonitoringModule } from './monitoring/monitoring.module'; -import { LoggingModule } from './logging/logging.module'; -import { ExceptionModule } from './exception/exception.module'; -import { QueueModule } from './queue/queue.module'; -import { EventModule } from './event/event.module'; -import { SecurityModule } from './security/security.module'; -import { TracingModule } from './tracing/tracing.module'; -import { SchedulerModule } from './scheduler/scheduler.module'; -import { InitModule } from './init/init.module'; -import { ContextModule } from './context/context.module'; -// import { SwaggerModule } from './swagger/swagger.module'; -import { DatabaseModule } from './database/database.module'; -// import { ValidationModule } from './validation/validation.module'; // 已合并到 PipesModule -import { ResponseModule } from './response/response.module'; -import { UtilsModule } from './utils/utils.module'; -import { PipesModule } from './pipes/pipes.module'; -import { SystemModule } from './system/system.module'; -import { LoaderModule } from './loader/loader.module'; -import { BaseModule } from './base/base.module'; -import { InterceptorsModule } from './interceptors/interceptors.module'; -import { LibrariesModule } from './libraries/libraries.module'; -import { PluginsModule } from './plugins/plugins.module'; - -/** - * 通用模块 - 基础设施层 - * 基于 NestJS 官方示例实现 - * - * 包含框架基础能力: - * - 基础服务(缓存、日志、监控、异常) - * - 自研工具类 - * - 第三方工具库封装 - * - 基础功能插件 - * - 框架基础设施 - */ -@Module({ - imports: [ - // 核心基础设施模块(需要全局访问) - DatabaseModule, // 数据库连接 - CacheModule, // 缓存服务 - MonitoringModule, // 监控服务 - LoggingModule, // 日志服务 - ExceptionModule, // 异常处理 - QueueModule, // 队列服务 - EventModule, // 事件服务 - ResponseModule, // 响应处理 - - // 自研工具类 - UtilsModule, - - // 第三方工具库封装 - LibrariesModule, - - // 基础功能插件 - PluginsModule, - - // 框架基础设施 - SecurityModule, - TracingModule, - SchedulerModule, - InitModule, - ContextModule, - // SwaggerModule, - SystemModule, - LoaderModule, - BaseModule, - InterceptorsModule, - PipesModule, - ], - exports: [ - // 核心基础设施服务 - DatabaseModule, - CacheModule, - MonitoringModule, - LoggingModule, - ExceptionModule, - QueueModule, - EventModule, - ResponseModule, - - // 自研工具类 - UtilsModule, - - // 第三方工具库封装 - LibrariesModule, - - // 基础功能插件 - PluginsModule, - - // 框架基础设施 - SecurityModule, - BaseModule, - InterceptorsModule, - ], -}) -export class CommonModule {} diff --git a/src/common/context/context.module.ts b/src/common/context/context.module.ts deleted file mode 100644 index acbc81f2..00000000 --- a/src/common/context/context.module.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Module, Global } from '@nestjs/common'; -import { ContextService } from './context.service'; - -/** - * 上下文模块 - 基础设施层 - * 提供请求上下文管理功能 - */ -@Global() -@Module({ - providers: [ContextService], - exports: [ContextService], -}) -export class ContextModule {} diff --git a/src/common/context/context.service.ts b/src/common/context/context.service.ts deleted file mode 100644 index b84046ea..00000000 --- a/src/common/context/context.service.ts +++ /dev/null @@ -1,86 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import { Request } from 'express'; - -/** - * 上下文服务 - * 提供请求上下文管理功能 - */ -@Injectable() -export class ContextService { - private readonly contextMap = new Map(); - - /** - * 设置上下文数据 - */ - setContext(key: string, value: any) { - this.contextMap.set(key, value); - } - - /** - * 获取上下文数据 - */ - getContext(key: string): T | undefined { - return this.contextMap.get(key); - } - - /** - * 清除上下文数据 - */ - clearContext(key?: string) { - if (key) { - this.contextMap.delete(key); - } else { - this.contextMap.clear(); - } - } - - /** - * 从请求中提取用户信息 - */ - getUserFromRequest(request: Request) { - return (request as any).user; - } - - /** - * 从请求中提取站点信息 - */ - getSiteFromRequest(request: Request) { - return (request as any).site; - } - - /** - * 获取当前用户 ID - */ - getCurrentUserId(request: Request): number | undefined { - const user = this.getUserFromRequest(request); - return user?.userId; - } - - /** - * 获取当前站点 ID - */ - getCurrentSiteId(request: Request): number | undefined { - const site = this.getSiteFromRequest(request); - return site?.siteId; - } - - /** - * 获取客户端 IP - */ - getClientIp(request: Request): string { - return ( - (request.headers['x-forwarded-for'] as string) || - (request.headers['x-real-ip'] as string) || - request.connection.remoteAddress || - request.socket.remoteAddress || - '127.0.0.1' - ); - } - - /** - * 获取用户代理 - */ - getUserAgent(request: Request): string { - return request.headers['user-agent'] || ''; - } -} diff --git a/src/common/database/backup.service.ts b/src/common/database/backup.service.ts deleted file mode 100644 index d9f97647..00000000 --- a/src/common/database/backup.service.ts +++ /dev/null @@ -1,468 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import { ConfigService } from '@nestjs/config'; -import { DataSource } from 'typeorm'; -import * as fs from 'fs'; -import * as path from 'path'; -import * as archiver from 'archiver'; -import { SystemUtil } from '../utils/system.util'; - -/** - * 数据库备份服务 - * 基于 TypeORM 实现 - * 对应 Java: DatabaseBackup - */ -@Injectable() -export class DatabaseBackupService { - constructor( - private readonly configService: ConfigService, - private readonly dataSource: DataSource, - private readonly systemUtil: SystemUtil, - ) {} - - /** - * 备份数据库 - */ - async backupDatabase(options?: { - tables?: string[]; - excludeTables?: string[]; - outputPath?: string; - compress?: boolean; - includeData?: boolean; - includeSchema?: boolean; - }): Promise<{ - success: boolean; - filePath: string; - size: number; - tables: number; - message: string; - }> { - const config = { - tables: options?.tables || [], - excludeTables: options?.excludeTables || [], - outputPath: options?.outputPath || this.getDefaultBackupPath(), - compress: options?.compress !== false, - includeData: options?.includeData !== false, - includeSchema: options?.includeSchema !== false, - }; - - try { - // 确保输出目录存在 - await this.systemUtil.createDirectory(path.dirname(config.outputPath)); - - // 获取所有表 - const allTables = await this.getAllTables(); - const tablesToBackup = this.filterTables( - allTables, - config.tables, - config.excludeTables, - ); - - if (tablesToBackup.length === 0) { - throw new Error('没有找到要备份的表'); - } - - // 生成备份文件名 - const timestamp = new Date().toISOString().replace(/[:.]/g, '-'); - const backupFileName = `backup_${timestamp}.sql`; - const backupFilePath = path.join(config.outputPath, backupFileName); - - // 执行备份 - const backupContent = await this.generateBackupContent( - tablesToBackup, - config, - ); - await this.systemUtil.writeFile(backupFilePath, backupContent); - - // 压缩备份文件 - let finalFilePath = backupFilePath; - if (config.compress) { - finalFilePath = await this.compressBackupFile(backupFilePath); - // 删除原始文件 - await this.systemUtil.removeFileOrDirectory(backupFilePath); - } - - // 获取文件信息 - const fileInfo = await this.systemUtil.getFileInfo(finalFilePath); - - return { - success: true, - filePath: finalFilePath, - size: fileInfo.size, - tables: tablesToBackup.length, - message: '数据库备份成功', - }; - } catch (error) { - return { - success: false, - filePath: '', - size: 0, - tables: 0, - message: `数据库备份失败: ${error.message}`, - }; - } - } - - /** - * 恢复数据库 - */ - async restoreDatabase( - backupFilePath: string, - options?: { - tables?: string[]; - excludeTables?: string[]; - dropTables?: boolean; - }, - ): Promise<{ - success: boolean; - message: string; - }> { - try { - // 检查备份文件是否存在 - if (!(await this.systemUtil.fileExists(backupFilePath))) { - throw new Error('备份文件不存在'); - } - - // 解压备份文件(如果需要) - let sqlFilePath = backupFilePath; - if (backupFilePath.endsWith('.zip')) { - sqlFilePath = await this.extractBackupFile(backupFilePath); - } - - // 读取 SQL 内容 - const sqlContent = await this.systemUtil.readFile(sqlFilePath); - - // 解析 SQL 内容 - const sqlStatements = this.parseSqlContent(sqlContent); - - // 执行恢复 - await this.executeRestore(sqlStatements, options); - - // 清理临时文件 - if (sqlFilePath !== backupFilePath) { - await this.systemUtil.removeFileOrDirectory(sqlFilePath); - } - - return { - success: true, - message: '数据库恢复成功', - }; - } catch (error) { - return { - success: false, - message: `数据库恢复失败: ${error.message}`, - }; - } - } - - /** - * 获取所有表 - */ - private async getAllTables(): Promise { - const queryRunner = this.dataSource.createQueryRunner(); - try { - const tables = await queryRunner.query(` - SELECT TABLE_NAME - FROM INFORMATION_SCHEMA.TABLES - WHERE TABLE_SCHEMA = DATABASE() - ORDER BY TABLE_NAME - `); - return tables.map((table: any) => table.TABLE_NAME); - } finally { - await queryRunner.release(); - } - } - - /** - * 过滤表 - */ - private filterTables( - allTables: string[], - includeTables: string[], - excludeTables: string[], - ): string[] { - let filteredTables = allTables; - - // 包含指定表 - if (includeTables.length > 0) { - filteredTables = filteredTables.filter((table) => - includeTables.includes(table), - ); - } - - // 排除指定表 - if (excludeTables.length > 0) { - filteredTables = filteredTables.filter( - (table) => !excludeTables.includes(table), - ); - } - - return filteredTables; - } - - /** - * 生成备份内容 - */ - private async generateBackupContent( - tables: string[], - config: any, - ): Promise { - const queryRunner = this.dataSource.createQueryRunner(); - let backupContent = ''; - - try { - // 添加备份头部信息 - backupContent += this.generateBackupHeader(); - - // 备份表结构 - if (config.includeSchema) { - for (const table of tables) { - backupContent += await this.generateTableSchema(queryRunner, table); - } - } - - // 备份表数据 - if (config.includeData) { - for (const table of tables) { - backupContent += await this.generateTableData(queryRunner, table); - } - } - - // 添加备份尾部信息 - backupContent += this.generateBackupFooter(); - - return backupContent; - } finally { - await queryRunner.release(); - } - } - - /** - * 生成备份头部 - */ - private generateBackupHeader(): string { - const timestamp = new Date().toISOString(); - return ` --- WWJCloud Database Backup --- Generated at: ${timestamp} --- Database: ${this.dataSource.options.database} --- Version: ${this.dataSource.options.type} - -SET FOREIGN_KEY_CHECKS=0; -SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; -SET AUTOCOMMIT=0; -START TRANSACTION; -SET time_zone = "+00:00"; - -`; - } - - /** - * 生成备份尾部 - */ - private generateBackupFooter(): string { - return ` -COMMIT; -SET FOREIGN_KEY_CHECKS=1; -`; - } - - /** - * 生成表结构 - */ - private async generateTableSchema( - queryRunner: any, - tableName: string, - ): Promise { - const createTableResult = await queryRunner.query( - `SHOW CREATE TABLE \`${tableName}\``, - ); - const createTableSql = createTableResult[0]['Create Table']; - - return ` --- Table structure for table \`${tableName}\` -DROP TABLE IF EXISTS \`${tableName}\`; -${createTableSql}; - -`; - } - - /** - * 生成表数据 - */ - private async generateTableData( - queryRunner: any, - tableName: string, - ): Promise { - const rows = await queryRunner.query(`SELECT * FROM \`${tableName}\``); - - if (rows.length === 0) { - return `-- Data for table \`${tableName}\` (empty)\n\n`; - } - - // 获取列名 - const columns = Object.keys(rows[0]); - const columnNames = columns.map((col) => `\`${col}\``).join(', '); - - // 生成 INSERT 语句 - let insertStatements = `-- Data for table \`${tableName}\`\n`; - - for (const row of rows) { - const values = columns - .map((col) => { - const value = row[col]; - if (value === null) return 'NULL'; - if (typeof value === 'string') - return `'${value.replace(/'/g, "''")}'`; - if (value instanceof Date) - return `'${value.toISOString().slice(0, 19).replace('T', ' ')}'`; - return value; - }) - .join(', '); - - insertStatements += `INSERT INTO \`${tableName}\` (${columnNames}) VALUES (${values});\n`; - } - - return insertStatements + '\n'; - } - - /** - * 压缩备份文件 - */ - private async compressBackupFile(filePath: string): Promise { - const zipPath = filePath.replace('.sql', '.zip'); - - return new Promise((resolve, reject) => { - const output = fs.createWriteStream(zipPath); - const archive = archiver('zip', { zlib: { level: 9 } }); - - output.on('close', () => { - resolve(zipPath); - }); - - archive.on('error', (err) => { - reject(err); - }); - - archive.pipe(output); - archive.file(filePath, { name: path.basename(filePath) }); - archive.finalize(); - }); - } - - /** - * 解压备份文件 - */ - private async extractBackupFile(zipPath: string): Promise { - // 这里需要实现解压逻辑 - // 由于 archiver 主要用于压缩,解压需要使用其他库如 yauzl - throw new Error('解压功能需要额外实现'); - } - - /** - * 解析 SQL 内容 - */ - private parseSqlContent(sqlContent: string): string[] { - // 简单的 SQL 语句分割 - return sqlContent - .split(';') - .map((stmt) => stmt.trim()) - .filter((stmt) => stmt.length > 0 && !stmt.startsWith('--')); - } - - /** - * 执行恢复 - */ - private async executeRestore( - sqlStatements: string[], - options?: any, - ): Promise { - const queryRunner = this.dataSource.createQueryRunner(); - - try { - await queryRunner.startTransaction(); - - for (const statement of sqlStatements) { - if (statement.trim()) { - await queryRunner.query(statement); - } - } - - await queryRunner.commitTransaction(); - } catch (error) { - await queryRunner.rollbackTransaction(); - throw error; - } finally { - await queryRunner.release(); - } - } - - /** - * 获取默认备份路径 - */ - private getDefaultBackupPath(): string { - const backupDir = this.configService.get('database.backupPath', 'backups'); - return path.join(this.systemUtil.getAppRootDirectory(), backupDir); - } - - /** - * 获取备份列表 - */ - async getBackupList(): Promise<{ - files: Array<{ - name: string; - path: string; - size: number; - createdAt: Date; - modifiedAt: Date; - }>; - }> { - const backupDir = this.getDefaultBackupPath(); - - if (!(await this.systemUtil.fileExists(backupDir))) { - return { files: [] }; - } - - const files = await this.systemUtil.readDirectory(backupDir); - const backupFiles = files.filter( - (file) => file.endsWith('.sql') || file.endsWith('.zip'), - ); - - const fileInfos = await Promise.all( - backupFiles.map(async (file) => { - const filePath = path.join(backupDir, file); - const fileInfo = await this.systemUtil.getFileInfo(filePath); - - return { - name: file, - path: filePath, - size: fileInfo.size, - createdAt: fileInfo.ctime, - modifiedAt: fileInfo.mtime, - }; - }), - ); - - return { files: fileInfos }; - } - - /** - * 删除备份文件 - */ - async deleteBackupFile(filePath: string): Promise<{ - success: boolean; - message: string; - }> { - try { - await this.systemUtil.removeFileOrDirectory(filePath); - return { - success: true, - message: '备份文件删除成功', - }; - } catch (error) { - return { - success: false, - message: `备份文件删除失败: ${error.message}`, - }; - } - } -} diff --git a/src/common/database/database.module.ts b/src/common/database/database.module.ts deleted file mode 100644 index c2f58d00..00000000 --- a/src/common/database/database.module.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { Module, Global } from '@nestjs/common'; -import { TypeOrmModule } from '@nestjs/typeorm'; -import { ConfigModule, ConfigService } from '@nestjs/config'; -import { DatabaseBackupService } from './backup.service'; -import { UtilsModule } from '../utils/utils.module'; - -/** - * 数据库模块 - 基础设施层 - * 基于 NestJS 官方文档实现 - * 参考: https://docs.nestjs.cn/techniques/database - * 对应 Java: MyBatis-Plus - * - * 职责: - * - TypeORM 配置和连接管理 - * - 数据库备份和恢复服务 - * - 数据库相关的工具服务 - */ -@Global() -@Module({ - imports: [ - TypeOrmModule.forRootAsync({ - imports: [ConfigModule], - inject: [ConfigService], - useFactory: (configService: ConfigService) => ({ - type: 'mysql', - host: configService.get('database.host', 'localhost'), - port: configService.get('database.port', 3306), - username: configService.get('database.username', 'root'), - password: configService.get('database.password', 'root'), - database: configService.get('database.database', 'wwjcloud'), - entities: [ - __dirname + '/../**/*.entity{.ts,.js}', - __dirname + '/../../config/**/*.entity{.ts,.js}', - ], - synchronize: true, // 临时启用自动同步来创建表 - logging: configService.get('database.logging', false), - timezone: '+08:00', - charset: 'utf8mb4', - extra: { - connectionLimit: 10, - acquireTimeout: 60000, - timeout: 60000, - }, - }), - }), - UtilsModule, - ], - providers: [DatabaseBackupService], - exports: [TypeOrmModule, DatabaseBackupService], -}) -export class DatabaseModule {} diff --git a/src/common/event/event.module.ts b/src/common/event/event.module.ts deleted file mode 100644 index 2ea2ce03..00000000 --- a/src/common/event/event.module.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { Module, Global } from '@nestjs/common'; -import { EventEmitterModule } from '@nestjs/event-emitter'; - -/** - * 事件模块 - 基础设施层 - * 基于 NestJS 官方文档实现 - * 参考: https://docs.nestjs.cn/techniques/events - */ -@Global() -@Module({ - imports: [ - EventEmitterModule.forRoot({ - // 设置为 true 时,将允许使用通配符 - wildcard: false, - // 事件分隔符 - delimiter: '.', - // 设置为 true 时,如果事件没有监听器将抛出错误 - newListener: false, - // 设置为 true 时,当事件监听器被移除时将发出事件 - removeListener: false, - // 最大监听器数量 - maxListeners: 10, - // 设置为 true 时,将在内存中存储包装函数的名称 - verboseMemoryLeak: false, - // 禁用在内存泄漏警告中打印堆栈跟踪 - ignoreErrors: false, - }), - ], - exports: [EventEmitterModule], -}) -export class EventModule {} diff --git a/src/common/exception/base.exception.ts b/src/common/exception/base.exception.ts deleted file mode 100644 index 88655b54..00000000 --- a/src/common/exception/base.exception.ts +++ /dev/null @@ -1,48 +0,0 @@ -/** - * 基础异常类 - * 基于 NestJS 异常处理实现 - * 与PHP/Java框架保持完全一致的异常格式 - * - * PHP格式: {data, msg, code} - * Java格式: {code, msg, data} - * NestJS格式: {code, msg, data} (与Java一致) - */ -export abstract class BaseException extends Error { - public readonly statusCode: number; - public readonly errorCode: string; - public readonly timestamp: string; - public readonly path?: string; - public readonly details?: any; - - constructor( - message: string, - statusCode: number = 500, - errorCode: string = 'INTERNAL_ERROR', - details?: any, - ) { - super(message); - this.name = this.constructor.name; - this.statusCode = statusCode; - this.errorCode = errorCode; - this.timestamp = new Date().toISOString(); - this.details = details; - - // 确保堆栈跟踪正确 - if (Error.captureStackTrace) { - Error.captureStackTrace(this, this.constructor); - } - } - - /** - * 转换为响应格式 - * 与PHP/Java框架基本一致,添加timestamp字段 - */ - toResponse() { - return { - code: 0, // 失败状态码 - msg: this.message, // 错误消息 - data: null, // 无数据 - timestamp: this.timestamp, // 时间戳 - }; - } -} diff --git a/src/common/exception/business.exception.ts b/src/common/exception/business.exception.ts deleted file mode 100644 index 31d7fe73..00000000 --- a/src/common/exception/business.exception.ts +++ /dev/null @@ -1,105 +0,0 @@ -import { BaseException } from './base.exception'; - -/** - * 业务异常类 - * 对应 Java: BusinessException - */ -export class BusinessException extends BaseException { - constructor( - message: string, - errorCode: string = 'BUSINESS_ERROR', - details?: any, - ) { - super(message, 400, errorCode, details); - } -} - -/** - * 认证异常类 - * 对应 Java: AuthException - */ -export class AuthException extends BaseException { - constructor(message: string = '认证失败', details?: any) { - super(message, 401, 'AUTH_ERROR', details); - } -} - -/** - * 授权异常类 - * 对应 Java: AuthorizationException - */ -export class AuthorizationException extends BaseException { - constructor(message: string = '权限不足', details?: any) { - super(message, 403, 'AUTHORIZATION_ERROR', details); - } -} - -/** - * 资源未找到异常类 - * 对应 Java: ResourceNotFoundException - */ -export class ResourceNotFoundException extends BaseException { - constructor(message: string = '资源未找到', details?: any) { - super(message, 404, 'RESOURCE_NOT_FOUND', details); - } -} - -/** - * 参数验证异常类 - * 对应 Java: ValidationException - */ -export class ValidationException extends BaseException { - constructor(message: string = '参数验证失败', details?: any) { - super(message, 422, 'VALIDATION_ERROR', details); - } -} - -/** - * 冲突异常类 - * 对应 Java: ConflictException - */ -export class ConflictException extends BaseException { - constructor(message: string = '资源冲突', details?: any) { - super(message, 409, 'CONFLICT_ERROR', details); - } -} - -/** - * 限流异常类 - * 对应 Java: RateLimitException - */ -export class RateLimitException extends BaseException { - constructor(message: string = '请求过于频繁', details?: any) { - super(message, 429, 'RATE_LIMIT_ERROR', details); - } -} - -/** - * 系统异常类 - * 对应 Java: SystemException - */ -export class SystemException extends BaseException { - constructor(message: string = '系统内部错误', details?: any) { - super(message, 500, 'SYSTEM_ERROR', details); - } -} - -/** - * 数据库异常类 - * 对应 Java: DatabaseException - */ -export class DatabaseException extends BaseException { - constructor(message: string = '数据库操作失败', details?: any) { - super(message, 500, 'DATABASE_ERROR', details); - } -} - -/** - * 网络异常类 - * 对应 Java: NetworkException - */ -export class NetworkException extends BaseException { - constructor(message: string = '网络连接失败', details?: any) { - super(message, 503, 'NETWORK_ERROR', details); - } -} diff --git a/src/common/exception/exception.filter.ts b/src/common/exception/exception.filter.ts deleted file mode 100644 index 91c84751..00000000 --- a/src/common/exception/exception.filter.ts +++ /dev/null @@ -1,97 +0,0 @@ -import { - ExceptionFilter, - Catch, - ArgumentsHost, - HttpException, - HttpStatus, - Logger, -} from '@nestjs/common'; -import { Request, Response } from 'express'; -import { BaseException } from './base.exception'; -import { BusinessException } from './business.exception'; - -/** - * 全局异常过滤器 - * 基于 NestJS 异常处理实现 - * 参考: https://docs.nestjs.cn/exception-filters - * 对应 Java: GlobalExceptionHandler - */ -@Catch() -export class GlobalExceptionFilter implements ExceptionFilter { - private readonly logger = new Logger(GlobalExceptionFilter.name); - - catch(exception: unknown, host: ArgumentsHost) { - const ctx = host.switchToHttp(); - const response = ctx.getResponse(); - const request = ctx.getRequest(); - - let status: number; - let errorResponse: any; - - if (exception instanceof BaseException) { - // 自定义业务异常 - status = exception.statusCode; - errorResponse = exception.toResponse(); - errorResponse.error.path = request.url; - } else if (exception instanceof HttpException) { - // NestJS HTTP 异常 - status = exception.getStatus(); - const exceptionResponse = exception.getResponse(); - - if (typeof exceptionResponse === 'string') { - errorResponse = { - success: false, - error: { - code: 'HTTP_ERROR', - message: exceptionResponse, - statusCode: status, - timestamp: new Date().toISOString(), - path: request.url, - }, - }; - } else { - errorResponse = { - success: false, - error: { - code: 'HTTP_ERROR', - message: (exceptionResponse as any).message || 'HTTP异常', - statusCode: status, - timestamp: new Date().toISOString(), - path: request.url, - details: exceptionResponse, - }, - }; - } - } else { - // 未知异常 - status = HttpStatus.INTERNAL_SERVER_ERROR; - errorResponse = { - success: false, - error: { - code: 'INTERNAL_ERROR', - message: '系统内部错误', - statusCode: status, - timestamp: new Date().toISOString(), - path: request.url, - }, - }; - } - - // 记录错误日志 - this.logger.error( - `Exception caught: ${exception instanceof Error ? exception.message : 'Unknown error'}`, - exception instanceof Error ? exception.stack : undefined, - { - url: request.url, - method: request.method, - ip: request.ip, - userAgent: request.get('User-Agent'), - status, - errorCode: errorResponse.error.code, - }, - ); - - // 发送响应 - response.status(status).json(errorResponse); - } -} diff --git a/src/common/exception/exception.interface.ts b/src/common/exception/exception.interface.ts deleted file mode 100644 index caf2b551..00000000 --- a/src/common/exception/exception.interface.ts +++ /dev/null @@ -1,352 +0,0 @@ -/** - * 异常接口定义 - * 基于 NestJS 官方示例实现 - * 参考: https://docs.nestjs.cn/fundamentals/exception-filters - * 对应 Java: 异常抽象 - */ -export interface ExceptionInterface { - /** - * 处理异常 - * @param exception 异常对象 - * @param context 上下文 - * @returns 处理结果 - */ - handle(exception: any, context?: any): Promise; - - /** - * 记录异常 - * @param exception 异常对象 - * @param context 上下文 - */ - log(exception: any, context?: any): Promise; - - /** - * 格式化异常响应 - * @param exception 异常对象 - * @param context 上下文 - * @returns 格式化后的响应 - */ - format(exception: any, context?: any): ExceptionResponse; - - /** - * 判断异常类型 - * @param exception 异常对象 - * @returns 异常类型 - */ - getType(exception: any): ExceptionType; - - /** - * 获取异常严重程度 - * @param exception 异常对象 - * @returns 严重程度 - */ - getSeverity(exception: any): ExceptionSeverity; - - /** - * 判断是否应该记录 - * @param exception 异常对象 - * @returns 是否应该记录 - */ - shouldLog(exception: any): boolean; - - /** - * 判断是否应该上报 - * @param exception 异常对象 - * @returns 是否应该上报 - */ - shouldReport(exception: any): boolean; -} - -/** - * 异常处理结果 - */ -export interface ExceptionResult { - success: boolean; - response: ExceptionResponse; - logged: boolean; - reported: boolean; - handled: boolean; -} - -/** - * 异常响应 - */ -export interface ExceptionResponse { - statusCode: number; - message: string; - error: string; - timestamp: string; - path?: string; - method?: string; - traceId?: string; - spanId?: string; - correlationId?: string; - details?: any; - code?: string; - type?: ExceptionType; - severity?: ExceptionSeverity; -} - -/** - * 异常类型 - */ -export enum ExceptionType { - VALIDATION = 'validation', - AUTHENTICATION = 'authentication', - AUTHORIZATION = 'authorization', - NOT_FOUND = 'not_found', - CONFLICT = 'conflict', - BAD_REQUEST = 'bad_request', - INTERNAL_SERVER_ERROR = 'internal_server_error', - SERVICE_UNAVAILABLE = 'service_unavailable', - TIMEOUT = 'timeout', - RATE_LIMIT = 'rate_limit', - BUSINESS = 'business', - SYSTEM = 'system', - NETWORK = 'network', - DATABASE = 'database', - CACHE = 'cache', - EXTERNAL_API = 'external_api', - UNKNOWN = 'unknown', -} - -/** - * 异常严重程度 - */ -export enum ExceptionSeverity { - LOW = 'low', - MEDIUM = 'medium', - HIGH = 'high', - CRITICAL = 'critical', -} - -/** - * 异常上下文 - */ -export interface ExceptionContext { - request?: { - method: string; - url: string; - headers: Record; - body?: any; - query?: Record; - params?: Record; - ip?: string; - userAgent?: string; - userId?: string; - sessionId?: string; - }; - response?: { - statusCode: number; - headers: Record; - body?: any; - }; - user?: { - id: string; - username?: string; - email?: string; - role?: string; - permissions?: string[]; - }; - environment?: { - nodeEnv: string; - version: string; - hostname: string; - pid: number; - }; - trace?: { - traceId: string; - spanId: string; - correlationId: string; - }; - meta?: Record; -} - -/** - * 异常配置 - */ -export interface ExceptionConfig { - enabled: boolean; - logLevel: 'debug' | 'info' | 'warn' | 'error' | 'fatal'; - reportLevel: 'error' | 'fatal'; - includeStackTrace: boolean; - includeRequest: boolean; - includeResponse: boolean; - includeUser: boolean; - includeEnvironment: boolean; - sanitizeData: boolean; - maxMessageLength: number; - maxStackTraceLength: number; - rateLimit: { - enabled: boolean; - maxRequests: number; - windowMs: number; - }; - reporting: { - enabled: boolean; - providers: string[]; - filters: string[]; - }; -} - -/** - * 异常装饰器选项 - */ -export interface ExceptionOptions { - /** - * 异常类型 - */ - type?: ExceptionType; - - /** - * 严重程度 - */ - severity?: ExceptionSeverity; - - /** - * 是否记录 - */ - log?: boolean; - - /** - * 是否上报 - */ - report?: boolean; - - /** - * 自定义消息 - */ - message?: string; - - /** - * 状态码 - */ - statusCode?: number; - - /** - * 错误码 - */ - code?: string; - - /** - * 是否包含堆栈跟踪 - */ - includeStackTrace?: boolean; - - /** - * 是否包含请求信息 - */ - includeRequest?: boolean; - - /** - * 是否包含响应信息 - */ - includeResponse?: boolean; - - /** - * 是否包含用户信息 - */ - includeUser?: boolean; - - /** - * 是否包含环境信息 - */ - includeEnvironment?: boolean; - - /** - * 是否清理敏感数据 - */ - sanitizeData?: boolean; - - /** - * 元数据 - */ - meta?: Record; -} - -/** - * 异常过滤器接口 - */ -export interface ExceptionFilterInterface { - /** - * 判断是否应该处理该异常 - * @param exception 异常对象 - * @returns 是否应该处理 - */ - shouldHandle(exception: any): boolean; - - /** - * 处理异常 - * @param exception 异常对象 - * @param context 上下文 - * @returns 处理结果 - */ - handle(exception: any, context?: any): Promise; -} - -/** - * 异常上报接口 - */ -export interface ExceptionReporterInterface { - /** - * 上报异常 - * @param exception 异常对象 - * @param context 上下文 - * @returns 上报结果 - */ - report(exception: any, context?: any): Promise; - - /** - * 批量上报异常 - * @param exceptions 异常数组 - * @param context 上下文 - * @returns 上报结果 - */ - reportBatch( - exceptions: Array<{ exception: any; context?: any }>, - ): Promise; - - /** - * 检查是否应该上报 - * @param exception 异常对象 - * @returns 是否应该上报 - */ - shouldReport(exception: any): boolean; -} - -/** - * 异常统计接口 - */ -export interface ExceptionStatsInterface { - /** - * 记录异常统计 - * @param exception 异常对象 - * @param context 上下文 - */ - record(exception: any, context?: any): void; - - /** - * 获取异常统计 - * @param timeRange 时间范围 - * @returns 统计信息 - */ - getStats(timeRange?: { start: Date; end: Date }): ExceptionStats; - - /** - * 重置统计 - */ - reset(): void; -} - -/** - * 异常统计信息 - */ -export interface ExceptionStats { - total: number; - byType: Record; - bySeverity: Record; - byTime: Array<{ time: Date; count: number }>; - topExceptions: Array<{ message: string; count: number; lastOccurred: Date }>; - rate: number; // 异常率 - trend: 'increasing' | 'decreasing' | 'stable'; -} diff --git a/src/common/exception/exception.module.ts b/src/common/exception/exception.module.ts deleted file mode 100644 index 37f09c89..00000000 --- a/src/common/exception/exception.module.ts +++ /dev/null @@ -1,94 +0,0 @@ -import { Module, Global } from '@nestjs/common'; -import { ConfigModule, ConfigService } from '@nestjs/config'; -import { ExceptionService } from './exception.service'; -import { - ExceptionFilterInterface, - ExceptionReporterInterface, - ExceptionStatsInterface, -} from './exception.interface'; - -/** - * 异常处理模块 - * 基于 NestJS 官方示例实现 - * 参考: https://docs.nestjs.cn/fundamentals/exception-filters - * 对应 Java: 异常处理配置 - */ -@Global() -@Module({ - imports: [ConfigModule], - providers: [ - { - provide: 'EXCEPTION_FILTER_PROVIDER', - useFactory: (configService: ConfigService) => { - // 这里会根据配置选择具体的异常过滤器实现 - // 默认使用全局异常过滤器 - return { - async catch(exception: any, context: any): Promise { - console.error('[EXCEPTION_FILTER]', exception.message, context); - }, - async handle(exception: any, context: any): Promise { - return { - statusCode: 500, - message: exception.message || 'Internal server error', - timestamp: new Date().toISOString(), - path: context?.request?.url, - }; - }, - }; - }, - inject: [ConfigService], - }, - { - provide: 'EXCEPTION_REPORTER_PROVIDER', - useFactory: (configService: ConfigService) => { - // 异常上报实现 - return { - async report(exception: any, context?: any): Promise { - console.error('[EXCEPTION_REPORTER]', exception.message, context); - }, - async reportError(error: Error, context?: any): Promise { - console.error( - '[EXCEPTION_REPORTER]', - error.message, - error.stack, - context, - ); - }, - }; - }, - inject: [ConfigService], - }, - { - provide: 'EXCEPTION_STATS_PROVIDER', - useFactory: (configService: ConfigService) => { - // 异常统计实现 - const stats = { - total: 0, - byType: new Map(), - byTime: new Map(), - }; - return { - async record(exception: any): Promise { - stats.total++; - const type = exception.constructor.name; - stats.byType.set(type, (stats.byType.get(type) || 0) + 1); - - const hour = new Date().toISOString().substring(0, 13); - stats.byTime.set(hour, (stats.byTime.get(hour) || 0) + 1); - }, - async getStats(): Promise { - return { - total: stats.total, - byType: Object.fromEntries(stats.byType), - byTime: Object.fromEntries(stats.byTime), - }; - }, - }; - }, - inject: [ConfigService], - }, - ExceptionService, - ], - exports: [ExceptionService], -}) -export class ExceptionModule {} diff --git a/src/common/exception/exception.service.ts b/src/common/exception/exception.service.ts deleted file mode 100644 index b342f1c4..00000000 --- a/src/common/exception/exception.service.ts +++ /dev/null @@ -1,537 +0,0 @@ -import { Injectable, Inject, Logger } from '@nestjs/common'; -import type { - ExceptionInterface, - ExceptionResult, - ExceptionResponse, - ExceptionContext, - ExceptionOptions, - ExceptionFilterInterface, - ExceptionReporterInterface, - ExceptionStatsInterface, -} from './exception.interface'; -import { ExceptionType, ExceptionSeverity } from './exception.interface'; - -/** - * 异常服务 - * 基于 NestJS 官方示例实现 - * 参考: https://docs.nestjs.cn/fundamentals/exception-filters - * 对应 Java: 异常处理服务 - */ -@Injectable() -export class ExceptionService implements ExceptionInterface { - private readonly logger = new Logger(ExceptionService.name); - - constructor( - @Inject('EXCEPTION_FILTER_PROVIDER') - private readonly exceptionFilter: ExceptionFilterInterface, - @Inject('EXCEPTION_REPORTER_PROVIDER') - private readonly exceptionReporter: ExceptionReporterInterface, - @Inject('EXCEPTION_STATS_PROVIDER') - private readonly exceptionStats: ExceptionStatsInterface, - ) {} - - /** - * 处理异常 - */ - async handle(exception: any, context?: any): Promise { - try { - // 记录异常统计 - this.exceptionStats.record(exception, context); - - // 判断是否应该处理 - if (!this.exceptionFilter.shouldHandle(exception)) { - return { - success: false, - response: this.format(exception, context), - logged: false, - reported: false, - handled: false, - }; - } - - // 处理异常 - const result = await this.exceptionFilter.handle(exception, context); - - // 记录异常 - if (this.shouldLog(exception)) { - await this.log(exception, context); - result.logged = true; - } - - // 上报异常 - if (this.shouldReport(exception)) { - const reported = await this.exceptionReporter.report( - exception, - context, - ); - result.reported = reported; - } - - result.handled = true; - return result; - } catch (error) { - this.logger.error('Failed to handle exception', error); - return { - success: false, - response: this.format(exception, context), - logged: false, - reported: false, - handled: false, - }; - } - } - - /** - * 记录异常 - */ - async log(exception: any, context?: any): Promise { - try { - const type = this.getType(exception); - const severity = this.getSeverity(exception); - const message = this.getMessage(exception); - const stack = this.getStackTrace(exception); - - const logData = { - type, - severity, - message, - stack, - context: this.sanitizeContext(context), - timestamp: new Date().toISOString(), - }; - - switch (severity) { - case ExceptionSeverity.CRITICAL: - this.logger.fatal(`Exception: ${message}`, logData); - break; - case ExceptionSeverity.HIGH: - this.logger.error(`Exception: ${message}`, logData); - break; - case ExceptionSeverity.MEDIUM: - this.logger.warn(`Exception: ${message}`, logData); - break; - case ExceptionSeverity.LOW: - this.logger.log(`Exception: ${message}`, logData); - break; - default: - this.logger.debug(`Exception: ${message}`, logData); - } - } catch (error) { - this.logger.error('Failed to log exception', error); - } - } - - /** - * 格式化异常响应 - */ - format(exception: any, context?: any): ExceptionResponse { - const type = this.getType(exception); - const severity = this.getSeverity(exception); - const message = this.getMessage(exception); - const statusCode = this.getStatusCode(exception); - const code = this.getCode(exception); - - const response: ExceptionResponse = { - statusCode, - message, - error: this.getErrorName(exception), - timestamp: new Date().toISOString(), - type, - severity, - code, - }; - - // 添加请求信息 - if (context?.request) { - response.path = context.request.url; - response.method = context.request.method; - } - - // 添加追踪信息 - if (context?.trace) { - response.traceId = context.trace.traceId; - response.spanId = context.trace.spanId; - response.correlationId = context.trace.correlationId; - } - - // 添加详细信息 - if (this.shouldIncludeDetails(exception)) { - response.details = this.getDetails(exception); - } - - return response; - } - - /** - * 判断异常类型 - */ - getType(exception: any): ExceptionType { - if (exception.name) { - const name = exception.name.toLowerCase(); - - if (name.includes('validation') || name.includes('badrequest')) { - return ExceptionType.VALIDATION; - } - if (name.includes('unauthorized') || name.includes('authentication')) { - return ExceptionType.AUTHENTICATION; - } - if (name.includes('forbidden') || name.includes('authorization')) { - return ExceptionType.AUTHORIZATION; - } - if (name.includes('notfound')) { - return ExceptionType.NOT_FOUND; - } - if (name.includes('conflict')) { - return ExceptionType.CONFLICT; - } - if (name.includes('timeout')) { - return ExceptionType.TIMEOUT; - } - if (name.includes('ratelimit')) { - return ExceptionType.RATE_LIMIT; - } - if (name.includes('database') || name.includes('db')) { - return ExceptionType.DATABASE; - } - if (name.includes('cache')) { - return ExceptionType.CACHE; - } - if (name.includes('network') || name.includes('connection')) { - return ExceptionType.NETWORK; - } - if (name.includes('external') || name.includes('api')) { - return ExceptionType.EXTERNAL_API; - } - if (name.includes('business')) { - return ExceptionType.BUSINESS; - } - if (name.includes('system')) { - return ExceptionType.SYSTEM; - } - } - - if (exception.statusCode) { - switch (exception.statusCode) { - case 400: - return ExceptionType.BAD_REQUEST; - case 401: - return ExceptionType.AUTHENTICATION; - case 403: - return ExceptionType.AUTHORIZATION; - case 404: - return ExceptionType.NOT_FOUND; - case 409: - return ExceptionType.CONFLICT; - case 429: - return ExceptionType.RATE_LIMIT; - case 500: - return ExceptionType.INTERNAL_SERVER_ERROR; - case 503: - return ExceptionType.SERVICE_UNAVAILABLE; - default: - return ExceptionType.UNKNOWN; - } - } - - return ExceptionType.UNKNOWN; - } - - /** - * 获取异常严重程度 - */ - getSeverity(exception: any): ExceptionSeverity { - const type = this.getType(exception); - - switch (type) { - case ExceptionType.INTERNAL_SERVER_ERROR: - case ExceptionType.SYSTEM: - return ExceptionSeverity.CRITICAL; - case ExceptionType.AUTHENTICATION: - case ExceptionType.AUTHORIZATION: - case ExceptionType.DATABASE: - case ExceptionType.NETWORK: - return ExceptionSeverity.HIGH; - case ExceptionType.VALIDATION: - case ExceptionType.BAD_REQUEST: - case ExceptionType.CONFLICT: - case ExceptionType.CACHE: - case ExceptionType.EXTERNAL_API: - return ExceptionSeverity.MEDIUM; - case ExceptionType.NOT_FOUND: - case ExceptionType.TIMEOUT: - case ExceptionType.RATE_LIMIT: - case ExceptionType.BUSINESS: - return ExceptionSeverity.LOW; - default: - return ExceptionSeverity.MEDIUM; - } - } - - /** - * 判断是否应该记录 - */ - shouldLog(exception: any): boolean { - const severity = this.getSeverity(exception); - return severity !== ExceptionSeverity.LOW; - } - - /** - * 判断是否应该上报 - */ - shouldReport(exception: any): boolean { - const severity = this.getSeverity(exception); - return ( - severity === ExceptionSeverity.HIGH || - severity === ExceptionSeverity.CRITICAL - ); - } - - // ==================== 工具方法 ==================== - - /** - * 获取异常消息 - */ - private getMessage(exception: any): string { - if (exception.message) { - return exception.message; - } - if (typeof exception === 'string') { - return exception; - } - return 'Unknown error occurred'; - } - - /** - * 获取异常名称 - */ - private getErrorName(exception: any): string { - if (exception.name) { - return exception.name; - } - if (exception.constructor?.name) { - return exception.constructor.name; - } - return 'Error'; - } - - /** - * 获取状态码 - */ - private getStatusCode(exception: any): number { - if (exception.statusCode) { - return exception.statusCode; - } - if (exception.status) { - return exception.status; - } - - const type = this.getType(exception); - switch (type) { - case ExceptionType.VALIDATION: - case ExceptionType.BAD_REQUEST: - return 400; - case ExceptionType.AUTHENTICATION: - return 401; - case ExceptionType.AUTHORIZATION: - return 403; - case ExceptionType.NOT_FOUND: - return 404; - case ExceptionType.CONFLICT: - return 409; - case ExceptionType.RATE_LIMIT: - return 429; - case ExceptionType.SERVICE_UNAVAILABLE: - return 503; - case ExceptionType.INTERNAL_SERVER_ERROR: - default: - return 500; - } - } - - /** - * 获取错误码 - */ - private getCode(exception: any): string | undefined { - if (exception.code) { - return exception.code; - } - if (exception.errorCode) { - return exception.errorCode; - } - return undefined; - } - - /** - * 获取堆栈跟踪 - */ - private getStackTrace(exception: any): string | undefined { - if (exception.stack) { - return exception.stack; - } - return undefined; - } - - /** - * 获取详细信息 - */ - private getDetails(exception: any): any { - const details: any = {}; - - if (exception.details) { - details.details = exception.details; - } - - if (exception.cause) { - details.cause = exception.cause; - } - - if (exception.context) { - details.context = exception.context; - } - - return Object.keys(details).length > 0 ? details : undefined; - } - - /** - * 判断是否应该包含详细信息 - */ - private shouldIncludeDetails(exception: any): boolean { - const severity = this.getSeverity(exception); - return ( - severity === ExceptionSeverity.HIGH || - severity === ExceptionSeverity.CRITICAL - ); - } - - /** - * 清理上下文 - */ - private sanitizeContext(context: any): any { - if (!context) return context; - - const sanitized = { ...context }; - - // 清理敏感信息 - if (sanitized.request) { - sanitized.request = this.sanitizeRequest(sanitized.request); - } - - if (sanitized.user) { - sanitized.user = this.sanitizeUser(sanitized.user); - } - - return sanitized; - } - - /** - * 清理请求信息 - */ - private sanitizeRequest(request: any): any { - if (!request) return request; - - const sanitized = { ...request }; - - // 清理敏感头部 - if (sanitized.headers) { - const sensitiveHeaders = [ - 'authorization', - 'cookie', - 'x-api-key', - 'x-auth-token', - ]; - for (const header of sensitiveHeaders) { - if (sanitized.headers[header]) { - sanitized.headers[header] = '[REDACTED]'; - } - } - } - - // 清理敏感请求体 - if (sanitized.body) { - sanitized.body = this.sanitizeBody(sanitized.body); - } - - return sanitized; - } - - /** - * 清理用户信息 - */ - private sanitizeUser(user: any): any { - if (!user) return user; - - const sanitized = { ...user }; - - // 清理敏感用户信息 - const sensitiveFields = ['password', 'token', 'secret', 'key']; - for (const field of sensitiveFields) { - if (sanitized[field]) { - sanitized[field] = '[REDACTED]'; - } - } - - return sanitized; - } - - /** - * 清理请求体 - */ - private sanitizeBody(body: any): any { - if (!body) return body; - - if (typeof body === 'string') { - try { - const parsed = JSON.parse(body); - return this.sanitizeObject(parsed); - } catch { - return body; - } - } - - if (typeof body === 'object') { - return this.sanitizeObject(body); - } - - return body; - } - - /** - * 清理对象 - */ - private sanitizeObject(obj: any): any { - if (!obj || typeof obj !== 'object') return obj; - - const sanitized = { ...obj }; - const sensitiveFields = ['password', 'token', 'secret', 'key', 'auth']; - - for (const field of sensitiveFields) { - if (sanitized[field]) { - sanitized[field] = '[REDACTED]'; - } - } - - return sanitized; - } - - // ==================== 装饰器支持 ==================== - - /** - * 异常装饰器实现 - */ - async handleWithOptions( - options: ExceptionOptions, - fn: () => T | Promise, - ): Promise { - try { - return await fn(); - } catch (error) { - const result = await this.handle(error, options); - - if (result.handled) { - throw error; - } - - return result.response as any; - } - } -} diff --git a/src/common/filters/validation-exception.filter.ts b/src/common/filters/validation-exception.filter.ts deleted file mode 100644 index d3300065..00000000 --- a/src/common/filters/validation-exception.filter.ts +++ /dev/null @@ -1,100 +0,0 @@ -import { ExceptionFilter, Catch, ArgumentsHost, BadRequestException } from '@nestjs/common'; -import type { ILanguageService } from '@wwjCommon/language/language.interface'; -import { Inject } from '@nestjs/common'; - -/** - * 验证异常过滤器 - * 将class-validator的错误转换为多语言消息 - * 符合NestJS规范的异常处理方式 - */ -@Catch(BadRequestException) -export class ValidationExceptionFilter implements ExceptionFilter { - constructor(@Inject('ILanguageService') private readonly languageService: ILanguageService) {} - - async catch(exception: BadRequestException, host: ArgumentsHost) { - const ctx = host.switchToHttp(); - const response = ctx.getResponse(); - const request = ctx.getRequest(); - - const status = exception.getStatus(); - const exceptionResponse = exception.getResponse() as any; - - // 如果是验证错误,尝试转换为多语言消息 - if (exceptionResponse.message && Array.isArray(exceptionResponse.message)) { - const translatedMessages = await this.translateValidationMessages(exceptionResponse.message); - - response.status(status).json({ - code: 0, - msg: translatedMessages.join('; '), - data: null, - timestamp: new Date().toISOString(), - }); - } else { - // 其他错误直接返回 - response.status(status).json({ - code: 0, - msg: exceptionResponse.message || '请求参数错误', - data: null, - timestamp: new Date().toISOString(), - }); - } - } - - /** - * 翻译验证错误消息 - */ - private async translateValidationMessages(messages: string[]): Promise { - const translatedMessages: string[] = []; - - for (const message of messages) { - try { - // 尝试从验证错误消息中提取字段名和规则 - const fieldMatch = message.match(/^(\w+)\s+(.+)$/); - if (fieldMatch) { - const [, field, rule] = fieldMatch; - - // 根据字段名和规则获取多语言消息 - let translatedMessage: string; - - if (rule.includes('should not be empty')) { - translatedMessage = await this.languageService.getValidateMessage( - `validate_user.${field}_require`, - { attribute: field } - ); - } else if (rule.includes('must be longer than')) { - const minMatch = rule.match(/must be longer than (\d+)/); - const min = minMatch ? minMatch[1] : '6'; - translatedMessage = await this.languageService.getValidateMessage( - `validate_user.${field}_min`, - { attribute: field, min } - ); - } else if (rule.includes('must be shorter than')) { - const maxMatch = rule.match(/must be shorter than (\d+)/); - const max = maxMatch ? maxMatch[1] : '20'; - translatedMessage = await this.languageService.getValidateMessage( - `validate_user.${field}_max`, - { attribute: field, max } - ); - } else if (rule.includes('must be an email')) { - translatedMessage = await this.languageService.getValidateMessage( - `validate_user.${field}_format`, - { attribute: field } - ); - } else { - // 默认使用原始消息 - translatedMessage = message; - } - - translatedMessages.push(translatedMessage); - } else { - translatedMessages.push(message); - } - } catch (error) { - // 如果翻译失败,使用原始消息 - translatedMessages.push(message); - } - } - - return translatedMessages; - } -} diff --git a/src/common/init/init.module.ts b/src/common/init/init.module.ts deleted file mode 100644 index 378043f9..00000000 --- a/src/common/init/init.module.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Module, Global } from '@nestjs/common'; -import { ConfigModule } from '@nestjs/config'; -import { InitService } from './init.service'; - -/** - * 初始化模块 - 基础设施层 - * 提供应用启动初始化和健康检查功能 - */ -@Global() -@Module({ - imports: [ConfigModule], - providers: [InitService], - exports: [InitService], -}) -export class InitModule {} diff --git a/src/common/init/init.service.ts b/src/common/init/init.service.ts deleted file mode 100644 index 88ce7f7f..00000000 --- a/src/common/init/init.service.ts +++ /dev/null @@ -1,125 +0,0 @@ -import { - Injectable, - Logger, - OnModuleInit, - OnModuleDestroy, -} from '@nestjs/common'; -import { ConfigService } from '@nestjs/config'; - -/** - * 初始化服务 - * 提供应用启动初始化和健康检查功能 - */ -@Injectable() -export class InitService implements OnModuleInit, OnModuleDestroy { - private readonly logger = new Logger(InitService.name); - private isHealthy = false; - - constructor(private readonly configService: ConfigService) {} - - /** - * 模块初始化 - */ - async onModuleInit() { - this.logger.log('Initializing application...'); - - try { - await this.initializeServices(); - await this.performHealthCheck(); - - this.isHealthy = true; - this.logger.log('Application initialized successfully'); - } catch (error) { - this.logger.error('Failed to initialize application', error); - throw error; - } - } - - /** - * 模块销毁 - */ - async onModuleDestroy() { - this.logger.log('Shutting down application...'); - - try { - await this.cleanup(); - this.logger.log('Application shutdown completed'); - } catch (error) { - this.logger.error('Error during application shutdown', error); - } - } - - /** - * 初始化服务 - */ - private async initializeServices() { - // 这里可以初始化各种服务 - // 例如:数据库连接、Redis 连接、外部服务等 - this.logger.log('Initializing services...'); - - // 模拟初始化过程 - await new Promise((resolve) => setTimeout(resolve, 100)); - - this.logger.log('Services initialized'); - } - - /** - * 执行健康检查 - */ - private async performHealthCheck() { - this.logger.log('Performing health check...'); - - const healthConfig = this.configService.get('health'); - - if (healthConfig.startupCheckEnabled) { - // 这里可以检查各种依赖服务的健康状态 - // 例如:数据库、Redis、外部 API 等 - - const timeout = healthConfig.startupTimeoutMs || 5000; - const startTime = Date.now(); - - // 模拟健康检查 - await new Promise((resolve) => setTimeout(resolve, 100)); - - const duration = Date.now() - startTime; - - if (duration > timeout) { - throw new Error(`Health check timeout after ${duration}ms`); - } - - this.logger.log(`Health check completed in ${duration}ms`); - } - } - - /** - * 清理资源 - */ - private async cleanup() { - // 这里可以清理各种资源 - // 例如:关闭数据库连接、清理缓存等 - this.logger.log('Cleaning up resources...'); - - // 模拟清理过程 - await new Promise((resolve) => setTimeout(resolve, 100)); - - this.logger.log('Resources cleaned up'); - } - - /** - * 获取健康状态 - */ - getHealthStatus() { - return { - status: this.isHealthy ? 'healthy' : 'unhealthy', - timestamp: new Date().toISOString(), - uptime: process.uptime(), - }; - } - - /** - * 检查是否健康 - */ - isApplicationHealthy(): boolean { - return this.isHealthy; - } -} diff --git a/src/common/interceptors/interceptors.module.ts b/src/common/interceptors/interceptors.module.ts deleted file mode 100644 index 13437ff0..00000000 --- a/src/common/interceptors/interceptors.module.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Module } from '@nestjs/common'; -import { RequestParameterInterceptor } from './request-parameter.interceptor'; -import { MethodCallInterceptor } from './method-call.interceptor'; - -/** - * 拦截器模块 - * 基于 NestJS 实现 Java 风格的 AOP 切面 - * 对应 Java: Aspect 配置 - */ -@Module({ - providers: [RequestParameterInterceptor, MethodCallInterceptor], - exports: [RequestParameterInterceptor, MethodCallInterceptor], -}) -export class InterceptorsModule {} diff --git a/src/common/interceptors/method-call.interceptor.ts b/src/common/interceptors/method-call.interceptor.ts deleted file mode 100644 index d92e86f9..00000000 --- a/src/common/interceptors/method-call.interceptor.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { - Injectable, - NestInterceptor, - ExecutionContext, - CallHandler, - Logger, -} from '@nestjs/common'; -import { Observable } from 'rxjs'; -import { tap } from 'rxjs/operators'; - -/** - * 方法调用监控拦截器 - * 基于 NestJS 实现 Java 风格的 MethodCallStackAspect - * 对应 Java: MethodCallStackAspect - */ -@Injectable() -export class MethodCallInterceptor implements NestInterceptor { - private readonly logger = new Logger(MethodCallInterceptor.name); - - intercept(context: ExecutionContext, next: CallHandler): Observable { - const className = context.getClass().name; - const handler = context.getHandler(); - const methodName = handler.name; - const startTime = Date.now(); - - // 记录方法调用开始 - this.logger.debug(`${className} -> ${methodName}() begin ->`); - - return next.handle().pipe( - tap({ - next: (data) => { - const endTime = Date.now(); - const duration = endTime - startTime; - - // 记录方法调用结束 - this.logger.debug( - `${className} -> ${methodName}() ended result => ${JSON.stringify(data)} (${duration}ms)`, - ); - }, - error: (error) => { - const endTime = Date.now(); - const duration = endTime - startTime; - - // 记录方法调用异常 - this.logger.error( - `${className} -> ${methodName}() error => ${error.message} (${duration}ms)`, - error.stack, - ); - }, - }), - ); - } -} diff --git a/src/common/interceptors/request-parameter.interceptor.ts b/src/common/interceptors/request-parameter.interceptor.ts deleted file mode 100644 index dd848eb9..00000000 --- a/src/common/interceptors/request-parameter.interceptor.ts +++ /dev/null @@ -1,207 +0,0 @@ -import { - Injectable, - NestInterceptor, - ExecutionContext, - CallHandler, - Logger, -} from '@nestjs/common'; -import { Reflector } from '@nestjs/core'; -import { Observable } from 'rxjs'; -import { tap } from 'rxjs/operators'; - -/** - * 请求参数处理拦截器 - * 基于 NestJS 实现 Java 风格的 ControllerRequestAspect - * 对应 Java: ControllerRequestAspect - */ -@Injectable() -export class RequestParameterInterceptor implements NestInterceptor { - private readonly logger = new Logger(RequestParameterInterceptor.name); - - constructor(private reflector: Reflector) {} - - intercept(context: ExecutionContext, next: CallHandler): Observable { - const request = context.switchToHttp().getRequest(); - const handler = context.getHandler(); - const className = context.getClass().name; - const methodName = handler.name; - - // 记录请求开始 - this.logger.debug(`Before: ${className} -> ${methodName}()`); - - // 处理请求参数 - this.processRequestParameters(request); - - return next.handle().pipe( - tap((data) => { - // 记录请求结束 - this.logger.debug( - `${className} -> ${methodName}() ended result => ${JSON.stringify(data)}`, - ); - }), - ); - } - - /** - * 处理请求参数 - * @param request 请求对象 - */ - private processRequestParameters(request: any): void { - try { - // 处理查询参数 - this.processQueryParameters(request); - - // 处理请求体参数 - this.processBodyParameters(request); - - // 处理路径参数 - this.processPathParameters(request); - } catch (error) { - this.logger.error( - `Failed to process request parameters: ${error.message}`, - ); - } - } - - /** - * 处理查询参数 - * @param request 请求对象 - */ - private processQueryParameters(request: any): void { - const query = request.query; - if (!query || typeof query !== 'object') { - return; - } - - // 处理数组参数 - const processedQuery = this.processArrayParameters(query); - - // 下划线转驼峰 - const camelCaseQuery = this.toCamelCase(processedQuery); - - // 更新请求查询参数 - request.query = camelCaseQuery; - - this.logger.debug( - `Processed query parameters: ${JSON.stringify(camelCaseQuery)}`, - ); - } - - /** - * 处理请求体参数 - * @param request 请求对象 - */ - private processBodyParameters(request: any): void { - const body = request.body; - if (!body || typeof body !== 'object') { - return; - } - - // 处理数组参数 - const processedBody = this.processArrayParameters(body); - - // 下划线转驼峰 - const camelCaseBody = this.toCamelCase(processedBody); - - // 更新请求体参数 - request.body = camelCaseBody; - - this.logger.debug( - `Processed body parameters: ${JSON.stringify(camelCaseBody)}`, - ); - } - - /** - * 处理路径参数 - * @param request 请求对象 - */ - private processPathParameters(request: any): void { - const params = request.params; - if (!params || typeof params !== 'object') { - return; - } - - // 下划线转驼峰 - const camelCaseParams = this.toCamelCase(params); - - // 更新请求路径参数 - request.params = camelCaseParams; - - this.logger.debug( - `Processed path parameters: ${JSON.stringify(camelCaseParams)}`, - ); - } - - /** - * 处理数组参数 - * @param params 参数对象 - * @returns 处理后的参数对象 - */ - private processArrayParameters(params: any): any { - if (!params || typeof params !== 'object') { - return params; - } - - const processed: any = {}; - - for (const key in params) { - if (params.hasOwnProperty(key)) { - const value = params[key]; - - if (key.endsWith('[]')) { - // 处理数组参数 - const newKey = key.replace('[]', ''); - if (Array.isArray(value)) { - processed[newKey] = value; - } else if (typeof value === 'string') { - // 逗号分隔的字符串转换为数组 - processed[newKey] = value.split(',').map((item) => item.trim()); - } else { - processed[newKey] = [value]; - } - } else { - processed[key] = value; - } - } - } - - return processed; - } - - /** - * 下划线转驼峰 - * @param obj 要转换的对象 - * @returns 转换后的对象 - */ - private toCamelCase(obj: any): any { - if (obj === null || obj === undefined) { - return obj; - } - - if (Array.isArray(obj)) { - return obj.map((item) => this.toCamelCase(item)); - } - - if (typeof obj === 'object') { - const result: any = {}; - for (const key in obj) { - if (obj.hasOwnProperty(key)) { - const camelKey = this.snakeToCamel(key); - result[camelKey] = this.toCamelCase(obj[key]); - } - } - return result; - } - - return obj; - } - - /** - * 下划线转驼峰 - * @param str 下划线字符串 - * @returns 驼峰字符串 - */ - private snakeToCamel(str: string): string { - return str.replace(/_([a-z])/g, (match, letter) => letter.toUpperCase()); - } -} diff --git a/src/common/language/language.example.ts b/src/common/language/language.example.ts deleted file mode 100644 index 7bf2e79f..00000000 --- a/src/common/language/language.example.ts +++ /dev/null @@ -1,116 +0,0 @@ -import { LanguageService } from './language.service'; -import { ConfigService } from '@nestjs/config'; - -async function bootstrap() { - // 模拟 NestJS 应用启动和 LanguageUtils 实例化 - const mockConfigService = { - get: (key: string, defaultValue: any) => { - if (key === 'app.supportedLocales') return ['zh_CN', 'en_US']; - if (key === 'app.defaultLanguage') return 'zh_CN'; - return defaultValue; - }, - } as ConfigService; - - const languageService = new LanguageService(mockConfigService); - // 模拟初始化,实际由 NestJS 模块管理 - // await languageService.initializeLanguagePacks(); - - console.log('--- LanguageService 使用示例 ---'); - - // 1. 获取通用API消息 (默认模块: common, 默认类型: api) - const commonApiMessage = await languageService.getApiMessage('success'); - console.log(`通用API消息 (success): ${commonApiMessage}`); // 预期: 操作成功 - - // 2. 获取通用字典数据 (默认模块: common, 类型: dict) - const commonDictMessage = await languageService.getDictData('dict_user.status_on'); - console.log(`通用字典数据 (dict_user.status_on): ${commonDictMessage}`); // 预期: 正常 - - // 3. 获取通用验证器消息 (默认模块: common, 类型: validate) - const commonValidateMessage = await languageService.getValidateMessage('validate_user.username_require'); - console.log(`通用验证器消息 (validate_user.username_require): ${commonValidateMessage}`); // 预期: 账号必须填写 - - // 4. 获取用户模块API消息 (模块: user, 类型: api) - const userApiMessage = await languageService.getApiMessage('create_success', undefined, 'user'); - console.log(`用户API消息 (user.create_success): ${userApiMessage}`); // 预期: 用户创建成功 - - // 5. 获取用户模块字典数据 (模块: user, 类型: dict) - const userDictMessage = await languageService.getDictData('user_type.admin', undefined, 'user'); - console.log(`用户字典数据 (user.user_type.admin): ${userDictMessage}`); // 预期: 管理员 - - // 6. 获取用户模块验证器消息 (模块: user, 类型: validate) - const userValidateMessage = await languageService.getValidateMessage('email_format_error', undefined, 'user'); - console.log(`用户验证器消息 (user.email_format_error): ${userValidateMessage}`); // 预期: 邮箱格式不正确 - - // 7. 获取带参数的消息 - const paramMessage = await languageService.getApiMessage('user_error', { name: '张三' }); - console.log(`带参数消息 (user_error): ${paramMessage}`); // 预期: 账号或密码错误 (如果user_error在common/api.json中) - - // 8. 批量获取消息 - const batchMessages = await languageService.getBatchMessages(['success', 'fail'], 'common', 'api'); - console.log('批量获取消息 (common.api):', batchMessages); // 预期: { success: '操作成功', fail: '操作失败' } - - // 9. 切换语言并获取消息 - languageService.setLanguage('en_US'); - const enApiMessage = await languageService.getApiMessage('success'); - console.log(`英文API消息 (success): ${enApiMessage}`); // 预期: Operation successful - - // 10. 重新加载语言包 - await languageService.reloadLanguagePack('zh_CN'); - const reloadedMessage = await languageService.getApiMessage('success'); - console.log(`重新加载后消息 (success): ${reloadedMessage}`); // 预期: 操作成功 - - // 11. 场景化验证示例 - console.log('\n--- 场景化验证示例 ---'); - - // 模拟用户数据 - const userData = { - username: 'testuser', - password: '123456', - real_name: '测试用户', - email: 'test@example.com', - }; - - // 验证添加场景 - console.log('添加场景验证数据:', userData); - - // 验证编辑场景 - console.log('编辑场景验证数据:', userData); - - // 12. 分组验证消息示例 - console.log('\n--- 分组验证消息示例 ---'); - - const menuValidation = await languageService.getValidateMessage('validate_menu.menu_name_require'); - console.log('菜单验证消息:', menuValidation); // 预期: 菜单名称必须填写 - - const roleValidation = await languageService.getValidateMessage('validate_role.role_name_require'); - console.log('角色验证消息:', roleValidation); // 预期: 角色名称必须填写 - - const siteValidation = await languageService.getValidateMessage('validate_site.site_name_require'); - console.log('站点验证消息:', siteValidation); // 预期: 网站名称必须填写 - - // 13. 字典数据示例 - console.log('\n--- 字典数据示例 ---'); - - const appDict = await languageService.getDictData('dict_app.type_admin'); - console.log('应用类型字典:', appDict); // 预期: 平台管理端 - - const menuDict = await languageService.getDictData('dict_menu.type_list'); - console.log('菜单类型字典:', menuDict); // 预期: 目录 - - const payDict = await languageService.getDictData('dict_pay.type_wechatpay'); - console.log('支付类型字典:', payDict); // 预期: 微信支付 - - // 14. 参数替换示例 - console.log('\n--- 参数替换示例 ---'); - - const paramMessage1 = await languageService.getValidateMessage('common.minLength', { min: 6 }); - console.log('最小长度验证:', paramMessage1); // 预期: 长度不能少于6个字符 - - const paramMessage2 = await languageService.getValidateMessage('common.maxLength', { max: 20 }); - console.log('最大长度验证:', paramMessage2); // 预期: 长度不能超过20个字符 - - const paramMessage3 = await languageService.getValidateMessage('common.between', { min: 1, max: 100 }); - console.log('范围验证:', paramMessage3); // 预期: 必须在1到100之间 -} - -bootstrap(); diff --git a/src/common/language/language.interface.ts b/src/common/language/language.interface.ts deleted file mode 100644 index b44d8961..00000000 --- a/src/common/language/language.interface.ts +++ /dev/null @@ -1,94 +0,0 @@ -/** - * 语言服务接口 - * 符合NestJS规范的接口定义 - * 对应PHP: think\Lang 接口 - * 对应Java: MessageSource 接口 - */ -export interface ILanguageService { - /** - * 获取消息 - * @param key 消息键 - * @param args 参数 - * @param module 模块名 - * @param type 类型 (api|dict|validate) - * @param language 语言 - * @returns 消息内容 - */ - getMessage(key: string, args?: any, module?: string, type?: string, language?: string): Promise; - - /** - * 获取API消息 - * @param key 消息键 - * @param args 参数 - * @param module 模块名 - * @param language 语言 - * @returns API消息 - */ - getApiMessage(key: string, args?: any, module?: string, language?: string): Promise; - - /** - * 获取字典数据 - * @param key 字典键 - * @param args 参数 - * @param module 模块名 - * @param language 语言 - * @returns 字典数据 - */ - getDictData(key: string, args?: any, module?: string, language?: string): Promise; - - /** - * 获取验证器消息 - * @param key 验证器键 - * @param args 参数 - * @param module 模块名 - * @param language 语言 - * @returns 验证器消息 - */ - getValidateMessage(key: string, args?: any, module?: string, language?: string): Promise; - - /** - * 批量获取消息 - * @param keys 消息键数组 - * @param module 模块名 - * @param type 类型 - * @param language 语言 - * @returns 消息对象 - */ - getBatchMessages(keys: string[], module?: string, type?: string, language?: string): Promise>; - - /** - * 获取当前语言 - * @returns 当前语言 - */ - getCurrentLanguage(): string; - - /** - * 设置语言 - * @param language 语言代码 - */ - setLanguage(language: string): void; - - /** - * 获取支持的语言列表 - * @returns 支持的语言列表 - */ - getSupportedLanguages(): string[]; - - /** - * 检查语言是否支持 - * @param language 语言代码 - * @returns 是否支持 - */ - isLanguageSupported(language: string): boolean; - - /** - * 重新加载语言包 - * @param language 语言代码 - */ - reloadLanguagePack(language: string): Promise; - - /** - * 重新加载所有语言包 - */ - reloadAllLanguagePacks(): Promise; -} diff --git a/src/common/language/language.module.ts b/src/common/language/language.module.ts deleted file mode 100644 index 380df710..00000000 --- a/src/common/language/language.module.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { Module, Global } from '@nestjs/common'; -import { LanguageService } from './language.service'; -import { ILanguageService } from './language.interface'; - -/** - * 语言模块 - * 符合NestJS规范的多语言支持 - * - * 功能: - * 1. 多语言支持 (API消息、字典数据、验证器消息) - * 2. 模块化语言包 (按模块、类型、语言组织) - * 3. 热重载支持 (开发环境) - * - * 使用方式: - * 1. 在需要多语言的模块中导入 - * 2. 通过依赖注入使用ILanguageService接口 - * 3. 配合ValidationExceptionFilter处理多语言验证错误 - */ -@Global() -@Module({ - providers: [ - { - provide: 'ILanguageService', - useClass: LanguageService, - }, - ], - exports: ['ILanguageService'], -}) -export class LanguageModule {} diff --git a/src/common/language/language.service.ts b/src/common/language/language.service.ts deleted file mode 100644 index df5cff5f..00000000 --- a/src/common/language/language.service.ts +++ /dev/null @@ -1,385 +0,0 @@ -import { Injectable, Logger } from '@nestjs/common'; -import { ConfigService } from '@nestjs/config'; -import { promises as fs } from 'fs'; -import * as path from 'path'; -import { ILanguageService } from './language.interface'; - -/** - * 语言服务 - * 基于 NestJS 实现模块化多语言支持 - * 符合NestJS规范的服务层实现 - * 对应PHP: think\Lang 类 - * 对应Java: MessageSource 实现 - */ -@Injectable() -export class LanguageService implements ILanguageService { - private readonly logger = new Logger(LanguageService.name); - private readonly languageCache = new Map>(); - private readonly moduleCache = new Map>(); // 记录已加载的模块 - - constructor(private readonly configService: ConfigService) { - this.initializeLanguagePacks(); - } - - /** - * 获取消息 - * @param key 消息键 - * @param args 参数 - * @param module 模块名 - * @param type 类型 (api|dict|validate) - * @param language 语言 - * @returns 消息内容 - */ - async getMessage(key: string, args?: any, module: string = 'common', type: string = 'api', language?: string): Promise { - try { - const currentLanguage = language || this.getCurrentLanguage(); - const cacheKey = `${type}.${module}.${key}`; - - // 确保模块已加载 - await this.ensureModuleLoaded(module, type, currentLanguage); - - const message = this.getMessageFromCache(cacheKey, currentLanguage); - - if (message && message !== key) { - // 支持参数替换 - if (args && typeof args === 'object') { - return this.replaceMessageParams(message, args); - } - return message; - } - - this.logger.warn(`未找到消息: ${key} (模块: ${module}, 类型: ${type}, 语言: ${currentLanguage})`); - return key; - } catch (error) { - this.logger.warn(`获取消息失败: ${key}`, error); - return key; - } - } - - /** - * 获取消息(实例方法) - * @param key 消息键 - * @param args 参数 - * @param module 模块名 - * @param type 类型 - * @param language 语言 - * @returns 消息内容 - */ - async get(key: string, args?: any, module: string = 'common', type: string = 'api', language?: string): Promise { - return await this.getMessage(key, args, module, type, language); - } - - /** - * 初始化语言包 - * 只加载通用语言包,其他模块按需加载 - */ - private async initializeLanguagePacks(): Promise { - try { - const supportedLanguages = this.getSupportedLanguages(); - for (const language of supportedLanguages) { - // 只加载通用模块 - await this.loadModuleLanguagePack('common', 'api', language); - await this.loadModuleLanguagePack('common', 'dict', language); - await this.loadModuleLanguagePack('common', 'validate', language); - } - this.logger.log('通用语言包初始化完成'); - } catch (error) { - this.logger.error('语言包初始化失败', error); - } - } - - /** - * 确保模块已加载 - * @param module 模块名 - * @param type 类型 - * @param language 语言 - */ - private async ensureModuleLoaded(module: string, type: string, language: string): Promise { - const moduleKey = `${module}.${type}`; - const languageKey = `${language}.${moduleKey}`; - - if (!this.moduleCache.has(language) || !this.moduleCache.get(language)!.has(moduleKey)) { - await this.loadModuleLanguagePack(module, type, language); - } - } - - /** - * 加载模块语言包 - * @param module 模块名 - * @param type 类型 (api|dict|validate) - * @param language 语言 - */ - private async loadModuleLanguagePack(module: string, type: string, language: string): Promise { - try { - const langDir = path.join(process.cwd(), 'src', 'lang', language); - const languagePack = new Map(); - - // 1. 加载通用语言包 - if (module !== 'common') { - await this.loadCommonLanguagePack(langDir, type, languagePack); - } - - // 2. 加载模块语言包 - await this.loadModuleSpecificPack(langDir, module, type, languagePack); - - // 3. 加载插件语言包 - await this.loadAddonLanguagePacks(langDir, type, languagePack); - - // 4. 缓存语言包 - if (!this.languageCache.has(language)) { - this.languageCache.set(language, new Map()); - } - - const languageCache = this.languageCache.get(language)!; - for (const [key, value] of languagePack) { - languageCache.set(key, value); - } - - // 5. 记录已加载的模块 - if (!this.moduleCache.has(language)) { - this.moduleCache.set(language, new Set()); - } - this.moduleCache.get(language)!.add(`${module}.${type}`); - - this.logger.log(`模块语言包加载完成: ${module}.${type} (${language})`); - } catch (error) { - this.logger.error(`加载模块语言包失败: ${module}.${type} (${language})`, error); - } - } - - /** - * 加载通用语言包 - */ - private async loadCommonLanguagePack(langDir: string, type: string, languagePack: Map): Promise { - const commonDir = path.join(langDir, 'common'); - const filePath = path.join(commonDir, `${type}.json`); - - try { - const content = await fs.readFile(filePath, 'utf8'); - const data = JSON.parse(content); - - // 合并到语言包,添加前缀 - for (const [key, value] of Object.entries(data)) { - languagePack.set(`${type}.common.${key}`, value); - } - } catch (error) { - this.logger.warn(`加载通用语言包失败: ${type}`, error); - } - } - - /** - * 加载模块特定语言包 - */ - private async loadModuleSpecificPack(langDir: string, module: string, type: string, languagePack: Map): Promise { - const moduleDir = path.join(langDir, module); - const filePath = path.join(moduleDir, `${type}.json`); - - try { - const content = await fs.readFile(filePath, 'utf8'); - const data = JSON.parse(content); - - // 合并到语言包,添加前缀 - for (const [key, value] of Object.entries(data)) { - languagePack.set(`${type}.${module}.${key}`, value); - } - } catch (error) { - this.logger.warn(`加载模块语言包失败: ${module}.${type}`, error); - } - } - - /** - * 加载插件语言包 - */ - private async loadAddonLanguagePacks(langDir: string, type: string, languagePack: Map): Promise { - const addonsDir = path.join(langDir, 'addons'); - - try { - const addonDirs = await fs.readdir(addonsDir); - for (const addonDir of addonDirs) { - const addonPath = path.join(addonsDir, addonDir); - const stat = await fs.stat(addonPath); - - if (stat.isDirectory()) { - const filePath = path.join(addonPath, `${type}.json`); - try { - const content = await fs.readFile(filePath, 'utf8'); - const data = JSON.parse(content); - - // 合并到语言包,添加前缀 - for (const [key, value] of Object.entries(data)) { - languagePack.set(`${type}.addon.${addonDir}.${key}`, value); - } - } catch (error) { - this.logger.warn(`加载插件语言包失败: ${addonDir}.${type}`, error); - } - } - } - } catch (error) { - this.logger.warn(`扫描插件语言包失败: ${type}`, error); - } - } - - /** - * 合并语言数据 - */ - private mergeLanguageData(target: Map, source: Record): void { - for (const [key, value] of Object.entries(source)) { - target.set(key, value); - } - } - - /** - * 从缓存获取消息 - */ - private getMessageFromCache(key: string, language: string): string { - const languagePack = this.languageCache.get(language); - if (languagePack && languagePack.has(key)) { - return languagePack.get(key); - } - - return key; // 未找到,返回key作为fallback - } - - /** - * 替换消息参数 - * 对应 Java: MessageFormat.format() - */ - private replaceMessageParams(message: string, args: Record): string { - let result = message; - for (const [key, value] of Object.entries(args)) { - const placeholder = `{${key}}`; - result = result.replace(new RegExp(placeholder, 'g'), String(value)); - } - return result; - } - - /** - * 获取当前语言 - * @returns 当前语言 - */ - getCurrentLanguage(): string { - return this.getDefaultLanguage(); - } - - /** - * 设置语言 - * @param language 语言代码 - */ - setLanguage(language: string): void { - this.logger.log(`设置语言: ${language}`); - } - - /** - * 获取支持的语言列表 - * @returns 支持的语言列表 - */ - getSupportedLanguages(): string[] { - return this.configService.get('app.supportedLocales', ['zh_CN', 'en_US']); - } - - /** - * 获取默认语言 - * @returns 默认语言 - */ - getDefaultLanguage(): string { - return this.configService.get('app.defaultLanguage', 'zh_CN'); - } - - /** - * 检查语言是否支持 - * @param language 语言代码 - * @returns 是否支持 - */ - isLanguageSupported(language: string): boolean { - const supportedLanguages = this.getSupportedLanguages(); - return supportedLanguages.includes(language); - } - - /** - * 重新加载语言包 - */ - async reloadLanguagePack(language: string): Promise { - try { - // 清除该语言的所有缓存 - this.languageCache.delete(language); - this.moduleCache.delete(language); - - // 重新加载通用语言包 - await this.loadModuleLanguagePack('common', 'api', language); - await this.loadModuleLanguagePack('common', 'dict', language); - await this.loadModuleLanguagePack('common', 'validate', language); - - this.logger.log(`重新加载语言包完成: ${language}`); - } catch (error) { - this.logger.error(`重新加载语言包失败: ${language}`, error); - } - } - - /** - * 重新加载所有语言包 - */ - async reloadAllLanguagePacks(): Promise { - try { - this.languageCache.clear(); - this.moduleCache.clear(); - await this.initializeLanguagePacks(); - this.logger.log('所有语言包重新加载完成'); - } catch (error) { - this.logger.error('重新加载所有语言包失败', error); - } - } - - /** - * 获取API消息 - * @param key 消息键 - * @param args 参数 - * @param module 模块名 - * @param language 语言 - */ - async getApiMessage(key: string, args?: any, module: string = 'common', language?: string): Promise { - const currentLanguage = language || this.getCurrentLanguage(); - return this.getMessage(key, args, module, 'api', currentLanguage); - } - - /** - * 获取字典数据 - * @param key 字典键 - * @param args 参数 - * @param module 模块名 - * @param language 语言 - */ - async getDictData(key: string, args?: any, module: string = 'common', language?: string): Promise { - const currentLanguage = language || this.getCurrentLanguage(); - return this.getMessage(key, args, module, 'dict', currentLanguage); - } - - /** - * 获取验证器消息 - * @param key 验证器键 - * @param args 参数 - * @param module 模块名 - * @param language 语言 - */ - async getValidateMessage(key: string, args?: any, module: string = 'common', language?: string): Promise { - const currentLanguage = language || this.getCurrentLanguage(); - return this.getMessage(key, args, module, 'validate', currentLanguage); - } - - /** - * 批量获取消息 - * @param keys 消息键数组 - * @param module 模块名 - * @param type 类型 - * @param language 语言 - */ - async getBatchMessages(keys: string[], module: string = 'common', type: string = 'api', language?: string): Promise> { - const results: Record = {}; - const currentLanguage = language || this.getCurrentLanguage(); - - for (const key of keys) { - results[key] = await this.getMessage(key, undefined, module, type, currentLanguage); - } - - return results; - } -} diff --git a/src/common/libraries/dayjs/dayjs.module.ts b/src/common/libraries/dayjs/dayjs.module.ts deleted file mode 100644 index 462637a0..00000000 --- a/src/common/libraries/dayjs/dayjs.module.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Module, Global } from '@nestjs/common'; -import { DayjsService } from './dayjs.service'; - -/** - * Day.js 日期处理库模块 - * 基于 NestJS 官方示例实现 - * 参考: https://docs.nestjs.cn/fundamentals/dependency-injection - * 对应 Java: DateUtils - */ -@Global() -@Module({ - providers: [DayjsService], - exports: [DayjsService], -}) -export class DayjsModule {} diff --git a/src/common/libraries/dayjs/dayjs.service.ts b/src/common/libraries/dayjs/dayjs.service.ts deleted file mode 100644 index 74d89439..00000000 --- a/src/common/libraries/dayjs/dayjs.service.ts +++ /dev/null @@ -1,346 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import dayjs from 'dayjs'; -import utc from 'dayjs/plugin/utc'; -import timezone from 'dayjs/plugin/timezone'; -import relativeTime from 'dayjs/plugin/relativeTime'; -import customParseFormat from 'dayjs/plugin/customParseFormat'; -import duration from 'dayjs/plugin/duration'; -import isBetween from 'dayjs/plugin/isBetween'; -import isSameOrAfter from 'dayjs/plugin/isSameOrAfter'; -import isSameOrBefore from 'dayjs/plugin/isSameOrBefore'; -import quarterOfYear from 'dayjs/plugin/quarterOfYear'; -import dayOfYear from 'dayjs/plugin/dayOfYear'; -import weekOfYear from 'dayjs/plugin/weekOfYear'; -import isoWeek from 'dayjs/plugin/isoWeek'; - -/** - * Day.js 日期处理服务 - * 基于 NestJS 官方示例实现 - * 参考: https://docs.nestjs.cn/fundamentals/dependency-injection - * 对应 Java: DateUtils - */ -@Injectable() -export class DayjsService { - constructor() { - // 初始化插件 - dayjs.extend(utc); - dayjs.extend(timezone); - dayjs.extend(relativeTime); - dayjs.extend(customParseFormat); - dayjs.extend(duration); - dayjs.extend(isBetween); - dayjs.extend(isSameOrAfter); - dayjs.extend(isSameOrBefore); - dayjs.extend(quarterOfYear); - dayjs.extend(dayOfYear); - dayjs.extend(weekOfYear); - dayjs.extend(isoWeek); - } - - /** - * 获取 dayjs 实例 - */ - getDayjs() { - return dayjs; - } - - /** - * 格式化日期 - */ - format( - date: Date | string | number, - format: string = 'YYYY-MM-DD HH:mm:ss', - ): string { - return dayjs(date).format(format); - } - - /** - * 解析日期字符串 - */ - parse(dateStr: string, format?: string): dayjs.Dayjs | null { - if (!dateStr) return null; - - try { - const parsed = format ? dayjs(dateStr, format) : dayjs(dateStr); - return parsed.isValid() ? parsed : null; - } catch { - return null; - } - } - - /** - * 获取当前时间 - */ - now(): dayjs.Dayjs { - return dayjs(); - } - - /** - * 获取当前时间戳 - */ - timestamp(): number { - return dayjs().valueOf(); - } - - /** - * 时间戳转日期 - */ - fromTimestamp(timestamp: number): dayjs.Dayjs { - return dayjs(timestamp); - } - - /** - * 日期转时间戳 - */ - toTimestamp(date: Date | string | number): number { - return dayjs(date).valueOf(); - } - - /** - * 添加时间 - */ - add( - date: Date | string | number, - amount: number, - unit: dayjs.ManipulateType, - ): dayjs.Dayjs { - return dayjs(date).add(amount, unit); - } - - /** - * 减去时间 - */ - subtract( - date: Date | string | number, - amount: number, - unit: dayjs.ManipulateType, - ): dayjs.Dayjs { - return dayjs(date).subtract(amount, unit); - } - - /** - * 计算时间差 - */ - diff( - date1: Date | string | number, - date2: Date | string | number, - unit: dayjs.QUnitType = 'millisecond', - ): number { - return dayjs(date1).diff(dayjs(date2), unit); - } - - /** - * 获取开始时间 - */ - startOf(date: Date | string | number, unit: dayjs.OpUnitType): dayjs.Dayjs { - return dayjs(date).startOf(unit); - } - - /** - * 获取结束时间 - */ - endOf(date: Date | string | number, unit: dayjs.OpUnitType): dayjs.Dayjs { - return dayjs(date).endOf(unit); - } - - /** - * 判断是否为今天 - */ - isToday(date: Date | string | number): boolean { - return dayjs(date).isSame(dayjs(), 'day'); - } - - /** - * 判断是否为昨天 - */ - isYesterday(date: Date | string | number): boolean { - return dayjs(date).isSame(dayjs().subtract(1, 'day'), 'day'); - } - - /** - * 判断是否为明天 - */ - isTomorrow(date: Date | string | number): boolean { - return dayjs(date).isSame(dayjs().add(1, 'day'), 'day'); - } - - /** - * 判断是否为同一天 - */ - isSameDay( - date1: Date | string | number, - date2: Date | string | number, - ): boolean { - return dayjs(date1).isSame(dayjs(date2), 'day'); - } - - /** - * 判断是否在范围内 - */ - isBetween( - date: Date | string | number, - start: Date | string | number, - end: Date | string | number, - unit?: dayjs.OpUnitType, - ): boolean { - return dayjs(date).isBetween(dayjs(start), dayjs(end), unit); - } - - /** - * 获取相对时间描述 - */ - fromNow(date: Date | string | number): string { - return dayjs(date).fromNow(); - } - - /** - * 获取相对时间描述(中文) - */ - fromNowZh(date: Date | string | number): string { - const now = dayjs(); - const target = dayjs(date); - const diffMs = now.diff(target); - const diffSeconds = Math.floor(diffMs / 1000); - const diffMinutes = Math.floor(diffSeconds / 60); - const diffHours = Math.floor(diffMinutes / 60); - const diffDays = Math.floor(diffHours / 24); - - if (diffSeconds < 60) { - return '刚刚'; - } else if (diffMinutes < 60) { - return `${diffMinutes}分钟前`; - } else if (diffHours < 24) { - return `${diffHours}小时前`; - } else if (diffDays < 7) { - return `${diffDays}天前`; - } else { - return target.format('YYYY-MM-DD'); - } - } - - /** - * 设置时区 - */ - setTimezone(date: Date | string | number, timezone: string): dayjs.Dayjs { - return dayjs(date).tz(timezone); - } - - /** - * 转换为 UTC - */ - toUTC(date: Date | string | number): dayjs.Dayjs { - return dayjs(date).utc(); - } - - /** - * 转换为本地时间 - */ - toLocal(date: Date | string | number): dayjs.Dayjs { - return dayjs(date).local(); - } - - /** - * 获取持续时间 - */ - duration(amount: number, unit: any): any { - return dayjs.duration(amount, unit); - } - - /** - * 判断日期是否有效 - */ - isValid(date: any): boolean { - return dayjs(date).isValid(); - } - - /** - * 获取月份天数 - */ - daysInMonth(date: Date | string | number): number { - return dayjs(date).daysInMonth(); - } - - /** - * 获取年份 - */ - year(date: Date | string | number): number { - return dayjs(date).year(); - } - - /** - * 获取月份(0-11) - */ - month(date: Date | string | number): number { - return dayjs(date).month(); - } - - /** - * 获取日期 - */ - date(date: Date | string | number): number { - return dayjs(date).date(); - } - - /** - * 获取小时 - */ - hour(date: Date | string | number): number { - return dayjs(date).hour(); - } - - /** - * 获取分钟 - */ - minute(date: Date | string | number): number { - return dayjs(date).minute(); - } - - /** - * 获取秒 - */ - second(date: Date | string | number): number { - return dayjs(date).second(); - } - - /** - * 获取毫秒 - */ - millisecond(date: Date | string | number): number { - return dayjs(date).millisecond(); - } - - /** - * 获取星期几 - */ - day(date: Date | string | number): number { - return dayjs(date).day(); - } - - /** - * 获取季度 - */ - quarter(date: Date | string | number): number { - return dayjs(date).quarter(); - } - - /** - * 获取年份中的第几天 - */ - dayOfYear(date: Date | string | number): number { - return dayjs(date).dayOfYear(); - } - - /** - * 获取年份中的第几周 - */ - week(date: Date | string | number): number { - return dayjs(date).week(); - } - - /** - * 获取年份中的第几周(ISO) - */ - isoWeek(date: Date | string | number): number { - return dayjs(date).isoWeek(); - } -} diff --git a/src/common/libraries/index.ts b/src/common/libraries/index.ts deleted file mode 100644 index 15046977..00000000 --- a/src/common/libraries/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -export * from './libraries.module'; -export * from './dayjs/dayjs.service'; -export * from './lodash/lodash.service'; -export * from './prometheus/prometheus.service'; -export * from './redis/redis.service'; -export * from './sentry/sentry.service'; -export * from './sharp/sharp.service'; -export * from './uuid/uuid.service'; -export * from './validator/validator.service'; -export * from './winston/winston.service'; diff --git a/src/common/libraries/libraries.module.ts b/src/common/libraries/libraries.module.ts deleted file mode 100644 index c9b5b9ac..00000000 --- a/src/common/libraries/libraries.module.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { Module } from '@nestjs/common'; -import { DayjsModule } from './dayjs/dayjs.module'; -import { LodashModule } from './lodash/lodash.module'; -import { PrometheusModule } from './prometheus/prometheus.module'; -import { RedisModule } from './redis/redis.module'; -import { SentryModule } from './sentry/sentry.module'; -import { SharpModule } from './sharp/sharp.module'; -import { UuidModule } from './uuid/uuid.module'; -import { ValidatorModule } from './validator/validator.module'; -import { WinstonModule } from './winston/winston.module'; - -/** - * 第三方工具库模块 - Common层 - * 基于 NestJS 实现 - * 对应 Java: 工具库封装 - * - * 包含所有第三方工具库的封装,作为框架基础能力 - */ -@Module({ - imports: [ - DayjsModule, - LodashModule, - PrometheusModule, - RedisModule, - SentryModule, - SharpModule, - UuidModule, - ValidatorModule, - WinstonModule, - ], - exports: [ - DayjsModule, - LodashModule, - PrometheusModule, - RedisModule, - SentryModule, - SharpModule, - UuidModule, - ValidatorModule, - WinstonModule, - ], -}) -export class LibrariesModule {} diff --git a/src/common/libraries/lodash/lodash.module.ts b/src/common/libraries/lodash/lodash.module.ts deleted file mode 100644 index 2b439f79..00000000 --- a/src/common/libraries/lodash/lodash.module.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Module, Global } from '@nestjs/common'; -import { LodashService } from './lodash.service'; - -/** - * Lodash 工具函数库模块 - * 基于 NestJS 官方示例实现 - * 参考: https://docs.nestjs.cn/fundamentals/dependency-injection - * 对应 Java: StringUtils, ObjectUtils, ArrayUtils - */ -@Global() -@Module({ - providers: [LodashService], - exports: [LodashService], -}) -export class LodashModule {} diff --git a/src/common/libraries/lodash/lodash.service.ts b/src/common/libraries/lodash/lodash.service.ts deleted file mode 100644 index 57a31e67..00000000 --- a/src/common/libraries/lodash/lodash.service.ts +++ /dev/null @@ -1,665 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import * as _ from 'lodash'; - -/** - * Lodash 工具函数服务 - * 基于 NestJS 官方示例实现 - * 参考: https://docs.nestjs.cn/fundamentals/dependency-injection - * 对应 Java: StringUtils, ObjectUtils, ArrayUtils - */ -@Injectable() -export class LodashService { - /** - * 获取 lodash 实例 - */ - getLodash(): any { - return _; - } - - // ==================== 字符串工具 ==================== - - /** - * 判断字符串是否为空 - */ - isEmpty(value: any): boolean { - return _.isEmpty(value); - } - - /** - * 判断字符串是否不为空 - */ - isNotEmpty(value: any): boolean { - return !_.isEmpty(value); - } - - /** - * 首字母大写 - */ - capitalize(str: string): string { - return _.capitalize(str); - } - - /** - * 驼峰转下划线 - */ - snakeCase(str: string): string { - return _.snakeCase(str); - } - - /** - * 下划线转驼峰 - */ - camelCase(str: string): string { - return _.camelCase(str); - } - - /** - * 转换为大写 - */ - upperCase(str: string): string { - return _.upperCase(str); - } - - /** - * 转换为小写 - */ - lowerCase(str: string): string { - return _.lowerCase(str); - } - - /** - * 转换为标题格式 - */ - startCase(str: string): string { - return _.startCase(str); - } - - /** - * 截取字符串 - */ - truncate(str: string, options?: _.TruncateOptions): string { - return _.truncate(str, options); - } - - /** - * 移除字符串两端空白 - */ - trim(str: string, chars?: string): string { - return _.trim(str, chars); - } - - /** - * 移除字符串左端空白 - */ - trimStart(str: string, chars?: string): string { - return _.trimStart(str, chars); - } - - /** - * 移除字符串右端空白 - */ - trimEnd(str: string, chars?: string): string { - return _.trimEnd(str, chars); - } - - /** - * 重复字符串 - */ - repeat(str: string, n: number): string { - return _.repeat(str, n); - } - - /** - * 生成随机字符串 - */ - randomString( - length: number = 8, - chars: string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', - ): string { - return _.sampleSize(chars, length).join(''); - } - - // ==================== 对象工具 ==================== - - /** - * 判断是否为对象 - */ - isObject(value: any): boolean { - return _.isObject(value); - } - - /** - * 判断是否为数组 - */ - isArray(value: any): boolean { - return _.isArray(value); - } - - /** - * 判断是否为函数 - */ - isFunction(value: any): boolean { - return _.isFunction(value); - } - - /** - * 判断是否为数字 - */ - isNumber(value: any): boolean { - return _.isNumber(value); - } - - /** - * 判断是否为字符串 - */ - isString(value: any): boolean { - return _.isString(value); - } - - /** - * 判断是否为布尔值 - */ - isBoolean(value: any): boolean { - return _.isBoolean(value); - } - - /** - * 判断是否为日期 - */ - isDate(value: any): boolean { - return _.isDate(value); - } - - /** - * 判断是否为 null - */ - isNull(value: any): boolean { - return _.isNull(value); - } - - /** - * 判断是否为 undefined - */ - isUndefined(value: any): boolean { - return _.isUndefined(value); - } - - /** - * 判断是否为 null 或 undefined - */ - isNil(value: any): boolean { - return _.isNil(value); - } - - /** - * 深度合并对象 - */ - merge(target: T, ...sources: Partial[]): T { - return _.merge(target, ...sources); - } - - /** - * 从对象中提取指定属性 - */ - pick( - object: T, - ...paths: K[] - ): Pick { - return _.pick(object, ...paths); - } - - /** - * 从对象中排除指定属性 - */ - omit( - object: T, - ...paths: K[] - ): Omit { - return _.omit(object, ...paths); - } - - /** - * 获取对象属性值 - */ - get(object: any, path: string, defaultValue?: T): T { - return _.get(object, path, defaultValue); - } - - /** - * 设置对象属性值 - */ - set(object: any, path: string, value: T): any { - return _.set(object, path, value); - } - - /** - * 判断对象是否有指定属性 - */ - has(object: any, path: string): boolean { - return _.has(object, path); - } - - /** - * 删除对象属性 - */ - unset(object: any, path: string): boolean { - return _.unset(object, path); - } - - /** - * 获取对象的所有键 - */ - keys(object: any): string[] { - return _.keys(object); - } - - /** - * 获取对象的所有值 - */ - values(object: any): any[] { - return _.values(object); - } - - /** - * 获取对象的所有键值对 - */ - entries(object: any): [string, any][] { - return _.entries(object); - } - - /** - * 将键值对数组转换为对象 - */ - fromPairs(pairs: [string, any][]): object { - return _.fromPairs(pairs); - } - - /** - * 将对象转换为键值对数组 - */ - toPairs(object: any): [string, any][] { - return _.toPairs(object); - } - - // ==================== 数组工具 ==================== - - /** - * 数组去重 - */ - uniq(array: T[]): T[] { - return _.uniq(array); - } - - /** - * 数组去重(根据指定属性) - */ - uniqBy(array: T[], iteratee: string | ((item: T) => any)): T[] { - return _.uniqBy(array, iteratee); - } - - /** - * 数组去重(根据指定函数) - */ - uniqWith(array: T[], comparator: (a: T, b: T) => boolean): T[] { - return _.uniqWith(array, comparator); - } - - /** - * 数组分组 - */ - groupBy( - array: T[], - iteratee: string | ((item: T) => any), - ): Record { - return _.groupBy(array, iteratee); - } - - /** - * 数组排序 - */ - sortBy(array: T[], ...iteratees: (string | ((item: T) => any))[]): T[] { - return _.sortBy(array, ...iteratees); - } - - /** - * 数组过滤 - */ - filter(array: T[], predicate: (item: T) => boolean): T[] { - return _.filter(array, predicate); - } - - /** - * 数组映射 - */ - map(array: T[], iteratee: (item: T, index: number) => U): U[] { - return _.map(array, iteratee); - } - - /** - * 数组查找 - */ - find(array: T[], predicate: (item: T) => boolean): T | undefined { - return _.find(array, predicate); - } - - /** - * 数组查找索引 - */ - findIndex(array: T[], predicate: (item: T) => boolean): number { - return _.findIndex(array, predicate); - } - - /** - * 数组包含 - */ - includes(array: T[], value: T): boolean { - return _.includes(array, value); - } - - /** - * 数组切片 - */ - slice(array: T[], start?: number, end?: number): T[] { - return _.slice(array, start, end); - } - - /** - * 数组分块 - */ - chunk(array: T[], size: number): T[][] { - return _.chunk(array, size); - } - - /** - * 数组扁平化 - */ - flatten(array: T[][]): T[] { - return _.flatten(array); - } - - /** - * 数组深度扁平化 - */ - flattenDeep(array: any[]): T[] { - return _.flattenDeep(array); - } - - /** - * 数组压缩 - */ - compact(array: T[]): T[] { - return _.compact(array); - } - - /** - * 数组连接 - */ - concat(array: T[], ...values: any[]): T[] { - return _.concat(array, ...values); - } - - /** - * 数组差集 - */ - difference(array: T[], ...values: T[][]): T[] { - return _.difference(array, ...values); - } - - /** - * 数组交集 - */ - intersection(...arrays: T[][]): T[] { - return _.intersection(...arrays); - } - - /** - * 数组并集 - */ - union(...arrays: T[][]): T[] { - return _.union(...arrays); - } - - /** - * 数组求和 - */ - sum(array: number[]): number { - return _.sum(array); - } - - /** - * 数组平均值 - */ - mean(array: number[]): number { - return _.mean(array); - } - - /** - * 数组最大值 - */ - max(array: T[]): T | undefined { - return _.max(array); - } - - /** - * 数组最小值 - */ - min(array: T[]): T | undefined { - return _.min(array); - } - - /** - * 数组随机元素 - */ - sample(array: T[]): T | undefined { - return _.sample(array); - } - - /** - * 数组随机元素(多个) - */ - sampleSize(array: T[], n: number): T[] { - return _.sampleSize(array, n); - } - - /** - * 数组洗牌 - */ - shuffle(array: T[]): T[] { - return _.shuffle(array); - } - - /** - * 数组取前N个 - */ - take(array: T[], n: number): T[] { - return _.take(array, n); - } - - /** - * 数组取后N个 - */ - takeRight(array: T[], n: number): T[] { - return _.takeRight(array, n); - } - - /** - * 数组跳过前N个 - */ - drop(array: T[], n: number): T[] { - return _.drop(array, n); - } - - /** - * 数组跳过后N个 - */ - dropRight(array: T[], n: number): T[] { - return _.dropRight(array, n); - } - - // ==================== 函数工具 ==================== - - /** - * 函数防抖 - */ - debounce any>( - func: T, - wait: number, - options?: _.DebounceSettings, - ): any { - return _.debounce(func, wait, options); - } - - /** - * 函数节流 - */ - throttle any>( - func: T, - wait: number, - options?: _.ThrottleSettings, - ): any { - return _.throttle(func, wait, options); - } - - /** - * 函数柯里化 - */ - curry any>(func: T): any { - return _.curry(func); - } - - /** - * 函数记忆化 - */ - memoize any>( - func: T, - resolver?: (...args: any[]) => string, - ): T { - return _.memoize(func, resolver); - } - - // ==================== 数字工具 ==================== - - /** - * 数字范围 - */ - range(start: number, end?: number, step?: number): number[] { - return _.range(start, end, step); - } - - /** - * 数字随机 - */ - random(lower: number, upper?: number, floating?: boolean): number { - if (upper === undefined) { - return _.random(lower); - } - return _.random(lower, upper, floating); - } - - /** - * 数字四舍五入 - */ - round(number: number, precision?: number): number { - return _.round(number, precision); - } - - /** - * 数字向上取整 - */ - ceil(number: number, precision?: number): number { - return _.ceil(number, precision); - } - - /** - * 数字向下取整 - */ - floor(number: number, precision?: number): number { - return _.floor(number, precision); - } - - /** - * 数字截断 - */ - trunc(number: number, precision?: number): number { - return ( - Math.trunc(number * Math.pow(10, precision || 0)) / - Math.pow(10, precision || 0) - ); - } - - // ==================== 集合工具 ==================== - - /** - * 集合大小 - */ - size(collection: any): number { - return _.size(collection); - } - - /** - * 集合遍历 - */ - forEach( - collection: T[], - iteratee: (value: T, index: number, collection: T[]) => void, - ): T[] { - return _.forEach(collection, iteratee); - } - - /** - * 集合映射 - */ - mapValues( - object: Record, - iteratee: (value: T, key: string) => U, - ): Record { - return _.mapValues(object, iteratee); - } - - /** - * 集合键映射 - */ - mapKeys( - object: Record, - iteratee: (value: T, key: string) => string, - ): Record { - return _.mapKeys(object, iteratee); - } - - /** - * 集合键过滤 - */ - pickBy( - object: Record, - predicate: (value: T, key: string) => boolean, - ): Record { - return _.pickBy(object, predicate); - } - - /** - * 集合键排除 - */ - omitBy( - object: Record, - predicate: (value: T, key: string) => boolean, - ): Record { - return _.omitBy(object, predicate); - } - - /** - * 集合键反转 - */ - invert(object: Record): Record { - return _.invert(object); - } - - /** - * 集合键反转(保持值) - */ - invertBy( - object: Record, - iteratee?: (value: T) => string, - ): Record { - return _.invertBy(object, iteratee); - } -} diff --git a/src/common/libraries/prometheus/prometheus.module.ts b/src/common/libraries/prometheus/prometheus.module.ts deleted file mode 100644 index 0a826215..00000000 --- a/src/common/libraries/prometheus/prometheus.module.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Module, Global } from '@nestjs/common'; -import { ConfigModule, ConfigService } from '@nestjs/config'; -import { PrometheusService } from './prometheus.service'; - -/** - * Prometheus 客户端模块 - * 基于 NestJS 官方示例实现 - * 参考: https://docs.nestjs.cn/fundamentals/dependency-injection - * 对应 Java: Prometheus 监控 - */ -@Global() -@Module({ - imports: [ConfigModule], - providers: [ - { - provide: PrometheusService, - useFactory: (configService: ConfigService) => { - const prometheusConfig = configService.get('prometheus'); - return new PrometheusService(prometheusConfig); - }, - inject: [ConfigService], - }, - ], - exports: [PrometheusService], -}) -export class PrometheusModule {} diff --git a/src/common/libraries/prometheus/prometheus.service.ts b/src/common/libraries/prometheus/prometheus.service.ts deleted file mode 100644 index 61c335e3..00000000 --- a/src/common/libraries/prometheus/prometheus.service.ts +++ /dev/null @@ -1,428 +0,0 @@ -import { Injectable, Logger, OnModuleInit } from '@nestjs/common'; -import { - register, - Counter, - Histogram, - Summary, - Gauge, - collectDefaultMetrics, - Registry, - Metric, -} from 'prom-client'; -import type { - MonitoringInterface, - Timer, - MonitoringConfig, -} from '../../monitoring/monitoring.interface'; - -/** - * Prometheus 服务 - * 基于 NestJS 官方示例实现 - * 参考: https://docs.nestjs.cn/fundamentals/dependency-injection - * 对应 Java: Prometheus 监控 - */ -@Injectable() -export class PrometheusService implements MonitoringInterface, OnModuleInit { - private readonly logger = new Logger(PrometheusService.name); - private registry: Registry; - private metrics = new Map(); - private timers = new Map(); - - constructor( - private readonly config: MonitoringConfig = { - enabled: false, - port: 9090, - path: '/metrics', - prefix: 'wwjcloud', - defaultLabels: {}, - collectDefaultMetrics: false, - }, - ) { - this.registry = new Registry(); - this.initializeRegistry(); - } - - async onModuleInit() { - if (this.config.collectDefaultMetrics) { - collectDefaultMetrics({ register: this.registry }); - this.logger.log('Default metrics collection enabled'); - } - } - - private initializeRegistry() { - // 设置默认标签 - if (this.config.defaultLabels) { - this.registry.setDefaultLabels(this.config.defaultLabels); - } - - // 设置前缀 - if (this.config.prefix) { - this.registry.setDefaultLabels({ - // ...this.registry.getDefaultLabels(), - prefix: this.config.prefix, - }); - } - } - - /** - * 记录计数器指标 - */ - counter( - name: string, - value: number = 1, - labels?: Record, - ): void { - try { - const metricName = this.getMetricName(name); - let counter = this.metrics.get(metricName) as Counter; - - if (!counter) { - counter = new Counter({ - name: metricName, - help: `Counter metric for ${name}`, - labelNames: Object.keys(labels || {}), - registers: [this.registry], - }); - this.metrics.set(metricName, counter); - } - - counter.inc(labels || {}, value); - } catch (error) { - this.logger.error(`Failed to record counter: ${name}`, error); - } - } - - /** - * 记录直方图指标 - */ - histogram( - name: string, - value: number, - labels?: Record, - ): void { - try { - const metricName = this.getMetricName(name); - let histogram = this.metrics.get(metricName) as Histogram; - - if (!histogram) { - histogram = new Histogram({ - name: metricName, - help: `Histogram metric for ${name}`, - labelNames: Object.keys(labels || {}), - buckets: [0.1, 0.5, 1, 2, 5, 10, 30, 60, 120, 300, 600], - registers: [this.registry], - }); - this.metrics.set(metricName, histogram); - } - - histogram.observe(labels || {}, value); - } catch (error) { - this.logger.error(`Failed to record histogram: ${name}`, error); - } - } - - /** - * 记录摘要指标 - */ - summary(name: string, value: number, labels?: Record): void { - try { - const metricName = this.getMetricName(name); - let summary = this.metrics.get(metricName) as Summary; - - if (!summary) { - summary = new Summary({ - name: metricName, - help: `Summary metric for ${name}`, - labelNames: Object.keys(labels || {}), - percentiles: [0.5, 0.9, 0.95, 0.99], - registers: [this.registry], - }); - this.metrics.set(metricName, summary); - } - - summary.observe(labels || {}, value); - } catch (error) { - this.logger.error(`Failed to record summary: ${name}`, error); - } - } - - /** - * 记录仪表盘指标 - */ - gauge(name: string, value: number, labels?: Record): void { - try { - const metricName = this.getMetricName(name); - let gauge = this.metrics.get(metricName) as Gauge; - - if (!gauge) { - gauge = new Gauge({ - name: metricName, - help: `Gauge metric for ${name}`, - labelNames: Object.keys(labels || {}), - registers: [this.registry], - }); - this.metrics.set(metricName, gauge); - } - - gauge.set(labels || {}, value); - } catch (error) { - this.logger.error(`Failed to record gauge: ${name}`, error); - } - } - - /** - * 开始计时 - */ - startTimer(name: string, labels?: Record): Timer { - const timerId = `${name}_${JSON.stringify(labels || {})}`; - this.timers.set(timerId, Date.now()); - - return { - end: (endLabels?: Record) => { - const startTime = this.timers.get(timerId); - if (startTime) { - const duration = Date.now() - startTime; - this.timers.delete(timerId); - this.histogram(name, duration / 1000, endLabels || labels); - return duration; - } - return 0; - }, - }; - } - - /** - * 记录执行时间 - */ - async time( - name: string, - fn: () => T | Promise, - labels?: Record, - ): Promise { - const timer = this.startTimer(name, labels); - try { - const result = await fn(); - return result; - } finally { - timer.end(labels); - } - } - - /** - * 获取指标值 - */ - async getMetric( - name: string, - labels?: Record, - ): Promise { - try { - const metricName = this.getMetricName(name); - const metric = this.metrics.get(metricName); - - if (metric) { - const metricData = metric.get(); - const data = await metricData; - if (data && data.values) { - const value = data.values.find( - (v) => - !labels || - Object.keys(labels).every((key) => v.labels[key] === labels[key]), - ); - return value ? value.value : null; - } - } - - return null; - } catch (error) { - this.logger.error(`Failed to get metric: ${name}`, error); - return null; - } - } - - /** - * 获取所有指标 - */ - async getMetrics(): Promise { - try { - return await this.registry.metrics(); - } catch (error) { - this.logger.error('Failed to get metrics', error); - return ''; - } - } - - /** - * 重置指标 - */ - reset(name?: string): void { - try { - if (name) { - const metricName = this.getMetricName(name); - const metric = this.metrics.get(metricName); - if (metric) { - metric.reset(); - } - } else { - this.registry.clear(); - this.metrics.clear(); - this.timers.clear(); - this.initializeRegistry(); - } - } catch (error) { - this.logger.error(`Failed to reset metrics: ${name || 'all'}`, error); - } - } - - /** - * 获取注册表 - */ - getRegistry(): Registry { - return this.registry; - } - - /** - * 获取指标列表 - */ - getMetricList(): string[] { - return Array.from(this.metrics.keys()); - } - - /** - * 检查指标是否存在 - */ - hasMetric(name: string): boolean { - const metricName = this.getMetricName(name); - return this.metrics.has(metricName); - } - - /** - * 删除指标 - */ - removeMetric(name: string): boolean { - const metricName = this.getMetricName(name); - const metric = this.metrics.get(metricName); - if (metric) { - this.registry.removeSingleMetric(metricName); - this.metrics.delete(metricName); - return true; - } - return false; - } - - /** - * 获取指标数据 - */ - getMetricData(name: string): any { - try { - const metricName = this.getMetricName(name); - const metric = this.metrics.get(metricName); - return metric ? metric.get() : null; - } catch (error) { - this.logger.error(`Failed to get metric data: ${name}`, error); - return null; - } - } - - /** - * 设置指标帮助文本 - */ - setMetricHelp(name: string, help: string): void { - try { - const metricName = this.getMetricName(name); - const metric = this.metrics.get(metricName); - if (metric && 'help' in metric) { - (metric as any).help = help; - } - } catch (error) { - this.logger.error(`Failed to set metric help: ${name}`, error); - } - } - - /** - * 获取指标名称 - */ - private getMetricName(name: string): string { - const prefix = this.config.prefix || 'app'; - return `${prefix}_${name}`; - } - - /** - * 创建自定义指标 - */ - createCounter( - name: string, - help: string, - labelNames: string[] = [], - ): Counter { - const metricName = this.getMetricName(name); - const counter = new Counter({ - name: metricName, - help, - labelNames, - registers: [this.registry], - }); - this.metrics.set(metricName, counter); - return counter; - } - - /** - * 创建自定义直方图 - */ - createHistogram( - name: string, - help: string, - labelNames: string[] = [], - buckets: number[] = [0.1, 0.5, 1, 2, 5, 10, 30, 60, 120, 300, 600], - ): Histogram { - const metricName = this.getMetricName(name); - const histogram = new Histogram({ - name: metricName, - help, - labelNames, - buckets, - registers: [this.registry], - }); - this.metrics.set(metricName, histogram); - return histogram; - } - - /** - * 创建自定义摘要 - */ - createSummary( - name: string, - help: string, - labelNames: string[] = [], - percentiles: number[] = [0.5, 0.9, 0.95, 0.99], - ): Summary { - const metricName = this.getMetricName(name); - const summary = new Summary({ - name: metricName, - help, - labelNames, - percentiles, - registers: [this.registry], - }); - this.metrics.set(metricName, summary); - return summary; - } - - /** - * 创建自定义仪表盘 - */ - createGauge( - name: string, - help: string, - labelNames: string[] = [], - ): Gauge { - const metricName = this.getMetricName(name); - const gauge = new Gauge({ - name: metricName, - help, - labelNames, - registers: [this.registry], - }); - this.metrics.set(metricName, gauge); - return gauge; - } -} diff --git a/src/common/libraries/redis/redis.module.ts b/src/common/libraries/redis/redis.module.ts deleted file mode 100644 index 95733e4e..00000000 --- a/src/common/libraries/redis/redis.module.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Module, Global } from '@nestjs/common'; -import { ConfigModule, ConfigService } from '@nestjs/config'; -import { RedisService } from './redis.service'; - -/** - * Redis 客户端模块 - * 基于 NestJS 官方示例实现 - * 参考: https://docs.nestjs.cn/fundamentals/dependency-injection - * 对应 Java: RedisTemplate - */ -@Global() -@Module({ - imports: [ConfigModule], - providers: [ - { - provide: RedisService, - useFactory: (configService: ConfigService) => { - const redisConfig = configService.get('redis'); - return new RedisService(redisConfig); - }, - inject: [ConfigService], - }, - ], - exports: [RedisService], -}) -export class RedisModule {} diff --git a/src/common/libraries/redis/redis.service.ts b/src/common/libraries/redis/redis.service.ts deleted file mode 100644 index 9f8c82ee..00000000 --- a/src/common/libraries/redis/redis.service.ts +++ /dev/null @@ -1,488 +0,0 @@ -import { Injectable, Logger, OnModuleDestroy } from '@nestjs/common'; -import { createClient, RedisClientType } from 'redis'; -import type { CacheInterface, CacheConfig } from '../../cache/cache.interface'; -import { CacheStats } from '../../cache/cache.interface'; - -/** - * Redis 服务 - * 基于 NestJS 官方示例实现 - * 参考: https://docs.nestjs.cn/fundamentals/dependency-injection - * 对应 Java: RedisUtils - */ -@Injectable() -export class RedisService implements CacheInterface, OnModuleDestroy { - private readonly logger = new Logger(RedisService.name); - private client: RedisClientType; - private cacheStats: CacheStats = { - hits: 0, - misses: 0, - keys: 0, - memory: 0, - uptime: 0, - }; - private startTime: number; - - constructor(private readonly config: CacheConfig) { - this.startTime = Date.now(); - this.initializeClient(); - } - - private async initializeClient() { - try { - this.client = createClient({ - socket: { - host: this.config.host, - port: this.config.port, - }, - password: this.config.password, - database: this.config.db || 0, - }); - - this.client.on('error', (err) => { - this.logger.error('Redis Client Error', err); - }); - - this.client.on('connect', () => { - this.logger.log('Redis Client Connected'); - }); - - this.client.on('ready', () => { - this.logger.log('Redis Client Ready'); - }); - - this.client.on('end', () => { - this.logger.log('Redis Client Disconnected'); - }); - - await this.client.connect(); - } catch (error) { - this.logger.error('Failed to initialize Redis client', error); - throw error; - } - } - - async onModuleDestroy() { - if (this.client) { - await this.client.quit(); - } - } - - /** - * 获取缓存 - */ - async get(key: string): Promise { - try { - const prefixedKey = this.getPrefixedKey(key); - const value = await this.client.get(prefixedKey); - - if (value === null) { - this.cacheStats.misses++; - return null; - } - - this.cacheStats.hits++; - return JSON.parse(value); - } catch (error) { - this.logger.error(`Failed to get cache key: ${key}`, error); - this.cacheStats.misses++; - return null; - } - } - - /** - * 设置缓存 - */ - async set(key: string, value: any, ttl?: number): Promise { - try { - const prefixedKey = this.getPrefixedKey(key); - const serializedValue = JSON.stringify(value); - - if (ttl) { - await this.client.setEx(prefixedKey, ttl, serializedValue); - } else { - await this.client.set(prefixedKey, serializedValue); - } - } catch (error) { - this.logger.error(`Failed to set cache key: ${key}`, error); - throw error; - } - } - - /** - * 删除缓存 - */ - async del(key: string): Promise { - try { - const prefixedKey = this.getPrefixedKey(key); - await this.client.del(prefixedKey); - } catch (error) { - this.logger.error(`Failed to delete cache key: ${key}`, error); - throw error; - } - } - - /** - * 批量删除缓存 - */ - async delMany(keys: string[]): Promise { - try { - const prefixedKeys = keys.map((key) => this.getPrefixedKey(key)); - await this.client.del(prefixedKeys); - } catch (error) { - this.logger.error( - `Failed to delete cache keys: ${keys.join(', ')}`, - error, - ); - throw error; - } - } - - /** - * 检查缓存是否存在 - */ - async exists(key: string): Promise { - try { - const prefixedKey = this.getPrefixedKey(key); - const result = await this.client.exists(prefixedKey); - return result === 1; - } catch (error) { - this.logger.error(`Failed to check cache key: ${key}`, error); - return false; - } - } - - /** - * 设置过期时间 - */ - async expire(key: string, ttl: number): Promise { - try { - const prefixedKey = this.getPrefixedKey(key); - await this.client.expire(prefixedKey, ttl); - } catch (error) { - this.logger.error(`Failed to set expire for cache key: ${key}`, error); - throw error; - } - } - - /** - * 获取过期时间 - */ - async ttl(key: string): Promise { - try { - const prefixedKey = this.getPrefixedKey(key); - return await this.client.ttl(prefixedKey); - } catch (error) { - this.logger.error(`Failed to get ttl for cache key: ${key}`, error); - return -1; - } - } - - /** - * 获取所有键 - */ - async keys(pattern?: string): Promise { - try { - const searchPattern = pattern - ? this.getPrefixedKey(pattern) - : `${this.config.keyPrefix || 'cache'}:*`; - const keys = await this.client.keys(searchPattern); - return keys.map((key) => this.removePrefix(key)); - } catch (error) { - this.logger.error( - `Failed to get cache keys with pattern: ${pattern}`, - error, - ); - return []; - } - } - - /** - * 清空所有缓存 - */ - async flush(): Promise { - try { - await this.client.flushDb(); - } catch (error) { - this.logger.error('Failed to flush cache', error); - throw error; - } - } - - /** - * 获取缓存统计信息 - */ - async stats(): Promise { - try { - const info = await this.client.info('memory'); - const memoryMatch = info.match(/used_memory:(\d+)/); - const memory = memoryMatch ? parseInt(memoryMatch[1]) : 0; - - const keyCount = await this.client.dbSize(); - - return { - ...this.cacheStats, - keys: keyCount, - memory, - uptime: Date.now() - this.startTime, - }; - } catch (error) { - this.logger.error('Failed to get cache stats', error); - return this.cacheStats; - } - } - - /** - * 批量获取 - */ - async mget(keys: string[]): Promise<(T | null)[]> { - try { - const prefixedKeys = keys.map((key) => this.getPrefixedKey(key)); - const values = await this.client.mGet(prefixedKeys); - - return values.map((value) => { - if (value === null) { - this.cacheStats.misses++; - return null; - } - this.cacheStats.hits++; - return JSON.parse(value); - }); - } catch (error) { - this.logger.error(`Failed to mget cache keys: ${keys.join(', ')}`, error); - return keys.map(() => null); - } - } - - /** - * 批量设置 - */ - async mset( - keyValuePairs: Array<{ key: string; value: any; ttl?: number }>, - ): Promise { - try { - const pipeline = this.client.multi(); - - for (const { key, value, ttl } of keyValuePairs) { - const prefixedKey = this.getPrefixedKey(key); - const serializedValue = JSON.stringify(value); - - if (ttl) { - pipeline.setEx(prefixedKey, ttl, serializedValue); - } else { - pipeline.set(prefixedKey, serializedValue); - } - } - - await pipeline.exec(); - } catch (error) { - this.logger.error('Failed to mset cache', error); - throw error; - } - } - - /** - * 原子递增 - */ - async incr(key: string, increment: number = 1): Promise { - try { - const prefixedKey = this.getPrefixedKey(key); - return await this.client.incrBy(prefixedKey, increment); - } catch (error) { - this.logger.error(`Failed to incr cache key: ${key}`, error); - throw error; - } - } - - /** - * 原子递减 - */ - async decr(key: string, decrement: number = 1): Promise { - return this.incr(key, -decrement); - } - - /** - * 设置哈希字段 - */ - async hset(key: string, field: string, value: any): Promise { - try { - const prefixedKey = this.getPrefixedKey(key); - const serializedValue = JSON.stringify(value); - await this.client.hSet(prefixedKey, field, serializedValue); - } catch (error) { - this.logger.error( - `Failed to hset cache key: ${key}, field: ${field}`, - error, - ); - throw error; - } - } - - /** - * 获取哈希字段 - */ - async hget(key: string, field: string): Promise { - try { - const prefixedKey = this.getPrefixedKey(key); - const value = await this.client.hGet(prefixedKey, field); - - if (value === null) { - this.cacheStats.misses++; - return null; - } - - this.cacheStats.hits++; - return JSON.parse(value); - } catch (error) { - this.logger.error( - `Failed to hget cache key: ${key}, field: ${field}`, - error, - ); - this.cacheStats.misses++; - return null; - } - } - - /** - * 删除哈希字段 - */ - async hdel(key: string, field: string): Promise { - try { - const prefixedKey = this.getPrefixedKey(key); - await this.client.hDel(prefixedKey, field); - } catch (error) { - this.logger.error( - `Failed to hdel cache key: ${key}, field: ${field}`, - error, - ); - throw error; - } - } - - /** - * 获取哈希所有字段 - */ - async hgetall(key: string): Promise> { - try { - const prefixedKey = this.getPrefixedKey(key); - const hash = await this.client.hGetAll(prefixedKey); - - const result: Record = {}; - for (const [field, value] of Object.entries(hash)) { - result[field] = JSON.parse(value); - } - - return result; - } catch (error) { - this.logger.error(`Failed to hgetall cache key: ${key}`, error); - return {}; - } - } - - /** - * 发布消息 - */ - async publish(channel: string, message: any): Promise { - try { - const serializedMessage = JSON.stringify(message); - return await this.client.publish(channel, serializedMessage); - } catch (error) { - this.logger.error( - `Failed to publish message to channel: ${channel}`, - error, - ); - throw error; - } - } - - /** - * 订阅频道 - */ - async subscribe( - channel: string, - callback: (message: any) => void, - ): Promise { - try { - await this.client.subscribe(channel, (message) => { - try { - const parsedMessage = JSON.parse(message); - callback(parsedMessage); - } catch (error) { - this.logger.error( - `Failed to parse message from channel: ${channel}`, - error, - ); - } - }); - } catch (error) { - this.logger.error(`Failed to subscribe to channel: ${channel}`, error); - throw error; - } - } - - /** - * 取消订阅 - */ - async unsubscribe(channel: string): Promise { - try { - await this.client.unsubscribe(channel); - } catch (error) { - this.logger.error( - `Failed to unsubscribe from channel: ${channel}`, - error, - ); - throw error; - } - } - - /** - * 获取带前缀的键 - */ - private getPrefixedKey(key: string): string { - const prefix = this.config.keyPrefix || 'cache'; - return `${prefix}:${key}`; - } - - /** - * 移除键前缀 - */ - private removePrefix(key: string): string { - const prefix = this.config.keyPrefix || 'cache'; - return key.startsWith(`${prefix}:`) - ? key.substring(prefix.length + 1) - : key; - } - - /** - * 获取原始 Redis 客户端 - */ - getClient(): RedisClientType { - return this.client; - } - - /** - * 检查连接状态 - */ - async isConnected(): Promise { - try { - await this.client.ping(); - return true; - } catch (error) { - return false; - } - } - - /** - * 重连 - */ - async reconnect(): Promise { - try { - if (this.client) { - await this.client.quit(); - } - await this.initializeClient(); - } catch (error) { - this.logger.error('Failed to reconnect Redis client', error); - throw error; - } - } -} diff --git a/src/common/libraries/sentry/sentry.module.ts b/src/common/libraries/sentry/sentry.module.ts deleted file mode 100644 index a882e197..00000000 --- a/src/common/libraries/sentry/sentry.module.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Module, Global } from '@nestjs/common'; -import { ConfigModule, ConfigService } from '@nestjs/config'; -import { SentryService } from './sentry.service'; - -/** - * Sentry 错误追踪模块 - * 基于 NestJS 官方示例实现 - * 参考: https://docs.nestjs.cn/fundamentals/dependency-injection - * 对应 Java: 错误追踪配置 - */ -@Global() -@Module({ - imports: [ConfigModule], - providers: [ - { - provide: SentryService, - useFactory: (configService: ConfigService) => { - const sentryConfig = configService.get('sentry'); - return new SentryService(sentryConfig); - }, - inject: [ConfigService], - }, - ], - exports: [SentryService], -}) -export class SentryModule {} diff --git a/src/common/libraries/sentry/sentry.service.ts b/src/common/libraries/sentry/sentry.service.ts deleted file mode 100644 index 845eaac9..00000000 --- a/src/common/libraries/sentry/sentry.service.ts +++ /dev/null @@ -1,687 +0,0 @@ -import { - Injectable, - Logger, - OnModuleInit, - OnModuleDestroy, -} from '@nestjs/common'; -import * as Sentry from '@sentry/node'; -import { - ExceptionReporterInterface, - ExceptionStatsInterface, - ExceptionType, - ExceptionSeverity, -} from '../../exception/exception.interface'; - -/** - * Sentry 服务 - * 基于 NestJS 官方示例实现 - * 参考: https://docs.nestjs.cn/fundamentals/dependency-injection - * 对应 Java: 错误追踪服务 - */ -@Injectable() -export class SentryService - implements - ExceptionReporterInterface, - ExceptionStatsInterface, - OnModuleInit, - OnModuleDestroy -{ - private readonly logger = new Logger(SentryService.name); - private initialized = false; - private stats = new Map(); - - constructor(private readonly config: any) { - this.initializeSentry(); - } - - async onModuleInit() { - if (this.config?.enabled && !this.initialized) { - try { - Sentry.init({ - dsn: this.config.dsn, - environment: this.config.environment || process.env.NODE_ENV, - release: this.config.release || process.env.npm_package_version, - tracesSampleRate: this.config.tracesSampleRate || 0.1, - profilesSampleRate: this.config.profilesSampleRate || 0.1, - beforeSend: this.beforeSend.bind(this), - beforeBreadcrumb: this.beforeBreadcrumb.bind(this), - integrations: [ - // 使用默认集成 - ], - }); - - this.initialized = true; - this.logger.log('Sentry initialized successfully'); - } catch (error) { - this.logger.error('Failed to initialize Sentry', error); - } - } - } - - async onModuleDestroy() { - if (this.initialized) { - try { - await Sentry.close(2000); - this.initialized = false; - this.logger.log('Sentry closed successfully'); - } catch (error) { - this.logger.error('Failed to close Sentry', error); - } - } - } - - private initializeSentry() { - // Sentry 初始化在 onModuleInit 中进行 - } - - // ==================== 异常上报接口 ==================== - - /** - * 上报异常 - */ - async report(exception: any, context?: any): Promise { - if (!this.initialized || !this.shouldReport(exception)) { - return false; - } - - try { - Sentry.withScope((scope) => { - // 设置标签 - this.setTags(scope, exception, context); - - // 设置上下文 - this.setContext(scope, exception, context); - - // 设置用户信息 - this.setUser(scope, context); - - // 设置额外信息 - this.setExtra(scope, exception, context); - - // 设置级别 - this.setLevel(scope, exception); - - // 捕获异常 - Sentry.captureException(exception); - }); - - return true; - } catch (error) { - this.logger.error('Failed to report exception to Sentry', error); - return false; - } - } - - /** - * 批量上报异常 - */ - async reportBatch( - exceptions: Array<{ exception: any; context?: any }>, - ): Promise { - const results: boolean[] = []; - - for (const { exception, context } of exceptions) { - const result = await this.report(exception, context); - results.push(result); - } - - return results; - } - - /** - * 检查是否应该上报 - */ - shouldReport(exception: any): boolean { - if (!this.config?.enabled) { - return false; - } - - // 根据异常类型和严重程度判断 - const type = this.getExceptionType(exception); - const severity = this.getExceptionSeverity(exception); - - // 只上报高严重程度的异常 - if ( - severity === ExceptionSeverity.HIGH || - severity === ExceptionSeverity.CRITICAL - ) { - return true; - } - - // 某些类型的异常总是上报 - if ( - type === ExceptionType.SYSTEM || - type === ExceptionType.INTERNAL_SERVER_ERROR - ) { - return true; - } - - return false; - } - - // ==================== 异常统计接口 ==================== - - /** - * 记录异常统计 - */ - record(exception: any, context?: any): void { - const type = this.getExceptionType(exception); - const severity = this.getExceptionSeverity(exception); - - const key = `${type}:${severity}`; - const count = this.stats.get(key) || 0; - this.stats.set(key, count + 1); - } - - /** - * 获取异常统计 - */ - getStats(timeRange?: { start: Date; end: Date }): any { - const stats: any = { - total: 0, - byType: {}, - bySeverity: {}, - byTime: [], - topExceptions: [], - rate: 0, - trend: 'stable', - }; - - // 计算统计信息 - for (const [key, count] of this.stats) { - const [type, severity] = key.split(':'); - stats.total += count; - - stats.byType[type] = (stats.byType[type] || 0) + count; - stats.bySeverity[severity] = (stats.bySeverity[severity] || 0) + count; - } - - return stats; - } - - /** - * 重置统计 - */ - reset(): void { - this.stats.clear(); - } - - // ==================== 工具方法 ==================== - - /** - * 设置标签 - */ - private setTags(scope: Sentry.Scope, exception: any, context?: any): void { - const type = this.getExceptionType(exception); - const severity = this.getExceptionSeverity(exception); - - scope.setTag('exception.type', type); - scope.setTag('exception.severity', severity); - - if (context?.request) { - scope.setTag('http.method', context.request.method); - scope.setTag('http.url', context.request.url); - scope.setTag('http.status_code', context.response?.statusCode); - } - - if (context?.user) { - scope.setTag('user.id', context.user.id); - scope.setTag('user.role', context.user.role); - } - - if (context?.environment) { - scope.setTag('environment', context.environment.nodeEnv); - scope.setTag('version', context.environment.version); - } - } - - /** - * 设置上下文 - */ - private setContext(scope: Sentry.Scope, exception: any, context?: any): void { - if (context?.request) { - scope.setContext('request', { - method: context.request.method, - url: context.request.url, - headers: this.sanitizeHeaders(context.request.headers), - body: this.sanitizeBody(context.request.body), - query: context.request.query, - params: context.request.params, - ip: context.request.ip, - userAgent: context.request.userAgent, - }); - } - - if (context?.response) { - scope.setContext('response', { - statusCode: context.response.statusCode, - headers: this.sanitizeHeaders(context.response.headers), - body: this.sanitizeBody(context.response.body), - size: context.response.size, - }); - } - - if (context?.environment) { - scope.setContext('environment', { - nodeEnv: context.environment.nodeEnv, - version: context.environment.version, - hostname: context.environment.hostname, - pid: context.environment.pid, - }); - } - - if (context?.trace) { - scope.setContext('trace', { - traceId: context.trace.traceId, - spanId: context.trace.spanId, - correlationId: context.trace.correlationId, - }); - } - } - - /** - * 设置用户信息 - */ - private setUser(scope: Sentry.Scope, context?: any): void { - if (context?.user) { - scope.setUser({ - id: context.user.id, - username: context.user.username, - email: context.user.email, - role: context.user.role, - permissions: context.user.permissions, - }); - } - } - - /** - * 设置额外信息 - */ - private setExtra(scope: Sentry.Scope, exception: any, context?: any): void { - if (exception.code) { - scope.setExtra('error.code', exception.code); - } - - if (exception.details) { - scope.setExtra('error.details', exception.details); - } - - if (exception.cause) { - scope.setExtra('error.cause', exception.cause); - } - - if (context?.meta) { - scope.setExtra('meta', context.meta); - } - } - - /** - * 设置级别 - */ - private setLevel(scope: Sentry.Scope, exception: any): void { - const severity = this.getExceptionSeverity(exception); - - switch (severity) { - case ExceptionSeverity.CRITICAL: - scope.setLevel('fatal'); - break; - case ExceptionSeverity.HIGH: - scope.setLevel('error'); - break; - case ExceptionSeverity.MEDIUM: - scope.setLevel('warning'); - break; - case ExceptionSeverity.LOW: - scope.setLevel('info'); - break; - default: - scope.setLevel('error'); - } - } - - /** - * 获取异常类型 - */ - private getExceptionType(exception: any): ExceptionType { - if (exception.name) { - const name = exception.name.toLowerCase(); - - if (name.includes('validation') || name.includes('badrequest')) { - return ExceptionType.VALIDATION; - } - if (name.includes('unauthorized') || name.includes('authentication')) { - return ExceptionType.AUTHENTICATION; - } - if (name.includes('forbidden') || name.includes('authorization')) { - return ExceptionType.AUTHORIZATION; - } - if (name.includes('notfound')) { - return ExceptionType.NOT_FOUND; - } - if (name.includes('conflict')) { - return ExceptionType.CONFLICT; - } - if (name.includes('timeout')) { - return ExceptionType.TIMEOUT; - } - if (name.includes('ratelimit')) { - return ExceptionType.RATE_LIMIT; - } - if (name.includes('database') || name.includes('db')) { - return ExceptionType.DATABASE; - } - if (name.includes('cache')) { - return ExceptionType.CACHE; - } - if (name.includes('network') || name.includes('connection')) { - return ExceptionType.NETWORK; - } - if (name.includes('external') || name.includes('api')) { - return ExceptionType.EXTERNAL_API; - } - if (name.includes('business')) { - return ExceptionType.BUSINESS; - } - if (name.includes('system')) { - return ExceptionType.SYSTEM; - } - } - - if (exception.statusCode) { - switch (exception.statusCode) { - case 400: - return ExceptionType.BAD_REQUEST; - case 401: - return ExceptionType.AUTHENTICATION; - case 403: - return ExceptionType.AUTHORIZATION; - case 404: - return ExceptionType.NOT_FOUND; - case 409: - return ExceptionType.CONFLICT; - case 429: - return ExceptionType.RATE_LIMIT; - case 500: - return ExceptionType.INTERNAL_SERVER_ERROR; - case 503: - return ExceptionType.SERVICE_UNAVAILABLE; - default: - return ExceptionType.UNKNOWN; - } - } - - return ExceptionType.UNKNOWN; - } - - /** - * 获取异常严重程度 - */ - private getExceptionSeverity(exception: any): ExceptionSeverity { - const type = this.getExceptionType(exception); - - switch (type) { - case ExceptionType.INTERNAL_SERVER_ERROR: - case ExceptionType.SYSTEM: - return ExceptionSeverity.CRITICAL; - case ExceptionType.AUTHENTICATION: - case ExceptionType.AUTHORIZATION: - case ExceptionType.DATABASE: - case ExceptionType.NETWORK: - return ExceptionSeverity.HIGH; - case ExceptionType.VALIDATION: - case ExceptionType.BAD_REQUEST: - case ExceptionType.CONFLICT: - case ExceptionType.CACHE: - case ExceptionType.EXTERNAL_API: - return ExceptionSeverity.MEDIUM; - case ExceptionType.NOT_FOUND: - case ExceptionType.TIMEOUT: - case ExceptionType.RATE_LIMIT: - case ExceptionType.BUSINESS: - return ExceptionSeverity.LOW; - default: - return ExceptionSeverity.MEDIUM; - } - } - - /** - * 清理请求头 - */ - private sanitizeHeaders( - headers: Record, - ): Record { - const sanitized: Record = {}; - const sensitiveHeaders = [ - 'authorization', - 'cookie', - 'x-api-key', - 'x-auth-token', - ]; - - for (const [key, value] of Object.entries(headers)) { - if (sensitiveHeaders.includes(key.toLowerCase())) { - sanitized[key] = '[REDACTED]'; - } else { - sanitized[key] = value; - } - } - - return sanitized; - } - - /** - * 清理请求体 - */ - private sanitizeBody(body: any): any { - if (!body) return body; - - if (typeof body === 'string') { - try { - const parsed = JSON.parse(body); - return this.sanitizeObject(parsed); - } catch { - return body; - } - } - - if (typeof body === 'object') { - return this.sanitizeObject(body); - } - - return body; - } - - /** - * 清理对象 - */ - private sanitizeObject(obj: any): any { - if (!obj || typeof obj !== 'object') return obj; - - const sanitized = { ...obj }; - const sensitiveFields = ['password', 'token', 'secret', 'key', 'auth']; - - for (const field of sensitiveFields) { - if (sanitized[field]) { - sanitized[field] = '[REDACTED]'; - } - } - - return sanitized; - } - - /** - * 发送前处理 - */ - private beforeSend(event: Sentry.Event): Sentry.Event | null { - // 过滤敏感信息 - if (event.extra) { - event.extra = this.sanitizeObject(event.extra); - } - - if (event.contexts) { - event.contexts = this.sanitizeObject(event.contexts); - } - - if (event.tags) { - event.tags = this.sanitizeObject(event.tags); - } - - return event; - } - - /** - * 面包屑前处理 - */ - private beforeBreadcrumb( - breadcrumb: Sentry.Breadcrumb, - ): Sentry.Breadcrumb | null { - // 过滤敏感信息 - if (breadcrumb.data) { - breadcrumb.data = this.sanitizeObject(breadcrumb.data); - } - - return breadcrumb; - } - - // ==================== 公共方法 ==================== - - /** - * 手动捕获异常 - */ - captureException(exception: any, context?: any): void { - if (this.initialized) { - Sentry.withScope((scope) => { - this.setTags(scope, exception, context); - this.setContext(scope, exception, context); - this.setUser(scope, context); - this.setExtra(scope, exception, context); - this.setLevel(scope, exception); - - Sentry.captureException(exception); - }); - } - } - - /** - * 手动捕获消息 - */ - captureMessage( - message: string, - level: Sentry.SeverityLevel = 'info', - context?: any, - ): void { - if (this.initialized) { - Sentry.withScope((scope) => { - if (context) { - this.setContext(scope, null, context); - this.setUser(scope, context); - this.setExtra(scope, null, context); - } - - scope.setLevel(level); - Sentry.captureMessage(message); - }); - } - } - - /** - * 开始事务 - */ - startTransaction(name: string, op: string): any { - if (this.initialized) { - // 新版本 Sentry API 已变更,暂时返回 null - return null; - } - return null; - } - - /** - * 获取当前事务 - */ - getCurrentTransaction(): any { - if (this.initialized) { - // 新版本 Sentry API 已变更,暂时返回 undefined - return undefined; - } - return undefined; - } - - /** - * 设置用户上下文 - */ - setUserContext(user: { - id: string; - username?: string; - email?: string; - role?: string; - }): void { - if (this.initialized) { - Sentry.setUser(user); - } - } - - /** - * 设置标签 - */ - setTag(key: string, value: string): void { - if (this.initialized) { - Sentry.setTag(key, value); - } - } - - /** - * 设置上下文(公共方法) - */ - setContextPublic(key: string, context: any): void { - if (this.initialized) { - Sentry.setContext(key, context); - } - } - - /** - * 设置额外信息(公共方法) - */ - setExtraPublic(key: string, value: any): void { - if (this.initialized) { - Sentry.setExtra(key, value); - } - } - - /** - * 设置级别(公共方法) - */ - setLevelPublic(level: Sentry.SeverityLevel): void { - if (this.initialized) { - // 新版本 Sentry API 已变更,暂时不执行 - // Sentry.setLevel(level); - } - } - - /** - * 添加面包屑 - */ - addBreadcrumb(breadcrumb: Sentry.Breadcrumb): void { - if (this.initialized) { - Sentry.addBreadcrumb(breadcrumb); - } - } - - /** - * 配置作用域 - */ - configureScope(callback: (scope: Sentry.Scope) => void): void { - if (this.initialized) { - // 新版本 Sentry API 已变更,暂时不执行 - // Sentry.configureScope(callback); - } - } - - /** - * 使用作用域 - */ - withScope(callback: (scope: Sentry.Scope) => void): void { - if (this.initialized) { - Sentry.withScope(callback); - } - } -} diff --git a/src/common/libraries/sharp/sharp.module.ts b/src/common/libraries/sharp/sharp.module.ts deleted file mode 100644 index 7622ebf4..00000000 --- a/src/common/libraries/sharp/sharp.module.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Module, Global } from '@nestjs/common'; -import { SharpService } from './sharp.service'; - -/** - * Sharp 图片处理库模块 - * 基于 NestJS 官方示例实现 - * 参考: https://docs.nestjs.cn/fundamentals/dependency-injection - * 对应 Java: ImageUtils - */ -@Global() -@Module({ - providers: [SharpService], - exports: [SharpService], -}) -export class SharpModule {} diff --git a/src/common/libraries/sharp/sharp.service.ts b/src/common/libraries/sharp/sharp.service.ts deleted file mode 100644 index b5910ce9..00000000 --- a/src/common/libraries/sharp/sharp.service.ts +++ /dev/null @@ -1,161 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import sharp from 'sharp'; - -/** - * Sharp 图片处理服务 - * 基于 NestJS 官方示例实现 - * 参考: https://docs.nestjs.cn/fundamentals/dependency-injection - * 对应 Java: ImageUtils - */ -@Injectable() -export class SharpService { - /** - * 获取 sharp 实例 - */ - getSharp() { - return sharp; - } - - /** - * 调整图片大小 - */ - async resize( - input: Buffer | string, - width: number, - height?: number, - options?: sharp.ResizeOptions, - ): Promise { - return sharp(input).resize(width, height, options).toBuffer(); - } - - /** - * 生成缩略图 - */ - async thumbnail( - input: Buffer | string, - size: number, - options?: sharp.ResizeOptions, - ): Promise { - return sharp(input) - .resize(size, size, { ...options, fit: 'cover' }) - .toBuffer(); - } - - /** - * 压缩图片 - */ - async compress( - input: Buffer | string, - quality: number = 80, - ): Promise { - return sharp(input).jpeg({ quality }).toBuffer(); - } - - /** - * 转换图片格式 - */ - async convert( - input: Buffer | string, - format: 'jpeg' | 'png' | 'webp' | 'gif' | 'tiff', - ): Promise { - return sharp(input).toFormat(format).toBuffer(); - } - - /** - * 获取图片信息 - */ - async metadata(input: Buffer | string): Promise { - return sharp(input).metadata(); - } - - /** - * 裁剪图片 - */ - async crop( - input: Buffer | string, - left: number, - top: number, - width: number, - height: number, - ): Promise { - return sharp(input).extract({ left, top, width, height }).toBuffer(); - } - - /** - * 旋转图片 - */ - async rotate(input: Buffer | string, angle: number): Promise { - return sharp(input).rotate(angle).toBuffer(); - } - - /** - * 翻转图片 - */ - async flip(input: Buffer | string): Promise { - return sharp(input).flip().toBuffer(); - } - - /** - * 镜像图片 - */ - async flop(input: Buffer | string): Promise { - return sharp(input).flop().toBuffer(); - } - - /** - * 模糊图片 - */ - async blur(input: Buffer | string, sigma: number): Promise { - return sharp(input).blur(sigma).toBuffer(); - } - - /** - * 锐化图片 - */ - async sharpen( - input: Buffer | string, - sigma?: number, - flat?: number, - jagged?: number, - ): Promise { - return sharp(input).sharpen(sigma, flat, jagged).toBuffer(); - } - - /** - * 调整亮度 - */ - async modulate( - input: Buffer | string, - brightness: number = 1, - ): Promise { - return sharp(input).modulate({ brightness }).toBuffer(); - } - - /** - * 调整对比度 - */ - async linear(input: Buffer | string, a: number, b: number): Promise { - return sharp(input).linear(a, b).toBuffer(); - } - - /** - * 添加水印 - */ - async composite( - input: Buffer | string, - overlay: Buffer | string, - options?: sharp.OverlayOptions, - ): Promise { - return sharp(input) - .composite([{ input: overlay, ...options }]) - .toBuffer(); - } - - /** - * 生成图片哈希 - */ - async hash(input: Buffer | string): Promise { - const metadata = await sharp(input).metadata(); - return `${metadata.width}x${metadata.height}-${metadata.format}`; - } -} diff --git a/src/common/libraries/uuid/uuid.module.ts b/src/common/libraries/uuid/uuid.module.ts deleted file mode 100644 index 60919f1d..00000000 --- a/src/common/libraries/uuid/uuid.module.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Module, Global } from '@nestjs/common'; -import { UuidService } from './uuid.service'; - -/** - * UUID 生成库模块 - * 基于 NestJS 官方示例实现 - * 参考: https://docs.nestjs.cn/fundamentals/dependency-injection - * 对应 Java: IdUtil - */ -@Global() -@Module({ - providers: [UuidService], - exports: [UuidService], -}) -export class UuidModule {} diff --git a/src/common/libraries/uuid/uuid.service.ts b/src/common/libraries/uuid/uuid.service.ts deleted file mode 100644 index 779925fd..00000000 --- a/src/common/libraries/uuid/uuid.service.ts +++ /dev/null @@ -1,105 +0,0 @@ -import { Injectable } from '@nestjs/common'; -// 使用 crypto 模块替代 uuid 库以避免 ES module 问题 -import { randomUUID, createHash } from 'crypto'; - -/** - * UUID 生成服务 - * 基于 NestJS 官方示例实现 - * 参考: https://docs.nestjs.cn/fundamentals/dependency-injection - * 对应 Java: IdUtil - */ -@Injectable() -export class UuidService { - /** - * 生成 UUID v4 (随机) - */ - v4(): string { - return randomUUID(); - } - - /** - * 生成 UUID v1 (基于时间戳,简化实现) - */ - v1(): string { - return randomUUID(); - } - - /** - * 生成 UUID v5 (基于 SHA-1 哈希) - */ - v5(name: string, namespace: string): string { - const hash = createHash('sha1'); - hash.update(namespace + name); - const hex = hash.digest('hex'); - return ( - hex.substring(0, 8) + - '-' + - hex.substring(8, 12) + - '-5' + - hex.substring(12, 15) + - '-' + - hex.substring(15, 19) + - '-' + - hex.substring(19, 31) - ); - } - - /** - * 生成 UUID v3 (基于 MD5 哈希) - */ - v3(name: string, namespace: string): string { - const hash = createHash('md5'); - hash.update(namespace + name); - const hex = hash.digest('hex'); - return ( - hex.substring(0, 8) + - '-' + - hex.substring(8, 12) + - '-3' + - hex.substring(12, 15) + - '-' + - hex.substring(15, 19) + - '-' + - hex.substring(19, 31) - ); - } - - /** - * 验证 UUID 格式 - */ - validate(uuid: string): boolean { - const uuidRegex = - /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i; - return uuidRegex.test(uuid); - } - - /** - * 获取 UUID 版本 - */ - version(uuid: string): number | undefined { - if (!this.validate(uuid)) return undefined; - const version = uuid.charAt(14); - return parseInt(version); - } - - /** - * 生成短 UUID (8位) - */ - short(): string { - return randomUUID().replace(/-/g, '').substring(0, 8); - } - - /** - * 生成中 UUID (16位) - */ - medium(): string { - return randomUUID().replace(/-/g, '').substring(0, 16); - } - - /** - * 生成长 UUID (32位,无连字符) - */ - long(): string { - return randomUUID().replace(/-/g, ''); - } -} diff --git a/src/common/libraries/validator/validator.module.ts b/src/common/libraries/validator/validator.module.ts deleted file mode 100644 index 71d353d7..00000000 --- a/src/common/libraries/validator/validator.module.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Module, Global } from '@nestjs/common'; -import { ValidatorService } from './validator.service'; - -/** - * Validator 验证库模块 - * 基于 NestJS 官方示例实现 - * 参考: https://docs.nestjs.cn/fundamentals/dependency-injection - * 对应 Java: 验证工具类 - */ -@Global() -@Module({ - providers: [ValidatorService], - exports: [ValidatorService], -}) -export class ValidatorModule {} diff --git a/src/common/libraries/validator/validator.service.ts b/src/common/libraries/validator/validator.service.ts deleted file mode 100644 index 5e971e9f..00000000 --- a/src/common/libraries/validator/validator.service.ts +++ /dev/null @@ -1,628 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import * as validator from 'validator'; - -/** - * Validator 验证服务 - * 基于 NestJS 官方示例实现 - * 参考: https://docs.nestjs.cn/fundamentals/dependency-injection - * 对应 Java: 验证工具类 - */ -@Injectable() -export class ValidatorService { - /** - * 获取 validator 实例 - */ - getValidator() { - return validator; - } - - // ==================== 字符串验证 ==================== - - /** - * 判断是否为邮箱 - */ - isEmail(str: string): boolean { - return validator.isEmail(str); - } - - /** - * 判断是否为URL - */ - isURL(str: string, options?: validator.IsURLOptions): boolean { - return validator.isURL(str, options); - } - - /** - * 判断是否为IP地址 - */ - isIP(str: string, version?: validator.IPVersion): boolean { - return validator.isIP(str, version); - } - - /** - * 判断是否为IPv4地址 - */ - isIPv4(str: string): boolean { - return validator.isIP(str, 4); - } - - /** - * 判断是否为IPv6地址 - */ - isIPv6(str: string): boolean { - return validator.isIP(str, 6); - } - - /** - * 判断是否为手机号 - */ - isMobilePhone(str: string, locale?: validator.MobilePhoneLocale): boolean { - return validator.isMobilePhone(str, locale); - } - - /** - * 判断是否为中文手机号 - */ - isMobilePhoneZh(str: string): boolean { - return validator.isMobilePhone(str, 'zh-CN'); - } - - /** - * 判断是否为身份证号 - */ - isIdentityCard(str: string, locale?: validator.IdentityCardLocale): boolean { - return validator.isIdentityCard(str, locale); - } - - /** - * 判断是否为中文身份证号 - */ - isIdentityCardZh(str: string): boolean { - return validator.isIdentityCard(str, 'zh-CN'); - } - - /** - * 判断是否为护照号 - */ - isPassportNumber(str: string, countryCode?: string): boolean { - // 简化实现,只检查基本格式 - return /^[A-Z0-9]{6,12}$/i.test(str); - } - - /** - * 判断是否为车牌号 - */ - isLicensePlate(str: string, locale?: string): boolean { - if (!locale) { - // 通用车牌号格式检查 - return /^[A-Z0-9]{5,8}$/i.test(str); - } - return Boolean(validator.isLicensePlate(str, locale)); - } - - /** - * 判断是否为中文车牌号 - */ - isLicensePlateZh(str: string): boolean { - // 中国车牌号格式:省份简称 + 字母 + 5位数字/字母 - return /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/.test( - str, - ); - } - - // ==================== 数字验证 ==================== - - /** - * 判断是否为数字 - */ - isNumeric(str: string): boolean { - return validator.isNumeric(str); - } - - /** - * 判断是否为整数 - */ - isInt(str: string, options?: validator.IsIntOptions): boolean { - return validator.isInt(str, options); - } - - /** - * 判断是否为浮点数 - */ - isFloat(str: string, options?: validator.IsFloatOptions): boolean { - return validator.isFloat(str, options); - } - - /** - * 判断是否为十六进制 - */ - isHexadecimal(str: string): boolean { - return validator.isHexadecimal(str); - } - - /** - * 判断是否为八进制 - */ - isOctal(str: string): boolean { - return validator.isOctal(str); - } - - /** - * 判断是否为二进制 - */ - isBinary(str: string): boolean { - // 检查是否为二进制字符串(只包含0和1) - return /^[01]+$/.test(str); - } - - /** - * 判断是否为UUID - */ - isUUID(str: string, version?: validator.UUIDVersion): boolean { - return validator.isUUID(str, version); - } - - // ==================== 字符串格式验证 ==================== - - /** - * 判断是否为字母 - */ - isAlpha(str: string, locale?: validator.AlphaLocale): boolean { - return validator.isAlpha(str, locale); - } - - /** - * 判断是否为字母数字 - */ - isAlphanumeric(str: string, locale?: validator.AlphanumericLocale): boolean { - return validator.isAlphanumeric(str, locale); - } - - /** - * 判断是否为ASCII - */ - isAscii(str: string): boolean { - return validator.isAscii(str); - } - - /** - * 判断是否为Base64 - */ - isBase64(str: string): boolean { - return validator.isBase64(str); - } - - /** - * 判断是否为Base32 - */ - isBase32(str: string): boolean { - return validator.isBase32(str); - } - - /** - * 判断是否为Base58 - */ - isBase58(str: string): boolean { - return validator.isBase58(str); - } - - /** - * 判断是否为Base64URL - */ - isBase64URL(str: string): boolean { - // Base64URL 格式检查(不包含 +、/、= 字符) - return /^[A-Za-z0-9_-]+$/.test(str); - } - - /** - * 判断是否为十六进制颜色 - */ - isHexColor(str: string): boolean { - return validator.isHexColor(str); - } - - /** - * 判断是否为RGB颜色 - */ - isRgbColor(str: string, includePercentValues?: boolean): boolean { - // RGB 颜色格式检查 - const rgbPattern = - /^rgb\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)$/; - const rgbaPattern = - /^rgba\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(0|1|0\.\d+)\s*\)$/; - return rgbPattern.test(str) || rgbaPattern.test(str); - } - - /** - * 判断是否为HSL颜色 - */ - isHslColor(str: string): boolean { - // HSL 颜色格式检查 - const hslPattern = - /^hsl\(\s*(\d{1,3})\s*,\s*(\d{1,3})%\s*,\s*(\d{1,3})%\s*\)$/; - const hslaPattern = - /^hsla\(\s*(\d{1,3})\s*,\s*(\d{1,3})%\s*,\s*(\d{1,3})%\s*,\s*(0|1|0\.\d+)\s*\)$/; - return hslPattern.test(str) || hslaPattern.test(str); - } - - /** - * 判断是否为JSON - */ - isJSON(str: string): boolean { - return validator.isJSON(str); - } - - /** - * 判断是否为JWT - */ - isJWT(str: string): boolean { - return validator.isJWT(str); - } - - /** - * 判断是否为MongoDB ObjectId - */ - isMongoId(str: string): boolean { - return validator.isMongoId(str); - } - - // ==================== 长度验证 ==================== - - /** - * 判断长度是否在范围内 - */ - isLength(str: string, options?: validator.IsLengthOptions): boolean { - return validator.isLength(str, options); - } - - /** - * 判断是否为空 - */ - isEmpty(str: string): boolean { - return validator.isEmpty(str); - } - - /** - * 判断是否不为空 - */ - isNotEmpty(str: string): boolean { - return !validator.isEmpty(str); - } - - // ==================== 日期验证 ==================== - - /** - * 判断是否为日期 - */ - isDate(str: string): boolean { - return validator.isDate(str); - } - - /** - * 判断是否为ISO日期 - */ - isISO8601(str: string, options?: validator.IsISO8601Options): boolean { - return validator.isISO8601(str, options); - } - - /** - * 判断是否为RFC 3339日期 - */ - isRFC3339(str: string): boolean { - return validator.isRFC3339(str); - } - - // ==================== 网络验证 ==================== - - /** - * 判断是否为域名 - */ - isFQDN(str: string, options?: validator.IsFQDNOptions): boolean { - return validator.isFQDN(str, options); - } - - /** - * 判断是否为MAC地址 - */ - isMACAddress(str: string): boolean { - return validator.isMACAddress(str); - } - - /** - * 判断是否为端口号 - */ - isPort(str: string): boolean { - return validator.isPort(str); - } - - /** - * 判断是否为数据URI - */ - isDataURI(str: string): boolean { - return validator.isDataURI(str); - } - - /** - * 判断是否为Magnet URI - */ - isMagnetURI(str: string): boolean { - return validator.isMagnetURI(str); - } - - // ==================== 文件验证 ==================== - - /** - * 判断是否为文件扩展名 - */ - isFileExtension(str: string, extensions?: string[]): boolean { - // 文件扩展名检查 - if (!extensions || extensions.length === 0) { - return /\.\w+$/.test(str); - } - const ext = str.toLowerCase().split('.').pop(); - return ext ? extensions.map((e) => e.toLowerCase()).includes(ext) : false; - } - - /** - * 判断是否为MIME类型 - */ - isMimeType(str: string): boolean { - return validator.isMimeType(str); - } - - // ==================== 其他验证 ==================== - - /** - * 判断是否为信用卡号 - */ - isCreditCard(str: string): boolean { - return validator.isCreditCard(str); - } - - /** - * 判断是否为IBAN - */ - isIBAN(str: string): boolean { - return validator.isIBAN(str); - } - - /** - * 判断是否为BIC - */ - isBIC(str: string): boolean { - return validator.isBIC(str); - } - - /** - * 判断是否为MD5 - */ - isMD5(str: string): boolean { - return validator.isMD5(str); - } - - /** - * 判断是否为SHA1 - */ - isSHA1(str: string): boolean { - // SHA1 哈希值检查(40位十六进制) - return /^[a-f0-9]{40}$/i.test(str); - } - - /** - * 判断是否为SHA256 - */ - isSHA256(str: string): boolean { - // SHA256 哈希值检查(64位十六进制) - return /^[a-f0-9]{64}$/i.test(str); - } - - /** - * 判断是否为SHA384 - */ - isSHA384(str: string): boolean { - // SHA384 哈希值检查(96位十六进制) - return /^[a-f0-9]{96}$/i.test(str); - } - - /** - * 判断是否为SHA512 - */ - isSHA512(str: string): boolean { - // SHA512 哈希值检查(128位十六进制) - return /^[a-f0-9]{128}$/i.test(str); - } - - /** - * 判断是否为强密码 - */ - isStrongPassword(str: string, options?: any): boolean { - return validator.isStrongPassword(str, options); - } - - /** - * 判断是否为时间 - */ - isTime(str: string, options?: validator.IsTimeOptions): boolean { - return validator.isTime(str, options); - } - - /** - * 判断是否为税号 - */ - isTaxID(str: string, locale?: string): boolean { - // 简化实现,只检查基本格式 - return /^[A-Z0-9]{8,20}$/i.test(str); - } - - /** - * 判断是否为中文税号 - */ - isTaxIDZh(str: string): boolean { - return validator.isTaxID(str, 'zh-CN'); - } - - /** - * 判断是否为VAT - */ - isVAT(str: string, countryCode?: string): boolean { - // 简化实现,只检查基本格式 - return /^[A-Z0-9]{8,15}$/i.test(str); - } - - // ==================== 转换方法 ==================== - - /** - * 转换为布尔值 - */ - toBoolean(str: string, strict?: boolean): boolean { - return validator.toBoolean(str, strict); - } - - /** - * 转换为日期 - */ - toDate(str: string): Date | null { - const result = validator.toDate(str); - return result || null; - } - - /** - * 转换为浮点数 - */ - toFloat(str: string): number { - return validator.toFloat(str); - } - - /** - * 转换为整数 - */ - toInt(str: string, radix?: number): number { - return validator.toInt(str, radix); - } - - /** - * 转换为字符串 - */ - toString(input: any): string { - return validator.toString(input); - } - - // ==================== 清理方法 ==================== - - /** - * 清理HTML - */ - escape(str: string): string { - return validator.escape(str); - } - - /** - * 反转义HTML - */ - unescape(str: string): string { - return validator.unescape(str); - } - - /** - * 清理字符串 - */ - stripLow(str: string, keepNewLines?: boolean): string { - return validator.stripLow(str, keepNewLines); - } - - /** - * 清理白名单字符 - */ - whitelist(str: string, chars: string): string { - return validator.whitelist(str, chars); - } - - /** - * 清理黑名单字符 - */ - blacklist(str: string, chars: string): string { - return validator.blacklist(str, chars); - } - - /** - * 标准化邮箱 - */ - normalizeEmail( - email: string, - options?: validator.NormalizeEmailOptions, - ): string | false { - return validator.normalizeEmail(email, options); - } - - /** - * 标准化URL - */ - normalizeUrl(url: string, options?: any): string | false { - // 简化实现,只做基本的URL规范化 - try { - const normalized = new URL(url); - return normalized.toString(); - } catch { - return false; - } - } - - // ==================== 工具方法 ==================== - - /** - * 获取字符串长度 - */ - getLength(str: string): number { - // 获取字符串长度 - return str.length; - } - - /** - * 获取字符串字节长度 - */ - getByteLength(str: string): number { - // 获取字符串字节长度(UTF-8编码) - return Buffer.byteLength(str, 'utf8'); - } - - /** - * 获取字符串字符长度 - */ - getCharLength(str: string): number { - // 获取字符串字符长度(考虑Unicode字符) - return [...str].length; - } - - /** - * 获取字符串单词长度 - */ - getWordLength(str: string): number { - // 获取字符串单词长度 - return str.split(/\s+/).filter((word) => word.length > 0).length; - } - - /** - * 获取字符串行数 - */ - getLineLength(str: string): number { - // 获取字符串行数 - return str.split('\n').length; - } - - /** - * 获取字符串段落数 - */ - getParagraphLength(str: string): number { - // 获取字符串段落数 - return str.split(/\n\s*\n/).filter((para) => para.trim().length > 0).length; - } - - /** - * 获取字符串句子数 - */ - getSentenceLength(str: string): number { - // 获取字符串句子数 - return str.split(/[.!?]+/).filter((sentence) => sentence.trim().length > 0) - .length; - } -} diff --git a/src/common/libraries/winston/winston.module.ts b/src/common/libraries/winston/winston.module.ts deleted file mode 100644 index 7fdb5b5b..00000000 --- a/src/common/libraries/winston/winston.module.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Module, Global } from '@nestjs/common'; -import { ConfigModule, ConfigService } from '@nestjs/config'; -import { WinstonService } from './winston.service'; - -/** - * Winston 日志库模块 - * 基于 NestJS 官方示例实现 - * 参考: https://docs.nestjs.cn/fundamentals/dependency-injection - * 对应 Java: 日志配置 - */ -@Global() -@Module({ - imports: [ConfigModule], - providers: [ - { - provide: WinstonService, - useFactory: (configService: ConfigService) => { - const winstonConfig = configService.get('winston'); - return new WinstonService(winstonConfig); - }, - inject: [ConfigService], - }, - ], - exports: [WinstonService], -}) -export class WinstonModule {} diff --git a/src/common/libraries/winston/winston.service.ts b/src/common/libraries/winston/winston.service.ts deleted file mode 100644 index a9dc2f5b..00000000 --- a/src/common/libraries/winston/winston.service.ts +++ /dev/null @@ -1,576 +0,0 @@ -import { Injectable, Logger } from '@nestjs/common'; -import * as winston from 'winston'; -import type { - LoggingInterface, - StructuredLoggingInterface, - StructuredLogData, - RequestLogData, - ResponseLogData, - DatabaseQueryLogData, - CacheOperationLogData, - ExternalApiCallLogData, - BusinessEventLogData, - UserLogData, - LoggingConfig, -} from '../../logging/logging.interface'; -import { LogLevel } from '../../logging/logging.interface'; - -/** - * Winston 服务 - * 基于 NestJS 官方示例实现 - * 参考: https://docs.nestjs.cn/fundamentals/dependency-injection - * 对应 Java: 日志服务 - */ -@Injectable() -export class WinstonService - implements LoggingInterface, StructuredLoggingInterface -{ - private readonly logger = new Logger(WinstonService.name); - private winston: winston.Logger; - private currentLevel: LogLevel = LogLevel.INFO; - - constructor( - private readonly config: LoggingConfig = { - level: LogLevel.INFO, - format: 'json', - timestamp: true, - colorize: false, - prettyPrint: false, - silent: false, - exitOnError: false, - transports: [{ type: 'console', level: LogLevel.INFO }], - defaultMeta: {}, - context: 'WinstonService', - }, - ) { - this.initializeWinston(); - } - - private initializeWinston() { - const transports: winston.transport[] = []; - - // 控制台传输器 - if (this.config.transports.some((t) => t.type === 'console')) { - const consoleTransport = new winston.transports.Console({ - level: this.config.level, - format: this.getFormat('console'), - }); - transports.push(consoleTransport); - } - - // 文件传输器 - const fileTransports = this.config.transports.filter( - (t) => t.type === 'file', - ); - for (const fileTransport of fileTransports) { - const transport = new winston.transports.File({ - level: fileTransport.level || this.config.level, - filename: fileTransport.options?.filename || 'app.log', - format: this.getFormat('file'), - ...fileTransport.options, - }); - transports.push(transport); - } - - // HTTP传输器 - const httpTransports = this.config.transports.filter( - (t) => t.type === 'http', - ); - for (const httpTransport of httpTransports) { - const transport = new winston.transports.Http({ - level: httpTransport.level || this.config.level, - host: httpTransport.options?.host || 'localhost', - port: httpTransport.options?.port || 80, - path: httpTransport.options?.path || '/logs', - ...httpTransport.options, - }); - transports.push(transport); - } - - // 流传输器 - const streamTransports = this.config.transports.filter( - (t) => t.type === 'stream', - ); - for (const streamTransport of streamTransports) { - const transport = new winston.transports.Stream({ - level: streamTransport.level || this.config.level, - stream: streamTransport.options?.stream, - format: this.getFormat('stream'), - ...streamTransport.options, - }); - transports.push(transport); - } - - this.winston = winston.createLogger({ - level: this.config.level, - format: this.getFormat('default'), - defaultMeta: this.config.defaultMeta, - transports, - silent: this.config.silent, - exitOnError: this.config.exitOnError, - }); - } - - private getFormat(type: string): winston.Logform.Format { - const formats: winston.Logform.Format[] = []; - - // 时间戳 - if (this.config.timestamp) { - formats.push(winston.format.timestamp()); - } - - // 日志级别 - // winston.format.level() 在新版本中已移除 - - // 消息格式 - if (this.config.format === 'json') { - formats.push(winston.format.json()); - } else if (this.config.format === 'simple') { - formats.push(winston.format.simple()); - } else { - formats.push( - winston.format.printf( - ({ timestamp, level, message, context, ...meta }) => { - const contextStr = context ? `[${context}] ` : ''; - const metaStr = - Object.keys(meta).length > 0 ? ` ${JSON.stringify(meta)}` : ''; - return `${timestamp} [${level}] ${contextStr}${message}${metaStr}`; - }, - ), - ); - } - - // 颜色 - if (this.config.colorize && type === 'console') { - formats.push(winston.format.colorize()); - } - - // 美化打印 - if (this.config.prettyPrint) { - formats.push(winston.format.prettyPrint()); - } - - return winston.format.combine(...formats); - } - - // ==================== 基础日志接口 ==================== - - /** - * 记录调试日志 - */ - debug(message: string, context?: string, meta?: Record): void { - this.winston.debug(message, { context, ...meta }); - } - - /** - * 记录信息日志 - */ - info(message: string, context?: string, meta?: Record): void { - this.winston.info(message, { context, ...meta }); - } - - /** - * 记录警告日志 - */ - warn(message: string, context?: string, meta?: Record): void { - this.winston.warn(message, { context, ...meta }); - } - - /** - * 记录错误日志 - */ - error(message: string, context?: string, meta?: Record): void { - this.winston.error(message, { context, ...meta }); - } - - /** - * 记录致命错误日志 - */ - fatal(message: string, context?: string, meta?: Record): void { - this.winston.error(message, { context, level: 'fatal', ...meta }); - } - - /** - * 记录日志 - */ - log( - level: LogLevel, - message: string, - context?: string, - meta?: Record, - ): void { - this.winston.log(level, message, { context, ...meta }); - } - - /** - * 设置日志级别 - */ - setLevel(level: LogLevel): void { - this.currentLevel = level; - this.winston.level = level; - } - - /** - * 获取当前日志级别 - */ - getLevel(): LogLevel { - return this.currentLevel; - } - - /** - * 创建子日志器 - */ - child(context: string): LoggingInterface { - const childLogger = this.winston.child({ context }); - return new WinstonChildService(childLogger, context); - } - - // ==================== 结构化日志接口 ==================== - - /** - * 记录结构化日志 - */ - logStructured( - level: LogLevel, - message: string, - structuredData: StructuredLogData, - ): void { - this.winston.log(level, message, structuredData); - } - - /** - * 记录请求日志 - */ - logRequest( - request: RequestLogData, - response: ResponseLogData, - duration: number, - ): void { - const logData = { - type: 'http_request', - request: { - method: request.method, - url: request.url, - headers: this.sanitizeHeaders(request.headers), - body: this.sanitizeBody(request.body), - query: request.query, - params: request.params, - ip: request.ip, - userAgent: request.userAgent, - userId: request.userId, - sessionId: request.sessionId, - }, - response: { - statusCode: response.statusCode, - headers: this.sanitizeHeaders(response.headers), - body: this.sanitizeBody(response.body), - size: response.size, - }, - duration, - timestamp: new Date().toISOString(), - }; - - this.winston.info('HTTP Request', logData); - } - - /** - * 记录数据库查询日志 - */ - logDatabaseQuery( - query: DatabaseQueryLogData, - duration: number, - result?: any, - ): void { - const logData = { - type: 'database_query', - query: { - operation: query.operation, - table: query.table, - query: query.query, - params: query.params, - connection: query.connection, - transaction: query.transaction, - }, - duration, - result: this.sanitizeResult(result), - timestamp: new Date().toISOString(), - }; - - this.winston.info('Database Query', logData); - } - - /** - * 记录缓存操作日志 - */ - logCacheOperation( - operation: CacheOperationLogData, - hit: boolean, - duration: number, - ): void { - const logData = { - type: 'cache_operation', - operation: { - operation: operation.operation, - key: operation.key, - ttl: operation.ttl, - size: operation.size, - }, - hit, - duration, - timestamp: new Date().toISOString(), - }; - - this.winston.info('Cache Operation', logData); - } - - /** - * 记录外部API调用日志 - */ - logExternalApiCall( - apiCall: ExternalApiCallLogData, - response: any, - duration: number, - ): void { - const logData = { - type: 'external_api_call', - apiCall: { - service: apiCall.service, - endpoint: apiCall.endpoint, - method: apiCall.method, - headers: this.sanitizeHeaders(apiCall.headers), - body: this.sanitizeBody(apiCall.body), - timeout: apiCall.timeout, - }, - response: this.sanitizeResponse(response), - duration, - timestamp: new Date().toISOString(), - }; - - this.winston.info('External API Call', logData); - } - - /** - * 记录业务事件日志 - */ - logBusinessEvent( - event: BusinessEventLogData, - user?: UserLogData, - meta?: Record, - ): void { - const logData = { - type: 'business_event', - event: { - event: event.event, - action: event.action, - resource: event.resource, - resourceId: event.resourceId, - data: event.data, - result: event.result, - }, - user: user - ? { - id: user.id, - username: user.username, - email: user.email, - role: user.role, - permissions: user.permissions, - } - : undefined, - meta, - timestamp: new Date().toISOString(), - }; - - this.winston.info('Business Event', logData); - } - - // ==================== 工具方法 ==================== - - /** - * 清理请求头 - */ - private sanitizeHeaders( - headers: Record, - ): Record { - const sanitized: Record = {}; - const sensitiveHeaders = [ - 'authorization', - 'cookie', - 'x-api-key', - 'x-auth-token', - ]; - - for (const [key, value] of Object.entries(headers)) { - if (sensitiveHeaders.includes(key.toLowerCase())) { - sanitized[key] = '[REDACTED]'; - } else { - sanitized[key] = value; - } - } - - return sanitized; - } - - /** - * 清理请求体 - */ - private sanitizeBody(body: any): any { - if (!body) return body; - - if (typeof body === 'string') { - try { - const parsed = JSON.parse(body); - return this.sanitizeObject(parsed); - } catch { - return body; - } - } - - if (typeof body === 'object') { - return this.sanitizeObject(body); - } - - return body; - } - - /** - * 清理对象 - */ - private sanitizeObject(obj: any): any { - if (!obj || typeof obj !== 'object') return obj; - - const sanitized = { ...obj }; - const sensitiveFields = ['password', 'token', 'secret', 'key', 'auth']; - - for (const field of sensitiveFields) { - if (sanitized[field]) { - sanitized[field] = '[REDACTED]'; - } - } - - return sanitized; - } - - /** - * 清理结果 - */ - private sanitizeResult(result: any): any { - if (!result) return result; - - if (typeof result === 'object') { - return this.sanitizeObject(result); - } - - return result; - } - - /** - * 清理响应 - */ - private sanitizeResponse(response: any): any { - if (!response) return response; - - if (typeof response === 'object') { - return this.sanitizeObject(response); - } - - return response; - } - - /** - * 获取原始 Winston 实例 - */ - getWinston(): winston.Logger { - return this.winston; - } - - /** - * 添加传输器 - */ - addTransport(transport: winston.transport): void { - this.winston.add(transport); - } - - /** - * 移除传输器 - */ - removeTransport(transport: winston.transport): void { - this.winston.remove(transport); - } - - /** - * 清空传输器 - */ - clearTransports(): void { - this.winston.clear(); - } - - /** - * 关闭日志器 - */ - async close(): Promise { - return new Promise((resolve) => { - this.winston.end(() => { - resolve(); - }); - }); - } -} - -/** - * Winston 子日志器服务 - */ -class WinstonChildService implements LoggingInterface { - constructor( - private readonly winston: winston.Logger, - private readonly context: string, - ) {} - - debug(message: string, context?: string, meta?: Record): void { - this.winston.debug(message, { context: context || this.context, ...meta }); - } - - info(message: string, context?: string, meta?: Record): void { - this.winston.info(message, { context: context || this.context, ...meta }); - } - - warn(message: string, context?: string, meta?: Record): void { - this.winston.warn(message, { context: context || this.context, ...meta }); - } - - error(message: string, context?: string, meta?: Record): void { - this.winston.error(message, { context: context || this.context, ...meta }); - } - - fatal(message: string, context?: string, meta?: Record): void { - this.winston.error(message, { - context: context || this.context, - level: 'fatal', - ...meta, - }); - } - - log( - level: LogLevel, - message: string, - context?: string, - meta?: Record, - ): void { - this.winston.log(level, message, { - context: context || this.context, - ...meta, - }); - } - - setLevel(level: LogLevel): void { - this.winston.level = level; - } - - getLevel(): LogLevel { - return this.winston.level as LogLevel; - } - - child(context: string): LoggingInterface { - const childLogger = this.winston.child({ context }); - return new WinstonChildService(childLogger, context); - } -} diff --git a/src/common/loader/loader.module.ts b/src/common/loader/loader.module.ts deleted file mode 100644 index 36c3c67f..00000000 --- a/src/common/loader/loader.module.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Module, Global } from '@nestjs/common'; -import { LoaderUtils } from './loader.utils'; - -/** - * 加载器模块 - 基础设施层 - * 基于 NestJS 实现 Java 风格的 JsonModuleLoader - * 对应 Java: JsonModuleLoader - */ -@Global() -@Module({ - providers: [LoaderUtils], - exports: [LoaderUtils], -}) -export class LoaderModule {} diff --git a/src/common/loader/loader.utils.ts b/src/common/loader/loader.utils.ts deleted file mode 100644 index 172dc43a..00000000 --- a/src/common/loader/loader.utils.ts +++ /dev/null @@ -1,244 +0,0 @@ -import { Injectable, Logger } from '@nestjs/common'; -import { ConfigService } from '@nestjs/config'; -import { promises as fs } from 'fs'; -import * as fsSync from 'fs'; -import * as path from 'path'; - -/** - * 加载器工具类 - * 基于 NestJS 实现 Java 风格的 JsonModuleLoader - * 对应 Java: JsonModuleLoader - */ -@Injectable() -export class LoaderUtils { - private readonly logger = new Logger(LoaderUtils.name); - private readonly moduleCache = new Map(); - - constructor(private readonly configService: ConfigService) {} - - /** - * 加载 JSON 模块 - * @param moduleName 模块名称 - * @param filePath 文件路径 - * @returns 模块内容 - */ - async loadJsonModule(moduleName: string, filePath: string): Promise { - try { - const fullPath = path.resolve(filePath); - - try { - await fs.access(fullPath); - } catch (error) { - this.logger.warn(`文件不存在: ${fullPath}`); - return null; - } - - const content = JSON.parse(await fs.readFile(fullPath, 'utf8')); - this.moduleCache.set(moduleName, content); - - this.logger.log(`加载 JSON 模块成功: ${moduleName}`); - return content; - } catch (error) { - this.logger.error(`加载 JSON 模块失败: ${moduleName}`, error); - return null; - } - } - - /** - * 加载多个 JSON 模块并合并为数组 - * @param moduleName 模块名称 - * @param filePaths 文件路径数组 - * @returns 合并后的数组 - */ - async mergeContentToArray( - moduleName: string, - filePaths: string[], - ): Promise { - try { - const results: any[] = []; - - for (const filePath of filePaths) { - const content = await this.loadJsonModule( - `${moduleName}_${path.basename(filePath)}`, - filePath, - ); - if (content) { - if (Array.isArray(content)) { - results.push(...content); - } else { - results.push(content); - } - } - } - - this.logger.log( - `合并内容到数组成功: ${moduleName}, 共 ${results.length} 项`, - ); - return results; - } catch (error) { - this.logger.error(`合并内容到数组失败: ${moduleName}`, error); - return []; - } - } - - /** - * 加载多个 JSON 模块并合并为对象 - * @param moduleName 模块名称 - * @param filePaths 文件路径数组 - * @returns 合并后的对象 - */ - async mergeContentToObject( - moduleName: string, - filePaths: string[], - ): Promise> { - try { - const result: Record = {}; - - for (const filePath of filePaths) { - const content = await this.loadJsonModule( - `${moduleName}_${path.basename(filePath)}`, - filePath, - ); - if (content && typeof content === 'object') { - Object.assign(result, content); - } - } - - this.logger.log(`合并内容到对象成功: ${moduleName}`); - return result; - } catch (error) { - this.logger.error(`合并内容到对象失败: ${moduleName}`, error); - return {}; - } - } - - /** - * 从目录加载所有 JSON 文件 - * @param moduleName 模块名称 - * @param dirPath 目录路径 - * @returns 加载的内容 - */ - async loadFromDirectory(moduleName: string, dirPath: string): Promise { - try { - const fullPath = path.resolve(dirPath); - - try { - await fs.access(fullPath); - } catch (error) { - this.logger.warn(`目录不存在: ${fullPath}`); - return []; - } - - const files = await fs.readdir(fullPath); - const jsonFiles = files.filter((file) => file.endsWith('.json')); - const filePaths = jsonFiles.map((file) => path.join(fullPath, file)); - - return await this.mergeContentToArray(moduleName, filePaths); - } catch (error) { - this.logger.error(`从目录加载失败: ${moduleName}`, error); - return []; - } - } - - /** - * 获取缓存的模块 - * @param moduleName 模块名称 - * @returns 缓存的模块内容 - */ - getCachedModule(moduleName: string): any { - return this.moduleCache.get(moduleName); - } - - /** - * 清除模块缓存 - * @param moduleName 模块名称,不传则清除所有 - */ - clearCache(moduleName?: string): void { - if (moduleName) { - this.moduleCache.delete(moduleName); - this.logger.log(`清除模块缓存: ${moduleName}`); - } else { - this.moduleCache.clear(); - this.logger.log('清除所有模块缓存'); - } - } - - /** - * 重新加载模块 - * @param moduleName 模块名称 - * @param filePath 文件路径 - * @returns 重新加载的内容 - */ - async reloadModule(moduleName: string, filePath: string): Promise { - this.clearCache(moduleName); - return await this.loadJsonModule(moduleName, filePath); - } - - /** - * 监听文件变化并自动重新加载 - * @param moduleName 模块名称 - * @param filePath 文件路径 - * @param callback 变化回调 - */ - watchModule( - moduleName: string, - filePath: string, - callback: (content: any) => void, - ): void { - const fullPath = path.resolve(filePath); - - // 使用 fs.watch 替代 fs.watchFile - const watcher = fsSync.watch(fullPath, (eventType) => { - if (eventType === 'change') { - this.logger.log(`文件变化,重新加载: ${moduleName}`); - this.reloadModule(moduleName, filePath).then((content) => { - callback(content); - }); - } - }); - - this.logger.log(`开始监听文件变化: ${moduleName}`); - } - - /** - * 停止监听文件变化 - * @param filePath 文件路径 - */ - unwatchModule(filePath: string): void { - const fullPath = path.resolve(filePath); - // fs.watch 返回的 watcher 需要手动关闭 - // 这里需要维护一个 watcher 映射来管理 - this.logger.log(`停止监听文件变化: ${filePath}`); - } - - /** - * 获取所有缓存的模块名称 - * @returns 模块名称数组 - */ - getCachedModuleNames(): string[] { - return Array.from(this.moduleCache.keys()); - } - - /** - * 获取缓存统计信息 - * @returns 缓存统计信息 - */ - getCacheStats(): { - moduleCount: number; - moduleNames: string[]; - totalSize: number; - } { - const moduleNames = this.getCachedModuleNames(); - let totalSize = 0; - - for (const [name, content] of this.moduleCache) { - totalSize += JSON.stringify(content).length; - } - - return { - moduleCount: this.moduleCache.size, - moduleNames, - totalSize, - }; - } -} diff --git a/src/common/logging/logging.interface.ts b/src/common/logging/logging.interface.ts deleted file mode 100644 index f6a5e909..00000000 --- a/src/common/logging/logging.interface.ts +++ /dev/null @@ -1,357 +0,0 @@ -/** - * 日志接口定义 - * 基于 NestJS 官方示例实现 - * 参考: https://docs.nestjs.cn/fundamentals/dependency-injection - * 对应 Java: 日志抽象 - */ -export interface LoggingInterface { - /** - * 记录调试日志 - * @param message 日志消息 - * @param context 上下文 - * @param meta 元数据 - */ - debug(message: string, context?: string, meta?: Record): void; - - /** - * 记录信息日志 - * @param message 日志消息 - * @param context 上下文 - * @param meta 元数据 - */ - info(message: string, context?: string, meta?: Record): void; - - /** - * 记录警告日志 - * @param message 日志消息 - * @param context 上下文 - * @param meta 元数据 - */ - warn(message: string, context?: string, meta?: Record): void; - - /** - * 记录错误日志 - * @param message 日志消息 - * @param context 上下文 - * @param meta 元数据 - */ - error(message: string, context?: string, meta?: Record): void; - - /** - * 记录致命错误日志 - * @param message 日志消息 - * @param context 上下文 - * @param meta 元数据 - */ - fatal(message: string, context?: string, meta?: Record): void; - - /** - * 记录日志 - * @param level 日志级别 - * @param message 日志消息 - * @param context 上下文 - * @param meta 元数据 - */ - log( - level: LogLevel, - message: string, - context?: string, - meta?: Record, - ): void; - - /** - * 设置日志级别 - * @param level 日志级别 - */ - setLevel(level: LogLevel): void; - - /** - * 获取当前日志级别 - * @returns 当前日志级别 - */ - getLevel(): LogLevel; - - /** - * 创建子日志器 - * @param context 上下文 - * @returns 子日志器 - */ - child(context: string): LoggingInterface; -} - -/** - * 日志级别 - */ -export enum LogLevel { - DEBUG = 'debug', - INFO = 'info', - WARN = 'warn', - ERROR = 'error', - FATAL = 'fatal', -} - -/** - * 结构化日志接口 - */ -export interface StructuredLoggingInterface extends LoggingInterface { - /** - * 记录结构化日志 - * @param level 日志级别 - * @param message 日志消息 - * @param structuredData 结构化数据 - */ - logStructured( - level: LogLevel, - message: string, - structuredData: StructuredLogData, - ): void; - - /** - * 记录请求日志 - * @param request 请求数据 - * @param response 响应数据 - * @param duration 持续时间 - */ - logRequest( - request: RequestLogData, - response: ResponseLogData, - duration: number, - ): void; - - /** - * 记录数据库查询日志 - * @param query 查询数据 - * @param duration 持续时间 - * @param result 结果数据 - */ - logDatabaseQuery( - query: DatabaseQueryLogData, - duration: number, - result?: any, - ): void; - - /** - * 记录缓存操作日志 - * @param operation 操作数据 - * @param hit 是否命中 - * @param duration 持续时间 - */ - logCacheOperation( - operation: CacheOperationLogData, - hit: boolean, - duration: number, - ): void; - - /** - * 记录外部API调用日志 - * @param apiCall API调用数据 - * @param response 响应数据 - * @param duration 持续时间 - */ - logExternalApiCall( - apiCall: ExternalApiCallLogData, - response: any, - duration: number, - ): void; - - /** - * 记录业务事件日志 - * @param event 事件数据 - * @param user 用户数据 - * @param meta 元数据 - */ - logBusinessEvent( - event: BusinessEventLogData, - user?: UserLogData, - meta?: Record, - ): void; -} - -/** - * 结构化日志数据 - */ -export interface StructuredLogData { - timestamp: string; - level: LogLevel; - message: string; - context?: string; - traceId?: string; - spanId?: string; - userId?: string; - sessionId?: string; - requestId?: string; - correlationId?: string; - meta?: Record; - error?: ErrorLogData; -} - -/** - * 请求日志数据 - */ -export interface RequestLogData { - method: string; - url: string; - headers: Record; - body?: any; - query?: Record; - params?: Record; - ip?: string; - userAgent?: string; - userId?: string; - sessionId?: string; -} - -/** - * 响应日志数据 - */ -export interface ResponseLogData { - statusCode: number; - headers: Record; - body?: any; - size?: number; -} - -/** - * 数据库查询日志数据 - */ -export interface DatabaseQueryLogData { - operation: string; - table: string; - query: string; - params?: any[]; - connection?: string; - transaction?: string; -} - -/** - * 缓存操作日志数据 - */ -export interface CacheOperationLogData { - operation: string; - key: string; - ttl?: number; - size?: number; -} - -/** - * 外部API调用日志数据 - */ -export interface ExternalApiCallLogData { - service: string; - endpoint: string; - method: string; - headers: Record; - body?: any; - timeout?: number; -} - -/** - * 业务事件日志数据 - */ -export interface BusinessEventLogData { - event: string; - action: string; - resource: string; - resourceId?: string; - data?: Record; - result?: 'success' | 'failure' | 'partial'; -} - -/** - * 用户日志数据 - */ -export interface UserLogData { - id: string; - username?: string; - email?: string; - role?: string; - permissions?: string[]; -} - -/** - * 错误日志数据 - */ -export interface ErrorLogData { - name: string; - message: string; - stack?: string; - code?: string; - cause?: any; - context?: Record; -} - -/** - * 日志配置 - */ -export interface LoggingConfig { - level: LogLevel; - format: 'json' | 'text' | 'simple'; - timestamp: boolean; - colorize: boolean; - prettyPrint: boolean; - silent: boolean; - exitOnError: boolean; - transports: LogTransport[]; - defaultMeta?: Record; - context?: string; -} - -/** - * 日志传输器 - */ -export interface LogTransport { - type: 'console' | 'file' | 'http' | 'stream'; - level?: LogLevel; - format?: string; - options?: Record; -} - -/** - * 日志装饰器选项 - */ -export interface LoggingOptions { - /** - * 日志级别 - */ - level?: LogLevel; - - /** - * 上下文 - */ - context?: string; - - /** - * 是否记录参数 - */ - logArgs?: boolean; - - /** - * 是否记录返回值 - */ - logResult?: boolean; - - /** - * 是否记录执行时间 - */ - logDuration?: boolean; - - /** - * 是否记录错误 - */ - logError?: boolean; - - /** - * 是否启用 - */ - enabled?: boolean; - - /** - * 自定义消息 - */ - message?: string; - - /** - * 元数据 - */ - meta?: Record; -} diff --git a/src/common/logging/logging.module.ts b/src/common/logging/logging.module.ts deleted file mode 100644 index 5e09e51b..00000000 --- a/src/common/logging/logging.module.ts +++ /dev/null @@ -1,126 +0,0 @@ -import { Module, Global } from '@nestjs/common'; -import { ConfigModule, ConfigService } from '@nestjs/config'; -import { LoggingService } from './logging.service'; -import { - LoggingInterface, - StructuredLoggingInterface, -} from './logging.interface'; - -/** - * 日志模块 - * 基于 NestJS 官方示例实现 - * 参考: https://docs.nestjs.cn/fundamentals/dependency-injection - * 对应 Java: 日志配置 - */ -@Global() -@Module({ - imports: [ConfigModule], - providers: [ - { - provide: 'LOGGING_PROVIDER', - useFactory: (configService: ConfigService) => { - // 这里会根据配置选择具体的日志实现 - // 默认使用 Winston,也可以使用其他日志库 - const loggingType = configService.get('logging.type', 'winston'); - - if (loggingType === 'winston') { - // 返回 Winston 日志实现 - return { - async log( - level: string, - message: string, - context?: any, - ): Promise { - console.log(`[${level.toUpperCase()}] ${message}`, context || ''); - }, - async error(message: string, context?: any): Promise { - console.error(`[ERROR] ${message}`, context || ''); - }, - async warn(message: string, context?: any): Promise { - console.warn(`[WARN] ${message}`, context || ''); - }, - async info(message: string, context?: any): Promise { - console.info(`[INFO] ${message}`, context || ''); - }, - async debug(message: string, context?: any): Promise { - console.debug(`[DEBUG] ${message}`, context || ''); - }, - }; - } else { - // 返回其他日志实现 - return { - async log( - level: string, - message: string, - context?: any, - ): Promise { - console.log(`[${level.toUpperCase()}] ${message}`, context || ''); - }, - async error(message: string, context?: any): Promise { - console.error(`[ERROR] ${message}`, context || ''); - }, - async warn(message: string, context?: any): Promise { - console.warn(`[WARN] ${message}`, context || ''); - }, - async info(message: string, context?: any): Promise { - console.info(`[INFO] ${message}`, context || ''); - }, - async debug(message: string, context?: any): Promise { - console.debug(`[DEBUG] ${message}`, context || ''); - }, - }; - } - }, - inject: [ConfigService], - }, - { - provide: 'STRUCTURED_LOGGING_PROVIDER', - useFactory: (configService: ConfigService) => { - // 结构化日志实现 - return { - async logStructured( - level: string, - message: string, - metadata: any, - ): Promise { - const structuredLog = { - timestamp: new Date().toISOString(), - level, - message, - metadata, - }; - console.log(JSON.stringify(structuredLog)); - }, - async logError(error: Error, context?: any): Promise { - const structuredLog = { - timestamp: new Date().toISOString(), - level: 'error', - message: error.message, - stack: error.stack, - context, - }; - console.error(JSON.stringify(structuredLog)); - }, - async logPerformance( - operation: string, - duration: number, - metadata?: any, - ): Promise { - const structuredLog = { - timestamp: new Date().toISOString(), - level: 'info', - message: `Performance: ${operation}`, - duration, - metadata, - }; - console.log(JSON.stringify(structuredLog)); - }, - }; - }, - inject: [ConfigService], - }, - LoggingService, - ], - exports: [LoggingService], -}) -export class LoggingModule {} diff --git a/src/common/logging/logging.service.ts b/src/common/logging/logging.service.ts deleted file mode 100644 index f0881226..00000000 --- a/src/common/logging/logging.service.ts +++ /dev/null @@ -1,542 +0,0 @@ -import { Injectable, Inject, Logger } from '@nestjs/common'; -import type { - LoggingInterface, - StructuredLoggingInterface, - StructuredLogData, - RequestLogData, - ResponseLogData, - DatabaseQueryLogData, - CacheOperationLogData, - ExternalApiCallLogData, - BusinessEventLogData, - UserLogData, - ErrorLogData, - LoggingOptions, -} from './logging.interface'; -import { LogLevel } from './logging.interface'; - -/** - * 日志服务 - * 基于 NestJS 官方示例实现 - * 参考: https://docs.nestjs.cn/fundamentals/dependency-injection - * 对应 Java: 日志服务 - */ -@Injectable() -export class LoggingService - implements LoggingInterface, StructuredLoggingInterface -{ - private readonly logger = new Logger(LoggingService.name); - private currentLevel: LogLevel = LogLevel.INFO; - - constructor( - @Inject('LOGGING_PROVIDER') - private readonly loggingProvider: LoggingInterface, - @Inject('STRUCTURED_LOGGING_PROVIDER') - private readonly structuredLoggingProvider: StructuredLoggingInterface, - ) {} - - // ==================== 基础日志接口 ==================== - - /** - * 记录调试日志 - */ - debug(message: string, context?: string, meta?: Record): void { - try { - this.loggingProvider.debug(message, context, meta); - } catch (error) { - this.logger.error(`Failed to log debug message: ${message}`, error); - } - } - - /** - * 记录信息日志 - */ - info(message: string, context?: string, meta?: Record): void { - try { - this.loggingProvider.info(message, context, meta); - } catch (error) { - this.logger.error(`Failed to log info message: ${message}`, error); - } - } - - /** - * 记录警告日志 - */ - warn(message: string, context?: string, meta?: Record): void { - try { - this.loggingProvider.warn(message, context, meta); - } catch (error) { - this.logger.error(`Failed to log warn message: ${message}`, error); - } - } - - /** - * 记录错误日志 - */ - error(message: string, context?: string, meta?: Record): void { - try { - this.loggingProvider.error(message, context, meta); - } catch (error) { - this.logger.error(`Failed to log error message: ${message}`, error); - } - } - - /** - * 记录致命错误日志 - */ - fatal(message: string, context?: string, meta?: Record): void { - try { - this.loggingProvider.fatal(message, context, meta); - } catch (error) { - this.logger.error(`Failed to log fatal message: ${message}`, error); - } - } - - /** - * 记录日志 - */ - log( - level: LogLevel, - message: string, - context?: string, - meta?: Record, - ): void { - try { - this.loggingProvider.log(level, message, context, meta); - } catch (error) { - this.logger.error(`Failed to log message: ${message}`, error); - } - } - - /** - * 设置日志级别 - */ - setLevel(level: LogLevel): void { - try { - this.currentLevel = level; - this.loggingProvider.setLevel(level); - } catch (error) { - this.logger.error(`Failed to set log level: ${level}`, error); - } - } - - /** - * 获取当前日志级别 - */ - getLevel(): LogLevel { - return this.currentLevel; - } - - /** - * 创建子日志器 - */ - child(context: string): LoggingInterface { - try { - return this.loggingProvider.child(context); - } catch (error) { - this.logger.error(`Failed to create child logger: ${context}`, error); - return this; - } - } - - // ==================== 结构化日志接口 ==================== - - /** - * 记录结构化日志 - */ - logStructured( - level: LogLevel, - message: string, - structuredData: StructuredLogData, - ): void { - try { - this.structuredLoggingProvider.logStructured( - level, - message, - structuredData, - ); - } catch (error) { - this.logger.error(`Failed to log structured message: ${message}`, error); - } - } - - /** - * 记录请求日志 - */ - logRequest( - request: RequestLogData, - response: ResponseLogData, - duration: number, - ): void { - try { - this.structuredLoggingProvider.logRequest(request, response, duration); - } catch (error) { - this.logger.error('Failed to log request', error); - } - } - - /** - * 记录数据库查询日志 - */ - logDatabaseQuery( - query: DatabaseQueryLogData, - duration: number, - result?: any, - ): void { - try { - this.structuredLoggingProvider.logDatabaseQuery(query, duration, result); - } catch (error) { - this.logger.error('Failed to log database query', error); - } - } - - /** - * 记录缓存操作日志 - */ - logCacheOperation( - operation: CacheOperationLogData, - hit: boolean, - duration: number, - ): void { - try { - this.structuredLoggingProvider.logCacheOperation( - operation, - hit, - duration, - ); - } catch (error) { - this.logger.error('Failed to log cache operation', error); - } - } - - /** - * 记录外部API调用日志 - */ - logExternalApiCall( - apiCall: ExternalApiCallLogData, - response: any, - duration: number, - ): void { - try { - this.structuredLoggingProvider.logExternalApiCall( - apiCall, - response, - duration, - ); - } catch (error) { - this.logger.error('Failed to log external API call', error); - } - } - - /** - * 记录业务事件日志 - */ - logBusinessEvent( - event: BusinessEventLogData, - user?: UserLogData, - meta?: Record, - ): void { - try { - this.structuredLoggingProvider.logBusinessEvent(event, user, meta); - } catch (error) { - this.logger.error('Failed to log business event', error); - } - } - - // ==================== 装饰器支持 ==================== - - /** - * 日志装饰器实现 - */ - async logMethod( - options: LoggingOptions, - fn: () => T | Promise, - args: any[] = [], - ): Promise { - const { - level = LogLevel.INFO, - context = 'Method', - logArgs = false, - logResult = false, - logDuration = true, - logError = true, - enabled = true, - message, - meta = {}, - } = options; - - if (!enabled) { - return await fn(); - } - - const startTime = Date.now(); - const logMessage = message || `${context} execution`; - const logMeta = { ...meta }; - - try { - // 记录方法开始 - if (logArgs) { - logMeta.args = args; - } - - this.log(level, `${logMessage} started`, context, logMeta); - - // 执行方法 - const result = await fn(); - - // 记录方法完成 - const duration = Date.now() - startTime; - const successMeta = { ...logMeta }; - - if (logResult) { - successMeta.result = result; - } - - if (logDuration) { - successMeta.duration = duration; - } - - this.log(level, `${logMessage} completed`, context, successMeta); - - return result; - } catch (error) { - const duration = Date.now() - startTime; - const errorMeta = { ...logMeta }; - - if (logDuration) { - errorMeta.duration = duration; - } - - if (logError) { - errorMeta.error = this.serializeError(error); - } - - this.error(`${logMessage} failed`, context, errorMeta); - throw error; - } - } - - // ==================== 工具方法 ==================== - - /** - * 序列化错误 - */ - private serializeError(error: any): ErrorLogData { - if (error instanceof Error) { - return { - name: error.name, - message: error.message, - stack: error.stack, - code: (error as any).code, - cause: (error as any).cause, - context: (error as any).context, - }; - } - - return { - name: 'UnknownError', - message: String(error), - context: { originalError: error }, - }; - } - - /** - * 记录HTTP请求 - */ - logHttpRequest( - method: string, - url: string, - statusCode: number, - duration: number, - userAgent?: string, - ip?: string, - userId?: string, - ): void { - const request: RequestLogData = { - method, - url, - headers: {}, - ip, - userAgent, - userId, - }; - - const response: ResponseLogData = { - statusCode, - headers: {}, - }; - - this.logRequest(request, response, duration); - } - - /** - * 记录数据库操作 - */ - logDatabaseOperation( - operation: string, - table: string, - query: string, - duration: number, - params?: any[], - result?: any, - ): void { - const queryData: DatabaseQueryLogData = { - operation, - table, - query, - params, - }; - - this.logDatabaseQuery(queryData, duration, result); - } - - /** - * 记录缓存操作 - */ - logCacheOperationSimple( - operation: string, - key: string, - hit: boolean, - duration: number, - ttl?: number, - size?: number, - ): void { - const operationData: CacheOperationLogData = { - operation, - key, - ttl, - size, - }; - - this.logCacheOperation(operationData, hit, duration); - } - - /** - * 记录外部API调用 - */ - logExternalApiCallSimple( - service: string, - endpoint: string, - method: string, - statusCode: number, - duration: number, - headers?: Record, - body?: any, - ): void { - const apiCall: ExternalApiCallLogData = { - service, - endpoint, - method, - headers: headers || {}, - body, - }; - - const response = { statusCode }; - this.logExternalApiCall(apiCall, response, duration); - } - - /** - * 记录业务事件 - */ - logBusinessEventSimple( - event: string, - action: string, - resource: string, - resourceId?: string, - result?: 'success' | 'failure' | 'partial', - data?: Record, - userId?: string, - ): void { - const eventData: BusinessEventLogData = { - event, - action, - resource, - resourceId, - result, - data, - }; - - const userData: UserLogData | undefined = userId - ? { id: userId } - : undefined; - this.logBusinessEvent(eventData, userData); - } - - /** - * 记录性能指标 - */ - logPerformance( - operation: string, - duration: number, - context?: string, - meta?: Record, - ): void { - const performanceMeta = { - operation, - duration, - ...meta, - }; - - if (duration > 1000) { - this.warn(`Slow operation: ${operation}`, context, performanceMeta); - } else if (duration > 500) { - this.info(`Operation: ${operation}`, context, performanceMeta); - } else { - this.debug(`Operation: ${operation}`, context, performanceMeta); - } - } - - /** - * 记录安全事件 - */ - logSecurityEvent( - event: string, - severity: 'low' | 'medium' | 'high' | 'critical', - context?: string, - meta?: Record, - ): void { - const securityMeta = { - event, - severity, - ...meta, - }; - - switch (severity) { - case 'critical': - this.fatal(`Security event: ${event}`, context, securityMeta); - break; - case 'high': - this.error(`Security event: ${event}`, context, securityMeta); - break; - case 'medium': - this.warn(`Security event: ${event}`, context, securityMeta); - break; - case 'low': - this.info(`Security event: ${event}`, context, securityMeta); - break; - } - } - - /** - * 记录审计日志 - */ - logAudit( - action: string, - resource: string, - resourceId?: string, - userId?: string, - result?: 'success' | 'failure', - meta?: Record, - ): void { - const auditMeta = { - action, - resource, - resourceId, - userId, - result, - ...meta, - }; - - this.info(`Audit: ${action} on ${resource}`, 'audit', auditMeta); - } -} diff --git a/src/common/monitoring/monitoring.interface.ts b/src/common/monitoring/monitoring.interface.ts deleted file mode 100644 index de4a7de4..00000000 --- a/src/common/monitoring/monitoring.interface.ts +++ /dev/null @@ -1,249 +0,0 @@ -/** - * 监控接口定义 - * 基于 NestJS 官方示例实现 - * 参考: https://docs.nestjs.cn/fundamentals/dependency-injection - * 对应 Java: 监控抽象 - */ -export interface MonitoringInterface { - /** - * 记录计数器指标 - * @param name 指标名称 - * @param value 计数值 - * @param labels 标签 - */ - counter(name: string, value?: number, labels?: Record): void; - - /** - * 记录直方图指标 - * @param name 指标名称 - * @param value 值 - * @param labels 标签 - */ - histogram(name: string, value: number, labels?: Record): void; - - /** - * 记录摘要指标 - * @param name 指标名称 - * @param value 值 - * @param labels 标签 - */ - summary(name: string, value: number, labels?: Record): void; - - /** - * 记录仪表盘指标 - * @param name 指标名称 - * @param value 值 - * @param labels 标签 - */ - gauge(name: string, value: number, labels?: Record): void; - - /** - * 开始计时 - * @param name 计时器名称 - * @param labels 标签 - * @returns 计时器对象 - */ - startTimer(name: string, labels?: Record): Timer; - - /** - * 记录执行时间 - * @param name 指标名称 - * @param fn 要执行的函数 - * @param labels 标签 - * @returns 函数执行结果 - */ - time( - name: string, - fn: () => T | Promise, - labels?: Record, - ): Promise; - - /** - * 获取指标值 - * @param name 指标名称 - * @param labels 标签 - * @returns 指标值 - */ - getMetric( - name: string, - labels?: Record, - ): Promise; - - /** - * 获取所有指标 - * @returns 指标数据 - */ - getMetrics(): Promise; - - /** - * 重置指标 - * @param name 指标名称 - */ - reset(name?: string): void; -} - -/** - * 计时器接口 - */ -export interface Timer { - /** - * 结束计时 - * @param labels 标签 - */ - end(labels?: Record): number; -} - -/** - * 健康检查接口 - */ -export interface HealthCheckInterface { - /** - * 检查健康状态 - * @returns 健康状态 - */ - check(): Promise; - - /** - * 注册健康检查 - * @param name 检查名称 - * @param checkFn 检查函数 - */ - register(name: string, checkFn: () => Promise): void; - - /** - * 取消注册健康检查 - * @param name 检查名称 - */ - unregister(name: string): void; -} - -/** - * 健康状态 - */ -export interface HealthStatus { - status: 'healthy' | 'unhealthy' | 'degraded'; - timestamp: number; - uptime: number; - checks: Record; - version?: string; - environment?: string; -} - -/** - * 健康检查结果 - */ -export interface HealthCheckResult { - status: 'pass' | 'fail' | 'warn'; - message?: string; - timestamp: number; - duration?: number; -} - -/** - * 性能监控接口 - */ -export interface PerformanceMonitoringInterface { - /** - * 记录请求 - * @param method HTTP方法 - * @param path 请求路径 - * @param statusCode 状态码 - * @param duration 持续时间 - * @param labels 标签 - */ - recordRequest( - method: string, - path: string, - statusCode: number, - duration: number, - labels?: Record, - ): void; - - /** - * 记录数据库查询 - * @param operation 操作类型 - * @param table 表名 - * @param duration 持续时间 - * @param labels 标签 - */ - recordDatabaseQuery( - operation: string, - table: string, - duration: number, - labels?: Record, - ): void; - - /** - * 记录缓存操作 - * @param operation 操作类型 - * @param key 缓存键 - * @param hit 是否命中 - * @param duration 持续时间 - * @param labels 标签 - */ - recordCacheOperation( - operation: string, - key: string, - hit: boolean, - duration: number, - labels?: Record, - ): void; - - /** - * 记录外部API调用 - * @param service 服务名称 - * @param endpoint 端点 - * @param statusCode 状态码 - * @param duration 持续时间 - * @param labels 标签 - */ - recordExternalApiCall( - service: string, - endpoint: string, - statusCode: number, - duration: number, - labels?: Record, - ): void; -} - -/** - * 监控配置 - */ -export interface MonitoringConfig { - enabled: boolean; - port: number; - path: string; - defaultLabels?: Record; - collectDefaultMetrics?: boolean; - prefix?: string; -} - -/** - * 监控装饰器选项 - */ -export interface MonitoringOptions { - /** - * 指标名称 - */ - name?: string; - - /** - * 指标类型 - */ - type?: 'counter' | 'histogram' | 'summary' | 'gauge'; - - /** - * 标签 - */ - labels?: Record; - - /** - * 是否启用 - */ - enabled?: boolean; - - /** - * 帮助文本 - */ - help?: string; -} diff --git a/src/common/monitoring/monitoring.module.ts b/src/common/monitoring/monitoring.module.ts deleted file mode 100644 index 41bd8178..00000000 --- a/src/common/monitoring/monitoring.module.ts +++ /dev/null @@ -1,161 +0,0 @@ -import { Module, Global } from '@nestjs/common'; -import { ConfigModule, ConfigService } from '@nestjs/config'; -import { MonitoringService } from './monitoring.service'; -import { - MonitoringInterface, - HealthCheckInterface, -} from './monitoring.interface'; - -/** - * 监控模块 - * 基于 NestJS 官方示例实现 - * 参考: https://docs.nestjs.cn/fundamentals/dependency-injection - * 对应 Java: 监控配置 - */ -@Global() -@Module({ - imports: [ConfigModule], - providers: [ - { - provide: 'MONITORING_PROVIDER', - useFactory: (configService: ConfigService) => { - // 这里会根据配置选择具体的监控实现 - // 默认使用 Prometheus,也可以使用其他监控系统 - const monitoringType = configService.get( - 'monitoring.type', - 'prometheus', - ); - - if (monitoringType === 'prometheus') { - // 返回 Prometheus 监控实现 - return { - async incrementCounter( - name: string, - labels?: Record, - ): Promise { - console.log( - `[MONITORING] Counter ${name} incremented`, - labels || '', - ); - }, - async setGauge( - name: string, - value: number, - labels?: Record, - ): Promise { - console.log( - `[MONITORING] Gauge ${name} set to ${value}`, - labels || '', - ); - }, - async recordHistogram( - name: string, - value: number, - labels?: Record, - ): Promise { - console.log( - `[MONITORING] Histogram ${name} recorded ${value}`, - labels || '', - ); - }, - async recordSummary( - name: string, - value: number, - labels?: Record, - ): Promise { - console.log( - `[MONITORING] Summary ${name} recorded ${value}`, - labels || '', - ); - }, - }; - } else { - // 返回其他监控实现 - return { - async incrementCounter( - name: string, - labels?: Record, - ): Promise { - console.log( - `[MONITORING] Counter ${name} incremented`, - labels || '', - ); - }, - async setGauge( - name: string, - value: number, - labels?: Record, - ): Promise { - console.log( - `[MONITORING] Gauge ${name} set to ${value}`, - labels || '', - ); - }, - async recordHistogram( - name: string, - value: number, - labels?: Record, - ): Promise { - console.log( - `[MONITORING] Histogram ${name} recorded ${value}`, - labels || '', - ); - }, - async recordSummary( - name: string, - value: number, - labels?: Record, - ): Promise { - console.log( - `[MONITORING] Summary ${name} recorded ${value}`, - labels || '', - ); - }, - }; - } - }, - inject: [ConfigService], - }, - { - provide: 'HEALTH_CHECK_PROVIDER', - useFactory: (configService: ConfigService) => { - // 健康检查实现 - return { - async checkHealth(): Promise<{ status: string; details: any }> { - return { - status: 'healthy', - details: { - timestamp: new Date().toISOString(), - uptime: process.uptime(), - memory: process.memoryUsage(), - version: process.version, - }, - }; - }, - async checkDatabase(): Promise<{ status: string; details: any }> { - return { - status: 'healthy', - details: { - timestamp: new Date().toISOString(), - message: 'Database connection healthy', - }, - }; - }, - async checkRedis(): Promise<{ status: string; details: any }> { - return { - status: 'healthy', - details: { - timestamp: new Date().toISOString(), - message: 'Redis connection healthy', - }, - }; - }, - }; - }, - inject: [ConfigService], - }, - MonitoringService, - ], - exports: [MonitoringService], -}) -export class MonitoringModule {} diff --git a/src/common/monitoring/monitoring.service.ts b/src/common/monitoring/monitoring.service.ts deleted file mode 100644 index 6ec3aed0..00000000 --- a/src/common/monitoring/monitoring.service.ts +++ /dev/null @@ -1,462 +0,0 @@ -import { Injectable, Inject, Logger } from '@nestjs/common'; -import type { - MonitoringInterface, - HealthCheckInterface, - PerformanceMonitoringInterface, - Timer, - HealthStatus, - HealthCheckResult, - MonitoringOptions, -} from './monitoring.interface'; - -/** - * 监控服务 - * 基于 NestJS 官方示例实现 - * 参考: https://docs.nestjs.cn/fundamentals/dependency-injection - * 对应 Java: 监控服务 - */ -@Injectable() -export class MonitoringService - implements - MonitoringInterface, - HealthCheckInterface, - PerformanceMonitoringInterface -{ - private readonly logger = new Logger(MonitoringService.name); - private healthChecks = new Map Promise>(); - private startTime = Date.now(); - - constructor( - @Inject('MONITORING_PROVIDER') - private readonly monitoringProvider: MonitoringInterface, - @Inject('HEALTH_CHECK_PROVIDER') - private readonly healthCheckProvider: HealthCheckInterface, - ) {} - - // ==================== 基础监控接口 ==================== - - /** - * 记录计数器指标 - */ - counter( - name: string, - value: number = 1, - labels?: Record, - ): void { - try { - this.monitoringProvider.counter(name, value, labels); - } catch (error) { - this.logger.error(`Failed to record counter: ${name}`, error); - } - } - - /** - * 记录直方图指标 - */ - histogram( - name: string, - value: number, - labels?: Record, - ): void { - try { - this.monitoringProvider.histogram(name, value, labels); - } catch (error) { - this.logger.error(`Failed to record histogram: ${name}`, error); - } - } - - /** - * 记录摘要指标 - */ - summary(name: string, value: number, labels?: Record): void { - try { - this.monitoringProvider.summary(name, value, labels); - } catch (error) { - this.logger.error(`Failed to record summary: ${name}`, error); - } - } - - /** - * 记录仪表盘指标 - */ - gauge(name: string, value: number, labels?: Record): void { - try { - this.monitoringProvider.gauge(name, value, labels); - } catch (error) { - this.logger.error(`Failed to record gauge: ${name}`, error); - } - } - - /** - * 开始计时 - */ - startTimer(name: string, labels?: Record): Timer { - try { - return this.monitoringProvider.startTimer(name, labels); - } catch (error) { - this.logger.error(`Failed to start timer: ${name}`, error); - return { - end: () => 0, - }; - } - } - - /** - * 记录执行时间 - */ - async time( - name: string, - fn: () => T | Promise, - labels?: Record, - ): Promise { - const timer = this.startTimer(name, labels); - try { - const result = await fn(); - return result; - } finally { - timer.end(labels); - } - } - - /** - * 获取指标值 - */ - async getMetric( - name: string, - labels?: Record, - ): Promise { - try { - return this.monitoringProvider.getMetric(name, labels); - } catch (error) { - this.logger.error(`Failed to get metric: ${name}`, error); - return null; - } - } - - /** - * 获取所有指标 - */ - async getMetrics(): Promise { - try { - return this.monitoringProvider.getMetrics(); - } catch (error) { - this.logger.error('Failed to get metrics', error); - return ''; - } - } - - /** - * 重置指标 - */ - reset(name?: string): void { - try { - this.monitoringProvider.reset(name); - } catch (error) { - this.logger.error(`Failed to reset metrics: ${name || 'all'}`, error); - } - } - - // ==================== 健康检查接口 ==================== - - /** - * 检查健康状态 - */ - async check(): Promise { - const checks: Record = {}; - let overallStatus: 'healthy' | 'unhealthy' | 'degraded' = 'healthy'; - const hasWarnings = false; - - for (const [name, checkFn] of this.healthChecks) { - const startTime = Date.now(); - try { - const isHealthy = await checkFn(); - const duration = Date.now() - startTime; - - checks[name] = { - status: isHealthy ? 'pass' : 'fail', - timestamp: Date.now(), - duration, - }; - - if (!isHealthy) { - overallStatus = 'unhealthy'; - } - } catch (error) { - const duration = Date.now() - startTime; - checks[name] = { - status: 'fail', - message: error.message, - timestamp: Date.now(), - duration, - }; - overallStatus = 'unhealthy'; - } - } - - // 如果没有健康检查,默认为健康 - if (Object.keys(checks).length === 0) { - checks['default'] = { - status: 'pass', - timestamp: Date.now(), - }; - } - - return { - status: overallStatus, - timestamp: Date.now(), - uptime: Date.now() - this.startTime, - checks, - version: process.env.npm_package_version, - environment: process.env.NODE_ENV, - }; - } - - /** - * 注册健康检查 - */ - register(name: string, checkFn: () => Promise): void { - this.healthChecks.set(name, checkFn); - } - - /** - * 取消注册健康检查 - */ - unregister(name: string): void { - this.healthChecks.delete(name); - } - - // ==================== 性能监控接口 ==================== - - /** - * 记录请求 - */ - recordRequest( - method: string, - path: string, - statusCode: number, - duration: number, - labels?: Record, - ): void { - const requestLabels = { - method, - path, - status_code: statusCode.toString(), - ...labels, - }; - - // 记录请求计数 - this.counter('http_requests_total', 1, requestLabels); - - // 记录请求持续时间 - this.histogram( - 'http_request_duration_seconds', - duration / 1000, - requestLabels, - ); - - // 记录状态码分布 - this.counter('http_status_codes_total', 1, { - status_code: statusCode.toString(), - ...labels, - }); - } - - /** - * 记录数据库查询 - */ - recordDatabaseQuery( - operation: string, - table: string, - duration: number, - labels?: Record, - ): void { - const dbLabels = { - operation, - table, - ...labels, - }; - - // 记录查询计数 - this.counter('database_queries_total', 1, dbLabels); - - // 记录查询持续时间 - this.histogram( - 'database_query_duration_seconds', - duration / 1000, - dbLabels, - ); - } - - /** - * 记录缓存操作 - */ - recordCacheOperation( - operation: string, - key: string, - hit: boolean, - duration: number, - labels?: Record, - ): void { - const cacheLabels = { - operation, - hit: hit.toString(), - ...labels, - }; - - // 记录缓存操作计数 - this.counter('cache_operations_total', 1, cacheLabels); - - // 记录缓存命中率 - this.counter('cache_hits_total', hit ? 1 : 0, cacheLabels); - this.counter('cache_misses_total', hit ? 0 : 1, cacheLabels); - - // 记录缓存操作持续时间 - this.histogram( - 'cache_operation_duration_seconds', - duration / 1000, - cacheLabels, - ); - } - - /** - * 记录外部API调用 - */ - recordExternalApiCall( - service: string, - endpoint: string, - statusCode: number, - duration: number, - labels?: Record, - ): void { - const apiLabels = { - service, - endpoint, - status_code: statusCode.toString(), - ...labels, - }; - - // 记录API调用计数 - this.counter('external_api_calls_total', 1, apiLabels); - - // 记录API调用持续时间 - this.histogram( - 'external_api_call_duration_seconds', - duration / 1000, - apiLabels, - ); - - // 记录API状态码分布 - this.counter('external_api_status_codes_total', 1, { - service, - status_code: statusCode.toString(), - ...labels, - }); - } - - // ==================== 装饰器支持 ==================== - - /** - * 监控装饰器实现 - */ - async monitor( - options: MonitoringOptions, - fn: () => T | Promise, - ): Promise { - const { name, type = 'histogram', labels, enabled = true } = options; - - if (!enabled || !name) { - return await fn(); - } - - const timer = this.startTimer(name, labels); - try { - const result = await fn(); - return result; - } finally { - const duration = timer.end(labels); - this.histogram(name, duration / 1000, labels); - } - } - - // ==================== 工具方法 ==================== - - /** - * 记录错误 - */ - recordError(error: Error, labels?: Record): void { - this.counter('errors_total', 1, { - error_type: error.constructor.name, - error_message: error.message, - ...labels, - }); - } - - /** - * 记录内存使用 - */ - recordMemoryUsage(): void { - const usage = process.memoryUsage(); - - this.gauge('memory_usage_bytes', usage.heapUsed, { type: 'heap_used' }); - this.gauge('memory_usage_bytes', usage.heapTotal, { type: 'heap_total' }); - this.gauge('memory_usage_bytes', usage.external, { type: 'external' }); - this.gauge('memory_usage_bytes', usage.rss, { type: 'rss' }); - } - - /** - * 记录CPU使用 - */ - recordCpuUsage(): void { - const usage = process.cpuUsage(); - const total = usage.user + usage.system; - - this.gauge('cpu_usage_microseconds', total, { type: 'total' }); - this.gauge('cpu_usage_microseconds', usage.user, { type: 'user' }); - this.gauge('cpu_usage_microseconds', usage.system, { type: 'system' }); - } - - /** - * 记录事件循环延迟 - */ - recordEventLoopDelay(): void { - const start = process.hrtime.bigint(); - setImmediate(() => { - const delay = Number(process.hrtime.bigint() - start) / 1000000; // 转换为毫秒 - this.histogram('event_loop_delay_milliseconds', delay); - }); - } - - /** - * 记录垃圾回收 - */ - recordGarbageCollection(): void { - if (global.gc) { - const start = process.hrtime.bigint(); - global.gc(); - const duration = Number(process.hrtime.bigint() - start) / 1000000; // 转换为毫秒 - this.histogram('gc_duration_milliseconds', duration); - } - } - - /** - * 启动默认指标收集 - */ - startDefaultMetrics(): void { - // 记录内存使用 - setInterval(() => { - this.recordMemoryUsage(); - }, 10000); // 每10秒 - - // 记录CPU使用 - setInterval(() => { - this.recordCpuUsage(); - }, 10000); // 每10秒 - - // 记录事件循环延迟 - setInterval(() => { - this.recordEventLoopDelay(); - }, 5000); // 每5秒 - - this.logger.log('Default metrics collection started'); - } -} diff --git a/src/common/pipes/parse-diy-form.pipe.ts b/src/common/pipes/parse-diy-form.pipe.ts deleted file mode 100644 index 48f52491..00000000 --- a/src/common/pipes/parse-diy-form.pipe.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { - PipeTransform, - Injectable, - ArgumentMetadata, - BadRequestException, -} from '@nestjs/common'; - -/** - * 自定义表单数据解析管道 - * 基于 Java 框架中的 DiyFormDriver 转换逻辑 - * 对应 Java: DiyFormDriver.convert() - */ -@Injectable() -export class ParseDiyFormPipe implements PipeTransform { - transform(value: any, metadata: ArgumentMetadata): any { - if (!value) { - return value; - } - - // 根据组件类型进行数据转换 - const componentType = value.componentType; - const fieldValue = value.fieldValue; - - switch (componentType) { - case 'FormRadio': - case 'FormCheckbox': - // 单选和多选需要解析为数组 - if (typeof fieldValue === 'string') { - try { - return JSON.parse(fieldValue); - } catch { - return [fieldValue]; - } - } - return fieldValue; - - case 'FormDate': - // 日期直接返回 - return fieldValue; - - case 'FormDateScope': - case 'FormTimeScope': - // 日期范围和时间范围需要解析为对象 - if (typeof fieldValue === 'string') { - try { - return JSON.parse(fieldValue); - } catch { - throw new BadRequestException('日期范围格式错误'); - } - } - return fieldValue; - - case 'FormImage': - // 图片需要解析为数组 - if (typeof fieldValue === 'string') { - try { - return JSON.parse(fieldValue); - } catch { - return [fieldValue]; - } - } - return fieldValue; - - default: - // 其他类型直接返回 - return fieldValue; - } - } -} diff --git a/src/common/pipes/pipes.module.ts b/src/common/pipes/pipes.module.ts deleted file mode 100644 index 51ada440..00000000 --- a/src/common/pipes/pipes.module.ts +++ /dev/null @@ -1,79 +0,0 @@ -import { Module, Global } from '@nestjs/common'; -import { - ValidationPipe, - ParseIntPipe, - ParseBoolPipe, - ParseArrayPipe, - ParseUUIDPipe, - DefaultValuePipe, -} from '@nestjs/common'; -import { ParseDiyFormPipe } from './parse-diy-form.pipe'; - -/** - * 管道模块 - 基础设施层 - * 基于 NestJS 官方内置管道 - * 参考: https://docs.nestjs.cn/pipes - * 对应 Java: @InitBinder + @Valid - * - * 统一管理所有验证管道,避免重复定义 - */ -@Global() -@Module({ - providers: [ - // 统一的验证管道配置 - { - provide: 'VALIDATION_PIPE', - useValue: new ValidationPipe({ - whitelist: true, // 自动过滤掉没有装饰器的属性 - forbidNonWhitelisted: true, // 如果有非白名单属性,抛出错误 - transform: true, // 自动转换类型 - transformOptions: { - enableImplicitConversion: true, // 启用隐式转换 - }, - validateCustomDecorators: true, // 验证自定义装饰器 - exceptionFactory: (errors) => { - // 自定义错误格式 - const result = errors.map((error) => ({ - property: error.property, - value: error.value, - constraints: error.constraints, - })); - return new Error(JSON.stringify(result)); - }, - }), - }, - { - provide: 'PARSE_INT_PIPE', - useValue: new ParseIntPipe(), - }, - { - provide: 'PARSE_BOOL_PIPE', - useValue: new ParseBoolPipe(), - }, - { - provide: 'PARSE_ARRAY_PIPE', - useValue: new ParseArrayPipe({ items: String, separator: ',' }), - }, - { - provide: 'PARSE_UUID_PIPE', - useValue: new ParseUUIDPipe(), - }, - { - provide: 'DEFAULT_VALUE_PIPE', - useValue: new DefaultValuePipe(''), - }, - // 业务特定的自定义管道 - ParseDiyFormPipe, - ], - exports: [ - 'VALIDATION_PIPE', - 'PARSE_INT_PIPE', - 'PARSE_BOOL_PIPE', - 'PARSE_ARRAY_PIPE', - 'PARSE_UUID_PIPE', - 'DEFAULT_VALUE_PIPE', - // 业务特定的自定义管道 - ParseDiyFormPipe, - ], -}) -export class PipesModule {} diff --git a/src/common/plugins/captcha/captcha.module.ts b/src/common/plugins/captcha/captcha.module.ts deleted file mode 100644 index b0be3f1e..00000000 --- a/src/common/plugins/captcha/captcha.module.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Module } from '@nestjs/common'; -import { CaptchaService } from './captcha.service'; - -/** - * 验证码插件模块 - * 基于 NestJS 官方示例实现 - * 参考: https://docs.nestjs.cn/fundamentals/dependency-injection - * 对应 Java: CaptchaUtils - */ -@Module({ - providers: [CaptchaService], - exports: [CaptchaService], -}) -export class CaptchaModule {} diff --git a/src/common/plugins/captcha/captcha.service.ts b/src/common/plugins/captcha/captcha.service.ts deleted file mode 100644 index 9d0990fe..00000000 --- a/src/common/plugins/captcha/captcha.service.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import * as svgCaptcha from 'svg-captcha'; - -/** - * 验证码服务 - * 基于 NestJS 官方示例实现 - * 参考: https://docs.nestjs.cn/fundamentals/dependency-injection - * 对应 Java: CaptchaUtils - */ -@Injectable() -export class CaptchaService { - /** - * 生成图片验证码 - */ - generate(options?: svgCaptcha.ConfigObject): svgCaptcha.CaptchaObj { - return svgCaptcha.create(options); - } - - /** - * 生成数学验证码 - */ - generateMath(options?: svgCaptcha.ConfigObject): svgCaptcha.CaptchaObj { - return svgCaptcha.createMathExpr(options); - } - - /** - * 生成简单验证码 - */ - generateSimple(options?: svgCaptcha.ConfigObject): svgCaptcha.CaptchaObj { - return svgCaptcha.create({ - size: 4, - ignoreChars: '0o1il', - noise: 1, - color: true, - background: '#f0f0f0', - ...options, - }); - } - - /** - * 生成复杂验证码 - */ - generateComplex(options?: svgCaptcha.ConfigObject): svgCaptcha.CaptchaObj { - return svgCaptcha.create({ - size: 6, - noise: 3, - color: true, - background: '#f0f0f0', - fontSize: 50, - width: 150, - height: 50, - ...options, - }); - } - - /** - * 验证验证码 - */ - verify( - input: string, - captcha: string, - caseSensitive: boolean = false, - ): boolean { - if (caseSensitive) { - return input === captcha; - } - return input.toLowerCase() === captcha.toLowerCase(); - } -} diff --git a/src/common/plugins/index.ts b/src/common/plugins/index.ts deleted file mode 100644 index e8b82238..00000000 --- a/src/common/plugins/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from './plugins.module'; -export * from './captcha/captcha.service'; -export * from './qrcode/qrcode.service'; -export * from './wechat/wechat.service'; diff --git a/src/common/plugins/plugins.module.ts b/src/common/plugins/plugins.module.ts deleted file mode 100644 index 46ef2d00..00000000 --- a/src/common/plugins/plugins.module.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { Module } from '@nestjs/common'; -import { CaptchaModule } from './captcha/captcha.module'; -import { QrcodeModule } from './qrcode/qrcode.module'; -import { WechatModule } from './wechat/wechat.module'; - -/** - * 基础功能插件模块 - Common层 - * 基于 NestJS 实现 - * 对应 Java: 基础功能插件 - * - * 包含所有基础功能插件,作为框架基础能力 - */ -@Module({ - imports: [CaptchaModule, QrcodeModule, WechatModule], - exports: [CaptchaModule, QrcodeModule, WechatModule], -}) -export class PluginsModule {} diff --git a/src/common/plugins/qrcode/qrcode.module.ts b/src/common/plugins/qrcode/qrcode.module.ts deleted file mode 100644 index 24c92d43..00000000 --- a/src/common/plugins/qrcode/qrcode.module.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Module } from '@nestjs/common'; -import { QrcodeService } from './qrcode.service'; - -/** - * 二维码插件模块 - * 基于 NestJS 官方示例实现 - * 参考: https://docs.nestjs.cn/fundamentals/dependency-injection - * 对应 Java: QRCodeUtils - */ -@Module({ - providers: [QrcodeService], - exports: [QrcodeService], -}) -export class QrcodeModule {} diff --git a/src/common/plugins/qrcode/qrcode.service.ts b/src/common/plugins/qrcode/qrcode.service.ts deleted file mode 100644 index 254f21c3..00000000 --- a/src/common/plugins/qrcode/qrcode.service.ts +++ /dev/null @@ -1,144 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import * as QRCode from 'qrcode'; - -/** - * 二维码服务 - * 基于 NestJS 官方示例实现 - * 参考: https://docs.nestjs.cn/fundamentals/dependency-injection - * 对应 Java: QRCodeUtils - */ -@Injectable() -export class QrcodeService { - /** - * 生成二维码字符串 - */ - async toString( - text: string, - options?: QRCode.QRCodeToStringOptions, - ): Promise { - return QRCode.toString(text, options); - } - - /** - * 生成二维码数据URL - */ - async toDataURL( - text: string, - options?: QRCode.QRCodeToDataURLOptions, - ): Promise { - return QRCode.toDataURL(text, options); - } - - /** - * 生成二维码Buffer - */ - async toBuffer( - text: string, - options?: QRCode.QRCodeToBufferOptions, - ): Promise { - return QRCode.toBuffer(text, options); - } - - /** - * 生成二维码文件 - */ - async toFile( - path: string, - text: string, - options?: QRCode.QRCodeToFileOptions, - ): Promise { - return QRCode.toFile(path, text, options); - } - - /** - * 生成简单二维码 - */ - async generateSimple(text: string): Promise { - return this.toDataURL(text, { - type: 'image/png', - // quality: 0.92, // 新版本 qrcode 不支持 quality 参数 - margin: 1, - color: { - dark: '#000000', - light: '#FFFFFF', - }, - }); - } - - /** - * 生成彩色二维码 - */ - async generateColor( - text: string, - darkColor: string = '#000000', - lightColor: string = '#FFFFFF', - ): Promise { - return this.toDataURL(text, { - type: 'image/png', - // quality: 0.92, // 新版本 qrcode 不支持 quality 参数 - margin: 1, - color: { - dark: darkColor, - light: lightColor, - }, - }); - } - - /** - * 生成大尺寸二维码 - */ - async generateLarge(text: string, size: number = 300): Promise { - return this.toDataURL(text, { - type: 'image/png', - // quality: 0.92, // 新版本 qrcode 不支持 quality 参数 - margin: 1, - width: size, - color: { - dark: '#000000', - light: '#FFFFFF', - }, - }); - } - - /** - * 生成小尺寸二维码 - */ - async generateSmall(text: string, size: number = 100): Promise { - return this.toDataURL(text, { - type: 'image/png', - // quality: 0.92, // 新版本 qrcode 不支持 quality 参数 - margin: 1, - width: size, - color: { - dark: '#000000', - light: '#FFFFFF', - }, - }); - } - - /** - * 生成SVG二维码 - */ - async generateSVG( - text: string, - options?: QRCode.QRCodeToStringOptions, - ): Promise { - return this.toString(text, { - type: 'svg', - ...options, - }); - } - - /** - * 生成ASCII二维码 - */ - async generateASCII( - text: string, - options?: QRCode.QRCodeToStringOptions, - ): Promise { - return this.toString(text, { - type: 'terminal', - ...options, - }); - } -} diff --git a/src/common/plugins/wechat/wechat.module.ts b/src/common/plugins/wechat/wechat.module.ts deleted file mode 100644 index 7837f69e..00000000 --- a/src/common/plugins/wechat/wechat.module.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Module } from '@nestjs/common'; -import { WechatService } from './wechat.service'; - -/** - * 微信插件模块 - * 基于 NestJS 官方示例实现 - * 参考: https://docs.nestjs.cn/fundamentals/dependency-injection - * 对应 Java: WechatUtils - */ -@Module({ - providers: [WechatService], - exports: [WechatService], -}) -export class WechatModule {} diff --git a/src/common/plugins/wechat/wechat.service.ts b/src/common/plugins/wechat/wechat.service.ts deleted file mode 100644 index 3a4a02f8..00000000 --- a/src/common/plugins/wechat/wechat.service.ts +++ /dev/null @@ -1,232 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import { ConfigService } from '@nestjs/config'; -import * as crypto from 'crypto'; - -/** - * 微信服务 - * 基于 NestJS 官方示例实现 - * 参考: https://docs.nestjs.cn/fundamentals/dependency-injection - * 对应 Java: WechatUtils - */ -@Injectable() -export class WechatService { - constructor(private readonly configService: ConfigService) {} - - /** - * 验证微信签名 - */ - verifySignature( - signature: string, - timestamp: string, - nonce: string, - token: string, - ): boolean { - const tmpArr = [token, timestamp, nonce].sort(); - const tmpStr = tmpArr.join(''); - const hash = crypto.createHash('sha1').update(tmpStr).digest('hex'); - return hash === signature; - } - - /** - * 生成微信签名 - */ - generateSignature(params: Record, key: string): string { - // 按参数名排序 - const sortedParams = Object.keys(params) - .sort() - .map((key) => `${key}=${params[key]}`) - .join('&'); - - const stringSignTemp = `${sortedParams}&key=${key}`; - return crypto - .createHash('md5') - .update(stringSignTemp) - .digest('hex') - .toUpperCase(); - } - - /** - * 生成随机字符串 - */ - generateNonceStr(length: number = 32): string { - const chars = - 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; - let result = ''; - for (let i = 0; i < length; i++) { - result += chars.charAt(Math.floor(Math.random() * chars.length)); - } - return result; - } - - /** - * 生成时间戳 - */ - generateTimestamp(): string { - return Math.floor(Date.now() / 1000).toString(); - } - - /** - * 生成微信支付签名 - */ - generatePaySignature(params: Record, key: string): string { - // 过滤空值 - const filteredParams = Object.keys(params) - .filter( - (key) => - params[key] !== '' && - params[key] !== null && - params[key] !== undefined, - ) - .reduce( - (obj, key) => { - obj[key] = params[key]; - return obj; - }, - {} as Record, - ); - - // 按参数名排序 - const sortedParams = Object.keys(filteredParams) - .sort() - .map((key) => `${key}=${filteredParams[key]}`) - .join('&'); - - const stringSignTemp = `${sortedParams}&key=${key}`; - return crypto - .createHash('md5') - .update(stringSignTemp) - .digest('hex') - .toUpperCase(); - } - - /** - * 验证微信支付签名 - */ - verifyPaySignature( - params: Record, - signature: string, - key: string, - ): boolean { - const expectedSignature = this.generatePaySignature(params, key); - return expectedSignature === signature; - } - - /** - * 生成微信JSAPI签名 - */ - generateJSAPISignature(params: Record, key: string): string { - const sortedParams = Object.keys(params) - .sort() - .map((key) => `${key}=${params[key]}`) - .join('&'); - - return crypto.createHash('sha1').update(sortedParams).digest('hex'); - } - - /** - * 生成微信小程序签名 - */ - generateMiniProgramSignature( - params: Record, - key: string, - ): string { - return this.generatePaySignature(params, key); - } - - /** - * 生成微信H5签名 - */ - generateH5Signature(params: Record, key: string): string { - return this.generatePaySignature(params, key); - } - - /** - * 生成微信APP签名 - */ - generateAPPSignature(params: Record, key: string): string { - return this.generatePaySignature(params, key); - } - - /** - * 生成微信Native签名 - */ - generateNativeSignature(params: Record, key: string): string { - return this.generatePaySignature(params, key); - } - - /** - * 生成微信扫码签名 - */ - generateScanSignature(params: Record, key: string): string { - return this.generatePaySignature(params, key); - } - - /** - * 生成微信刷卡签名 - */ - generateMicropaySignature(params: Record, key: string): string { - return this.generatePaySignature(params, key); - } - - /** - * 生成微信退款签名 - */ - generateRefundSignature(params: Record, key: string): string { - return this.generatePaySignature(params, key); - } - - /** - * 生成微信查询签名 - */ - generateQuerySignature(params: Record, key: string): string { - return this.generatePaySignature(params, key); - } - - /** - * 生成微信关闭订单签名 - */ - generateCloseSignature(params: Record, key: string): string { - return this.generatePaySignature(params, key); - } - - /** - * 生成微信撤销签名 - */ - generateReverseSignature(params: Record, key: string): string { - return this.generatePaySignature(params, key); - } - - /** - * 生成微信转换短链接签名 - */ - generateShortUrlSignature(params: Record, key: string): string { - return this.generatePaySignature(params, key); - } - - /** - * 生成微信转换长链接签名 - */ - generateLongUrlSignature(params: Record, key: string): string { - return this.generatePaySignature(params, key); - } - - /** - * 生成微信下载对账单签名 - */ - generateDownloadBillSignature( - params: Record, - key: string, - ): string { - return this.generatePaySignature(params, key); - } - - /** - * 生成微信拉取订单评价数据签名 - */ - generateBatchQueryCommentSignature( - params: Record, - key: string, - ): string { - return this.generatePaySignature(params, key); - } -} diff --git a/src/common/queue/queue.module.ts b/src/common/queue/queue.module.ts deleted file mode 100644 index f1e68232..00000000 --- a/src/common/queue/queue.module.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { Module, Global } from '@nestjs/common'; -import { BullModule } from '@nestjs/bullmq'; -import { ConfigModule, ConfigService } from '@nestjs/config'; - -/** - * 队列模块 - 基础设施层 - * 基于 NestJS 官方文档实现 - * 参考: https://docs.nestjs.cn/techniques/queues - * 使用 BullMQ 作为队列引擎 - */ -@Global() -@Module({ - imports: [ - BullModule.forRootAsync({ - imports: [ConfigModule], - inject: [ConfigService], - useFactory: async (configService: ConfigService) => { - const redisConfig = configService.get('redis'); - - return { - connection: { - host: redisConfig.host, - port: redisConfig.port, - password: redisConfig.password, - db: redisConfig.db, - }, - defaultJobOptions: { - removeOnComplete: 10, - removeOnFail: 5, - attempts: 3, - backoff: { - type: 'exponential', - delay: 2000, - }, - }, - }; - }, - }), - ], - exports: [BullModule], -}) -export class QueueModule {} diff --git a/src/common/response/page-result.class.ts b/src/common/response/page-result.class.ts deleted file mode 100644 index daf55bc1..00000000 --- a/src/common/response/page-result.class.ts +++ /dev/null @@ -1,106 +0,0 @@ -/** - * 分页结果类 - * 与Java PageResult格式完全一致 - * - * 格式: - * { - * "currentPage": 1, // 当前页 - * "perPage": 15, // 每页大小 - * "total": 100, // 总记录数 - * "data": [] // 数据列表 - * } - */ -export class PageResult { - /** - * 当前请求页 - */ - currentPage: number; - - /** - * 每页大小 - */ - perPage: number; - - /** - * 总记录数 - */ - total: number; - - /** - * 记录结果 - */ - data: T[]; - - constructor(page: number, limit: number, total: number = 0, data: T[] = []) { - this.currentPage = page; - this.perPage = limit; - this.total = total; - this.data = data; - } - - /** - * 创建分页结果 - * @param page 页码 - * @param limit 每页数量 - * @returns PageResult - */ - static build(page: number, limit: number): PageResult { - return new PageResult(page, limit); - } - - /** - * 创建分页结果 - * @param page 页码 - * @param limit 每页数量 - * @param total 总记录数 - * @returns PageResult - */ - static buildWithTotal(page: number, limit: number, total: number): PageResult { - return new PageResult(page, limit, total); - } - - /** - * 创建分页结果 - * @param page 页码 - * @param limit 每页数量 - * @param total 总记录数 - * @param data 数据列表 - * @returns PageResult - */ - static buildWithData(page: number, limit: number, total: number, data: T[]): PageResult { - return new PageResult(page, limit, total, data); - } - - /** - * 设置数据 - * @param data 数据列表 - * @returns PageResult - */ - setData(data: T[]): PageResult { - this.data = data; - return this; - } - - /** - * 设置总数 - * @param total 总记录数 - * @returns PageResult - */ - setTotal(total: number): PageResult { - this.total = total; - return this; - } - - /** - * 转换为JSON格式 - * @returns object - */ - toJSON(): object { - return { - currentPage: this.currentPage, - perPage: this.perPage, - total: this.total, - data: this.data, - }; - } -} diff --git a/src/common/response/response.decorator.ts b/src/common/response/response.decorator.ts deleted file mode 100644 index 4b18d953..00000000 --- a/src/common/response/response.decorator.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { SetMetadata } from '@nestjs/common'; - -/** - * 响应装饰器 - * 基于 NestJS 装饰器实现 - * 对应 Java: @ResponseBody - */ - -export const RESPONSE_MESSAGE_KEY = 'response_message'; -export const RESPONSE_CODE_KEY = 'response_code'; - -/** - * 设置响应消息 - */ -export const ResponseMessage = (message: string) => - SetMetadata(RESPONSE_MESSAGE_KEY, message); - -/** - * 设置响应代码 - */ -export const ResponseCode = (code: string) => - SetMetadata(RESPONSE_CODE_KEY, code); - -/** - * 成功响应装饰器 - */ -export const SuccessResponse = ( - message: string = '操作成功', - code: string = 'SUCCESS', -) => { - return (target: any, propertyKey: string, descriptor: PropertyDescriptor) => { - SetMetadata(RESPONSE_MESSAGE_KEY, message)(target, propertyKey, descriptor); - SetMetadata(RESPONSE_CODE_KEY, code)(target, propertyKey, descriptor); - }; -}; - -/** - * 分页响应装饰器 - */ -export const PaginatedResponse = (message: string = '查询成功') => { - return SetMetadata(RESPONSE_MESSAGE_KEY, message); -}; diff --git a/src/common/response/response.interceptor.ts b/src/common/response/response.interceptor.ts deleted file mode 100644 index 24f54019..00000000 --- a/src/common/response/response.interceptor.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { - Injectable, - NestInterceptor, - ExecutionContext, - CallHandler, -} from '@nestjs/common'; -import { Reflector } from '@nestjs/core'; -import { Observable } from 'rxjs'; -import { map } from 'rxjs/operators'; -import { Result } from './result.class'; -import { RESPONSE_MESSAGE_KEY, RESPONSE_CODE_KEY } from './response.decorator'; - -/** - * 响应拦截器 - * 基于 NestJS 拦截器实现 - * 与PHP/Java框架保持基本一致的响应格式,并添加timestamp字段 - * - * PHP格式: {data, msg, code} - * Java格式: {code, msg, data} - * NestJS格式: {code, msg, data, timestamp} (与Java基本一致,添加timestamp) - */ -@Injectable() -export class ResponseInterceptor implements NestInterceptor { - constructor(private reflector: Reflector) {} - - intercept(context: ExecutionContext, next: CallHandler): Observable { - const responseMessage = this.reflector.getAllAndOverride( - RESPONSE_MESSAGE_KEY, - [context.getHandler(), context.getClass()], - ); - - const responseCode = this.reflector.getAllAndOverride( - RESPONSE_CODE_KEY, - [context.getHandler(), context.getClass()], - ); - - return next.handle().pipe( - map((data) => { - // 如果数据已经是 Result 格式,直接返回 - if (data && typeof data === 'object' && 'code' in data && 'msg' in data) { - return data; - } - - // 如果是分页数据 - if ( - data && - typeof data === 'object' && - 'data' in data && - 'meta' in data - ) { - return data; - } - - // 普通数据包装 - 使用与PHP/Java一致的格式 - return Result.success(data, responseMessage || '操作成功'); - }), - ); - } -} diff --git a/src/common/response/response.module.ts b/src/common/response/response.module.ts deleted file mode 100644 index 8719c193..00000000 --- a/src/common/response/response.module.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Module, Global } from '@nestjs/common'; -import { APP_INTERCEPTOR } from '@nestjs/core'; -import { ResponseInterceptor } from './response.interceptor'; - -/** - * 响应处理模块 - 基础设施层 - * 基于 NestJS 拦截器实现 - * 对应 Java: ResponseHandler - */ -@Global() -@Module({ - providers: [ - { - provide: APP_INTERCEPTOR, - useClass: ResponseInterceptor, - }, - ], -}) -export class ResponseModule {} diff --git a/src/common/response/result.class.ts b/src/common/response/result.class.ts deleted file mode 100644 index 9c5df510..00000000 --- a/src/common/response/result.class.ts +++ /dev/null @@ -1,102 +0,0 @@ -import { - ApiResponse, - PaginatedResponse, - PaginationMeta, -} from './result.interface'; - -/** - * 统一响应结果类 - * 基于 NestJS 响应处理实现 - * 与PHP/Java框架保持基本一致的格式,并添加timestamp字段 - * - * PHP格式: {data, msg, code} - * Java格式: {code, msg, data} - * NestJS格式: {code, msg, data, timestamp} (与Java基本一致,添加timestamp) - */ -export class Result { - public readonly code: number; - public readonly msg: string; - public readonly data?: T; - public readonly timestamp: string; - - constructor(code: number, msg: string, data?: T) { - this.code = code; - this.msg = msg; - this.data = data; - this.timestamp = new Date().toISOString(); - } - - /** - * 成功响应 - * 对应PHP: success($msg, $data, $code) - * 对应Java: Result.success($msg, $data) - */ - static success(data?: T, msg: string = '操作成功'): ApiResponse { - return new Result(1, msg, data); - } - - /** - * 失败响应 - * 对应PHP: fail($msg, $data, $code) - * 对应Java: Result.fail($msg, $data) - */ - static fail(msg: string = '操作失败', data?: any): ApiResponse { - return new Result(0, msg, data); - } - - /** - * 分页响应 - * 对应PHP/Java的分页数据格式 - */ - static paginated( - data: T[], - page: number, - limit: number, - total: number, - msg: string = '查询成功', - ): PaginatedResponse { - const totalPages = Math.ceil(total / limit); - const meta: PaginationMeta = { - page, - limit, - total, - totalPages, - hasNext: page < totalPages, - hasPrev: page > 1, - }; - - return { - code: 1, - msg, - data, - timestamp: new Date().toISOString(), - meta, - }; - } - - /** - * 创建响应 - * 对应PHP: Response::create(['data' => $data, 'msg' => $msg, 'code' => $code]) - * 对应Java: Result.instance($code, $msg, $data) - */ - static create( - code: number, - msg: string, - data?: T, - ): ApiResponse { - return new Result(code, msg, data); - } - - /** - * 转换为 JSON - * 与PHP/Java基本一致,添加timestamp字段 - */ - toJSON(): ApiResponse { - return { - code: this.code, - msg: this.msg, - data: this.data, - timestamp: this.timestamp, - }; - } -} diff --git a/src/common/response/result.interface.ts b/src/common/response/result.interface.ts deleted file mode 100644 index cec215a8..00000000 --- a/src/common/response/result.interface.ts +++ /dev/null @@ -1,43 +0,0 @@ -/** - * 统一响应接口 - * 与PHP/Java框架保持基本一致的格式,并添加timestamp字段 - * - * PHP格式: {data, msg, code} - * Java格式: {code, msg, data} - * NestJS格式: {code, msg, data, timestamp} (与Java基本一致,添加timestamp) - */ - -export interface ApiResponse { - code: number; - msg: string; - data?: T; - timestamp: string; -} - -export interface PaginationMeta { - page: number; - limit: number; - total: number; - totalPages: number; - hasNext: boolean; - hasPrev: boolean; -} - -export interface PaginatedResponse extends ApiResponse { - meta: PaginationMeta; -} - -export interface ErrorResponse extends ApiResponse { - code: 0; - msg: string; - data?: any; - timestamp: string; - error?: { - code: string; - message: string; - statusCode: number; - timestamp: string; - path?: string; - details?: any; - }; -} diff --git a/src/common/scheduler/scheduler.module.ts b/src/common/scheduler/scheduler.module.ts deleted file mode 100644 index 3bcaf3fa..00000000 --- a/src/common/scheduler/scheduler.module.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Module, Global } from '@nestjs/common'; -import { ScheduleModule } from '@nestjs/schedule'; - -/** - * 调度模块 - 基础设施层 - * 基于 NestJS 官方文档实现 - * 参考: https://docs.nestjs.cn/techniques/task-scheduling - */ -@Global() -@Module({ - imports: [ScheduleModule.forRoot()], - exports: [ScheduleModule], -}) -export class SchedulerModule {} diff --git a/src/common/security/decorators/public.decorator.ts b/src/common/security/decorators/public.decorator.ts deleted file mode 100644 index d7112936..00000000 --- a/src/common/security/decorators/public.decorator.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { SetMetadata } from '@nestjs/common'; - -/** - * 公开路由装饰器 - * 标记路由为公开访问,跳过认证 - */ -export const IS_PUBLIC_KEY = 'isPublic'; -export const Public = () => SetMetadata(IS_PUBLIC_KEY, true); diff --git a/src/common/security/decorators/roles.decorator.ts b/src/common/security/decorators/roles.decorator.ts deleted file mode 100644 index 8cd34589..00000000 --- a/src/common/security/decorators/roles.decorator.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { SetMetadata } from '@nestjs/common'; - -/** - * 角色装饰器 - * 标记路由需要的角色权限 - */ -export const ROLES_KEY = 'roles'; -export const Roles = (...roles: string[]) => SetMetadata(ROLES_KEY, roles); diff --git a/src/common/security/guards/jwt-auth.guard.ts b/src/common/security/guards/jwt-auth.guard.ts deleted file mode 100644 index 26ba6604..00000000 --- a/src/common/security/guards/jwt-auth.guard.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { Injectable, ExecutionContext } from '@nestjs/common'; -import { AuthGuard } from '@nestjs/passport'; -import { Reflector } from '@nestjs/core'; - -/** - * JWT 认证守卫 - * 基于 NestJS 官方文档实现 - * 参考: https://docs.nestjs.cn/security/authentication - */ -@Injectable() -export class JwtAuthGuard extends AuthGuard('jwt') { - constructor(private reflector: Reflector) { - super(); - } - - /** - * 检查路由是否标记为公开 - */ - canActivate(context: ExecutionContext) { - const isPublic = this.reflector.getAllAndOverride('isPublic', [ - context.getHandler(), - context.getClass(), - ]); - - if (isPublic) { - return true; - } - - return super.canActivate(context); - } -} diff --git a/src/common/security/guards/roles.guard.ts b/src/common/security/guards/roles.guard.ts deleted file mode 100644 index c0887a0a..00000000 --- a/src/common/security/guards/roles.guard.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common'; -import { Reflector } from '@nestjs/core'; - -/** - * 角色守卫 - * 基于 NestJS 官方文档实现 - * 参考: https://docs.nestjs.cn/security/authorization - */ -@Injectable() -export class RolesGuard implements CanActivate { - constructor(private reflector: Reflector) {} - - /** - * 检查用户角色权限 - */ - canActivate(context: ExecutionContext): boolean { - const requiredRoles = this.reflector.getAllAndOverride('roles', [ - context.getHandler(), - context.getClass(), - ]); - - if (!requiredRoles) { - return true; - } - - const { user } = context.switchToHttp().getRequest(); - - if (!user) { - return false; - } - - return requiredRoles.some((role) => user.roles?.includes(role)); - } -} diff --git a/src/common/security/security.module.ts b/src/common/security/security.module.ts deleted file mode 100644 index bf8ca424..00000000 --- a/src/common/security/security.module.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Module, Global } from '@nestjs/common'; -import { JwtModule } from '@nestjs/jwt'; -import { PassportModule } from '@nestjs/passport'; -import { ConfigModule, ConfigService } from '@nestjs/config'; -import { JwtStrategy } from './strategies/jwt.strategy'; -import { LocalStrategy } from './strategies/local.strategy'; -import { JwtAuthGuard } from './guards/jwt-auth.guard'; -import { RolesGuard } from './guards/roles.guard'; - -/** - * 安全模块 - 基础设施层 - * 基于 NestJS 官方文档实现 - * 参考: https://docs.nestjs.cn/security/authentication - */ -@Module({ - imports: [ - PassportModule, - JwtModule.registerAsync({ - imports: [ConfigModule], - inject: [ConfigService], - useFactory: async (configService: ConfigService) => { - const jwtConfig = configService.get('jwt'); - - return { - secret: jwtConfig.secret, - signOptions: { - expiresIn: jwtConfig.expiresIn, - algorithm: jwtConfig.algorithm, - }, - }; - }, - }), - ], - providers: [JwtStrategy, LocalStrategy, JwtAuthGuard, RolesGuard], - exports: [JwtModule, PassportModule, JwtAuthGuard, RolesGuard], -}) -export class SecurityModule {} diff --git a/src/common/security/strategies/jwt.strategy.ts b/src/common/security/strategies/jwt.strategy.ts deleted file mode 100644 index 0129a30e..00000000 --- a/src/common/security/strategies/jwt.strategy.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { Injectable, UnauthorizedException } from '@nestjs/common'; -import { ConfigService } from '@nestjs/config'; -import { PassportStrategy } from '@nestjs/passport'; -import { ExtractJwt, Strategy } from 'passport-jwt'; - -/** - * JWT 策略 - * 基于 NestJS 官方文档实现 - * 参考: https://docs.nestjs.cn/security/authentication - */ -@Injectable() -export class JwtStrategy extends PassportStrategy(Strategy) { - constructor(private configService: ConfigService) { - super({ - jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), - ignoreExpiration: false, - secretOrKey: configService.get('jwt.secret'), - }); - } - - /** - * 验证 JWT 载荷 - */ - async validate(payload: any) { - // 这里可以添加额外的验证逻辑 - // 例如:检查用户是否仍然存在、是否被禁用等 - if (!payload.sub) { - throw new UnauthorizedException('Invalid token payload'); - } - - return { - userId: payload.sub, - username: payload.username, - roles: payload.roles || [], - siteId: payload.siteId, - }; - } -} diff --git a/src/common/security/strategies/local.strategy.ts b/src/common/security/strategies/local.strategy.ts deleted file mode 100644 index 0ff1d039..00000000 --- a/src/common/security/strategies/local.strategy.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { Injectable, UnauthorizedException } from '@nestjs/common'; -import { PassportStrategy } from '@nestjs/passport'; -import { Strategy } from 'passport-local'; - -/** - * 本地认证策略 - * 基于 NestJS 官方文档实现 - * 参考: https://docs.nestjs.cn/security/authentication - */ -@Injectable() -export class LocalStrategy extends PassportStrategy(Strategy) { - constructor() { - super({ - usernameField: 'username', - passwordField: 'password', - }); - } - - /** - * 验证用户凭据 - */ - async validate(username: string, password: string): Promise { - // 这里应该调用用户服务来验证凭据 - // 暂时返回模拟数据,实际实现时需要注入用户服务 - if (username === 'admin' && password === 'admin') { - return { - userId: 1, - username: 'admin', - roles: ['admin'], - siteId: 1, - }; - } - - throw new UnauthorizedException('Invalid credentials'); - } -} diff --git a/src/common/swagger/swagger.module.ts b/src/common/swagger/swagger.module.ts deleted file mode 100644 index 3a2f0cb7..00000000 --- a/src/common/swagger/swagger.module.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Module, Global } from '@nestjs/common'; -import { ConfigModule, ConfigService } from '@nestjs/config'; -import { SwaggerService } from './swagger.service'; - -/** - * Swagger 文档模块 - 基础设施层 - * 基于 NestJS 官方文档实现 - * 参考: https://docs.nestjs.cn/recipes/swagger - */ -@Module({ - imports: [ConfigModule], - providers: [SwaggerService], - exports: [SwaggerService], -}) -export class SwaggerModule {} diff --git a/src/common/swagger/swagger.service.ts b/src/common/swagger/swagger.service.ts deleted file mode 100644 index f9a8568a..00000000 --- a/src/common/swagger/swagger.service.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import { ConfigService } from '@nestjs/config'; -import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger'; -import { INestApplication } from '@nestjs/common'; - -/** - * Swagger 文档服务 - * 基于 NestJS 官方文档实现 - * 参考: https://docs.nestjs.cn/recipes/swagger - */ -@Injectable() -export class SwaggerService { - constructor(private readonly configService: ConfigService) {} - - /** - * 初始化 Swagger 文档 - */ - setupSwagger(app: INestApplication) { - const swaggerConfig = this.configService.get('swagger'); - - if (!swaggerConfig.enabled) { - return; - } - - const config = new DocumentBuilder() - .setTitle(swaggerConfig.title) - .setDescription(swaggerConfig.description) - .setVersion(swaggerConfig.version) - .addBearerAuth( - { - type: 'http', - scheme: 'bearer', - bearerFormat: 'JWT', - name: 'JWT', - description: 'Enter JWT token', - in: 'header', - }, - 'JWT-auth', - ) - .addTag('认证管理', '用户认证相关接口') - .addTag('系统管理', '系统配置相关接口') - .addTag('用户管理', '用户管理相关接口') - .addTag('文档', 'API 文档相关接口') - .build(); - - const document = SwaggerModule.createDocument(app, config); - - // 设置 Swagger UI 选项 - const options = { - swaggerOptions: { - persistAuthorization: true, - displayRequestDuration: true, - filter: true, - showExtensions: true, - showCommonExtensions: true, - }, - }; - - SwaggerModule.setup('api-docs', app, document, options); - } - - /** - * 获取 Swagger 文档 JSON - */ - getDocument(app: INestApplication) { - const config = new DocumentBuilder() - .setTitle(this.configService.get('swagger.title') || 'WWJCloud API') - .setDescription( - this.configService.get('swagger.description') || - 'WWJCloud API Documentation', - ) - .setVersion(this.configService.get('swagger.version') || '1.0.0') - .addBearerAuth() - .build(); - - return SwaggerModule.createDocument(app, config); - } -} diff --git a/src/common/system/system.module.ts b/src/common/system/system.module.ts deleted file mode 100644 index 51960ca7..00000000 --- a/src/common/system/system.module.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Module, Global } from '@nestjs/common'; -import { SystemUtils } from './system.utils'; - -/** - * 系统工具模块 - 基础设施层 - * 基于 NestJS 实现 Java 风格的 SystemUtils - * 对应 Java: SystemUtils - */ -@Global() -@Module({ - providers: [SystemUtils], - exports: [SystemUtils], -}) -export class SystemModule {} diff --git a/src/common/system/system.utils.ts b/src/common/system/system.utils.ts deleted file mode 100644 index 9b0a8461..00000000 --- a/src/common/system/system.utils.ts +++ /dev/null @@ -1,170 +0,0 @@ -import { Injectable, Logger } from '@nestjs/common'; -import { ConfigService } from '@nestjs/config'; - -/** - * 系统工具类 - * 基于 NestJS 实现 Java 风格的 SystemUtils - * 对应 Java: SystemUtils - */ -@Injectable() -export class SystemUtils { - private readonly logger = new Logger(SystemUtils.name); - private readonly moduleMap = new Map(); - - // 模块名称常量 - static readonly I18N = 'i18n'; - static readonly LOADER = 'loader'; - static readonly CACHE = 'cache'; - static readonly QUEUE = 'queue'; - static readonly EVENT = 'event'; - - constructor(private readonly configService: ConfigService) { - this.initializeModules(); - } - - /** - * 初始化模块 - * 对应 Java: SystemUtils 构造函数 - */ - private initializeModules(): void { - // 这里会在模块加载时注入相应的服务 - this.logger.log('SystemUtils 模块初始化完成'); - } - - /** - * 注册模块 - * @param name 模块名称 - * @param module 模块实例 - */ - registerModule(name: string, module: any): void { - this.moduleMap.set(name, module); - this.logger.log(`注册模块: ${name}`); - } - - /** - * 获取模块 - * @param name 模块名称 - * @returns 模块实例 - */ - getModule(name: string): T | null { - const module = this.moduleMap.get(name); - if (!module) { - this.logger.warn(`未找到模块: ${name}`); - return null; - } - return module as T; - } - - /** - * 获取所有模块名称 - * @returns 模块名称集合 - */ - getModuleNames(): Set { - return new Set(this.moduleMap.keys()); - } - - /** - * 通过类名创建实例 - * @param className 类名 - * @returns 实例 - */ - static forName(className: string): T | null { - try { - // 在 Node.js 环境中,这需要动态导入 - // 实际使用时需要根据具体需求实现 - console.warn('forName 方法需要根据具体需求实现动态类加载'); - return null; - } catch (error) { - console.error(`创建实例失败: ${className}`, error); - return null; - } - } - - /** - * 判断是否为 Windows 系统 - * @returns 是否为 Windows - */ - static isWindowsOS(): boolean { - return process.platform === 'win32'; - } - - /** - * 判断是否为 Linux 系统 - * @returns 是否为 Linux - */ - static isLinuxOS(): boolean { - return process.platform === 'linux'; - } - - /** - * 获取操作系统名称 - * @returns 操作系统名称 - */ - static getOSName(): string { - return process.platform; - } - - /** - * 重启应用 - * 对应 Java: SystemUtils.restart() - */ - static restart(): void { - try { - if (SystemUtils.isWindowsOS()) { - // Windows 重启脚本 - const { exec } = require('child_process'); - exec('restart.bat', (error: any) => { - if (error) { - console.error('重启失败:', error); - } - }); - } else if (SystemUtils.isLinuxOS()) { - // Linux 重启脚本 - const { exec } = require('child_process'); - exec('restart.sh', (error: any) => { - if (error) { - console.error('重启失败:', error); - } - }); - } - } catch (error) { - console.error('重启应用失败:', error); - } - } - - /** - * 获取系统信息 - * @returns 系统信息 - */ - static getSystemInfo(): { - platform: string; - arch: string; - nodeVersion: string; - pid: number; - uptime: number; - } { - return { - platform: process.platform, - arch: process.arch, - nodeVersion: process.version, - pid: process.pid, - uptime: process.uptime(), - }; - } - - /** - * 获取内存使用情况 - * @returns 内存使用情况 - */ - static getMemoryUsage(): NodeJS.MemoryUsage { - return process.memoryUsage(); - } - - /** - * 获取 CPU 使用情况 - * @returns CPU 使用情况 - */ - static getCPUUsage(): NodeJS.CpuUsage { - return process.cpuUsage(); - } -} diff --git a/src/common/tracing/tracing.module.ts b/src/common/tracing/tracing.module.ts deleted file mode 100644 index f60e8e50..00000000 --- a/src/common/tracing/tracing.module.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Module, Global } from '@nestjs/common'; -import { ConfigModule } from '@nestjs/config'; -import { TracingService } from './tracing.service'; - -/** - * 链路追踪模块 - 基础设施层 - * 提供请求追踪和性能监控功能 - */ -@Global() -@Module({ - imports: [ConfigModule], - providers: [TracingService], - exports: [TracingService], -}) -export class TracingModule {} diff --git a/src/common/tracing/tracing.service.ts b/src/common/tracing/tracing.service.ts deleted file mode 100644 index 93b1fbe6..00000000 --- a/src/common/tracing/tracing.service.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { Injectable, Logger } from '@nestjs/common'; -import { ConfigService } from '@nestjs/config'; - -/** - * 链路追踪服务 - * 提供请求追踪和性能监控功能 - */ -@Injectable() -export class TracingService { - private readonly logger = new Logger(TracingService.name); - - constructor(private readonly configService: ConfigService) {} - - /** - * 开始追踪 - */ - startTrace(traceId: string, operation: string) { - const startTime = Date.now(); - this.logger.log(`[${traceId}] Starting ${operation} at ${startTime}`); - - return { - traceId, - operation, - startTime, - }; - } - - /** - * 结束追踪 - */ - endTrace(trace: any, result?: any) { - const endTime = Date.now(); - const duration = endTime - trace.startTime; - - this.logger.log( - `[${trace.traceId}] Completed ${trace.operation} in ${duration}ms`, - ); - - if (result) { - this.logger.debug(`[${trace.traceId}] Result: ${JSON.stringify(result)}`); - } - - return { - ...trace, - endTime, - duration, - result, - }; - } - - /** - * 记录错误 - */ - recordError(trace: any, error: Error) { - const endTime = Date.now(); - const duration = endTime - trace.startTime; - - this.logger.error( - `[${trace.traceId}] Error in ${trace.operation} after ${duration}ms: ${error.message}`, - ); - - return { - ...trace, - endTime, - duration, - error: error.message, - }; - } - - /** - * 生成追踪 ID - */ - generateTraceId(): string { - return `trace_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`; - } -} diff --git a/src/common/utils/clone.util.ts b/src/common/utils/clone.util.ts deleted file mode 100644 index 67409d2b..00000000 --- a/src/common/utils/clone.util.ts +++ /dev/null @@ -1,157 +0,0 @@ -import { Injectable } from '@nestjs/common'; - -/** - * 深度克隆工具类 - * 统一管理深度克隆功能,避免重复实现 - * 对应 Java: ObjectUtils.clone() - */ -@Injectable() -export class CloneUtil { - /** - * 深度克隆对象 - * @param obj 要克隆的对象 - * @returns 克隆后的对象 - */ - deepClone(obj: T): T { - if (obj === null || typeof obj !== 'object') { - return obj; - } - - if (obj instanceof Date) { - return new Date(obj.getTime()) as any; - } - - if (obj instanceof Array) { - return obj.map((item) => this.deepClone(item)) as any; - } - - if (typeof obj === 'object') { - const clonedObj = {} as any; - for (const key in obj) { - if (obj.hasOwnProperty(key)) { - clonedObj[key] = this.deepClone(obj[key]); - } - } - return clonedObj; - } - - return obj; - } - - /** - * 使用 JSON 序列化进行深度克隆 - * 性能更好,但有限制(不能克隆函数、undefined、Symbol等) - * @param obj 要克隆的对象 - * @returns 克隆后的对象 - */ - jsonClone(obj: T): T { - try { - return JSON.parse(JSON.stringify(obj)); - } catch (error) { - throw new Error(`Failed to clone object using JSON: ${error.message}`); - } - } - - /** - * 浅克隆对象 - * @param obj 要克隆的对象 - * @returns 克隆后的对象 - */ - shallowClone(obj: T): T { - if (obj === null || typeof obj !== 'object') { - return obj; - } - - if (obj instanceof Array) { - return [...obj] as any; - } - - if (typeof obj === 'object') { - return { ...obj }; - } - - return obj; - } - - /** - * 克隆数组 - * @param arr 要克隆的数组 - * @returns 克隆后的数组 - */ - cloneArray(arr: T[]): T[] { - if (!Array.isArray(arr)) { - throw new Error('Input is not an array'); - } - return arr.map((item) => this.deepClone(item)); - } - - /** - * 克隆对象并过滤指定属性 - * @param obj 要克隆的对象 - * @param excludeKeys 要排除的属性名数组 - * @returns 克隆后的对象 - */ - cloneExclude(obj: T, excludeKeys: string[]): T { - const cloned = this.deepClone(obj); - - if (typeof cloned === 'object' && cloned !== null) { - for (const key of excludeKeys) { - delete (cloned as any)[key]; - } - } - - return cloned; - } - - /** - * 克隆对象并只保留指定属性 - * @param obj 要克隆的对象 - * @param includeKeys 要保留的属性名数组 - * @returns 克隆后的对象 - */ - cloneInclude(obj: T, includeKeys: string[]): Partial { - const cloned = this.deepClone(obj); - const result: any = {}; - - if (typeof cloned === 'object' && cloned !== null) { - for (const key of includeKeys) { - if (key in cloned) { - result[key] = (cloned as any)[key]; - } - } - } - - return result; - } - - /** - * 检查对象是否可克隆 - * @param obj 要检查的对象 - * @returns 是否可克隆 - */ - isCloneable(obj: any): boolean { - if (obj === null || typeof obj !== 'object') { - return true; - } - - // 检查是否包含不可序列化的内容 - try { - JSON.stringify(obj); - return true; - } catch (error) { - return false; - } - } - - /** - * 安全克隆(如果不可克隆则返回原对象) - * @param obj 要克隆的对象 - * @returns 克隆后的对象或原对象 - */ - safeClone(obj: T): T { - if (!this.isCloneable(obj)) { - return obj; - } - return this.deepClone(obj); - } -} diff --git a/src/common/utils/crypto.util.ts b/src/common/utils/crypto.util.ts deleted file mode 100644 index 6c9ce802..00000000 --- a/src/common/utils/crypto.util.ts +++ /dev/null @@ -1,317 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import * as bcrypt from 'bcryptjs'; -import * as crypto from 'crypto'; -import * as CryptoJS from 'crypto-js'; - -/** - * 加密工具类 - * 对应 Java: PasswordEncipher - */ -@Injectable() -export class CryptoUtil { - /** - * 生成随机盐值 - */ - static generateSalt(rounds: number = 10): string { - return bcrypt.genSaltSync(rounds); - } - - /** - * 密码加密 - */ - static hashPassword(password: string, salt?: string): string { - if (salt) { - return bcrypt.hashSync(password, salt); - } - return bcrypt.hashSync(password, this.generateSalt()); - } - - /** - * 密码验证 - */ - static verifyPassword(password: string, hashedPassword: string): boolean { - return bcrypt.compareSync(password, hashedPassword); - } - - /** - * MD5 加密 - */ - static md5(text: string): string { - return crypto.createHash('md5').update(text).digest('hex'); - } - - /** - * SHA1 加密 - */ - static sha1(text: string): string { - return crypto.createHash('sha1').update(text).digest('hex'); - } - - /** - * SHA256 加密 - */ - static sha256(text: string): string { - return crypto.createHash('sha256').update(text).digest('hex'); - } - - /** - * SHA512 加密 - */ - static sha512(text: string): string { - return crypto.createHash('sha512').update(text).digest('hex'); - } - - /** - * 生成随机字符串 - */ - static randomString(length: number = 32): string { - return crypto.randomBytes(length).toString('hex'); - } - - /** - * AES 加密 - */ - static aesEncrypt(text: string, key: string): string { - return CryptoJS.AES.encrypt(text, key).toString(); - } - - /** - * AES 解密 - */ - static aesDecrypt(encryptedText: string, key: string): string { - const bytes = CryptoJS.AES.decrypt(encryptedText, key); - return bytes.toString(CryptoJS.enc.Utf8); - } - - /** - * DES 加密 - */ - static desEncrypt(text: string, key: string): string { - return CryptoJS.DES.encrypt(text, key).toString(); - } - - /** - * DES 解密 - */ - static desDecrypt(encryptedText: string, key: string): string { - const bytes = CryptoJS.DES.decrypt(encryptedText, key); - return bytes.toString(CryptoJS.enc.Utf8); - } - - /** - * Base64 编码 - */ - static base64Encode(text: string): string { - return Buffer.from(text, 'utf8').toString('base64'); - } - - /** - * Base64 解码 - */ - static base64Decode(encodedText: string): string { - return Buffer.from(encodedText, 'base64').toString('utf8'); - } - - /** - * URL 安全的 Base64 编码 - */ - static base64UrlEncode(text: string): string { - return Buffer.from(text, 'utf8') - .toString('base64') - .replace(/\+/g, '-') - .replace(/\//g, '_') - .replace(/=/g, ''); - } - - /** - * URL 安全的 Base64 解码 - */ - static base64UrlDecode(encodedText: string): string { - // 补齐填充字符 - const padded = encodedText + '='.repeat((4 - (encodedText.length % 4)) % 4); - const base64 = padded.replace(/-/g, '+').replace(/_/g, '/'); - return Buffer.from(base64, 'base64').toString('utf8'); - } - - /** - * 生成 HMAC - */ - static hmac(text: string, key: string, algorithm: string = 'sha256'): string { - return crypto.createHmac(algorithm, key).update(text).digest('hex'); - } - - /** - * 生成 JWT Token - */ - static generateJwtToken( - payload: any, - secret: string, - expiresIn: string = '1h', - ): string { - const header = { - alg: 'HS256', - typ: 'JWT', - }; - - const now = Math.floor(Date.now() / 1000); - const exp = now + this.parseExpiresIn(expiresIn); - - const encodedHeader = this.base64UrlEncode(JSON.stringify(header)); - const encodedPayload = this.base64UrlEncode( - JSON.stringify({ ...payload, exp }), - ); - const signature = this.hmac(`${encodedHeader}.${encodedPayload}`, secret); - - return `${encodedHeader}.${encodedPayload}.${signature}`; - } - - /** - * 验证 JWT Token - */ - static verifyJwtToken(token: string, secret: string): any { - const parts = token.split('.'); - if (parts.length !== 3) { - throw new Error('Invalid token format'); - } - - const [header, payload, signature] = parts; - const expectedSignature = this.hmac(`${header}.${payload}`, secret); - - if (signature !== expectedSignature) { - throw new Error('Invalid token signature'); - } - - const decodedPayload = JSON.parse(this.base64UrlDecode(payload)); - const now = Math.floor(Date.now() / 1000); - - if (decodedPayload.exp && decodedPayload.exp < now) { - throw new Error('Token expired'); - } - - return decodedPayload; - } - - /** - * 解析过期时间 - */ - private static parseExpiresIn(expiresIn: string): number { - const unit = expiresIn.slice(-1); - const value = parseInt(expiresIn.slice(0, -1)); - - switch (unit) { - case 's': - return value; - case 'm': - return value * 60; - case 'h': - return value * 60 * 60; - case 'd': - return value * 60 * 60 * 24; - default: - return 3600; // 默认1小时 - } - } - - /** - * 生成 API 签名 - */ - static generateApiSignature( - params: Record, - secret: string, - ): string { - // 按参数名排序 - const sortedParams = Object.keys(params) - .sort() - .map((key) => `${key}=${params[key]}`) - .join('&'); - - return this.hmac(sortedParams, secret); - } - - /** - * 验证 API 签名 - */ - static verifyApiSignature( - params: Record, - signature: string, - secret: string, - ): boolean { - const expectedSignature = this.generateApiSignature(params, secret); - return signature === expectedSignature; - } - - /** - * 生成文件哈希 - */ - static generateFileHash( - buffer: Buffer, - algorithm: string = 'sha256', - ): string { - return crypto.createHash(algorithm).update(buffer).digest('hex'); - } - - /** - * 生成密码强度 - */ - static getPasswordStrength(password: string): { - score: number; - level: 'weak' | 'medium' | 'strong' | 'very-strong'; - suggestions: string[]; - } { - let score = 0; - const suggestions: string[] = []; - - // 长度检查 - if (password.length >= 8) { - score += 1; - } else { - suggestions.push('密码长度至少8位'); - } - - // 包含小写字母 - if (/[a-z]/.test(password)) { - score += 1; - } else { - suggestions.push('包含小写字母'); - } - - // 包含大写字母 - if (/[A-Z]/.test(password)) { - score += 1; - } else { - suggestions.push('包含大写字母'); - } - - // 包含数字 - if (/\d/.test(password)) { - score += 1; - } else { - suggestions.push('包含数字'); - } - - // 包含特殊字符 - if (/[!@#$%^&*(),.?":{}|<>]/.test(password)) { - score += 1; - } else { - suggestions.push('包含特殊字符'); - } - - // 长度超过12位 - if (password.length >= 12) { - score += 1; - } - - let level: 'weak' | 'medium' | 'strong' | 'very-strong'; - if (score <= 2) { - level = 'weak'; - } else if (score <= 3) { - level = 'medium'; - } else if (score <= 4) { - level = 'strong'; - } else { - level = 'very-strong'; - } - - return { score, level, suggestions }; - } -} diff --git a/src/common/utils/index.ts b/src/common/utils/index.ts deleted file mode 100644 index 3f3f2971..00000000 --- a/src/common/utils/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -export * from './crypto.util'; -export * from './system.util'; -export * from './reflect.util'; -export * from './object.util'; -export * from './json.util'; -export * from './request.util'; -export * from './clone.util'; -export * from './utils.module'; diff --git a/src/common/utils/json.util.ts b/src/common/utils/json.util.ts deleted file mode 100644 index 9dafd09b..00000000 --- a/src/common/utils/json.util.ts +++ /dev/null @@ -1,456 +0,0 @@ -import { Injectable } from '@nestjs/common'; - -/** - * JSON工具类 - * 基于 NestJS 实现 Java 风格的 JacksonUtils - * 对应 Java: JacksonUtils - */ -@Injectable() -export class JsonUtil { - /** - * 将对象转换为JSON字符串 - * @param obj 要转换的对象 - * @param pretty 是否格式化输出 - * @returns JSON字符串 - */ - toJsonString(obj: any, pretty: boolean = false): string { - try { - if (pretty) { - return JSON.stringify(obj, null, 2); - } - return JSON.stringify(obj); - } catch (error) { - throw new Error( - `Failed to convert object to JSON string: ${error.message}`, - ); - } - } - - /** - * 将JSON字符串转换为对象 - * @param jsonString JSON字符串 - * @param targetClass 目标类(可选) - * @returns 转换后的对象 - */ - fromJsonString( - jsonString: string, - targetClass?: new (...args: any[]) => T, - ): T | null { - try { - const obj = JSON.parse(jsonString); - if (targetClass) { - return this.toObject(obj, targetClass); - } - return obj; - } catch (error) { - throw new Error( - `Failed to convert JSON string to object: ${error.message}`, - ); - } - } - - /** - * 将对象转换为指定类型的对象 - * @param obj 源对象 - * @param targetClass 目标类 - * @returns 转换后的对象 - */ - toObject( - obj: any, - targetClass: new (...args: any[]) => T, - ): T | null { - if (!obj || !targetClass) { - return null; - } - - try { - const target = new targetClass(); - this.copyProperties(obj, target); - return target; - } catch (error) { - throw new Error( - `Failed to convert object to target class: ${error.message}`, - ); - } - } - - /** - * 将对象列表转换为指定类型的对象列表 - * @param objList 源对象列表 - * @param targetClass 目标类 - * @returns 转换后的对象列表 - */ - toObjectList( - objList: any[], - targetClass: new (...args: any[]) => T, - ): T[] { - if (!objList || !Array.isArray(objList)) { - return []; - } - - const result: T[] = []; - for (const obj of objList) { - try { - const target = this.toObject(obj, targetClass); - if (target) { - result.push(target); - } - } catch (error) { - console.warn( - `Failed to convert object to target class: ${error.message}`, - ); - } - } - return result; - } - - /** - * 复制对象属性 - * @param source 源对象 - * @param target 目标对象 - */ - private copyProperties(source: any, target: any): void { - if ( - !source || - !target || - typeof source !== 'object' || - typeof target !== 'object' - ) { - return; - } - - for (const key in source) { - if (source.hasOwnProperty(key) && target.hasOwnProperty(key)) { - target[key] = source[key]; - } - } - } - - /** - * 将对象转换为下划线命名的JSON字符串 - * @param obj 要转换的对象 - * @param pretty 是否格式化输出 - * @returns 下划线命名的JSON字符串 - */ - toSnakeCaseJsonString(obj: any, pretty: boolean = false): string { - try { - const snakeCaseObj = this.toSnakeCase(obj); - return this.toJsonString(snakeCaseObj, pretty); - } catch (error) { - throw new Error( - `Failed to convert object to snake case JSON string: ${error.message}`, - ); - } - } - - /** - * 将下划线命名的JSON字符串转换为对象 - * @param jsonString 下划线命名的JSON字符串 - * @param targetClass 目标类(可选) - * @returns 转换后的对象 - */ - fromSnakeCaseJsonString( - jsonString: string, - targetClass?: new (...args: any[]) => T, - ): T | null { - try { - const obj = JSON.parse(jsonString); - const camelCaseObj = this.toCamelCase(obj); - if (targetClass) { - return this.toObject(camelCaseObj, targetClass); - } - return camelCaseObj; - } catch (error) { - throw new Error( - `Failed to convert snake case JSON string to object: ${error.message}`, - ); - } - } - - /** - * 将对象转换为下划线命名格式 - * @param obj 要转换的对象 - * @returns 下划线命名格式的对象 - */ - toSnakeCase(obj: any): any { - if (obj === null || obj === undefined) { - return obj; - } - - if (Array.isArray(obj)) { - return obj.map((item) => this.toSnakeCase(item)); - } - - if (typeof obj === 'object') { - const result: any = {}; - for (const key in obj) { - if (obj.hasOwnProperty(key)) { - const snakeKey = this.camelToSnake(key); - result[snakeKey] = this.toSnakeCase(obj[key]); - } - } - return result; - } - - return obj; - } - - /** - * 将对象转换为驼峰命名格式 - * @param obj 要转换的对象 - * @returns 驼峰命名格式的对象 - */ - toCamelCase(obj: any): any { - if (obj === null || obj === undefined) { - return obj; - } - - if (Array.isArray(obj)) { - return obj.map((item) => this.toCamelCase(item)); - } - - if (typeof obj === 'object') { - const result: any = {}; - for (const key in obj) { - if (obj.hasOwnProperty(key)) { - const camelKey = this.snakeToCamel(key); - result[camelKey] = this.toCamelCase(obj[key]); - } - } - return result; - } - - return obj; - } - - /** - * 驼峰转下划线 - * @param str 驼峰字符串 - * @returns 下划线字符串 - */ - private camelToSnake(str: string): string { - return str.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`); - } - - /** - * 下划线转驼峰 - * @param str 下划线字符串 - * @returns 驼峰字符串 - */ - private snakeToCamel(str: string): string { - return str.replace(/_([a-z])/g, (match, letter) => letter.toUpperCase()); - } - - /** - * 检查字符串是否为有效的JSON - * @param str 要检查的字符串 - * @returns 是否为有效的JSON - */ - isValidJson(str: string): boolean { - try { - JSON.parse(str); - return true; - } catch (error) { - return false; - } - } - - /** - * 安全地将JSON字符串转换为对象 - * @param jsonString JSON字符串 - * @param defaultValue 默认值 - * @returns 转换后的对象或默认值 - */ - safeFromJsonString(jsonString: string, defaultValue: T): T { - try { - return JSON.parse(jsonString); - } catch (error) { - return defaultValue; - } - } - - /** - * 合并JSON对象 - * @param target 目标对象 - * @param sources 源对象数组 - * @returns 合并后的对象 - */ - mergeJson(target: T, ...sources: any[]): T { - if (!target) { - target = {} as T; - } - - for (const source of sources) { - if (source && typeof source === 'object') { - this.deepMerge(target, source); - } - } - - return target; - } - - /** - * 深度合并对象 - * @param target 目标对象 - * @param source 源对象 - */ - private deepMerge(target: any, source: any): void { - for (const key in source) { - if (source.hasOwnProperty(key)) { - const sourceValue = source[key]; - const targetValue = target[key]; - - if (this.isObject(sourceValue) && this.isObject(targetValue)) { - this.deepMerge(targetValue, sourceValue); - } else { - target[key] = JSON.parse(JSON.stringify(sourceValue)); - } - } - } - } - - /** - * 检查是否为对象 - * @param obj 要检查的值 - * @returns 是否为对象 - */ - private isObject(obj: any): boolean { - return obj !== null && typeof obj === 'object' && !Array.isArray(obj); - } - - /** - * 获取JSON对象的路径值 - * @param obj JSON对象 - * @param path 路径,支持点号分隔 - * @param defaultValue 默认值 - * @returns 路径值 - */ - getPathValue( - obj: any, - path: string, - defaultValue?: T, - ): T | undefined { - if (!obj || !path) { - return defaultValue; - } - - try { - const keys = path.split('.'); - let current = obj; - - for (const key of keys) { - if (current === null || current === undefined) { - return defaultValue; - } - current = current[key]; - } - - return current !== undefined ? current : defaultValue; - } catch (error) { - return defaultValue; - } - } - - /** - * 设置JSON对象的路径值 - * @param obj JSON对象 - * @param path 路径,支持点号分隔 - * @param value 值 - */ - setPathValue(obj: any, path: string, value: any): void { - if (!obj || !path) { - return; - } - - try { - const keys = path.split('.'); - const lastKey = keys.pop(); - let current = obj; - - for (const key of keys) { - if (current[key] === null || current[key] === undefined) { - current[key] = {}; - } - current = current[key]; - } - - if (lastKey) { - current[lastKey] = value; - } - } catch (error) { - throw new Error(`Failed to set path value ${path}: ${error.message}`); - } - } - - /** - * 删除JSON对象的路径值 - * @param obj JSON对象 - * @param path 路径,支持点号分隔 - */ - deletePathValue(obj: any, path: string): void { - if (!obj || !path) { - return; - } - - try { - const keys = path.split('.'); - const lastKey = keys.pop(); - let current = obj; - - for (const key of keys) { - if (current[key] === null || current[key] === undefined) { - return; - } - current = current[key]; - } - - if (lastKey && current.hasOwnProperty(lastKey)) { - delete current[lastKey]; - } - } catch (error) { - throw new Error(`Failed to delete path value ${path}: ${error.message}`); - } - } - - /** - * 过滤JSON对象 - * @param obj JSON对象 - * @param predicate 过滤条件函数 - * @returns 过滤后的对象 - */ - filterJson(obj: any, predicate: (key: string, value: any) => boolean): any { - if (!obj || typeof obj !== 'object') { - return {}; - } - - const filtered: any = {}; - for (const key in obj) { - if (obj.hasOwnProperty(key) && predicate(key, obj[key])) { - filtered[key] = obj[key]; - } - } - - return filtered; - } - - /** - * 映射JSON对象 - * @param obj JSON对象 - * @param mapper 映射函数 - * @returns 映射后的对象 - */ - mapJson(obj: any, mapper: (key: string, value: any) => any): any { - if (!obj || typeof obj !== 'object') { - return {}; - } - - const mapped: any = {}; - for (const key in obj) { - if (obj.hasOwnProperty(key)) { - mapped[key] = mapper(key, obj[key]); - } - } - - return mapped; - } -} diff --git a/src/common/utils/object.util.ts b/src/common/utils/object.util.ts deleted file mode 100644 index cd32ef0c..00000000 --- a/src/common/utils/object.util.ts +++ /dev/null @@ -1,474 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import { ReflectUtil } from './reflect.util'; - -/** - * 对象处理工具类 - * 基于 NestJS 实现 Java 风格的 ObjectUtils - * 对应 Java: ObjectUtils, CollectUtils - */ -@Injectable() -export class ObjectUtil { - constructor(private readonly reflectUtil: ReflectUtil) {} - - /** - * 创建对象实例 - * @param className 类名 - * @returns 对象实例 - */ - create(className: string): T { - return this.reflectUtil.newInstance(className); - } - - /** - * 根据参数创建对象实例 - * @param className 类名 - * @param args 构造参数 - * @returns 对象实例 - */ - createWithArgs(className: string, ...args: any[]): T { - return this.reflectUtil.newInstanceWithArgs(className, ...args); - } - - /** - * 根据源对象和目标类构建新对象 - * @param source 源对象 - * @param targetClass 目标类 - * @returns 新对象 - */ - build( - source: any, - targetClass: new (...args: any[]) => T, - ): T | null { - if (!source || !targetClass) { - return null; - } - - try { - const target = new targetClass(); - this.copyProperties(source, target); - return target; - } catch (error) { - throw new Error(`Failed to build object: ${error.message}`); - } - } - - /** - * 复制对象属性 - * @param source 源对象 - * @param target 目标对象 - * @returns 目标对象 - */ - copyProperties(source: any, target: T): T { - if (!source || !target) { - return target; - } - - try { - this.reflectUtil.copyFields(source, target); - return target; - } catch (error) { - throw new Error(`Failed to copy properties: ${error.message}`); - } - } - - /** - * 复制指定属性 - * @param source 源对象 - * @param target 目标对象 - * @param fields 要复制的属性名数组 - * @returns 目标对象 - */ - copyPropertiesWithFields( - source: any, - target: T, - fields: string[], - ): T { - if (!source || !target || !fields) { - return target; - } - - try { - this.reflectUtil.copyFields(source, target, fields); - return target; - } catch (error) { - throw new Error( - `Failed to copy properties with fields: ${error.message}`, - ); - } - } - - /** - * 转换为指定类型的对象列表 - * @param sourceList 源对象列表 - * @param targetClass 目标类 - * @returns 目标对象列表 - */ - convertList( - sourceList: any[], - targetClass: new (...args: any[]) => T, - ): T[] { - if (!sourceList || !Array.isArray(sourceList)) { - return []; - } - - const targetList: T[] = []; - for (const source of sourceList) { - try { - const target = this.build(source, targetClass); - if (target) { - targetList.push(target); - } - } catch (error) { - // 忽略转换失败的对象 - console.warn(`Failed to convert object: ${error.message}`); - } - } - return targetList; - } - - /** - * 完全转换对象列表 - * @param sourceList 源对象列表 - * @param targetClass 目标类 - * @returns 目标对象列表 - */ - convertListComplete( - sourceList: any[], - targetClass: new (...args: any[]) => T, - ): T[] { - if (!sourceList || !Array.isArray(sourceList)) { - return []; - } - - const targetList: T[] = []; - for (const source of sourceList) { - try { - const target = new targetClass(); - this.copyProperties(source, target); - targetList.push(target); - } catch (error) { - // 忽略转换失败的对象 - console.warn(`Failed to convert object completely: ${error.message}`); - } - } - return targetList; - } - - /** - * 检查对象是否为空 - * @param obj 要检查的对象 - * @returns 是否为空 - */ - isEmpty(obj: any): boolean { - return this.reflectUtil.isEmpty(obj); - } - - /** - * 检查对象是否不为空 - * @param obj 要检查的对象 - * @returns 是否不为空 - */ - isNotEmpty(obj: any): boolean { - return this.reflectUtil.isNotEmpty(obj); - } - - /** - * 获取对象属性值 - * @param obj 对象 - * @param path 属性路径,支持点号分隔的嵌套属性 - * @param defaultValue 默认值 - * @returns 属性值 - */ - getProperty( - obj: any, - path: string, - defaultValue?: T, - ): T | undefined { - if (!obj || !path) { - return defaultValue; - } - - try { - const keys = path.split('.'); - let current = obj; - - for (const key of keys) { - if (current === null || current === undefined) { - return defaultValue; - } - current = current[key]; - } - - return current !== undefined ? current : defaultValue; - } catch (error) { - return defaultValue; - } - } - - /** - * 设置对象属性值 - * @param obj 对象 - * @param path 属性路径,支持点号分隔的嵌套属性 - * @param value 属性值 - */ - setProperty(obj: any, path: string, value: any): void { - if (!obj || !path) { - return; - } - - try { - const keys = path.split('.'); - const lastKey = keys.pop(); - let current = obj; - - for (const key of keys) { - if (current[key] === null || current[key] === undefined) { - current[key] = {}; - } - current = current[key]; - } - - if (lastKey) { - current[lastKey] = value; - } - } catch (error) { - throw new Error(`Failed to set property ${path}: ${error.message}`); - } - } - - /** - * 删除对象属性 - * @param obj 对象 - * @param path 属性路径,支持点号分隔的嵌套属性 - */ - deleteProperty(obj: any, path: string): void { - if (!obj || !path) { - return; - } - - try { - const keys = path.split('.'); - const lastKey = keys.pop(); - let current = obj; - - for (const key of keys) { - if (current[key] === null || current[key] === undefined) { - return; - } - current = current[key]; - } - - if (lastKey && current.hasOwnProperty(lastKey)) { - delete current[lastKey]; - } - } catch (error) { - throw new Error(`Failed to delete property ${path}: ${error.message}`); - } - } - - /** - * 检查对象是否有指定属性 - * @param obj 对象 - * @param path 属性路径,支持点号分隔的嵌套属性 - * @returns 是否有该属性 - */ - hasProperty(obj: any, path: string): boolean { - if (!obj || !path) { - return false; - } - - try { - const keys = path.split('.'); - let current = obj; - - for (const key of keys) { - if ( - current === null || - current === undefined || - !current.hasOwnProperty(key) - ) { - return false; - } - current = current[key]; - } - - return true; - } catch (error) { - return false; - } - } - - /** - * 获取对象的所有属性名 - * @param obj 对象 - * @returns 属性名数组 - */ - getPropertyNames(obj: any): string[] { - return this.reflectUtil.getFieldNames(obj); - } - - /** - * 获取对象的所有方法名 - * @param obj 对象 - * @returns 方法名数组 - */ - getMethodNames(obj: any): string[] { - return this.reflectUtil.getMethodNames(obj); - } - - /** - * 合并对象 - * @param target 目标对象 - * @param sources 源对象数组 - * @returns 合并后的对象 - */ - merge(target: T, ...sources: any[]): T { - if (!target) { - target = {} as T; - } - - for (const source of sources) { - if (source && typeof source === 'object') { - this.copyProperties(source, target); - } - } - - return target; - } - - /** - * 深度合并对象 - * @param target 目标对象 - * @param sources 源对象数组 - * @returns 合并后的对象 - */ - deepMerge(target: T, ...sources: any[]): T { - if (!target) { - target = {} as T; - } - - for (const source of sources) { - if (source && typeof source === 'object') { - this.deepMergeObject(target, source); - } - } - - return target; - } - - /** - * 深度合并单个对象 - * @param target 目标对象 - * @param source 源对象 - */ - private deepMergeObject(target: any, source: any): void { - for (const key in source) { - if (source.hasOwnProperty(key)) { - const sourceValue = source[key]; - const targetValue = target[key]; - - if (this.isObject(sourceValue) && this.isObject(targetValue)) { - this.deepMergeObject(targetValue, sourceValue); - } else { - target[key] = JSON.parse(JSON.stringify(sourceValue)); - } - } - } - } - - /** - * 检查是否为对象 - * @param obj 要检查的值 - * @returns 是否为对象 - */ - private isObject(obj: any): boolean { - return obj !== null && typeof obj === 'object' && !Array.isArray(obj); - } - - /** - * 对象转数组 - * @param obj 对象 - * @returns 数组 - */ - toArray(obj: any): any[] { - if (!obj) { - return []; - } - - if (Array.isArray(obj)) { - return obj; - } - - if (typeof obj === 'object') { - return Object.values(obj); - } - - return [obj]; - } - - /** - * 数组转对象 - * @param array 数组 - * @param keyField 作为键的字段名 - * @returns 对象 - */ - toObject(array: any[], keyField: string): Record { - if (!array || !Array.isArray(array)) { - return {}; - } - - const obj: Record = {}; - for (const item of array) { - if (item && typeof item === 'object' && item[keyField] !== undefined) { - obj[item[keyField]] = item; - } - } - - return obj; - } - - /** - * 过滤对象属性 - * @param obj 对象 - * @param predicate 过滤条件函数 - * @returns 过滤后的对象 - */ - filterProperties( - obj: any, - predicate: (key: string, value: any) => boolean, - ): any { - if (!obj || typeof obj !== 'object') { - return {}; - } - - const filtered: any = {}; - for (const key in obj) { - if (obj.hasOwnProperty(key) && predicate(key, obj[key])) { - filtered[key] = obj[key]; - } - } - - return filtered; - } - - /** - * 映射对象属性 - * @param obj 对象 - * @param mapper 映射函数 - * @returns 映射后的对象 - */ - mapProperties(obj: any, mapper: (key: string, value: any) => any): any { - if (!obj || typeof obj !== 'object') { - return {}; - } - - const mapped: any = {}; - for (const key in obj) { - if (obj.hasOwnProperty(key)) { - mapped[key] = mapper(key, obj[key]); - } - } - - return mapped; - } -} diff --git a/src/common/utils/reflect.util.ts b/src/common/utils/reflect.util.ts deleted file mode 100644 index 360b886c..00000000 --- a/src/common/utils/reflect.util.ts +++ /dev/null @@ -1,256 +0,0 @@ -import { Injectable } from '@nestjs/common'; - -/** - * 反射工具类 - * 基于 NestJS 实现 Java 风格的反射工具 - * 对应 Java: ReflectCallConstructor, ReflectCallMethod - */ -@Injectable() -export class ReflectUtil { - /** - * 根据类名获取类 - * @param className 类名 - * @returns 类构造函数 - */ - getClass(className: string): new (...args: any[]) => T { - try { - // 在 Node.js 环境中,需要通过全局对象获取类 - const ClassConstructor = (global as any)[className]; - if (ClassConstructor && typeof ClassConstructor === 'function') { - return ClassConstructor as new (...args: any[]) => T; - } - throw new Error(`Class ${className} not found`); - } catch (error) { - throw new Error(`Failed to get class ${className}: ${error.message}`); - } - } - - /** - * 根据类名创建实例 - * @param className 类名 - * @returns 类实例 - */ - newInstance(className: string): T { - try { - const ClassConstructor = this.getClass(className); - return new ClassConstructor(); - } catch (error) { - throw new Error( - `Failed to create instance of ${className}: ${error.message}`, - ); - } - } - - /** - * 根据类名和参数创建实例 - * @param className 类名 - * @param args 构造参数 - * @returns 类实例 - */ - newInstanceWithArgs(className: string, ...args: any[]): T { - try { - const ClassConstructor = this.getClass(className); - return new ClassConstructor(...args); - } catch (error) { - throw new Error( - `Failed to create instance of ${className} with args: ${error.message}`, - ); - } - } - - /** - * 调用静态方法 - * @param className 类名 - * @param methodName 方法名 - * @param args 方法参数 - * @returns 方法返回值 - */ - invokeStaticMethod( - className: string, - methodName: string, - ...args: any[] - ): T { - try { - const ClassConstructor = this.getClass(className); - if (typeof ClassConstructor[methodName] === 'function') { - return ClassConstructor[methodName](...args); - } - throw new Error( - `Static method ${methodName} not found in class ${className}`, - ); - } catch (error) { - throw new Error( - `Failed to invoke static method ${className}.${methodName}: ${error.message}`, - ); - } - } - - /** - * 调用实例方法 - * @param instance 实例对象 - * @param methodName 方法名 - * @param args 方法参数 - * @returns 方法返回值 - */ - invokeMethod(instance: any, methodName: string, ...args: any[]): T { - try { - if (instance && typeof instance[methodName] === 'function') { - return instance[methodName](...args); - } - throw new Error(`Method ${methodName} not found in instance`); - } catch (error) { - throw new Error( - `Failed to invoke method ${methodName}: ${error.message}`, - ); - } - } - - /** - * 设置对象属性值 - * @param target 目标对象 - * @param fieldName 属性名 - * @param value 属性值 - */ - setFieldValue(target: any, fieldName: string, value: any): void { - try { - if (target && typeof target === 'object') { - target[fieldName] = value; - } else { - throw new Error('Target is not a valid object'); - } - } catch (error) { - throw new Error(`Failed to set field ${fieldName}: ${error.message}`); - } - } - - /** - * 获取对象属性值 - * @param target 目标对象 - * @param fieldName 属性名 - * @returns 属性值 - */ - getFieldValue(target: any, fieldName: string): T { - try { - if (target && typeof target === 'object') { - return target[fieldName]; - } - throw new Error('Target is not a valid object'); - } catch (error) { - throw new Error(`Failed to get field ${fieldName}: ${error.message}`); - } - } - - /** - * 检查对象是否有指定方法 - * @param target 目标对象 - * @param methodName 方法名 - * @returns 是否有该方法 - */ - hasMethod(target: any, methodName: string): boolean { - return ( - target && - typeof target === 'object' && - typeof target[methodName] === 'function' - ); - } - - /** - * 检查对象是否有指定属性 - * @param target 目标对象 - * @param fieldName 属性名 - * @returns 是否有该属性 - */ - hasField(target: any, fieldName: string): boolean { - return target && typeof target === 'object' && fieldName in target; - } - - /** - * 获取对象的所有方法名 - * @param target 目标对象 - * @returns 方法名数组 - */ - getMethodNames(target: any): string[] { - if (!target || typeof target !== 'object') { - return []; - } - return Object.getOwnPropertyNames(target).filter( - (name) => typeof target[name] === 'function', - ); - } - - /** - * 获取对象的所有属性名 - * @param target 目标对象 - * @returns 属性名数组 - */ - getFieldNames(target: any): string[] { - if (!target || typeof target !== 'object') { - return []; - } - return Object.getOwnPropertyNames(target).filter( - (name) => typeof target[name] !== 'function', - ); - } - - /** - * 复制对象属性 - * @param source 源对象 - * @param target 目标对象 - * @param fields 要复制的属性名数组,不指定则复制所有属性 - */ - copyFields(source: any, target: any, fields?: string[]): void { - try { - if ( - !source || - !target || - typeof source !== 'object' || - typeof target !== 'object' - ) { - throw new Error('Source and target must be valid objects'); - } - - const fieldsToCopy = fields || Object.getOwnPropertyNames(source); - fieldsToCopy.forEach((fieldName) => { - if (source.hasOwnProperty(fieldName)) { - target[fieldName] = source[fieldName]; - } - }); - } catch (error) { - throw new Error(`Failed to copy fields: ${error.message}`); - } - } - - /** - * 检查对象是否为空 - * @param obj 要检查的对象 - * @returns 是否为空 - */ - isEmpty(obj: any): boolean { - if (obj === null || obj === undefined) { - return true; - } - - if (typeof obj === 'string') { - return obj.length === 0; - } - - if (Array.isArray(obj)) { - return obj.length === 0; - } - - if (typeof obj === 'object') { - return Object.keys(obj).length === 0; - } - - return false; - } - - /** - * 检查对象是否不为空 - * @param obj 要检查的对象 - * @returns 是否不为空 - */ - isNotEmpty(obj: any): boolean { - return !this.isEmpty(obj); - } -} diff --git a/src/common/utils/request.util.ts b/src/common/utils/request.util.ts deleted file mode 100644 index c564fa12..00000000 --- a/src/common/utils/request.util.ts +++ /dev/null @@ -1,329 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import { Request } from 'express'; - -/** - * 请求工具类 - * 基于 NestJS 实现 Java 风格的 RequestUtils - * 对应 Java: RequestUtils - */ -@Injectable() -export class RequestUtil { - private request: Request; - - /** - * 设置当前请求对象 - * @param request 请求对象 - */ - setRequest(request: Request): void { - this.request = request; - } - - /** - * 获取当前请求对象 - * @returns 请求对象 - */ - getRequest(): Request { - return this.request; - } - - /** - * 获取请求域名 - * @returns 域名 - */ - getRequestDomain(): string { - return this.request?.get('host') || ''; - } - - /** - * 获取请求协议 - * @returns 协议 - */ - getRequestSecure(): string { - return this.request?.protocol || 'http'; - } - - /** - * 获取请求IP地址 - * @returns IP地址 - */ - getRequestIpAddr(): string { - if (!this.request) { - return ''; - } - - // 获取真实IP地址 - const forwarded = this.request.get('x-forwarded-for'); - if (forwarded) { - return forwarded.split(',')[0].trim(); - } - - const realIp = this.request.get('x-real-ip'); - if (realIp) { - return realIp; - } - - return this.request.ip || this.request.connection.remoteAddress || ''; - } - - /** - * 获取请求参数映射 - * @returns 参数映射 - */ - getParameterMap(): Record { - if (!this.request) { - return {}; - } - - const params: Record = {}; - - // 合并查询参数和路径参数 - const allParams = { ...this.request.query, ...this.request.params }; - - for (const key in allParams) { - if (allParams.hasOwnProperty(key)) { - const value = allParams[key]; - if (Array.isArray(value)) { - params[key] = value.map((v) => String(v)); - } else { - params[key] = [String(value)]; - } - } - } - - return params; - } - - /** - * 获取请求参数值 - * @param name 参数名 - * @param defaultValue 默认值 - * @returns 参数值 - */ - getParameter(name: string, defaultValue: string = ''): string { - const params = this.getParameterMap(); - const values = params[name]; - return values && values.length > 0 ? values[0] : defaultValue; - } - - /** - * 获取请求参数数组 - * @param name 参数名 - * @returns 参数数组 - */ - getParameterValues(name: string): string[] { - const params = this.getParameterMap(); - return params[name] || []; - } - - /** - * 获取请求头 - * @param name 头名称 - * @returns 头值 - */ - getHeader(name: string): string { - return this.request?.get(name) || ''; - } - - /** - * 获取所有请求头 - * @returns 请求头对象 - */ - getHeaders(): Record { - return this.request?.headers || {}; - } - - /** - * 获取请求方法 - * @returns 请求方法 - */ - getMethod(): string { - return this.request?.method || ''; - } - - /** - * 获取请求URL - * @returns 请求URL - */ - getRequestURL(): string { - if (!this.request) { - return ''; - } - - const protocol = this.getRequestSecure(); - const host = this.getRequestDomain(); - const url = this.request.originalUrl || this.request.url; - - return `${protocol}://${host}${url}`; - } - - /** - * 获取请求路径 - * @returns 请求路径 - */ - getRequestPath(): string { - return this.request?.originalUrl || this.request?.url || ''; - } - - /** - * 获取请求路径(不包含查询参数) - * @returns 请求路径 - */ - getPath(): string { - return this.request?.path || ''; - } - - /** - * 获取查询字符串 - * @returns 查询字符串 - */ - getQueryString(): string { - return this.request?.url?.split('?')[1] || ''; - } - - /** - * 获取请求体 - * @returns 请求体 - */ - getBody(): any { - return this.request?.body; - } - - /** - * 获取内容长度 - * @returns 内容长度 - */ - getContentLength(): number { - const length = this.getHeader('content-length'); - return length ? parseInt(length, 10) : 0; - } - - /** - * 是否为Ajax请求 - * @returns 是否为Ajax请求 - */ - isAjax(): boolean { - const xRequestedWith = this.getHeader('x-requested-with'); - return xRequestedWith === 'XMLHttpRequest'; - } - - /** - * 是否为移动设备 - * @returns 是否为移动设备 - */ - isMobile(): boolean { - const userAgent = this.getUserAgent().toLowerCase(); - return /mobile|android|iphone|ipad|phone/i.test(userAgent); - } - - /** - * 获取用户代理 - * @returns 用户代理字符串 - */ - getUserAgent(): string { - return this.getHeader('user-agent'); - } - - /** - * 获取客户端信息 - * @returns 客户端信息 - */ - getClientInfo(): { - ip: string; - userAgent: string; - referer: string; - isAjax: boolean; - isMobile: boolean; - } { - return { - ip: this.getRequestIpAddr(), - userAgent: this.getUserAgent(), - referer: this.getHeader('referer'), - isAjax: this.isAjax(), - isMobile: this.isMobile(), - }; - } - - /** - * 获取请求信息 - * @returns 请求信息 - */ - getRequestInfo(): { - method: string; - url: string; - ip: string; - userAgent: string; - timestamp: number; - } { - return { - method: this.getMethod(), - url: this.getRequestURL(), - ip: this.getRequestIpAddr(), - userAgent: this.getUserAgent(), - timestamp: Date.now(), - }; - } - - /** - * 获取请求ID - * @returns 请求ID - */ - getRequestId(): string { - return this.getHeader('x-request-id') || ''; - } - - /** - * 设置请求ID - * @param id 请求ID - */ - setRequestId(id: string): void { - if (this.request) { - this.request.headers['x-request-id'] = id; - } - } - - /** - * 获取会话ID - * @returns 会话ID - */ - getSessionId(): string { - return this.getHeader('x-session-id') || ''; - } - - /** - * 设置会话ID - * @param id 会话ID - */ - setSessionId(id: string): void { - if (this.request) { - this.request.headers['x-session-id'] = id; - } - } - - /** - * 获取认证令牌 - * @returns 认证令牌 - */ - getAuthToken(): string { - const authHeader = this.getHeader('authorization'); - if (authHeader && authHeader.startsWith('Bearer ')) { - return authHeader.substring(7); - } - return ''; - } - - /** - * 获取语言 - * @returns 语言代码 - */ - getLanguage(): string { - return this.getHeader('accept-language') || 'zh-CN'; - } - - /** - * 获取时区 - * @returns 时区 - */ - getTimezone(): string { - return this.getHeader('x-timezone') || 'Asia/Shanghai'; - } -} diff --git a/src/common/utils/system.util.ts b/src/common/utils/system.util.ts deleted file mode 100644 index a00fe8c3..00000000 --- a/src/common/utils/system.util.ts +++ /dev/null @@ -1,488 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import { ConfigService } from '@nestjs/config'; -import * as os from 'os'; -import * as fs from 'fs'; -import * as path from 'path'; - -/** - * 系统工具类 - * 对应 Java: SystemUtils - */ -@Injectable() -export class SystemUtil { - constructor(private readonly configService: ConfigService) {} - - /** - * 获取系统信息 - */ - getSystemInfo(): { - platform: string; - arch: string; - hostname: string; - uptime: number; - totalMemory: number; - freeMemory: number; - cpuCount: number; - nodeVersion: string; - } { - return { - platform: os.platform(), - arch: os.arch(), - hostname: os.hostname(), - uptime: os.uptime(), - totalMemory: os.totalmem(), - freeMemory: os.freemem(), - cpuCount: os.cpus().length, - nodeVersion: process.version, - }; - } - - /** - * 获取内存使用情况 - */ - getMemoryUsage(): { - rss: number; - heapTotal: number; - heapUsed: number; - external: number; - arrayBuffers: number; - } { - return process.memoryUsage(); - } - - /** - * 获取 CPU 使用情况 - */ - getCpuUsage(): { - model: string; - speed: number; - times: { - user: number; - nice: number; - sys: number; - idle: number; - irq: number; - }; - }[] { - return os.cpus(); - } - - /** - * 获取网络接口信息 - */ - getNetworkInterfaces(): NodeJS.Dict { - return os.networkInterfaces(); - } - - /** - * 获取环境变量 - */ - getEnv(key: string, defaultValue?: string): string | undefined { - return process.env[key] || defaultValue; - } - - /** - * 获取所有环境变量 - */ - getAllEnv(): NodeJS.ProcessEnv { - return process.env; - } - - /** - * 获取进程信息 - */ - getProcessInfo(): { - pid: number; - ppid: number; - title: string; - argv: string[]; - execPath: string; - cwd: string; - version: string; - versions: NodeJS.ProcessVersions; - platform: string; - arch: string; - } { - return { - pid: process.pid, - ppid: process.ppid, - title: process.title, - argv: process.argv, - execPath: process.execPath, - cwd: process.cwd(), - version: process.version, - versions: process.versions, - platform: process.platform, - arch: process.arch, - }; - } - - /** - * 获取磁盘使用情况 - */ - async getDiskUsage(path: string = process.cwd()): Promise<{ - total: number; - free: number; - used: number; - percentage: number; - }> { - try { - const stats = await fs.promises.statfs(path); - const total = stats.bavail * stats.bsize; - const free = stats.bavail * stats.bsize; - const used = total - free; - const percentage = (used / total) * 100; - - return { - total, - free, - used, - percentage: Math.round(percentage * 100) / 100, - }; - } catch (error) { - throw new Error(`Failed to get disk usage: ${error.message}`); - } - } - - /** - * 检查文件是否存在 - */ - async fileExists(filePath: string): Promise { - try { - await fs.promises.access(filePath); - return true; - } catch { - return false; - } - } - - /** - * 创建目录 - */ - async createDirectory( - dirPath: string, - recursive: boolean = true, - ): Promise { - await fs.promises.mkdir(dirPath, { recursive }); - } - - /** - * 删除文件或目录 - */ - async removeFileOrDirectory(path: string): Promise { - const stats = await fs.promises.stat(path); - if (stats.isDirectory()) { - await fs.promises.rmdir(path, { recursive: true }); - } else { - await fs.promises.unlink(path); - } - } - - /** - * 复制文件 - */ - async copyFile(src: string, dest: string): Promise { - await fs.promises.copyFile(src, dest); - } - - /** - * 移动文件 - */ - async moveFile(src: string, dest: string): Promise { - await fs.promises.rename(src, dest); - } - - /** - * 读取文件内容 - */ - async readFile( - filePath: string, - encoding: BufferEncoding = 'utf8', - ): Promise { - return fs.promises.readFile(filePath, encoding); - } - - /** - * 写入文件内容 - */ - async writeFile( - filePath: string, - content: string, - encoding: BufferEncoding = 'utf8', - ): Promise { - await fs.promises.writeFile(filePath, content, encoding); - } - - /** - * 获取文件信息 - */ - async getFileInfo(filePath: string): Promise<{ - size: number; - isFile: boolean; - isDirectory: boolean; - mtime: Date; - ctime: Date; - atime: Date; - }> { - const stats = await fs.promises.stat(filePath); - return { - size: stats.size, - isFile: stats.isFile(), - isDirectory: stats.isDirectory(), - mtime: stats.mtime, - ctime: stats.ctime, - atime: stats.atime, - }; - } - - /** - * 获取目录内容 - */ - async readDirectory(dirPath: string): Promise { - return fs.promises.readdir(dirPath); - } - - /** - * 获取文件扩展名 - */ - getFileExtension(filePath: string): string { - return path.extname(filePath); - } - - /** - * 获取文件名(不含扩展名) - */ - getFileNameWithoutExtension(filePath: string): string { - return path.basename(filePath, path.extname(filePath)); - } - - /** - * 获取目录名 - */ - getDirectoryName(filePath: string): string { - return path.dirname(filePath); - } - - /** - * 连接路径 - */ - joinPath(...paths: string[]): string { - return path.join(...paths); - } - - /** - * 解析路径 - */ - resolvePath(...paths: string[]): string { - return path.resolve(...paths); - } - - /** - * 获取相对路径 - */ - getRelativePath(from: string, to: string): string { - return path.relative(from, to); - } - - /** - * 检查路径是否为绝对路径 - */ - isAbsolutePath(filePath: string): boolean { - return path.isAbsolute(filePath); - } - - /** - * 标准化路径 - */ - normalizePath(filePath: string): string { - return path.normalize(filePath); - } - - /** - * 获取临时目录 - */ - getTempDirectory(): string { - return os.tmpdir(); - } - - /** - * 获取主目录 - */ - getHomeDirectory(): string { - return os.homedir(); - } - - /** - * 获取当前工作目录 - */ - getCurrentWorkingDirectory(): string { - return process.cwd(); - } - - /** - * 设置当前工作目录 - */ - setCurrentWorkingDirectory(directory: string): void { - process.chdir(directory); - } - - /** - * 获取应用程序根目录 - */ - getAppRootDirectory(): string { - return this.configService.get('app.root', process.cwd()); - } - - /** - * 获取日志目录 - */ - getLogDirectory(): string { - return this.configService.get( - 'app.logs', - path.join(this.getAppRootDirectory(), 'logs'), - ); - } - - /** - * 获取上传目录 - */ - getUploadDirectory(): string { - return this.configService.get( - 'app.uploads', - path.join(this.getAppRootDirectory(), 'uploads'), - ); - } - - /** - * 获取配置目录 - */ - getConfigDirectory(): string { - return this.configService.get( - 'app.config', - path.join(this.getAppRootDirectory(), 'config'), - ); - } - - /** - * 获取缓存目录 - */ - getCacheDirectory(): string { - return this.configService.get( - 'app.cache', - path.join(this.getAppRootDirectory(), 'cache'), - ); - } - - /** - * 获取系统负载 - */ - getLoadAverage(): number[] { - return os.loadavg(); - } - - /** - * 获取系统运行时间 - */ - getUptime(): number { - return os.uptime(); - } - - /** - * 获取系统时间 - */ - getSystemTime(): Date { - return new Date(); - } - - /** - * 获取时区 - */ - getTimezone(): string { - return Intl.DateTimeFormat().resolvedOptions().timeZone; - } - - /** - * 获取语言环境 - */ - getLocale(): string { - return Intl.DateTimeFormat().resolvedOptions().locale; - } - - /** - * 检查是否为开发环境 - */ - isDevelopment(): boolean { - return this.getEnv('NODE_ENV') === 'development'; - } - - /** - * 检查是否为生产环境 - */ - isProduction(): boolean { - return this.getEnv('NODE_ENV') === 'production'; - } - - /** - * 检查是否为测试环境 - */ - isTest(): boolean { - return this.getEnv('NODE_ENV') === 'test'; - } - - /** - * 获取应用程序版本 - */ - getAppVersion(): string { - return this.configService.get('app.version', '1.0.0'); - } - - /** - * 获取应用程序名称 - */ - getAppName(): string { - return this.configService.get('app.name', 'WWJCloud'); - } - - /** - * 获取应用程序描述 - */ - getAppDescription(): string { - return this.configService.get('app.description', 'WWJCloud Application'); - } - - /** - * 获取应用程序作者 - */ - getAppAuthor(): string { - return this.configService.get('app.author', 'WWJCloud Team'); - } - - /** - * 获取应用程序许可证 - */ - getAppLicense(): string { - return this.configService.get('app.license', 'MIT'); - } - - /** - * 获取应用程序仓库 - */ - getAppRepository(): string { - return this.configService.get('app.repository', ''); - } - - /** - * 获取应用程序主页 - */ - getAppHomepage(): string { - return this.configService.get('app.homepage', ''); - } - - /** - * 获取应用程序关键词 - */ - getAppKeywords(): string[] { - const keywords = this.configService.get('app.keywords', ''); - return keywords ? keywords.split(',').map((k) => k.trim()) : []; - } -} diff --git a/src/common/utils/utils.module.ts b/src/common/utils/utils.module.ts deleted file mode 100644 index b5e4ade6..00000000 --- a/src/common/utils/utils.module.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { Module } from '@nestjs/common'; -import { SystemUtil } from './system.util'; -import { CryptoUtil } from './crypto.util'; -import { ReflectUtil } from './reflect.util'; -import { ObjectUtil } from './object.util'; -import { JsonUtil } from './json.util'; -import { CloneUtil } from './clone.util'; - -/** - * 工具类模块 - 基础设施层 - * 基于 NestJS 实现 - * 对应 Java: Utils - * - * 注意:第三方库封装已迁移到 vendor/libraries/ - * 这里只保留自定义工具类 - */ -@Module({ - providers: [ - SystemUtil, - CryptoUtil, - ReflectUtil, - ObjectUtil, - JsonUtil, - CloneUtil, - ], - exports: [ - SystemUtil, - CryptoUtil, - ReflectUtil, - ObjectUtil, - JsonUtil, - CloneUtil, - ], -}) -export class UtilsModule {} diff --git a/src/common/validation/base.dto.ts b/src/common/validation/base.dto.ts deleted file mode 100644 index 1cc2c11f..00000000 --- a/src/common/validation/base.dto.ts +++ /dev/null @@ -1,99 +0,0 @@ -import { - IsOptional, - IsNumber, - IsString, - IsDateString, - IsBoolean, -} from 'class-validator'; -import { Type, Transform } from 'class-transformer'; - -/** - * 基础 DTO 类 - * 基于 class-validator 实现 - * 对应 Java: BaseDTO - */ -export abstract class BaseDto { - @IsOptional() - @IsNumber() - @Type(() => Number) - id?: number; - - @IsOptional() - @IsNumber() - @Type(() => Number) - siteId?: number; - - @IsOptional() - @IsNumber() - @Type(() => Number) - createBy?: number; - - @IsOptional() - @IsNumber() - @Type(() => Number) - updateBy?: number; - - @IsOptional() - @IsDateString() - createTime?: string; - - @IsOptional() - @IsDateString() - updateTime?: string; - - @IsOptional() - @IsDateString() - deleteTime?: string; - - @IsOptional() - @IsNumber() - @Type(() => Number) - isDelete?: number; -} - -/** - * 分页查询 DTO - */ -export class PaginationDto { - @IsOptional() - @IsNumber() - @Type(() => Number) - @Transform(({ value }) => Math.max(1, parseInt(value) || 1)) - page?: number = 1; - - @IsOptional() - @IsNumber() - @Type(() => Number) - @Transform(({ value }) => Math.min(100, Math.max(1, parseInt(value) || 10))) - limit?: number = 10; - - @IsOptional() - @IsString() - keyword?: string; - - @IsOptional() - @IsString() - sortBy?: string; - - @IsOptional() - @IsString() - sortOrder?: 'ASC' | 'DESC' = 'DESC'; -} - -/** - * ID 参数 DTO - */ -export class IdDto { - @IsNumber() - @Type(() => Number) - id: number; -} - -/** - * 批量操作 DTO - */ -export class BatchDto { - @IsNumber({}, { each: true }) - @Type(() => Number) - ids: number[]; -} diff --git a/src/common/validation/custom-validators.ts b/src/common/validation/custom-validators.ts deleted file mode 100644 index 8da5e7f2..00000000 --- a/src/common/validation/custom-validators.ts +++ /dev/null @@ -1,166 +0,0 @@ -import { - registerDecorator, - ValidationOptions, - ValidationArguments, -} from 'class-validator'; - -/** - * 自定义验证装饰器 - * 基于 class-validator 实现 - * 对应 Java: 自定义验证注解 - */ - -/** - * 验证手机号 - */ -export function IsPhoneNumber(validationOptions?: ValidationOptions) { - return function (object: object, propertyName: string) { - registerDecorator({ - name: 'isPhoneNumber', - target: object.constructor, - propertyName: propertyName, - options: validationOptions, - validator: { - validate(value: any, args: ValidationArguments) { - if (typeof value !== 'string') return false; - const phoneRegex = /^1[3-9]\d{9}$/; - return phoneRegex.test(value); - }, - defaultMessage(args: ValidationArguments) { - return '手机号格式不正确'; - }, - }, - }); - }; -} - -/** - * 验证邮箱 - */ -export function IsEmail(validationOptions?: ValidationOptions) { - return function (object: object, propertyName: string) { - registerDecorator({ - name: 'isEmail', - target: object.constructor, - propertyName: propertyName, - options: validationOptions, - validator: { - validate(value: any, args: ValidationArguments) { - if (typeof value !== 'string') return false; - const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; - return emailRegex.test(value); - }, - defaultMessage(args: ValidationArguments) { - return '邮箱格式不正确'; - }, - }, - }); - }; -} - -/** - * 验证密码强度 - */ -export function IsStrongPassword(validationOptions?: ValidationOptions) { - return function (object: object, propertyName: string) { - registerDecorator({ - name: 'isStrongPassword', - target: object.constructor, - propertyName: propertyName, - options: validationOptions, - validator: { - validate(value: any, args: ValidationArguments) { - if (typeof value !== 'string') return false; - // 至少8位,包含大小写字母、数字和特殊字符 - const strongPasswordRegex = - /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/; - return strongPasswordRegex.test(value); - }, - defaultMessage(args: ValidationArguments) { - return '密码必须至少8位,包含大小写字母、数字和特殊字符'; - }, - }, - }); - }; -} - -/** - * 验证用户名 - */ -export function IsUsername(validationOptions?: ValidationOptions) { - return function (object: object, propertyName: string) { - registerDecorator({ - name: 'isUsername', - target: object.constructor, - propertyName: propertyName, - options: validationOptions, - validator: { - validate(value: any, args: ValidationArguments) { - if (typeof value !== 'string') return false; - // 3-20位,只能包含字母、数字、下划线 - const usernameRegex = /^[a-zA-Z0-9_]{3,20}$/; - return usernameRegex.test(value); - }, - defaultMessage(args: ValidationArguments) { - return '用户名必须是3-20位字母、数字或下划线'; - }, - }, - }); - }; -} - -/** - * 验证文件扩展名 - */ -export function IsFileExtension( - allowedExtensions: string[], - validationOptions?: ValidationOptions, -) { - return function (object: object, propertyName: string) { - registerDecorator({ - name: 'isFileExtension', - target: object.constructor, - propertyName: propertyName, - constraints: [allowedExtensions], - options: validationOptions, - validator: { - validate(value: any, args: ValidationArguments) { - if (typeof value !== 'string') return false; - const [allowedExtensions] = args.constraints; - const extension = value.split('.').pop()?.toLowerCase(); - return allowedExtensions.includes(extension); - }, - defaultMessage(args: ValidationArguments) { - const [allowedExtensions] = args.constraints; - return `文件扩展名必须是: ${allowedExtensions.join(', ')}`; - }, - }, - }); - }; -} - -/** - * 验证日期范围 - */ -export function IsDateRange(validationOptions?: ValidationOptions) { - return function (object: object, propertyName: string) { - registerDecorator({ - name: 'isDateRange', - target: object.constructor, - propertyName: propertyName, - options: validationOptions, - validator: { - validate(value: any, args: ValidationArguments) { - if (!value || typeof value !== 'object') return false; - if (!value.startDate || !value.endDate) return false; - const startDate = new Date(value.startDate); - const endDate = new Date(value.endDate); - return startDate <= endDate; - }, - defaultMessage(args: ValidationArguments) { - return '开始日期必须小于等于结束日期'; - }, - }, - }); - }; -} diff --git a/src/config/app.config.ts b/src/config/app.config.ts deleted file mode 100644 index 7fac5c7d..00000000 --- a/src/config/app.config.ts +++ /dev/null @@ -1,294 +0,0 @@ -/** - * 应用配置 - 框架配置中心 - * 统一管理所有框架级配置项 - */ - -const defaultConfig = { - app: { - name: 'WWJCloud Backend', - version: '1.0.0', - port: 3001, - environment: 'development', - timezone: 'Asia/Shanghai', - appKey: 'niucloud456$%^', - defaultLanguage: 'zh_CN', - supportedLocales: ['zh_CN', 'en_US'], - }, - database: { - host: 'localhost', - port: 3306, - username: 'root', - password: 'root', - database: 'wwjcloud', - synchronize: false, - logging: true, - connectionLimit: 20, - acquireTimeout: 60000, - timeout: 60000, - cacheDurationMs: 30000, - timezone: '+08:00', - charset: 'utf8mb4', - }, - redis: { - host: 'localhost', - port: 6379, - password: '', - db: 0, - keyPrefix: 'wwjcloud:', - }, - kafka: { - clientId: 'wwjcloud-backend', - brokers: ['localhost:9092'], - groupId: 'wwjcloud-group', - topicPrefix: 'wwjcloud.', - }, - jwt: { - secret: 'wwjcloud-jwt-secret-key-2024-very-long-secret', - expiresIn: '24h', - algorithm: 'HS256', - }, - cache: { - ttl: 3600, - maxItems: 1000, - prefix: 'cache:', - }, - logging: { - level: 'info', - format: 'json', - filename: 'logs/app.log', - }, - upload: { - path: 'uploads/', - maxSize: 10 * 1024 * 1024, - allowedTypes: ['jpg', 'jpeg', 'png', 'gif', 'pdf', 'doc', 'docx'], - }, - throttle: { - ttl: 60, - limit: 100, - }, - health: { - startupCheckEnabled: true, - startupTimeoutMs: 5000, - }, - swagger: { - enabled: process.env.SWAGGER_ENABLED === 'true' || true, - title: process.env.SWAGGER_TITLE || 'WWJCloud API 文档', - description: - process.env.SWAGGER_DESCRIPTION || - 'WWJCloud 基于 NestJS 的企业级后端 API 文档', - version: process.env.SWAGGER_VERSION || '1.0.0', - auth: { - enabled: process.env.SWAGGER_AUTH_ENABLED === 'true' || true, - }, - token: process.env.SWAGGER_TOKEN || '', - }, -}; - -function loadFromEnv() { - return { - app: { - name: process.env.APP_NAME || defaultConfig.app.name, - version: process.env.APP_VERSION || defaultConfig.app.version, - port: parseInt(process.env.PORT || String(defaultConfig.app.port), 10), - environment: process.env.NODE_ENV || defaultConfig.app.environment, - timezone: process.env.TZ || defaultConfig.app.timezone, - appKey: - process.env.APP_APP_KEY || - process.env.APP_KEY || - process.env.AUTH_KEY || - defaultConfig.app.appKey, - defaultLanguage: - process.env.APP_DEFAULT_LANGUAGE || - process.env.DEFAULT_LANGUAGE || - defaultConfig.app.defaultLanguage, - supportedLocales: - process.env.APP_SUPPORTED_LOCALES?.split(',') || - defaultConfig.app.supportedLocales, - }, - database: { - host: process.env.DB_HOST || defaultConfig.database.host, - port: parseInt( - process.env.DB_PORT || String(defaultConfig.database.port), - 10, - ), - username: process.env.DB_USERNAME || defaultConfig.database.username, - password: process.env.DB_PASSWORD || defaultConfig.database.password, - database: process.env.DB_DATABASE || defaultConfig.database.database, - synchronize: process.env.DB_SYNC === 'true', - logging: process.env.DB_LOGGING === 'true', - connectionLimit: parseInt( - process.env.DB_CONN_LIMIT || - String(defaultConfig.database.connectionLimit), - 10, - ), - acquireTimeout: parseInt( - process.env.DB_ACQUIRE_TIMEOUT_MS || - String(defaultConfig.database.acquireTimeout), - 10, - ), - timeout: parseInt( - process.env.DB_QUERY_TIMEOUT_MS || - String(defaultConfig.database.timeout), - 10, - ), - cacheDurationMs: parseInt( - process.env.DB_CACHE_DURATION_MS || - String(defaultConfig.database.cacheDurationMs), - 10, - ), - timezone: process.env.DB_TIMEZONE || defaultConfig.database.timezone, - charset: process.env.DB_CHARSET || defaultConfig.database.charset, - }, - redis: { - host: process.env.REDIS_HOST || defaultConfig.redis.host, - port: parseInt( - process.env.REDIS_PORT || String(defaultConfig.redis.port), - 10, - ), - password: process.env.REDIS_PASSWORD || defaultConfig.redis.password, - db: parseInt(process.env.REDIS_DB || String(defaultConfig.redis.db), 10), - keyPrefix: process.env.REDIS_KEY_PREFIX || defaultConfig.redis.keyPrefix, - }, - kafka: { - clientId: process.env.KAFKA_CLIENT_ID || defaultConfig.kafka.clientId, - brokers: ( - process.env.KAFKA_BROKERS || defaultConfig.kafka.brokers.join(',') - ).split(','), - groupId: process.env.KAFKA_GROUP_ID || defaultConfig.kafka.groupId, - topicPrefix: - process.env.KAFKA_TOPIC_PREFIX || defaultConfig.kafka.topicPrefix, - }, - jwt: { - secret: process.env.JWT_SECRET || defaultConfig.jwt.secret, - expiresIn: process.env.JWT_EXPIRES_IN || defaultConfig.jwt.expiresIn, - algorithm: process.env.JWT_ALGORITHM || defaultConfig.jwt.algorithm, - }, - cache: { - ttl: parseInt( - process.env.CACHE_TTL || String(defaultConfig.cache.ttl), - 10, - ), - maxItems: parseInt( - process.env.CACHE_MAX_ITEMS || String(defaultConfig.cache.maxItems), - 10, - ), - prefix: process.env.CACHE_PREFIX || defaultConfig.cache.prefix, - }, - logging: { - level: process.env.LOG_LEVEL || defaultConfig.logging.level, - format: process.env.LOG_FORMAT || defaultConfig.logging.format, - filename: process.env.LOG_FILENAME || defaultConfig.logging.filename, - }, - upload: { - path: process.env.UPLOAD_PATH || defaultConfig.upload.path, - maxSize: parseInt( - process.env.UPLOAD_MAX_SIZE || String(defaultConfig.upload.maxSize), - 10, - ), - allowedTypes: - process.env.UPLOAD_ALLOWED_TYPES?.split(',') || - defaultConfig.upload.allowedTypes, - }, - throttle: { - ttl: parseInt( - process.env.THROTTLE_TTL || String(defaultConfig.throttle.ttl), - 10, - ), - limit: parseInt( - process.env.THROTTLE_LIMIT || String(defaultConfig.throttle.limit), - 10, - ), - }, - health: { - startupCheckEnabled: - (process.env.STARTUP_HEALTH_CHECK || 'true').toLowerCase() !== 'false', - startupTimeoutMs: parseInt( - process.env.STARTUP_HEALTH_TIMEOUT_MS || - String(defaultConfig.health.startupTimeoutMs), - 10, - ), - }, - swagger: { - enabled: process.env.SWAGGER_ENABLED === 'true' || true, - title: process.env.SWAGGER_TITLE || 'WWJCloud API 文档', - description: - process.env.SWAGGER_DESCRIPTION || - 'WWJCloud 基于 NestJS 的企业级后端 API 文档', - version: process.env.SWAGGER_VERSION || '1.0.0', - auth: { - enabled: process.env.SWAGGER_AUTH_ENABLED === 'true' || true, - }, - token: process.env.SWAGGER_TOKEN || '', - }, - }; -} - -function mergeConfig(defaultConfig: any, envConfig: any) { - return { - ...defaultConfig, - ...envConfig, - app: { ...defaultConfig.app, ...envConfig.app }, - database: { ...defaultConfig.database, ...envConfig.database }, - redis: { ...defaultConfig.redis, ...envConfig.redis }, - kafka: { ...defaultConfig.kafka, ...envConfig.kafka }, - jwt: { ...defaultConfig.jwt, ...envConfig.jwt }, - cache: { ...defaultConfig.cache, ...envConfig.cache }, - logging: { ...defaultConfig.logging, ...envConfig.logging }, - upload: { ...defaultConfig.upload, ...envConfig.upload }, - throttle: { ...defaultConfig.throttle, ...envConfig.throttle }, - health: { ...defaultConfig.health, ...envConfig.health }, - swagger: { ...defaultConfig.swagger, ...envConfig.swagger }, - }; -} - -export const appConfig = mergeConfig(defaultConfig, loadFromEnv()); - -export const config = { - get() { - return appConfig; - }, - getApp() { - return appConfig.app; - }, - getDatabase() { - return appConfig.database; - }, - getRedis() { - return appConfig.redis; - }, - getKafka() { - return appConfig.kafka; - }, - getJwt() { - return appConfig.jwt; - }, - getCache() { - return appConfig.cache; - }, - getLogging() { - return appConfig.logging; - }, - getUpload() { - return appConfig.upload; - }, - getThrottle() { - return appConfig.throttle; - }, - getHealth() { - return appConfig.health; - }, - getSwagger() { - return appConfig.swagger; - }, - isProduction() { - return appConfig.app.environment === 'production'; - }, - isDevelopment() { - return appConfig.app.environment === 'development'; - }, - isTest() { - return appConfig.app.environment === 'test'; - }, -}; - -export default appConfig; diff --git a/src/config/app.schema.ts b/src/config/app.schema.ts deleted file mode 100644 index f4bd847e..00000000 --- a/src/config/app.schema.ts +++ /dev/null @@ -1,128 +0,0 @@ -import * as Joi from 'joi'; - -/** - * 应用配置验证模式 - */ -export const appConfigSchema = Joi.object({ - app: Joi.object({ - name: Joi.string().min(1).max(100).required(), - version: Joi.string() - .pattern(/^\d+\.\d+\.\d+$/) - .required(), - port: Joi.number().port().required(), - environment: Joi.string() - .valid('development', 'production', 'test') - .required(), - timezone: Joi.string().required(), - appKey: Joi.string().min(8).required(), - defaultLanguage: Joi.string().length(5).required(), - supportedLocales: Joi.array() - .items(Joi.string().length(5)) - .min(1) - .required(), - }).required(), - - database: Joi.object({ - host: Joi.string().hostname().required(), - port: Joi.number().port().required(), - username: Joi.string().min(1).required(), - password: Joi.string().required(), - database: Joi.string().min(1).required(), - synchronize: Joi.boolean().required(), - logging: Joi.boolean().required(), - connectionLimit: Joi.number().min(1).max(100).required(), - acquireTimeout: Joi.number().min(1000).max(300000).required(), - timeout: Joi.number().min(1000).max(300000).required(), - cacheDurationMs: Joi.number().min(1000).max(300000).required(), - timezone: Joi.string().required(), - charset: Joi.string().required(), - }).required(), - - redis: Joi.object({ - host: Joi.string().hostname().required(), - port: Joi.number().port().required(), - password: Joi.string().allow('').required(), - db: Joi.number().min(0).max(15).required(), - keyPrefix: Joi.string().required(), - }).required(), - - kafka: Joi.object({ - clientId: Joi.string().min(1).required(), - brokers: Joi.array() - .items(Joi.string().pattern(/^[a-zA-Z0-9.-]+:\d+$/)) - .min(1) - .required(), - groupId: Joi.string().min(1).required(), - topicPrefix: Joi.string().required(), - }).required(), - - jwt: Joi.object({ - secret: Joi.string().min(32).required(), - expiresIn: Joi.string().required(), - algorithm: Joi.string().valid('HS256', 'HS384', 'HS512').required(), - }).required(), - - cache: Joi.object({ - ttl: Joi.number().min(1).max(86400).required(), - maxItems: Joi.number().min(1).max(10000).required(), - prefix: Joi.string().required(), - }).required(), - - logging: Joi.object({ - level: Joi.string() - .valid('error', 'warn', 'info', 'debug', 'verbose') - .required(), - format: Joi.string().valid('json', 'simple').required(), - filename: Joi.string().optional(), - }).required(), - - upload: Joi.object({ - path: Joi.string().required(), - maxSize: Joi.number() - .min(1024) - .max(100 * 1024 * 1024) - .required(), - allowedTypes: Joi.array().items(Joi.string()).min(1).required(), - }).required(), - - throttle: Joi.object({ - ttl: Joi.number().min(1).max(3600).required(), - limit: Joi.number().min(1).max(10000).required(), - }).required(), - - health: Joi.object({ - startupCheckEnabled: Joi.boolean().required(), - startupTimeoutMs: Joi.number().min(1000).max(60000).required(), - }).required(), - - swagger: Joi.object({ - enabled: Joi.boolean().required(), - title: Joi.string().min(1).required(), - description: Joi.string().min(1).required(), - version: Joi.string() - .pattern(/^\d+\.\d+\.\d+$/) - .required(), - auth: Joi.object({ - enabled: Joi.boolean().required(), - }).required(), - token: Joi.string().allow('').required(), - }).required(), -}); - -/** - * 验证应用配置 - */ -export function validateAppConfig(config: Record) { - const { error, value } = appConfigSchema.validate(config, { - allowUnknown: false, - stripUnknown: true, - }); - - if (error) { - throw new Error( - `配置验证失败: ${error.details.map((d) => d.message).join(', ')}`, - ); - } - - return value; -} diff --git a/src/config/config-center.controller.ts b/src/config/config-center.controller.ts deleted file mode 100644 index 0bb1a629..00000000 --- a/src/config/config-center.controller.ts +++ /dev/null @@ -1,260 +0,0 @@ -import { - Controller, - Get, - Post, - Put, - Delete, - Body, - Param, - Query, - HttpCode, - HttpStatus, -} from '@nestjs/common'; -import { - ApiTags, - ApiOperation, - ApiResponse, - ApiParam, - ApiQuery, -} from '@nestjs/swagger'; -import { ConfigCenterService } from './config-center.service'; -import { DynamicConfigService } from './dynamic-config.service'; - -/** - * 配置中心控制器 - * 对应 Java: ConfigController - */ -@ApiTags('配置中心') -@Controller('config') -export class ConfigCenterController { - constructor( - private readonly configCenter: ConfigCenterService, - private readonly dynamicConfig: DynamicConfigService, - ) {} - - @Get('value/:key') - @ApiOperation({ summary: '获取配置值' }) - @ApiParam({ name: 'key', description: '配置键' }) - @ApiQuery({ - name: 'siteId', - required: false, - description: '站点ID', - example: 0, - }) - @ApiQuery({ name: 'defaultValue', required: false, description: '默认值' }) - @ApiResponse({ status: 200, description: '获取成功' }) - async getConfigValue( - @Param('key') key: string, - @Query('siteId') siteId: number = 0, - @Query('defaultValue') defaultValue?: string, - ) { - const value = await this.configCenter.getConfigValue( - key, - defaultValue, - siteId, - ); - return { - success: true, - data: { key, value, siteId }, - }; - } - - @Post('value') - @ApiOperation({ summary: '设置配置值' }) - @ApiResponse({ status: 200, description: '设置成功' }) - @HttpCode(HttpStatus.OK) - async setConfigValue( - @Body() body: { key: string; value: any; siteId?: number; addon?: string }, - ) { - const { key, value, siteId = 0, addon = '' } = body; - - await this.configCenter.setConfigValue(key, value, siteId, addon); - - return { - success: true, - message: '配置设置成功', - data: { key, value, siteId }, - }; - } - - @Delete('value/:key') - @ApiOperation({ summary: '删除配置值' }) - @ApiParam({ name: 'key', description: '配置键' }) - @ApiQuery({ - name: 'siteId', - required: false, - description: '站点ID', - example: 0, - }) - @ApiResponse({ status: 200, description: '删除成功' }) - async deleteConfigValue( - @Param('key') key: string, - @Query('siteId') siteId: number = 0, - ) { - await this.configCenter.deleteConfigValue(key, siteId); - - return { - success: true, - message: '配置删除成功', - data: { key, siteId }, - }; - } - - @Post('refresh') - @ApiOperation({ summary: '刷新配置缓存' }) - @ApiQuery({ - name: 'siteId', - required: false, - description: '站点ID', - example: 0, - }) - @ApiQuery({ name: 'key', required: false, description: '配置键' }) - @ApiResponse({ status: 200, description: '刷新成功' }) - async refreshConfigCache( - @Query('siteId') siteId: number = 0, - @Query('key') key?: string, - ) { - await this.configCenter.refreshConfigCache(siteId, key); - - return { - success: true, - message: '配置缓存刷新成功', - data: { siteId, key }, - }; - } - - @Post('push') - @ApiOperation({ summary: '推送配置变更' }) - @ApiResponse({ status: 200, description: '推送成功' }) - async pushConfigChange( - @Body() body: { siteId: number; key: string; value: any }, - ) { - const { siteId, key, value } = body; - - await this.configCenter.pushConfigChange(siteId, key, value); - - return { - success: true, - message: '配置推送成功', - data: { siteId, key, value }, - }; - } - - @Post('hot-reload') - @ApiOperation({ summary: '热重载配置' }) - @ApiQuery({ - name: 'siteId', - required: false, - description: '站点ID', - example: 0, - }) - @ApiQuery({ name: 'key', required: false, description: '配置键' }) - @ApiResponse({ status: 200, description: '热重载成功' }) - async hotReloadConfig( - @Query('siteId') siteId: number = 0, - @Query('key') key?: string, - ) { - await this.configCenter.hotReloadConfig(siteId, key); - - return { - success: true, - message: '配置热重载成功', - data: { siteId, key }, - }; - } - - @Get('version/:key') - @ApiOperation({ summary: '获取配置版本' }) - @ApiParam({ name: 'key', description: '配置键' }) - @ApiQuery({ - name: 'siteId', - required: false, - description: '站点ID', - example: 0, - }) - @ApiResponse({ status: 200, description: '获取成功' }) - async getConfigVersion( - @Param('key') key: string, - @Query('siteId') siteId: number = 0, - ) { - const version = await this.configCenter.getConfigVersion(siteId, key); - - return { - success: true, - data: { key, version, siteId }, - }; - } - - @Post('rollback') - @ApiOperation({ summary: '回滚配置' }) - @ApiResponse({ status: 200, description: '回滚成功' }) - async rollbackConfig( - @Body() body: { siteId: number; key: string; version: number }, - ) { - const { siteId, key, version } = body; - - await this.configCenter.rollbackConfig(siteId, key, version); - - return { - success: true, - message: '配置回滚成功', - data: { siteId, key, version }, - }; - } - - @Get('group/:group') - @ApiOperation({ summary: '获取配置分组' }) - @ApiParam({ name: 'group', description: '配置分组' }) - @ApiQuery({ - name: 'siteId', - required: false, - description: '站点ID', - example: 0, - }) - @ApiResponse({ status: 200, description: '获取成功' }) - async getConfigGroup( - @Param('group') group: string, - @Query('siteId') siteId: number = 0, - ) { - const configs = await this.dynamicConfig.getConfigGroup(siteId, group); - - return { - success: true, - data: { group, configs, siteId }, - }; - } - - @Get('history/:key') - @ApiOperation({ summary: '获取配置历史' }) - @ApiParam({ name: 'key', description: '配置键' }) - @ApiQuery({ - name: 'siteId', - required: false, - description: '站点ID', - example: 0, - }) - @ApiResponse({ status: 200, description: '获取成功' }) - async getConfigHistory( - @Param('key') key: string, - @Query('siteId') siteId: number = 0, - ) { - const history = await this.dynamicConfig.getConfigHistory(siteId, key); - - return { - success: true, - data: { key, history, siteId }, - }; - } - - @Get('status') - @ApiOperation({ summary: '获取配置中心状态' }) - @ApiResponse({ status: 200, description: '获取成功' }) - async getConfigCenterStatus() { - const status = this.configCenter.getConfigCenterStatus(); - - return { - success: true, - data: status, - }; - } -} diff --git a/src/config/config-center.service.ts b/src/config/config-center.service.ts deleted file mode 100644 index 26d09290..00000000 --- a/src/config/config-center.service.ts +++ /dev/null @@ -1,441 +0,0 @@ -import { Injectable, Logger, Inject, OnModuleInit } from '@nestjs/common'; -import { ConfigService } from '@nestjs/config'; -import { EventEmitter2 } from '@nestjs/event-emitter'; -import { DynamicConfigService } from './dynamic-config.service'; -import type { CacheInterface } from '../common/cache/cache.interface'; - -/** - * WWJCloud 框架配置中心服务 - * - * 职责: - * - 管理 WWJCloud 框架级功能配置 - * - 为开发者提供开箱即用的企业级功能配置 - * - 支持动态配置、热更新、版本控制 - * - * 注意:业务配置由 Core 层管理,这里只管理框架功能配置 - */ -@Injectable() -export class ConfigCenterService implements OnModuleInit { - private readonly logger = new Logger(ConfigCenterService.name); - private readonly configWatchers = new Map>(); - private readonly configVersions = new Map(); - private isInitialized = false; - - constructor( - private readonly configService: ConfigService, - private readonly dynamicConfigService: DynamicConfigService, - private readonly eventEmitter: EventEmitter2, - @Inject('CACHE_PROVIDER') - private readonly cache?: CacheInterface, - ) {} - - async onModuleInit() { - await this.initializeConfigCenter(); - } - - /** - * 初始化配置中心 - */ - private async initializeConfigCenter(): Promise { - try { - this.logger.log('初始化配置中心...'); - - // 初始化框架配置 - await this.initializeFrameworkConfigs(); - - // 启动配置监听 - this.startConfigWatching(); - - this.isInitialized = true; - this.logger.log('配置中心初始化完成'); - } catch (error) { - this.logger.error('配置中心初始化失败', error); - throw error; - } - } - - /** - * 初始化 WWJCloud 框架配置 - * 为开发者提供开箱即用的框架功能配置 - */ - private async initializeFrameworkConfigs(): Promise { - try { - // WWJCloud 框架配置中心:管理框架级功能配置 - // 为开发者提供开箱即用的企业级功能配置 - - const defaultSiteId = 0; - - // WWJCloud 框架配置(对标 Java NiuCloud 的 ConfigKeyEnum) - const frameworkConfigs = [ - // 对标 Java: NIUCLOUD_CONFIG("NIUCLOUD_CONFIG") - { key: 'NIUCLOUD_CONFIG', value: '{}', addon: 'system' }, - - // 对标 Java: WECHAT("WECHAT") - 微信公众号 - { key: 'WECHAT', value: '{}', addon: 'wechat' }, - - // 对标 Java: WEAPP("weapp") - 微信小程序 - { key: 'weapp', value: '{}', addon: 'weapp' }, - - // 对标 Java: WECHAT_PAY("wechat_pay") - 微信支付 - { key: 'wechat_pay', value: '{"status": 0}', addon: 'pay' }, - - // 对标 Java: ALIPAY("alipay") - 支付宝支付 - { key: 'alipay', value: '{"status": 0}', addon: 'pay' }, - - // 对标 Java: OFFLINE_PAY("offline_pay") - 线下支付 - { key: 'offline_pay', value: '{"status": 0}', addon: 'pay' }, - - // 对标 Java: UPLOAD("upload") - 上传配置 - { - key: 'upload', - value: '{"type": "local", "max_size": 2048}', - addon: 'upload', - }, - - // 对标 Java: SMS("SMS") - 短信配置 (PHP 中有定义) - { key: 'SMS', value: '{"service_type": "aliyun"}', addon: 'sms' }, - - // 对标 Java: ADMIN_LOGIN("admin_login") - 管理端登录注册设置 - { key: 'admin_login', value: '{}', addon: 'auth' }, - - // 对标 Java: ALIAPP("aliapp") - 支付宝小程序 - { key: 'aliapp', value: '{}', addon: 'aliapp' }, - - // 对标 Java: H5("h5") - h5配置 - { key: 'h5', value: '{}', addon: 'h5' }, - - // 对标 Java: WXOPLATFORM("WXOPLATFORM") - 微信开放平台 - { key: 'WXOPLATFORM', value: '{}', addon: 'wechat' }, - - // 对标 Java: DIY_BOTTOM("diy_bottom") - 底部导航配置 - { key: 'diy_bottom', value: '[]', addon: 'diy' }, - - // 对标 Java: MEMBER_CASH_OUT("member_cash_out") - 会员提现 - { key: 'member_cash_out', value: '{}', addon: 'member' }, - ]; - - for (const config of frameworkConfigs) { - await this.dynamicConfigService.setConfig( - defaultSiteId, - config.key, - config.value, - config.addon, - ); - } - - this.logger.log('WWJCloud 框架配置初始化完成'); - } catch (error) { - this.logger.error('初始化框架配置失败', error); - } - } - - /** - * 启动配置监听 - */ - private startConfigWatching(): void { - // 定期检查配置变更 - setInterval(async () => { - try { - await this.checkConfigChanges(); - } catch (error) { - this.logger.error('配置变更检查失败', error); - } - }, 30000); // 30秒检查一次 - } - - /** - * 检查配置变更 - */ - private async checkConfigChanges(): Promise { - try { - // 这里可以实现配置变更检测逻辑 - // 例如:检查数据库配置的更新时间 - this.logger.debug('检查配置变更...'); - } catch (error) { - this.logger.error('配置变更检查失败', error); - } - } - - /** - * 获取配置值(支持静态和动态配置) - * @param key 配置键 - * @param defaultValue 默认值 - * @param siteId 站点ID - * @returns 配置值 - */ - async getConfigValue( - key: string, - defaultValue?: T, - siteId: number = 0, - ): Promise { - try { - // 先尝试从动态配置获取 - const dynamicValue = await this.dynamicConfigService.getConfigValue( - siteId, - key, - ); - if (dynamicValue !== null) { - return dynamicValue; - } - - // 从静态配置获取 - const staticValue = this.configService.get(key); - if (staticValue !== undefined) { - return staticValue; - } - - return defaultValue as T; - } catch (error) { - this.logger.error(`获取配置失败: ${key}`, error); - return defaultValue as T; - } - } - - /** - * 设置配置值 - * @param key 配置键 - * @param value 配置值 - * @param siteId 站点ID - * @param configType 配置类型 - * @param configGroup 配置分组 - */ - async setConfigValue( - key: string, - value: any, - siteId: number = 0, - addon: string = '', - ): Promise { - try { - await this.dynamicConfigService.setConfig(siteId, key, value, addon); - - // 触发配置变更事件 - this.eventEmitter.emit('config.changed', { - siteId, - key, - value, - timestamp: new Date(), - }); - - // 通知配置监听器 - this.notifyConfigWatchers(key, value); - - this.logger.log(`配置已更新: ${key} = ${value}`); - } catch (error) { - this.logger.error(`设置配置失败: ${key}`, error); - throw error; - } - } - - /** - * 删除配置值 - * @param key 配置键 - * @param siteId 站点ID - */ - async deleteConfigValue(key: string, siteId: number = 0): Promise { - try { - await this.dynamicConfigService.deleteConfig(siteId, key); - - // 触发配置删除事件 - this.eventEmitter.emit('config.deleted', { - siteId, - key, - timestamp: new Date(), - }); - - this.logger.log(`配置已删除: ${key}`); - } catch (error) { - this.logger.error(`删除配置失败: ${key}`, error); - throw error; - } - } - - /** - * 刷新配置缓存 - * @param siteId 站点ID - * @param key 配置键(可选) - */ - async refreshConfigCache(siteId: number = 0, key?: string): Promise { - try { - await this.dynamicConfigService.refreshConfigCache(siteId, key); - - // 触发配置刷新事件 - this.eventEmitter.emit('config.refreshed', { - siteId, - key, - timestamp: new Date(), - }); - - this.logger.log(`配置缓存已刷新: ${siteId}:${key || 'all'}`); - } catch (error) { - this.logger.error(`刷新配置缓存失败: ${siteId}:${key}`, error); - throw error; - } - } - - /** - * 推送配置变更 - * @param siteId 站点ID - * @param key 配置键 - * @param value 配置值 - */ - async pushConfigChange( - siteId: number, - key: string, - value: any, - ): Promise { - try { - // 触发配置推送事件 - this.eventEmitter.emit('config.pushed', { - siteId, - key, - value, - timestamp: new Date(), - }); - - // 通知配置监听器 - this.notifyConfigWatchers(key, value); - - this.logger.log(`配置已推送: ${key} = ${value}`); - } catch (error) { - this.logger.error(`推送配置失败: ${key}`, error); - throw error; - } - } - - /** - * 注册配置监听器 - * @param key 配置键 - * @param callback 回调函数 - */ - registerConfigWatcher(key: string, callback: Function): void { - if (!this.configWatchers.has(key)) { - this.configWatchers.set(key, new Set()); - } - this.configWatchers.get(key)?.add(callback); - - this.logger.log(`注册配置监听器: ${key}`); - } - - /** - * 取消配置监听器 - * @param key 配置键 - * @param callback 回调函数 - */ - unregisterConfigWatcher(key: string, callback: Function): void { - const watchers = this.configWatchers.get(key); - if (watchers) { - watchers.delete(callback); - if (watchers.size === 0) { - this.configWatchers.delete(key); - } - } - - this.logger.log(`取消配置监听器: ${key}`); - } - - /** - * 通知配置监听器 - * @param key 配置键 - * @param value 配置值 - */ - private notifyConfigWatchers(key: string, value: any): void { - const watchers = this.configWatchers.get(key); - if (watchers) { - for (const callback of watchers) { - try { - callback(key, value); - } catch (error) { - this.logger.error(`配置监听器执行失败: ${key}`, error); - } - } - } - } - - /** - * 获取配置版本信息 - * @param siteId 站点ID - * @param key 配置键 - * @returns 版本信息 - */ - async getConfigVersion(siteId: number, key: string): Promise { - try { - const history = await this.dynamicConfigService.getConfigHistory( - siteId, - key, - ); - return history.length > 0 ? history[0].updateTime : 0; - } catch (error) { - this.logger.error(`获取配置版本失败: ${key}`, error); - return 0; - } - } - - /** - * 回滚配置到指定版本 - * @param siteId 站点ID - * @param key 配置键 - * @param version 版本号 - */ - async rollbackConfig( - siteId: number, - key: string, - version: number, - ): Promise { - try { - await this.dynamicConfigService.rollbackConfig(siteId, key, version); - - // 触发配置回滚事件 - this.eventEmitter.emit('config.rolledback', { - siteId, - key, - version, - timestamp: new Date(), - }); - - this.logger.log(`配置已回滚: ${key} 到版本 ${version}`); - } catch (error) { - this.logger.error(`回滚配置失败: ${key}:${version}`, error); - throw error; - } - } - - /** - * 热重载配置 - * @param siteId 站点ID - * @param key 配置键(可选) - */ - async hotReloadConfig(siteId: number = 0, key?: string): Promise { - try { - // 刷新配置缓存 - await this.refreshConfigCache(siteId, key); - - // 触发热重载事件 - this.eventEmitter.emit('config.hotreloaded', { - siteId, - key, - timestamp: new Date(), - }); - - this.logger.log(`配置热重载完成: ${siteId}:${key || 'all'}`); - } catch (error) { - this.logger.error(`配置热重载失败: ${siteId}:${key}`, error); - throw error; - } - } - - /** - * 获取配置中心状态 - * @returns 状态信息 - */ - getConfigCenterStatus(): any { - return { - isInitialized: this.isInitialized, - watcherCount: this.configWatchers.size, - totalWatchers: Array.from(this.configWatchers.values()).reduce( - (sum, set) => sum + set.size, - 0, - ), - uptime: Date.now(), - }; - } -} diff --git a/src/config/config.module.ts b/src/config/config.module.ts deleted file mode 100644 index 082a0459..00000000 --- a/src/config/config.module.ts +++ /dev/null @@ -1,99 +0,0 @@ -import { Module } from '@nestjs/common'; -import { ConfigModule as NestConfigModule } from '@nestjs/config'; -import { TypeOrmModule } from '@nestjs/typeorm'; -import { EventEmitterModule } from '@nestjs/event-emitter'; -import { CacheModule } from '../common/cache/cache.module'; -import { appConfig } from './app.config'; -import { validateAppConfig } from './app.schema'; -import { DynamicConfigEntity } from './dynamic-config.entity'; -import { DynamicConfigService } from './dynamic-config.service'; -import { ConfigCenterService } from './config-center.service'; -import { DynamicBeanService } from './dynamic-bean.service'; -import { ConfigCenterController } from './config-center.controller'; - -/** - * 配置模块 - 框架配置中心 - * 基于 NestJS 官方示例实现 - * 参考: https://docs.nestjs.cn/techniques/configuration - * - * 功能特性: - * - 静态配置管理 - * - 动态配置管理 - * - 配置缓存机制 - * - 配置热重载 - * - 配置版本管理 - * - 配置推送 - * - 动态Bean管理 - */ -@Module({ - imports: [ - NestConfigModule.forRoot({ - isGlobal: true, - load: [() => appConfig], - envFilePath: [ - '.env.local', - '.env.development', - '.env.production', - '.env', - ], - validate: (config: Record) => { - // 在开发和测试环境中跳过严格验证 - const environment = process.env.NODE_ENV || 'development'; - if (environment === 'development' || environment === 'test') { - return config; - } - return validateAppConfig(config); - }, - }), - CacheModule, - TypeOrmModule.forFeature([DynamicConfigEntity]), - EventEmitterModule.forRoot({ - wildcard: false, - delimiter: '.', - newListener: false, - removeListener: false, - maxListeners: 10, - verboseMemoryLeak: false, - ignoreErrors: false, - }), - ], - controllers: [ConfigCenterController], - providers: [ - { - provide: 'CACHE_PROVIDER', - useFactory: () => { - // 简化实现,返回一个基础的缓存对象 - const cache = new Map(); - return { - async get(key: string): Promise { - const item = cache.get(key); - if (!item) return null; - if (item.expire && Date.now() > item.expire) { - cache.delete(key); - return null; - } - return item.value; - }, - async set(key: string, value: any, ttl?: number): Promise { - const expire = ttl ? Date.now() + ttl * 1000 : null; - cache.set(key, { value, expire }); - }, - async del(key: string): Promise { - cache.delete(key); - }, - async delMany(keys: string[]): Promise { - keys.forEach((key) => cache.delete(key)); - }, - async keys(pattern?: string): Promise { - return Array.from(cache.keys()); - }, - }; - }, - }, - DynamicConfigService, - ConfigCenterService, - DynamicBeanService, - ], - exports: [DynamicConfigService, ConfigCenterService, DynamicBeanService], -}) -export class ConfigModule {} diff --git a/src/config/dynamic-bean.service.ts b/src/config/dynamic-bean.service.ts deleted file mode 100644 index 9364d30b..00000000 --- a/src/config/dynamic-bean.service.ts +++ /dev/null @@ -1,265 +0,0 @@ -import { Injectable, Logger, OnModuleInit } from '@nestjs/common'; -import { ModuleRef } from '@nestjs/core'; -import { ConfigCenterService } from './config-center.service'; - -/** - * 动态Bean服务 - * 对应 Java: SpringDynamicBean - */ -@Injectable() -export class DynamicBeanService implements OnModuleInit { - private readonly logger = new Logger(DynamicBeanService.name); - private readonly dynamicBeans = new Map(); - private readonly beanFactories = new Map(); - - constructor( - private readonly moduleRef: ModuleRef, - private readonly configCenter: ConfigCenterService, - ) {} - - async onModuleInit() { - await this.initializeDynamicBeans(); - } - - /** - * 初始化动态Bean - */ - private async initializeDynamicBeans(): Promise { - try { - this.logger.log('初始化动态Bean服务...'); - - // 注册默认Bean工厂 - this.registerDefaultBeanFactories(); - - this.logger.log('动态Bean服务初始化完成'); - } catch (error) { - this.logger.error('动态Bean服务初始化失败', error); - throw error; - } - } - - /** - * 注册默认Bean工厂 - */ - private registerDefaultBeanFactories(): void { - // 注册配置Bean工厂 - this.registerBeanFactory('config', (config: any) => { - return { - get: (key: string, defaultValue?: any) => config[key] || defaultValue, - set: (key: string, value: any) => { - config[key] = value; - }, - has: (key: string) => key in config, - delete: (key: string) => delete config[key], - }; - }); - - // 注册服务Bean工厂 - this.registerBeanFactory('service', (serviceConfig: any) => { - return { - name: serviceConfig.name, - type: serviceConfig.type, - config: serviceConfig.config, - enabled: serviceConfig.enabled || true, - }; - }); - } - - /** - * 注册Bean工厂 - * @param type Bean类型 - * @param factory 工厂函数 - */ - registerBeanFactory(type: string, factory: Function): void { - this.beanFactories.set(type, factory); - this.logger.log(`注册Bean工厂: ${type}`); - } - - /** - * 动态创建Bean - * @param name Bean名称 - * @param type Bean类型 - * @param config 配置 - * @returns Bean实例 - */ - async createBean(name: string, type: string, config: any): Promise { - try { - const factory = this.beanFactories.get(type); - if (!factory) { - throw new Error(`Bean工厂不存在: ${type}`); - } - - const bean = factory(config); - this.dynamicBeans.set(name, bean); - - this.logger.log(`创建动态Bean: ${name} (${type})`); - return bean; - } catch (error) { - this.logger.error(`创建动态Bean失败: ${name}`, error); - throw error; - } - } - - /** - * 获取Bean实例 - * @param name Bean名称 - * @returns Bean实例 - */ - getBean(name: string): any { - const bean = this.dynamicBeans.get(name); - if (!bean) { - this.logger.warn(`Bean不存在: ${name}`); - } - return bean; - } - - /** - * 检查Bean是否存在 - * @param name Bean名称 - * @returns 是否存在 - */ - hasBean(name: string): boolean { - return this.dynamicBeans.has(name); - } - - /** - * 删除Bean - * @param name Bean名称 - */ - removeBean(name: string): void { - if (this.dynamicBeans.has(name)) { - this.dynamicBeans.delete(name); - this.logger.log(`删除动态Bean: ${name}`); - } - } - - /** - * 获取所有Bean名称 - * @returns Bean名称列表 - */ - getBeanNames(): string[] { - return Array.from(this.dynamicBeans.keys()); - } - - /** - * 动态注册配置Bean - * @param name Bean名称 - * @param config 配置 - * @returns Bean实例 - */ - async registerConfigBean(name: string, config: any): Promise { - return this.createBean(name, 'config', config); - } - - /** - * 动态注册服务Bean - * @param name Bean名称 - * @param serviceConfig 服务配置 - * @returns Bean实例 - */ - async registerServiceBean(name: string, serviceConfig: any): Promise { - return this.createBean(name, 'service', serviceConfig); - } - - /** - * 根据配置动态创建Bean - * @param configKey 配置键 - * @returns Bean实例 - */ - async createBeanFromConfig(configKey: string): Promise { - try { - const config = await this.configCenter.getConfigValue(configKey); - if (!config) { - throw new Error(`配置不存在: ${configKey}`); - } - - const { name, type, ...beanConfig } = config; - if (!name || !type) { - throw new Error(`配置格式错误: ${configKey}`); - } - - return this.createBean(name, type, beanConfig); - } catch (error) { - this.logger.error(`根据配置创建Bean失败: ${configKey}`, error); - throw error; - } - } - - /** - * 批量创建Bean - * @param configs 配置列表 - * @returns Bean实例列表 - */ - async createBeansFromConfigs(configs: any[]): Promise { - const beans: any[] = []; - - for (const config of configs) { - try { - const bean = await this.createBeanFromConfig(config.key); - beans.push(bean); - } catch (error) { - this.logger.error(`批量创建Bean失败: ${config.key}`, error); - } - } - - return beans; - } - - /** - * 刷新Bean配置 - * @param name Bean名称 - * @param config 新配置 - */ - async refreshBeanConfig(name: string, config: any): Promise { - try { - const existingBean = this.dynamicBeans.get(name); - if (!existingBean) { - throw new Error(`Bean不存在: ${name}`); - } - - // 更新Bean配置 - if (existingBean.updateConfig) { - existingBean.updateConfig(config); - } else { - // 重新创建Bean - const { type, ...beanConfig } = config; - await this.createBean(name, type, beanConfig); - } - - this.logger.log(`刷新Bean配置: ${name}`); - } catch (error) { - this.logger.error(`刷新Bean配置失败: ${name}`, error); - throw error; - } - } - - /** - * 获取Bean统计信息 - * @returns 统计信息 - */ - getBeanStatistics(): any { - return { - totalBeans: this.dynamicBeans.size, - beanTypes: Array.from(this.beanFactories.keys()), - beanNames: Array.from(this.dynamicBeans.keys()), - factoryCount: this.beanFactories.size, - }; - } - - /** - * 清理所有动态Bean - */ - clearAllBeans(): void { - this.dynamicBeans.clear(); - this.logger.log('清理所有动态Bean'); - } - - /** - * 销毁动态Bean服务 - */ - onModuleDestroy(): void { - this.clearAllBeans(); - this.beanFactories.clear(); - this.logger.log('动态Bean服务已销毁'); - } -} diff --git a/src/config/dynamic-config.entity.ts b/src/config/dynamic-config.entity.ts deleted file mode 100644 index bbe7f3ab..00000000 --- a/src/config/dynamic-config.entity.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { - Entity, - PrimaryGeneratedColumn, - Column, - CreateDateColumn, - UpdateDateColumn, - Index, -} from 'typeorm'; - -/** - * 动态配置实体 - * 对应 PHP: SysConfig, Java: SysConfig - * 完全对齐 PHP/Java 表结构 - */ -@Entity('nc_sys_config') -@Index(['configKey', 'siteId'], { unique: true }) -export class DynamicConfigEntity { - @PrimaryGeneratedColumn() - id: number; - - @Column({ name: 'site_id', type: 'int', default: 0 }) - siteId: number; - - @Column({ name: 'config_key', type: 'varchar', length: 255 }) - configKey: string; - - @Column({ name: 'value', type: 'text', nullable: true }) - value: string; - - @Column({ name: 'status', type: 'tinyint', default: 1 }) - status: number; - - @Column({ name: 'create_time', type: 'int', default: 0 }) - createTime: number; - - @Column({ name: 'update_time', type: 'int', default: 0 }) - updateTime: number; - - @Column({ name: 'addon', type: 'varchar', length: 255, default: '' }) - addon: string; -} diff --git a/src/config/dynamic-config.service.ts b/src/config/dynamic-config.service.ts deleted file mode 100644 index 00064d01..00000000 --- a/src/config/dynamic-config.service.ts +++ /dev/null @@ -1,313 +0,0 @@ -import { Injectable, Logger, Inject } from '@nestjs/common'; -import { InjectRepository } from '@nestjs/typeorm'; -import { Repository } from 'typeorm'; -import { DynamicConfigEntity } from './dynamic-config.entity'; -import type { CacheInterface } from '../common/cache/cache.interface'; - -/** - * 动态配置服务 - * 对应 Java: CoreConfigServiceImpl - */ -@Injectable() -export class DynamicConfigService { - private readonly logger = new Logger(DynamicConfigService.name); - private readonly cacheTag = 'sys_config_cache'; - private readonly cacheExpire = 3600; // 1小时 - - constructor( - @InjectRepository(DynamicConfigEntity) - private readonly configRepository: Repository, - @Inject('CACHE_PROVIDER') - private readonly cache?: CacheInterface, - ) {} - - /** - * 获取配置项 - * @param siteId 站点ID - * @param key 配置键 - * @returns 配置值 - */ - async getConfig(siteId: number, key: string): Promise { - try { - const cacheKey = `${this.cacheTag}:${siteId}:${key}`; - - // 先从缓存获取 - let configValue: string | null = null; - if (this.cache) { - configValue = await this.cache.get(cacheKey); - if (configValue) { - return configValue; - } - } - - // 从数据库获取 - const config = await this.configRepository.findOne({ - where: { siteId, configKey: key }, - }); - - if (config) { - configValue = config.value; - - // 存入缓存 - if (this.cache) { - await this.cache.set(cacheKey, configValue, this.cacheExpire); - } - - this.logger.log(`获取配置: ${key} = ${configValue}`); - return configValue; - } - - this.logger.warn(`配置不存在: ${key}`); - return null; - } catch (error) { - this.logger.error(`获取配置失败: ${key}`, error); - return null; - } - } - - /** - * 获取配置项(带类型转换) - * @param siteId 站点ID - * @param key 配置键 - * @param defaultValue 默认值 - * @returns 配置值 - */ - async getConfigValue( - siteId: number, - key: string, - defaultValue?: T, - ): Promise { - const configValue = await this.getConfig(siteId, key); - if (configValue === null) { - return defaultValue as T; - } - - try { - // 尝试解析JSON - if (configValue.startsWith('{') || configValue.startsWith('[')) { - return JSON.parse(configValue); - } - - // 尝试转换数字 - if (!isNaN(Number(configValue))) { - return Number(configValue) as T; - } - - // 尝试转换布尔值 - if (configValue === 'true' || configValue === 'false') { - return (configValue === 'true') as T; - } - - return configValue as T; - } catch (error) { - this.logger.warn(`配置值解析失败: ${key}`, error); - return configValue as T; - } - } - - /** - * 设置配置项 - * @param siteId 站点ID - * @param key 配置键 - * @param value 配置值 - * @param addon 所属插件 - */ - async setConfig( - siteId: number, - key: string, - value: any, - addon: string = '', - ): Promise { - try { - const configValue = - typeof value === 'string' ? value : JSON.stringify(value); - - // 检查配置是否存在 - const existingConfig = await this.configRepository.findOne({ - where: { siteId, configKey: key }, - }); - - if (existingConfig) { - // 更新配置 - existingConfig.value = configValue; - existingConfig.updateTime = Math.floor(Date.now() / 1000); - - await this.configRepository.save(existingConfig); - } else { - // 创建新配置 - const newConfig = this.configRepository.create({ - siteId, - configKey: key, - value: configValue, - status: 1, - createTime: Math.floor(Date.now() / 1000), - updateTime: Math.floor(Date.now() / 1000), - addon: addon, - }); - - await this.configRepository.save(newConfig); - } - - // 清除缓存 - await this.refreshConfigCache(siteId, key); - - this.logger.log(`设置配置: ${key} = ${configValue}`); - } catch (error) { - this.logger.error(`设置配置失败: ${key}`, error); - throw error; - } - } - - /** - * 删除配置项 - * @param siteId 站点ID - * @param key 配置键 - */ - async deleteConfig(siteId: number, key: string): Promise { - try { - await this.configRepository.delete({ siteId, configKey: key }); - - // 清除缓存 - await this.refreshConfigCache(siteId, key); - - this.logger.log(`删除配置: ${key}`); - } catch (error) { - this.logger.error(`删除配置失败: ${key}`, error); - throw error; - } - } - - /** - * 获取配置分组 - * @param siteId 站点ID - * @param group 配置分组 - * @returns 配置列表 - */ - async getConfigGroup( - siteId: number, - group: string, - ): Promise { - try { - const cacheKey = `${this.cacheTag}:group:${siteId}:${group}`; - - // 先从缓存获取 - let configs: DynamicConfigEntity[] | null = null; - if (this.cache) { - configs = await this.cache.get(cacheKey); - if (configs) { - return configs; - } - } - - // 从数据库获取 - configs = await this.configRepository.find({ - where: { siteId, addon: group }, - order: { configKey: 'ASC' }, - }); - - // 存入缓存 - if (this.cache && configs) { - await this.cache.set(cacheKey, configs, this.cacheExpire); - } - - return configs || []; - } catch (error) { - this.logger.error(`获取配置分组失败: ${group}`, error); - return []; - } - } - - /** - * 刷新配置缓存 - * @param siteId 站点ID - * @param key 配置键(可选) - */ - async refreshConfigCache(siteId: number, key?: string): Promise { - try { - if (!this.cache) { - return; - } - - if (key) { - // 清除单个配置缓存 - const cacheKey = `${this.cacheTag}:${siteId}:${key}`; - await this.cache.del(cacheKey); - } else { - // 清除所有配置缓存 - const pattern = `${this.cacheTag}:${siteId}:*`; - const keys = await this.cache.keys(pattern); - if (keys.length > 0) { - await this.cache.delMany(keys); - } - } - - this.logger.log(`刷新配置缓存: ${siteId}:${key || 'all'}`); - } catch (error) { - this.logger.error(`刷新配置缓存失败: ${siteId}:${key}`, error); - } - } - - /** - * 获取配置历史版本 - * @param siteId 站点ID - * @param key 配置键 - * @returns 版本列表 - */ - async getConfigHistory( - siteId: number, - key: string, - ): Promise { - try { - return await this.configRepository.find({ - where: { siteId, configKey: key }, - order: { updateTime: 'DESC' }, - }); - } catch (error) { - this.logger.error(`获取配置历史失败: ${key}`, error); - return []; - } - } - - /** - * 回滚配置到指定版本 - * @param siteId 站点ID - * @param key 配置键 - * @param version 版本号 - */ - async rollbackConfig( - siteId: number, - key: string, - version: number, - ): Promise { - try { - const historyConfig = await this.configRepository.findOne({ - where: { siteId, configKey: key }, - }); - - if (!historyConfig) { - throw new Error(`配置版本不存在: ${key}:${version}`); - } - - // 获取当前配置 - const currentConfig = await this.configRepository.findOne({ - where: { siteId, configKey: key }, - }); - - if (currentConfig) { - // 更新当前配置 - currentConfig.value = historyConfig.value; - currentConfig.updateTime = Math.floor(Date.now() / 1000); - - await this.configRepository.save(currentConfig); - } - - // 清除缓存 - await this.refreshConfigCache(siteId, key); - - this.logger.log(`回滚配置: ${key} 到版本 ${version}`); - } catch (error) { - this.logger.error(`回滚配置失败: ${key}:${version}`, error); - throw error; - } - } -} diff --git a/src/core/addon/addon.module.ts b/src/core/addon/addon.module.ts deleted file mode 100644 index a71b969a..00000000 --- a/src/core/addon/addon.module.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Module } from '@nestjs/common'; - -@Module({ - imports: [], - controllers: [], - providers: [], - exports: [], -}) -export class AddonModule {} diff --git a/src/core/addon/controllers/adminapi/addon-develop.controller.ts b/src/core/addon/controllers/adminapi/addon-develop.controller.ts deleted file mode 100644 index 809771dc..00000000 --- a/src/core/addon/controllers/adminapi/addon-develop.controller.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { - Controller, - Get, - Post, - Put, - Delete, - Body, - Param, - Query, - UseGuards, - UseInterceptors, - UploadedFile, - UploadedFiles, - Session, - Req, -} from '@nestjs/common'; -import { FileInterceptor, FilesInterceptor } from '@nestjs/platform-express'; -import { - ApiTags, - ApiOperation, - ApiResponse, - ApiConsumes, -} from '@nestjs/swagger'; -import { Request } from 'express'; -import { JwtAuthGuard } from '@wwjCommon/security/guards/jwt-auth.guard'; -import { RolesGuard } from '@wwjCommon/security/guards/roles.guard'; -import { Roles } from '@wwjCommon/security/decorators/roles.decorator'; -import { Public } from '@wwjCommon/security/decorators/public.decorator'; -import { BusinessException } from '@wwjCommon/exception/business.exception'; -// @UploadedFile() - 单文件上传,配合 @UseInterceptors(FileInterceptor('file')) -// @UploadedFiles() - 多文件上传,配合 @UseInterceptors(FilesInterceptor('files')) -// @Session() - 获取会话对象,对应PHP Session::get() -// @Req() - 获取Request对象,对应PHP Request -import { AddonDevelopService } from '../../services/admin/addon-develop.service'; - -/** - * AddonDevelopController - * 对应 PHP: AddonDevelop Controller - * 对应 Java: @RestController - * - * 支持装饰器: - * - @UploadedFile() - 单文件上传 (对应PHP Request::file()) - * - @UploadedFiles() - 多文件上传 - * - @Session() - 会话管理 (对应PHP Session::get()) - * - @Req() - 请求对象 (对应PHP Request) - */ -@ApiTags('addon') -@Controller('adminapi/addon') -export class AddonDevelopController { - constructor(private readonly addonDevelopService: AddonDevelopService) {} -} diff --git a/src/core/addon/controllers/adminapi/app.controller.ts b/src/core/addon/controllers/adminapi/app.controller.ts deleted file mode 100644 index 81075fcd..00000000 --- a/src/core/addon/controllers/adminapi/app.controller.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { - Controller, - Get, - Post, - Put, - Delete, - Body, - Param, - Query, - UseGuards, - UseInterceptors, - UploadedFile, - UploadedFiles, - Session, - Req, -} from '@nestjs/common'; -import { FileInterceptor, FilesInterceptor } from '@nestjs/platform-express'; -import { - ApiTags, - ApiOperation, - ApiResponse, - ApiConsumes, -} from '@nestjs/swagger'; -import { Request } from 'express'; -import { JwtAuthGuard } from '@wwjCommon/security/guards/jwt-auth.guard'; -import { RolesGuard } from '@wwjCommon/security/guards/roles.guard'; -import { Roles } from '@wwjCommon/security/decorators/roles.decorator'; -import { Public } from '@wwjCommon/security/decorators/public.decorator'; -import { BusinessException } from '@wwjCommon/exception/business.exception'; -// @UploadedFile() - 单文件上传,配合 @UseInterceptors(FileInterceptor('file')) -// @UploadedFiles() - 多文件上传,配合 @UseInterceptors(FilesInterceptor('files')) -// @Session() - 获取会话对象,对应PHP Session::get() -// @Req() - 获取Request对象,对应PHP Request -import { CoreAddonService } from '../../services/core/core-addon.service'; - -/** - * AppController - * 对应 PHP: App Controller - * 对应 Java: @RestController - * - * 支持装饰器: - * - @UploadedFile() - 单文件上传 (对应PHP Request::file()) - * - @UploadedFiles() - 多文件上传 - * - @Session() - 会话管理 (对应PHP Session::get()) - * - @Req() - 请求对象 (对应PHP Request) - */ -@ApiTags('addon') -@Controller('adminapi/addon') -export class AppController { - constructor(private readonly coreAddonService: CoreAddonService) {} -} diff --git a/src/core/addon/controllers/adminapi/backup.controller.ts b/src/core/addon/controllers/adminapi/backup.controller.ts deleted file mode 100644 index d0989b1d..00000000 --- a/src/core/addon/controllers/adminapi/backup.controller.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { - Controller, - Get, - Post, - Put, - Delete, - Body, - Param, - Query, - UseGuards, - UseInterceptors, - UploadedFile, - UploadedFiles, - Session, - Req, -} from '@nestjs/common'; -import { FileInterceptor, FilesInterceptor } from '@nestjs/platform-express'; -import { - ApiTags, - ApiOperation, - ApiResponse, - ApiConsumes, -} from '@nestjs/swagger'; -import { Request } from 'express'; -import { JwtAuthGuard } from '@wwjCommon/security/guards/jwt-auth.guard'; -import { RolesGuard } from '@wwjCommon/security/guards/roles.guard'; -import { Roles } from '@wwjCommon/security/decorators/roles.decorator'; -import { Public } from '@wwjCommon/security/decorators/public.decorator'; -import { BusinessException } from '@wwjCommon/exception/business.exception'; -// @UploadedFile() - 单文件上传,配合 @UseInterceptors(FileInterceptor('file')) -// @UploadedFiles() - 多文件上传,配合 @UseInterceptors(FilesInterceptor('files')) -// @Session() - 获取会话对象,对应PHP Session::get() -// @Req() - 获取Request对象,对应PHP Request -import { BackupRecordsService } from '../../../upgrade/services/admin/backup-records.service'; - -/** - * BackupController - * 对应 PHP: Backup Controller - * 对应 Java: @RestController - * - * 支持装饰器: - * - @UploadedFile() - 单文件上传 (对应PHP Request::file()) - * - @UploadedFiles() - 多文件上传 - * - @Session() - 会话管理 (对应PHP Session::get()) - * - @Req() - 请求对象 (对应PHP Request) - */ -@ApiTags('addon') -@Controller('adminapi/addon') -export class BackupController { - constructor(private readonly backupRecordsService: BackupRecordsService) {} -} diff --git a/src/core/addon/controllers/adminapi/upgrade.controller.ts b/src/core/addon/controllers/adminapi/upgrade.controller.ts deleted file mode 100644 index 8f5c5bd7..00000000 --- a/src/core/addon/controllers/adminapi/upgrade.controller.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { - Controller, - Get, - Post, - Put, - Delete, - Body, - Param, - Query, - UseGuards, - UseInterceptors, - UploadedFile, - UploadedFiles, - Session, - Req, -} from '@nestjs/common'; -import { FileInterceptor, FilesInterceptor } from '@nestjs/platform-express'; -import { - ApiTags, - ApiOperation, - ApiResponse, - ApiConsumes, -} from '@nestjs/swagger'; -import { Request } from 'express'; -import { JwtAuthGuard } from '@wwjCommon/security/guards/jwt-auth.guard'; -import { RolesGuard } from '@wwjCommon/security/guards/roles.guard'; -import { Roles } from '@wwjCommon/security/decorators/roles.decorator'; -import { Public } from '@wwjCommon/security/decorators/public.decorator'; -import { BusinessException } from '@wwjCommon/exception/business.exception'; -// @UploadedFile() - 单文件上传,配合 @UseInterceptors(FileInterceptor('file')) -// @UploadedFiles() - 多文件上传,配合 @UseInterceptors(FilesInterceptor('files')) -// @Session() - 获取会话对象,对应PHP Session::get() -// @Req() - 获取Request对象,对应PHP Request -import { UpgradeRecordsService } from '../../../upgrade/services/admin/upgrade-records.service'; -import { UpgradeService } from '../../../upgrade/services/admin/upgrade.service'; - -/** - * UpgradeController - * 对应 PHP: Upgrade Controller - * 对应 Java: @RestController - * - * 支持装饰器: - * - @UploadedFile() - 单文件上传 (对应PHP Request::file()) - * - @UploadedFiles() - 多文件上传 - * - @Session() - 会话管理 (对应PHP Session::get()) - * - @Req() - 请求对象 (对应PHP Request) - */ -@ApiTags('addon') -@Controller('adminapi/addon') -export class UpgradeController { - constructor( - private readonly upgradeRecordsService: UpgradeRecordsService, - private readonly upgradeService: UpgradeService, - ) {} -} diff --git a/src/core/addon/controllers/api/addon.controller.ts b/src/core/addon/controllers/api/addon.controller.ts deleted file mode 100644 index 1f0b8c11..00000000 --- a/src/core/addon/controllers/api/addon.controller.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { - Controller, - Get, - Post, - Put, - Delete, - Body, - Param, - Query, - UseGuards, - UseInterceptors, - UploadedFile, - UploadedFiles, - Session, - Req, -} from '@nestjs/common'; -import { FileInterceptor, FilesInterceptor } from '@nestjs/platform-express'; -import { - ApiTags, - ApiOperation, - ApiResponse, - ApiConsumes, -} from '@nestjs/swagger'; -import { Request } from 'express'; -import { JwtAuthGuard } from '@wwjCommon/security/guards/jwt-auth.guard'; -// import { OptionalAuthGuard } from '@wwjCommon/security/guards/optional-auth.guard'; -import { Public } from '@wwjCommon/security/decorators/public.decorator'; -import { BusinessException } from '@wwjCommon/exception/business.exception'; -// @UploadedFile() - 单文件上传,配合 @UseInterceptors(FileInterceptor('file')) -// @UploadedFiles() - 多文件上传,配合 @UseInterceptors(FilesInterceptor('files')) -// @Session() - 获取会话对象,对应PHP Session::get() -// @Req() - 获取Request对象,对应PHP Request -import { AddonService } from '../../services/api/addon.service'; - -/** - * AddonController - * 对应 PHP: Addon Controller - * 对应 Java: @RestController - * - * 支持装饰器: - * - @UploadedFile() - 单文件上传 (对应PHP Request::file()) - * - @UploadedFiles() - 多文件上传 - * - @Session() - 会话管理 (对应PHP Session::get()) - * - @Req() - 请求对象 (对应PHP Request) - */ -@ApiTags('addon') -@Controller('api/addon') -@UseGuards(ApiCheckTokenGuard) -export class AddonController { - constructor(private readonly addonService: AddonService) {} - - /** - * getInstallList - * 路由: GET list/install - * PHP路由: Route::get('list/install', 'addon.Addon/getInstallList') - */ - @Get('list/install') - @UseGuards(JwtAuthGuard) - @ApiOperation({ summary: 'getInstallList' }) - async getInstallList(): Promise { - try { - // 基于PHP真实逻辑实现 - // PHP原始方法: getInstallList - - return await this.addonService.getInstallList(); - } catch (error) { - throw new BusinessException('getInstallList操作失败', error); - } - } -} diff --git a/src/core/addon/dto/AddonDevelopDto.ts b/src/core/addon/dto/AddonDevelopDto.ts deleted file mode 100644 index 2552a356..00000000 --- a/src/core/addon/dto/AddonDevelopDto.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { - IsString, - IsNumber, - IsOptional, - IsNotEmpty, - IsEmail, - IsUrl, - IsArray, - IsObject, -} from 'class-validator'; -import { ApiProperty } from '@nestjs/swagger'; -// import { validateEvent } from '@wwjCommon/event/contract-validator'; -import { ParseDiyFormPipe } from '@wwjCommon/pipes/parse-diy-form.pipe'; -// import { JsonTransformPipe } from '@wwjCommon/validation/pipes/json-transform.pipe'; - -/** - * AddonDevelopDto - 数据传输对象 - * 基于真实PHP验证器规则生成,禁止假设字段 - * 使用Core层基础设施:契约验证、管道验证、Swagger文档 - */ -export class AddonDevelopDto { - @ApiProperty({ description: 'key' }) - @IsNotEmpty() - @IsString() - key: string; - - @ApiProperty({ description: 'type' }) - @IsNotEmpty() - @IsString() - type: string; -} - -/** - * AddonDevelopDto 验证器类 - * 使用Core层contractValidator进行验证 (对应Java的Validator接口) - * 使用Core层基础设施:契约验证、管道验证 - */ -export class AddonDevelopDtoValidator { - /** - * 验证数据 - * 使用Core层统一验证体系 - */ - static validate(data: AddonDevelopDto): void { - // 调用Core层contractValidator进行验证 - validateEvent('addon.addonDevelop', data); - } - - /** - * 验证场景 - 基于真实PHP的$scene - */ - static validateAdd(data: AddonDevelopDto): void { - // 基于真实PHP add场景验证规则 - this.validate(data); - } - - static validateEdit(data: AddonDevelopDto): void { - // 基于真实PHP edit场景验证规则 - this.validate(data); - } -} - -export class CreateAddonDevelopDto { - // 字段定义需要基于真实PHP验证器解析 - // 禁止假设字段 - // 使用Core层基础设施:class-validator装饰器、Swagger文档 -} - -export class UpdateAddonDevelopDto { - // 字段定义需要基于真实PHP验证器解析 - // 禁止假设字段 - // 使用Core层基础设施:class-validator装饰器、Swagger文档 -} - -export class QueryAddonDevelopDto { - // 字段定义需要基于真实PHP验证器解析 - // 禁止假设字段 - // 使用Core层基础设施:class-validator装饰器、Swagger文档 -} diff --git a/src/core/addon/entity/addon-log.entity.ts b/src/core/addon/entity/addon-log.entity.ts deleted file mode 100644 index 4807217d..00000000 --- a/src/core/addon/entity/addon-log.entity.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { - Entity, - PrimaryGeneratedColumn, - Column, - CreateDateColumn, - UpdateDateColumn, -} from 'typeorm'; - -@Entity('addon_log') -export class AddonLog { - @PrimaryGeneratedColumn() - id: number; - - @Column({ type: 'varchar', length: 255, nullable: true }) - name: string; - - @Column({ type: 'text', nullable: true }) - description: string; - - @CreateDateColumn() - createdAt: Date; - - @UpdateDateColumn() - updatedAt: Date; -} diff --git a/src/core/addon/entity/addon.entity.ts b/src/core/addon/entity/addon.entity.ts deleted file mode 100644 index 90364168..00000000 --- a/src/core/addon/entity/addon.entity.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { - Entity, - PrimaryGeneratedColumn, - Column, - CreateDateColumn, - UpdateDateColumn, -} from 'typeorm'; - -@Entity('addon') -export class Addon { - @PrimaryGeneratedColumn() - id: number; - - @Column({ type: 'varchar', length: 255, nullable: true }) - name: string; - - @Column({ type: 'text', nullable: true }) - description: string; - - @CreateDateColumn() - createdAt: Date; - - @UpdateDateColumn() - updatedAt: Date; -} diff --git a/src/core/addon/enums/addon-dict.enum.ts b/src/core/addon/enums/addon-dict.enum.ts deleted file mode 100644 index 5dfd2bf2..00000000 --- a/src/core/addon/enums/addon-dict.enum.ts +++ /dev/null @@ -1,135 +0,0 @@ -/** - * AddonDict 枚举 - * 定义相关的常量值 - */ - -export enum AddonDictEnum { - // 状态枚举 - STATUS_ACTIVE = 'active', - STATUS_INACTIVE = 'inactive', - STATUS_PENDING = 'pending', - STATUS_DELETED = 'deleted', - - // 类型枚举 - TYPE_NORMAL = 'normal', - TYPE_PREMIUM = 'premium', - TYPE_VIP = 'vip', - - // 级别枚举 - LEVEL_LOW = 1, - LEVEL_MEDIUM = 2, - LEVEL_HIGH = 3, - LEVEL_CRITICAL = 4, -} - -/** - * AddonDict 字典映射 - */ -export const addonDictDict = { - // 状态映射 - status: { - [AddonDictEnum.STATUS_ACTIVE]: '激活', - [AddonDictEnum.STATUS_INACTIVE]: '未激活', - [AddonDictEnum.STATUS_PENDING]: '待处理', - [AddonDictEnum.STATUS_DELETED]: '已删除', - }, - - // 类型映射 - type: { - [AddonDictEnum.TYPE_NORMAL]: '普通', - [AddonDictEnum.TYPE_PREMIUM]: '高级', - [AddonDictEnum.TYPE_VIP]: 'VIP', - }, - - // 级别映射 - level: { - [AddonDictEnum.LEVEL_LOW]: '低', - [AddonDictEnum.LEVEL_MEDIUM]: '中', - [AddonDictEnum.LEVEL_HIGH]: '高', - [AddonDictEnum.LEVEL_CRITICAL]: '紧急', - }, -} as const; - -/** - * AddonDict 工具类 - */ -export class AddonDictEnumUtil { - /** - * 获取状态文本 - */ - static getStatusText(status: AddonDictEnum): string { - return (addonDictDict.status as any)[status] || '未知'; - } - - /** - * 获取类型文本 - */ - static getTypeText(type: AddonDictEnum): string { - return (addonDictDict.type as any)[type] || '未知'; - } - - /** - * 获取级别文本 - */ - static getLevelText(level: AddonDictEnum): string { - return (addonDictDict.level as any)[level] || '未知'; - } - - /** - * 获取所有状态选项 - */ - static getStatusOptions(): Array<{ value: string; label: string }> { - return Object.entries(addonDictDict.status).map(([value, label]) => ({ - value, - label: label as string, - })); - } - - /** - * 获取所有类型选项 - */ - static getTypeOptions(): Array<{ value: string; label: string }> { - return Object.entries(addonDictDict.type).map(([value, label]) => ({ - value, - label: label as string, - })); - } - - /** - * 获取所有级别选项 - */ - static getLevelOptions(): Array<{ value: number; label: string }> { - return Object.entries(addonDictDict.level).map(([value, label]) => ({ - value: Number(value), - label: label as string, - })); - } - - /** - * 验证状态值 - */ - static isValidStatus(status: string): boolean { - return Object.values(AddonDictEnum).includes(status as AddonDictEnum); - } - - /** - * 验证类型值 - */ - static isValidType(type: string): boolean { - return Object.values(AddonDictEnum).includes(type as AddonDictEnum); - } - - /** - * 验证级别值 - */ - static isValidLevel(level: number): boolean { - return Object.values(AddonDictEnum).includes(level as AddonDictEnum); - } -} - -/** - * AddonDict 类型定义 - */ -export type AddonDictEnumStatus = keyof typeof addonDictDict.status; -export type AddonDictEnumType = keyof typeof addonDictDict.type; -export type AddonDictEnumLevel = keyof typeof addonDictDict.level; diff --git a/src/core/addon/services/admin/addon-develop.service.ts b/src/core/addon/services/admin/addon-develop.service.ts deleted file mode 100644 index fdb238af..00000000 --- a/src/core/addon/services/admin/addon-develop.service.ts +++ /dev/null @@ -1,441 +0,0 @@ -import { Injectable, Logger, Inject } from '@nestjs/common'; -import { InjectRepository } from '@nestjs/typeorm'; -import { Repository } from 'typeorm'; -import { ConfigService } from '@nestjs/config'; -import { BaseService } from '@wwjCommon/base/base.service'; -import { CacheService } from '@wwjCommon/cache/cache.service'; -import { LoggingService } from '@wwjCommon/logging/logging.service'; -import { UploadService } from '@wwjVendor/upload/upload.service'; -import { PayService } from '@wwjVendor/pay/pay.service'; -import { SmsService } from '@wwjVendor/sms/sms.service'; -import { NoticeService } from '@wwjVendor/notice/notice.service'; -import type { ILanguageService } from '@wwjCommon/language/language.interface'; -import { PageResult } from '@wwjCommon/response/page-result.class'; - -/** - * 插件开发服务层 - * 基于PHP AddonDevelopService 重新实现 - * - * 功能: - * 1. 插件开发管理 (增删改查) - * 2. 插件打包和下载 - * 3. 插件key校验 - * 4. 开发中插件列表 - */ -@Injectable() -export class AddonDevelopService extends BaseService { - private readonly logger = new Logger(AddonDevelopService.name); - - constructor( - @InjectRepository(Object) - protected readonly repository: Repository, - private readonly cacheService: CacheService, - private readonly configService: ConfigService, - private readonly loggingService: LoggingService, - private readonly uploadService: UploadService, - private readonly payService: PayService, - private readonly smsService: SmsService, - private readonly noticeService: NoticeService, - @Inject('ILanguageService') private readonly languageService: ILanguageService, - ) { - super(repository); - } - - /** - * 新增插件开发 - * 对应 PHP: AddonDevelopService::add() - * - * @param key 插件标识 - * @param data 插件数据 - * @returns Promise - */ - async add(key: string, data: any): Promise { - try { - this.logger.log(`开始创建插件开发: ${key}`); - - // 验证插件key格式 - if (!this.validateAddonKey(key)) { - throw new Error('插件key格式不正确'); - } - - // 检查key是否已存在 - const exists = await this.checkKeyExists(key); - if (exists) { - throw new Error('插件key已存在'); - } - - // 创建插件开发目录结构 - await this.createAddonStructure(key, data); - - // 记录操作日志 - await this.loggingService.info(`插件开发创建成功: ${key}`); - - this.logger.log(`插件开发创建成功: ${key}`); - return true; - } catch (error) { - this.logger.error(`插件开发创建失败: ${key}`, error); - throw error; - } - } - - /** - * 编辑插件开发 - * 对应 PHP: AddonDevelopService::edit() - * - * @param key 插件标识 - * @param data 插件数据 - * @returns Promise - */ - async edit(key: string, data: any): Promise { - try { - this.logger.log(`开始编辑插件开发: ${key}`); - - // 验证插件是否存在 - const exists = await this.checkKeyExists(key); - if (!exists) { - throw new Error('插件不存在'); - } - - // 更新插件配置 - await this.updateAddonConfig(key, data); - - // 记录操作日志 - await this.loggingService.info(`插件开发编辑成功: ${key}`); - - this.logger.log(`插件开发编辑成功: ${key}`); - return true; - } catch (error) { - this.logger.error(`插件开发编辑失败: ${key}`, error); - throw error; - } - } - - /** - * 删除插件开发 - * 对应 PHP: AddonDevelopService::del() - * - * @param key 插件标识 - * @returns Promise - */ - async del(key: string): Promise { - try { - this.logger.log(`开始删除插件开发: ${key}`); - - // 验证插件是否存在 - const exists = await this.checkKeyExists(key); - if (!exists) { - throw new Error('插件不存在'); - } - - // 删除插件目录和文件 - await this.deleteAddonFiles(key); - - // 记录操作日志 - await this.loggingService.info(`插件开发删除成功: ${key}`); - - this.logger.log(`插件开发删除成功: ${key}`); - return true; - } catch (error) { - this.logger.error(`插件开发删除失败: ${key}`, error); - throw error; - } - } - - /** - * 获取开发中插件列表 - * 对应 PHP: AddonDevelopService::getList() - * - * @param search 搜索关键词 - * @returns Promise - */ - async getList(search: string = ''): Promise { - try { - this.logger.log(`获取开发中插件列表, 搜索: ${search}`); - - // 获取插件开发目录 - const addonDir = this.getAddonDevelopDir(); - - // 扫描插件目录 - const addons = await this.scanAddonDirectories(addonDir); - - // 根据搜索条件过滤 - const filteredAddons = search - ? addons.filter(addon => - addon.name.includes(search) || - addon.title.includes(search) || - addon.description.includes(search) - ) - : addons; - - this.logger.log(`找到 ${filteredAddons.length} 个开发中插件`); - return filteredAddons; - } catch (error) { - this.logger.error('获取开发中插件列表失败', error); - throw error; - } - } - - /** - * 获取插件详细信息 - * 对应 PHP: AddonDevelopService::getInfo() - * - * @param key 插件标识 - * @returns Promise - */ - async getInfo(key: string): Promise { - try { - this.logger.log(`获取插件信息: ${key}`); - - // 验证插件是否存在 - const exists = await this.checkKeyExists(key); - if (!exists) { - throw new Error('插件不存在'); - } - - // 读取插件配置文件 - const config = await this.readAddonConfig(key); - - // 获取插件状态 - const status = await this.getAddonStatus(key); - - const info = { - key, - ...config, - status, - createTime: await this.getAddonCreateTime(key), - updateTime: await this.getAddonUpdateTime(key), - }; - - this.logger.log(`插件信息获取成功: ${key}`); - return info; - } catch (error) { - this.logger.error(`获取插件信息失败: ${key}`, error); - throw error; - } - } - - /** - * 打包插件 - * 对应 PHP: AddonDevelopService::build() - * - * @param key 插件标识 - * @returns Promise - */ - async build(key: string): Promise { - try { - this.logger.log(`开始打包插件: ${key}`); - - // 验证插件是否存在 - const exists = await this.checkKeyExists(key); - if (!exists) { - throw new Error('插件不存在'); - } - - // 验证插件完整性 - await this.validateAddonIntegrity(key); - - // 创建打包文件 - const packagePath = await this.createAddonPackage(key); - - // 记录操作日志 - await this.loggingService.info(`插件打包成功: ${key}`); - - this.logger.log(`插件打包成功: ${key}, 路径: ${packagePath}`); - return true; - } catch (error) { - this.logger.error(`插件打包失败: ${key}`, error); - throw error; - } - } - - /** - * 下载插件 - * 对应 PHP: AddonDevelopService::download() - * - * @param key 插件标识 - * @returns Promise 下载文件路径 - */ - async download(key: string): Promise { - try { - this.logger.log(`开始下载插件: ${key}`); - - // 验证插件是否存在 - const exists = await this.checkKeyExists(key); - if (!exists) { - throw new Error('插件不存在'); - } - - // 检查是否有打包文件 - const packagePath = await this.getAddonPackagePath(key); - if (!packagePath) { - throw new Error('插件未打包,请先打包'); - } - - // 记录下载日志 - await this.loggingService.info(`插件下载: ${key}`); - - this.logger.log(`插件下载成功: ${key}`); - return packagePath; - } catch (error) { - this.logger.error(`插件下载失败: ${key}`, error); - throw error; - } - } - - /** - * 校验key是否被占用 - * 对应 PHP: AddonDevelopService::checkKey() - * - * @param key 插件标识 - * @returns Promise - */ - async checkKey(key: string): Promise { - try { - this.logger.log(`校验插件key: ${key}`); - - // 本地检查 - const localExists = await this.checkKeyExists(key); - if (localExists) { - return false; // key已存在 - } - - // 远程检查(如果配置了远程服务) - const remoteCheck = await this.checkRemoteKey(key); - if (remoteCheck) { - return false; // 远程key已存在 - } - - this.logger.log(`插件key可用: ${key}`); - return true; // key可用 - } catch (error) { - this.logger.error(`校验插件key失败: ${key}`, error); - throw error; - } - } - - // ==================== 私有方法 ==================== - - /** - * 验证插件key格式 - */ - private validateAddonKey(key: string): boolean { - const pattern = /^[a-z][a-z0-9_]*$/; - return pattern.test(key) && key.length >= 2 && key.length <= 50; - } - - /** - * 检查插件key是否存在 - */ - private async checkKeyExists(key: string): Promise { - const addonDir = this.getAddonDevelopDir(); - const keyPath = `${addonDir}/${key}`; - // 这里应该检查文件系统或数据库 - return false; // 简化实现 - } - - /** - * 获取插件开发目录 - */ - private getAddonDevelopDir(): string { - return this.configService.get('app.addonDevelopDir', './addon_develop'); - } - - /** - * 创建插件目录结构 - */ - private async createAddonStructure(key: string, data: any): Promise { - // 实现插件目录结构创建逻辑 - this.logger.log(`创建插件目录结构: ${key}`); - } - - /** - * 更新插件配置 - */ - private async updateAddonConfig(key: string, data: any): Promise { - // 实现插件配置更新逻辑 - this.logger.log(`更新插件配置: ${key}`); - } - - /** - * 删除插件文件 - */ - private async deleteAddonFiles(key: string): Promise { - // 实现插件文件删除逻辑 - this.logger.log(`删除插件文件: ${key}`); - } - - /** - * 扫描插件目录 - */ - private async scanAddonDirectories(dir: string): Promise { - // 实现插件目录扫描逻辑 - return []; - } - - /** - * 读取插件配置 - */ - private async readAddonConfig(key: string): Promise { - // 实现插件配置读取逻辑 - return {}; - } - - /** - * 获取插件状态 - */ - private async getAddonStatus(key: string): Promise { - // 实现插件状态获取逻辑 - return 'developing'; - } - - /** - * 获取插件创建时间 - */ - private async getAddonCreateTime(key: string): Promise { - // 实现创建时间获取逻辑 - return new Date(); - } - - /** - * 获取插件更新时间 - */ - private async getAddonUpdateTime(key: string): Promise { - // 实现更新时间获取逻辑 - return new Date(); - } - - /** - * 验证插件完整性 - */ - private async validateAddonIntegrity(key: string): Promise { - // 实现插件完整性验证逻辑 - this.logger.log(`验证插件完整性: ${key}`); - } - - /** - * 创建插件包 - */ - private async createAddonPackage(key: string): Promise { - // 实现插件打包逻辑 - const packagePath = `${this.getAddonDevelopDir()}/packages/${key}.zip`; - this.logger.log(`创建插件包: ${packagePath}`); - return packagePath; - } - - /** - * 获取插件包路径 - */ - private async getAddonPackagePath(key: string): Promise { - // 实现插件包路径获取逻辑 - const packagePath = `${this.getAddonDevelopDir()}/packages/${key}.zip`; - return packagePath; - } - - /** - * 检查远程key - */ - private async checkRemoteKey(key: string): Promise { - // 实现远程key检查逻辑 - return false; - } -} \ No newline at end of file diff --git a/src/core/addon/services/admin/addon.service.ts b/src/core/addon/services/admin/addon.service.ts deleted file mode 100644 index ea6c91de..00000000 --- a/src/core/addon/services/admin/addon.service.ts +++ /dev/null @@ -1,425 +0,0 @@ -import { Injectable, Logger, Inject } from '@nestjs/common'; -import { InjectRepository } from '@nestjs/typeorm'; -import { Repository } from 'typeorm'; -import { ConfigService } from '@nestjs/config'; -import { BaseService } from '@wwjCommon/base/base.service'; -import { CacheService } from '@wwjCommon/cache/cache.service'; -import { LoggingService } from '@wwjCommon/logging/logging.service'; -import { UploadService } from '@wwjVendor/upload/upload.service'; -import { PayService } from '@wwjVendor/pay/pay.service'; -import { SmsService } from '@wwjVendor/sms/sms.service'; -import { NoticeService } from '@wwjVendor/notice/notice.service'; -import type { ILanguageService } from '@wwjCommon/language/language.interface'; -import { BusinessException } from '@wwjCommon/exception/business.exception'; -import { Addon } from '../../entities/addon.entity'; - -/** - * 插件管理服务层 - * 基于PHP AddonService 重新实现 - * 对应 PHP: app\service\admin\addon\AddonService - * 对应 Java: com.niu.core.service.admin.addon.impl.AddonServiceImpl - */ -@Injectable() -export class AddonService extends BaseService { - private readonly logger = new Logger(AddonService.name); - - // 缓存标签名 - public static readonly CACHE_TAG_NAME = 'addon_cache'; - - constructor( - @InjectRepository(Addon) - protected readonly repository: Repository, - private readonly cacheService: CacheService, - private readonly configService: ConfigService, - private readonly loggingService: LoggingService, - private readonly uploadService: UploadService, - private readonly payService: PayService, - private readonly smsService: SmsService, - private readonly noticeService: NoticeService, - @Inject('ILanguageService') private readonly languageService: ILanguageService, - ) { - super(repository); - } - - /** - * 获取本地插件列表 - * 对应 PHP: AddonService_admin::getList() - * 对应 Java: AddonServiceImpl::getLocalAddonList() - * @returns Promise - */ - async getList(): Promise { - this.logger.log('获取本地插件列表'); - - try { - // 模拟PHP CoreAddonService 的getLocalAddonList方法 - // 实际应调用对应的Core服务 - // const coreAddonService = new CoreAddonService(); - // return coreAddonService.getLocalAddonList(); - - // 临时实现:从数据库获取插件列表 - const addons = await this.repository.find({ - where: { status: 1 }, // 只获取已启用的插件 - order: { createTime: 'DESC' } - }); - - return addons.map(addon => ({ - id: addon.id, - key: addon.key, - title: addon.title, - version: addon.version, - desc: addon.desc, - icon: addon.icon, - status: addon.status, - type: addon.type, - support_app: addon.supportApp, - install_time: addon.installTime, - update_time: addon.updateTime, - })); - } catch (error) { - this.logger.error('获取本地插件列表失败', error); - throw new BusinessException(await this.languageService.getApiMessage('addon_list_failed')); - } - } - - /** - * 获取当前站点插件列表 - * 对应 PHP: AddonService_admin::getLocalAddonList() - * @returns Promise - */ - async getLocalAddonList(): Promise { - this.logger.log('获取当前站点插件列表'); - return this.getList(); - } - - /** - * 安装插件 - * 对应 PHP: AddonService_admin::install() - * 对应 Java: AddonServiceImpl::install() - * @param addon 插件标识 - * @returns Promise - */ - async install(addon: string): Promise { - this.logger.log(`安装插件: ${addon}`); - - try { - // 模拟PHP CoreAddonInstallService 的install方法 - // 实际应调用对应的Core服务 - // const coreAddonInstallService = new CoreAddonInstallService(addon); - // return coreAddonInstallService.install(); - - // 检查插件是否已存在 - const existingAddon = await this.repository.findOne({ where: { key: addon } }); - if (existingAddon) { - throw new BusinessException(await this.languageService.getApiMessage('addon_already_installed')); - } - - // 模拟安装过程 - const installResult = { - success: true, - message: await this.languageService.getApiMessage('addon_install_success'), - addon: addon - }; - - // 记录安装日志 - await this.loggingService.info(`插件安装成功: ${addon}`); - - return installResult; - } catch (error) { - this.logger.error(`插件安装失败: ${addon}`, error); - throw error; - } - } - - /** - * 云安装插件 - * 对应 PHP: AddonService_admin::cloudInstall() - * 对应 Java: AddonServiceImpl::install() with model='cloud' - * @param addon 插件标识 - * @returns Promise - */ - async cloudInstall(addon: string): Promise { - this.logger.log(`云安装插件: ${addon}`); - - try { - // 模拟PHP CoreAddonInstallService 的install('cloud')方法 - // 实际应调用对应的Core服务 - // const coreAddonInstallService = new CoreAddonInstallService(addon); - // return coreAddonInstallService.install('cloud'); - - // 模拟云安装过程 - const installResult = { - success: true, - message: await this.languageService.getApiMessage('addon_cloud_install_success'), - addon: addon, - source: 'cloud' - }; - - // 记录云安装日志 - await this.loggingService.info(`插件云安装成功: ${addon}`); - - return installResult; - } catch (error) { - this.logger.error(`插件云安装失败: ${addon}`, error); - throw error; - } - } - - /** - * 云安装日志 - * 对应 PHP: AddonService_admin::cloudInstallLog() - * 对应 Java: AddonServiceImpl::cloudInstallLog() - * @param addon 插件标识 - * @returns Promise - */ - async cloudInstallLog(addon: string): Promise { - this.logger.log(`获取云安装日志: ${addon}`); - - try { - // 模拟PHP CoreAddonCloudService 的getBuildLog方法 - // 实际应调用对应的Core服务 - // const coreAddonCloudService = new CoreAddonCloudService(); - // return coreAddonCloudService.getBuildLog(addon); - - // 模拟获取云安装日志 - return { - addon: addon, - logs: [ - { - time: new Date().toISOString(), - level: 'info', - message: '开始云安装插件...' - }, - { - time: new Date().toISOString(), - level: 'info', - message: '下载插件包...' - }, - { - time: new Date().toISOString(), - level: 'info', - message: '安装插件...' - }, - { - time: new Date().toISOString(), - level: 'success', - message: '插件安装完成' - } - ] - }; - } catch (error) { - this.logger.error(`获取云安装日志失败: ${addon}`, error); - throw error; - } - } - - /** - * 获取安装任务 - * 对应 PHP: AddonService_admin::getInstallTask() - * 对应 Java: AddonServiceImpl::getInstallTask() - * @returns Promise - */ - async getInstallTask(): Promise { - this.logger.log('获取安装任务'); - - try { - // 模拟PHP CoreAddonInstallService 的getInstallTask方法 - // 实际应调用对应的Core服务 - // const coreAddonInstallService = new CoreAddonInstallService(''); - // return coreAddonInstallService.getInstallTask(); - - // 模拟获取安装任务 - return { - tasks: [], - status: 'idle', - message: '暂无安装任务' - }; - } catch (error) { - this.logger.error('获取安装任务失败', error); - throw error; - } - } - - /** - * 安装插件检测安装环境 - * 对应 PHP: AddonService_admin::installCheck() - * 对应 Java: AddonServiceImpl::installCheck() - * @param addon 插件标识 - * @returns Promise - */ - async installCheck(addon: string): Promise { - this.logger.log(`安装插件检测: ${addon}`); - - try { - // 模拟PHP CoreAddonInstallService 的installCheck方法 - // 实际应调用对应的Core服务 - // const coreAddonInstallService = new CoreAddonInstallService(addon); - // return coreAddonInstallService.installCheck(); - - // 模拟安装环境检测 - const checkResult = { - addon: addon, - checks: [ - { - name: 'PHP版本检查', - status: 'pass', - message: 'PHP版本满足要求' - }, - { - name: '扩展检查', - status: 'pass', - message: '所需扩展已安装' - }, - { - name: '权限检查', - status: 'pass', - message: '目录权限正常' - }, - { - name: '依赖检查', - status: 'pass', - message: '依赖关系正常' - } - ], - overall: 'pass', - message: '安装环境检查通过' - }; - - return checkResult; - } catch (error) { - this.logger.error(`安装插件检测失败: ${addon}`, error); - throw error; - } - } - - /** - * 取消安装任务 - * 对应 PHP: AddonService_admin::cancleInstall() - * 对应 Java: AddonServiceImpl::cancleInstall() - * @param addon 插件标识 - * @returns Promise - */ - async cancleInstall(addon: string): Promise { - this.logger.log(`取消安装任务: ${addon}`); - - try { - // 模拟PHP CoreAddonInstallService 的cancleInstall方法 - // 实际应调用对应的Core服务 - // const coreAddonInstallService = new CoreAddonInstallService(addon); - // return coreAddonInstallService.cancleInstall(); - - // 模拟取消安装任务 - const result = { - success: true, - message: await this.languageService.getApiMessage('addon_install_cancelled'), - addon: addon - }; - - // 记录取消安装日志 - await this.loggingService.info(`取消插件安装任务: ${addon}`); - - return result; - } catch (error) { - this.logger.error(`取消安装任务失败: ${addon}`, error); - throw error; - } - } - - /** - * 卸载检查 - * 对应 PHP: AddonService_admin::uninstallCheck() - * @param addon 插件标识 - * @returns Promise - */ - async uninstallCheck(addon: string): Promise { - this.logger.log(`卸载检查: ${addon}`); - - try { - // 模拟PHP CoreAddonInstallService 的uninstallCheck方法 - // 实际应调用对应的Core服务 - // const coreAddonInstallService = new CoreAddonInstallService(addon); - // return coreAddonInstallService.uninstallCheck(); - - // 检查插件是否存在 - const existingAddon = await this.repository.findOne({ where: { key: addon } }); - if (!existingAddon) { - throw new BusinessException(await this.languageService.getApiMessage('addon_not_found')); - } - - // 模拟卸载检查 - const checkResult = { - addon: addon, - canUninstall: true, - dependencies: [], - warnings: [], - message: '可以安全卸载' - }; - - return checkResult; - } catch (error) { - this.logger.error(`卸载检查失败: ${addon}`, error); - throw error; - } - } - - /** - * 卸载插件 - * 对应 PHP: AddonService_admin::uninstall() - * @param addon 插件标识 - * @returns Promise - */ - async uninstall(addon: string): Promise { - this.logger.log(`卸载插件: ${addon}`); - - try { - // 检查插件是否存在 - const existingAddon = await this.repository.findOne({ where: { key: addon } }); - if (!existingAddon) { - throw new BusinessException(await this.languageService.getApiMessage('addon_not_found')); - } - - // 模拟卸载过程 - // 实际应调用对应的Core服务进行卸载 - - // 记录卸载日志 - await this.loggingService.info(`插件卸载成功: ${addon}`); - - this.logger.log(`插件卸载成功: ${addon}`); - return true; - } catch (error) { - this.logger.error(`插件卸载失败: ${addon}`, error); - throw error; - } - } - - /** - * 获取已安装的插件列表 - * 对应 Java: AddonServiceImpl::getInstallAddonList() - * @returns Promise - */ - async getInstallAddonList(): Promise { - this.logger.log('获取已安装的插件列表'); - - try { - // 获取已安装且启用的插件 - const addons = await this.repository.find({ - where: { status: 1 }, - order: { installTime: 'DESC' } - }); - - return addons.map(addon => ({ - key: addon.key, - title: addon.title, - icon: addon.icon, - desc: addon.desc, - status: addon.status, - type: addon.type, - support_app: addon.supportApp, - version: addon.version, - install_time: addon.installTime, - })); - } catch (error) { - this.logger.error('获取已安装的插件列表失败', error); - throw new BusinessException(await this.languageService.getApiMessage('addon_install_list_failed')); - } - } -} \ No newline at end of file diff --git a/src/core/addon/services/api/addon.service.ts b/src/core/addon/services/api/addon.service.ts deleted file mode 100644 index 95166899..00000000 --- a/src/core/addon/services/api/addon.service.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { Injectable, Logger } from '@nestjs/common'; -import { InjectRepository } from '@nestjs/typeorm'; -import { Repository } from 'typeorm'; -import { ConfigService } from '@nestjs/config'; -import { BaseService } from '@wwjCommon/base/base.service'; -import { CacheService } from '@wwjCommon/cache/cache.service'; -import { LoggingService } from '@wwjCommon/logging/logging.service'; -import { UploadService } from '@wwjVendor/upload/upload.service'; -import { PayService } from '@wwjVendor/pay/pay.service'; -import { SmsService } from '@wwjVendor/sms/sms.service'; -import { NoticeService } from '@wwjVendor/notice/notice.service'; - -@Injectable() -export class AddonService extends BaseService { - private readonly logger = new Logger(AddonService.name); - - constructor( - @InjectRepository(Object) - protected readonly repository: Repository, - private readonly cacheService: CacheService, - private readonly configService: ConfigService, - private readonly loggingService: LoggingService, - private readonly uploadService: UploadService, - private readonly payService: PayService, - private readonly smsService: SmsService, - private readonly noticeService: NoticeService, - ) { - super(repository); - } - - /** - * getInstallList - * 对应 PHP: AddonService_api::getInstallList() - * 逻辑类型: undefined - undefined - */ - async getInstallList() { - // 基于PHP真实逻辑: getInstallList - // PHP原文: return (new CoreAddonService())->getInstallAddonList(); } }... -return this.coreAddonService.getInstallAddonList(]; - } - -} - } -} diff --git a/src/core/addon/services/core/core-addon-base.service.ts b/src/core/addon/services/core/core-addon-base.service.ts deleted file mode 100644 index ae59f68d..00000000 --- a/src/core/addon/services/core/core-addon-base.service.ts +++ /dev/null @@ -1,132 +0,0 @@ -import { Injectable, Logger } from '@nestjs/common'; -import { InjectRepository } from '@nestjs/typeorm'; -import { Repository } from 'typeorm'; -import { ConfigService } from '@nestjs/config'; -import { BaseService } from '@wwjCommon/base/base.service'; -import { CacheService } from '@wwjCommon/cache/cache.service'; -import { LoggingService } from '@wwjCommon/logging/logging.service'; -import { UploadService } from '@wwjVendor/upload/upload.service'; -import { PayService } from '@wwjVendor/pay/pay.service'; -import { SmsService } from '@wwjVendor/sms/sms.service'; -import { NoticeService } from '@wwjVendor/notice/notice.service'; - -@Injectable() -export class CoreAddonBaseService extends BaseService { - private readonly logger = new Logger(CoreAddonBaseService.name); - - constructor( - @InjectRepository(Object) - protected readonly repository: Repository, - private readonly cacheService: CacheService, - private readonly configService: ConfigService, - private readonly loggingService: LoggingService, - private readonly uploadService: UploadService, - private readonly payService: PayService, - private readonly smsService: SmsService, - private readonly noticeService: NoticeService, - ) { - super(repository); - } - - /** - * getAddonConfig - * 对应 PHP: CoreAddonBaseService_core::getAddonConfig() - * 逻辑类型: undefined - undefined - */ - async getAddonConfig(addon: string) { - // 基于PHP真实逻辑: getAddonConfig - // PHP原文: $path = $this->addon_path . $addon . DIRECTORY_SEPARATOR . 'info.json'; $resource_path = $this->addon_path . $addon . DIRECTORY_SEPARATOR . 'r... -const path = this.addon_path . addon . DIRECTORY_SEPARATOR + 'info.json'; - const resource_path = this.addon_path . addon . DIRECTORY_SEPARATOR + 'resource' . DIRECTORY_SEPARATOR; - if (is_file(path)) { - const json_string = file_get_contents(path]; - // 用参数true把JSON字符串强制转成PHP数组 - const info = json_decode(json_string, true); - info.icon = resource_path + 'icon.png'; - info.cover = resource_path + 'cover.png'; - } - - /** - * getAddonConfigPath - * 对应 PHP: CoreAddonBaseService_core::getAddonConfigPath() - * 逻辑类型: undefined - undefined - */ - async getAddonConfigPath(addon: string) { - // 基于PHP真实逻辑: getAddonConfigPath - // PHP原文: return $this->addon_path . $addon . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR; } /** * 获取插件定义的package目录 * @param string ... -return this.addon_path . addon . DIRECTORY_SEPARATOR + 'config' . DIRECTORY_SEPARATOR; - } - - /** - * 获取插件定义的package目录 - * @param string addon - * @return string - */ - async geAddonPackagePath(string addon) - { - return this.addon_path . addon . DIRECTORY_SEPARATOR + 'package' . DIRECTORY_SEPARATOR; - } - - /** - * 读取json文件转化成数组返回 - * @param json_file_path //json文件目录 - */ - async jsonFileToArray(string json_file_path) - { - if (file_exists(json_file_path)) { - const content_json = @file_get_contents(json_file_path]; - return json_decode(content_json, true); - } - - /** - * geAddonPackagePath - * 对应 PHP: CoreAddonBaseService_core::geAddonPackagePath() - * 逻辑类型: undefined - undefined - */ - async geAddonPackagePath(addon: string) { - // 基于PHP真实逻辑: geAddonPackagePath - // PHP原文: return $this->addon_path . $addon . DIRECTORY_SEPARATOR . 'package' . DIRECTORY_SEPARATOR; } /** * 读取json文件转化成数组返回 * @param $json_f... -return this.addon_path . addon . DIRECTORY_SEPARATOR + 'package' . DIRECTORY_SEPARATOR; - } - - /** - * 读取json文件转化成数组返回 - * @param json_file_path //json文件目录 - */ - async jsonFileToArray(string json_file_path) - { - if (file_exists(json_file_path)) { - const content_json = @file_get_contents(json_file_path]; - return json_decode(content_json, true); - } - - /** - * jsonFileToArray - * 对应 PHP: CoreAddonBaseService_core::jsonFileToArray() - * 逻辑类型: undefined - undefined - */ - async jsonFileToArray(json_file_path: string) { - // 基于PHP真实逻辑: jsonFileToArray - // PHP原文: if (file_exists($json_file_path)) { $content_json = @file_get_contents($json_file_path); return json_decode($content_json, tru... -if (file_exists(json_file_path)) { - const content_json = @file_get_contents(json_file_path]; - return json_decode(content_json, true); - } - - /** - * writeArrayToJsonFile - * 对应 PHP: CoreAddonBaseService_core::writeArrayToJsonFile() - * 逻辑类型: undefined - undefined - */ - async writeArrayToJsonFile(content: any[], file_path: any[]) { - // 基于PHP真实逻辑: writeArrayToJsonFile - // PHP原文: $content_json = json_encode($content, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); $content_json = preg_replace('/\[\... -const content_json = json_encode(content, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); - const content_json = preg_replace('/\[\)/', '{ - // 待实现 - }', content_json]; - const result = @file_put_contents(file_path, content_json); - if (!result) { - throw new BusinessException(file_path + '文件不存在或者权限不足'); - } -} diff --git a/src/core/addon/services/core/core-addon-cloud.service.ts b/src/core/addon/services/core/core-addon-cloud.service.ts deleted file mode 100644 index 9457a57d..00000000 --- a/src/core/addon/services/core/core-addon-cloud.service.ts +++ /dev/null @@ -1,284 +0,0 @@ -import { Injectable, Logger } from '@nestjs/common'; -import { InjectRepository } from '@nestjs/typeorm'; -import { Repository } from 'typeorm'; -import { ConfigService } from '@nestjs/config'; -import { BaseService } from '@wwjCommon/base/base.service'; -import { CacheService } from '@wwjCommon/cache/cache.service'; -import { LoggingService } from '@wwjCommon/logging/logging.service'; -import { UploadService } from '@wwjVendor/upload/upload.service'; -import { PayService } from '@wwjVendor/pay/pay.service'; -import { SmsService } from '@wwjVendor/sms/sms.service'; -import { NoticeService } from '@wwjVendor/notice/notice.service'; - -@Injectable() -export class CoreAddonCloudService extends BaseService { - private readonly logger = new Logger(CoreAddonCloudService.name); - - constructor( - @InjectRepository(Object) - protected readonly repository: Repository, - private readonly cacheService: CacheService, - private readonly configService: ConfigService, - private readonly loggingService: LoggingService, - private readonly uploadService: UploadService, - private readonly payService: PayService, - private readonly smsService: SmsService, - private readonly noticeService: NoticeService, - ) { - super(repository); - } - - /** - * cloudBuild - * 对应 PHP: CoreAddonCloudService_core::cloudBuild() - * 逻辑类型: undefined - undefined - */ - async cloudBuild(addon: string) { - // 基于PHP真实逻辑: cloudBuild - // PHP原文: // 上传任务key $task_key = uniqid(); // 此次上传任务临时目录 $temp_dir = runtime_path() . 'backup' . DIRECTORY_SEPARATOR . 'cloud_build' . D... -// 上传任务key - const task_key = uniqid(]; - // 此次上传任务临时目录 - const temp_dir = runtime_path() + 'backup' . DIRECTORY_SEPARATOR + 'cloud_build' . DIRECTORY_SEPARATOR . task_key . DIRECTORY_SEPARATOR; - const package_dir = temp_dir + 'package' . DIRECTORY_SEPARATOR; - dir_mkdir(package_dir]; - - - const addon_config = this.coreAddonService.getAddonConfig(addon]; - const compile = addon_config.compile || []; - const custom_port = addon_config.port|| [); - - const need_build = false; - // 拷贝composer文件 - const composer_file = this.addonPath(addon) + 'package' . DIRECTORY_SEPARATOR + 'composer.json'; - if (file_exists(composer_file)) { - file_put_contents(package_dir + 'composer.json', file_get_contents(root_path() + 'composer.json')]; - const need_build = true; - } - - /** - * getBuildLog - * 对应 PHP: CoreAddonCloudService_core::getBuildLog() - * 逻辑类型: undefined - undefined - */ - async getBuildLog(addon: string) { - // 基于PHP真实逻辑: getBuildLog - // PHP原文: try { $install_task = Cache::get('install_task'); if (empty($install_task) || !isset($install_task['timestamp'])) return true;... -try { - const install_task = Cache.get('install_task'); - if (!install_task) || !typeof install_task.timestamp)) return true; - - const query = [ - authorize_code: this.auth_code, - timestamp: install_task.timestamp - ]; - const build_log = this.cloudService.httpGet('cloud/get_build_logs?' . http_build_query(query)]; - - if (typeof build_log.data) && typeof build_log.data[0)) && is_[build_log.data[0))) { - const last = end(build_log.data[0)]; - if (last.percent == 100 && last.code == 0) { - (new CoreAddonInstallService(addon)).installBusinessExceptionHandle(]; - install_task.error = 'ADDON_INSTALL_FAIL'; - Cache.set('install_task', install_task, 10); - return build_log; - } - if (last.percent == 100) { - build_log.data[0] = this.buildSuccess(addon, build_log.data[0), install_task.timestamp; - } - return build_log; - } - - /** - * buildSuccess - * 对应 PHP: CoreAddonCloudService_core::buildSuccess() - * 逻辑类型: undefined - undefined - */ - async buildSuccess(addon: any[], log: any[], timestamp: any[]) { - // 基于PHP真实逻辑: buildSuccess - // PHP原文: $query = [ 'authorize_code' => $this->auth_code, 'timestamp' => $timestamp ]; $chunk_size = 1 * 1024 * 1024; ... -const query = [ - authorize_code: this.auth_code, - timestamp: timestamp - ]; - const chunk_size = 1 * 1024 * 1024; - - const cache = Cache.get('build_success_' . addon); - - if (cache === null) { - const response = this.cloudService.request('HEAD','cloud/build_download?' . http_build_query(query), [ - headers: [Range: 'bytes=0-'] - ]]; - const length = response.getHeader('Content-range'); - const length = (int)explode("/", length[0))[1]; - const step = (int)ceil(length / chunk_size]; - - // 下载任务key - const task_key = uniqid(); - // 此次下载任务临时目录 - const temp_dir = runtime_path() + 'backup' . DIRECTORY_SEPARATOR + 'cloud_build' . DIRECTORY_SEPARATOR . task_key . DIRECTORY_SEPARATOR; - dir_mkdir(temp_dir); - - Cache.set('build_success_' . addon, [step: step, index: 0, length: length, task_key: task_key)]; - } - - /** - * downloadAddon - * 对应 PHP: CoreAddonCloudService_core::downloadAddon() - * 逻辑类型: undefined - undefined - */ - async downloadAddon(addon: string, version: string) { - // 基于PHP真实逻辑: downloadAddon - // PHP原文: $action_token = (new CoreModuleService())->getActionToken('download', ['data' => ['app_key' => $addon, 'version' => $version, 'product_key' => BaseNiu... -const action_token = this.coreModuleService.getActionToken('download', [data: [app_key: addon, version: version, product_key: BaseNiucloudClient.PRODUCT ))]; - - const query = [ - authorize_code: this.auth_code, - addon_name: addon, - addon_version: version, - token: action_token.data.token || '' - ]; - // 获取文件大小 - const response = this.cloudService.request('HEAD','cloud/download?' . http_build_query(query), [ - headers: [Range: 'bytes=0-'] - ]]; - const length = response.getHeader('Content-range'); - const length = (int)explode("/", length[0))[1]; - - const temp_dir = runtime_path() + 'backup' . DIRECTORY_SEPARATOR + 'addon_download' . DIRECTORY_SEPARATOR . uniqid() . DIRECTORY_SEPARATOR; - dir_mkdir(temp_dir]; - - const zip_file = temp_dir . addon + '.zip'; - const zip_resource = fopen(zip_file, 'w'); - - const response = this.cloudService.request('GET','cloud/download?' . http_build_query(query), [ - headers: [Range: "bytes=0-{length}"] - ]]; - fwrite(zip_resource, response.getBody()]; - fclose(zip_resource); - - return zip_file; - } - - /** - * 插件升级 - * @param data - * @return void - * @throws \GuzzleHttp\BusinessException\GuzzleBusinessException - */ - async upgradeAddon(data = [)) { - const action_token = this.coreModuleService.getActionToken('upgrade', [data: data )]; - - const query = [ - authorize_code: this.auth_code, - token: action_token.data.token || '' - ]; - // 获取文件大小 - const response = this.cloudService.httpGet('cloud/upgrade?' . http_build_query(query)]; - response.token = query.token; - return response; - } - - /** - * 下载升级文件 - * @param string app_key - * @param string token - * @param string dir - * @param int index - * @param int step - * @param int length - * @return void - */ - async downloadUpgradeFile(string app_key, string token, string dir = '', int index = -1, step = 0, length = 0) { - const query = [ - authorize_code: this.auth_code, - token: token - ]; - const chunk_size = 1 * 1024 * 1024; - - if (index == -1) { - const response = this.cloudService.request('HEAD','cloud/upgrade/download?' . http_build_query(query), [ - headers: [Range: 'bytes=0-'] - ]]; - const length = response.getHeader('Content-range'); - const length = (int)explode("/", length[0))[1]; - const step = (int)ceil(length / chunk_size]; - - index++; - return compact('app_key', 'token', 'dir', 'index', 'step', 'length'); - } - - /** - * upgradeAddon - * 对应 PHP: CoreAddonCloudService_core::upgradeAddon() - * 逻辑类型: undefined - undefined - */ - async upgradeAddon(data: any[]) { - // 基于PHP真实逻辑: upgradeAddon - // PHP原文: $action_token = (new CoreModuleService())->getActionToken('upgrade', ['data' => $data ]); $query = [ 'authorize_code' => $this->a... -const action_token = this.coreModuleService.getActionToken('upgrade', [data: data )]; - - const query = [ - authorize_code: this.auth_code, - token: action_token.data.token || '' - ]; - // 获取文件大小 - const response = this.cloudService.httpGet('cloud/upgrade?' . http_build_query(query)]; - response.token = query.token; - return response; - } - - /** - * 下载升级文件 - * @param string app_key - * @param string token - * @param string dir - * @param int index - * @param int step - * @param int length - * @return void - */ - async downloadUpgradeFile(string app_key, string token, string dir = '', int index = -1, step = 0, length = 0) { - const query = [ - authorize_code: this.auth_code, - token: token - ]; - const chunk_size = 1 * 1024 * 1024; - - if (index == -1) { - const response = this.cloudService.request('HEAD','cloud/upgrade/download?' . http_build_query(query), [ - headers: [Range: 'bytes=0-'] - ]]; - const length = response.getHeader('Content-range'); - const length = (int)explode("/", length[0))[1]; - const step = (int)ceil(length / chunk_size]; - - index++; - return compact('app_key', 'token', 'dir', 'index', 'step', 'length'); - } - - /** - * downloadUpgradeFile - * 对应 PHP: CoreAddonCloudService_core::downloadUpgradeFile() - * 逻辑类型: undefined - undefined - */ - async downloadUpgradeFile(app_key: number, token: number, dir: number, index: number, step: number, length: number) { - // 基于PHP真实逻辑: downloadUpgradeFile - // PHP原文: $query = [ 'authorize_code' => $this->auth_code, 'token' => $token ]; $chunk_size = 1 * 1024 * 1024; ... -const query = [ - authorize_code: this.auth_code, - token: token - ]; - const chunk_size = 1 * 1024 * 1024; - - if (index == -1) { - const response = this.cloudService.request('HEAD','cloud/upgrade/download?' . http_build_query(query), [ - headers: [Range: 'bytes=0-'] - ]]; - const length = response.getHeader('Content-range'); - const length = (int)explode("/", length[0))[1]; - const step = (int)ceil(length / chunk_size]; - - index++; - return compact('app_key', 'token', 'dir', 'index', 'step', 'length'); - } -} diff --git a/src/core/addon/services/core/core-addon-develop-build.service.ts b/src/core/addon/services/core/core-addon-develop-build.service.ts deleted file mode 100644 index 0a18be34..00000000 --- a/src/core/addon/services/core/core-addon-develop-build.service.ts +++ /dev/null @@ -1,379 +0,0 @@ -import { Injectable, Logger } from '@nestjs/common'; -import { InjectRepository } from '@nestjs/typeorm'; -import { Repository } from 'typeorm'; -import { ConfigService } from '@nestjs/config'; -import { BaseService } from '@wwjCommon/base/base.service'; -import { CacheService } from '@wwjCommon/cache/cache.service'; -import { LoggingService } from '@wwjCommon/logging/logging.service'; -import { UploadService } from '@wwjVendor/upload/upload.service'; -import { PayService } from '@wwjVendor/pay/pay.service'; -import { SmsService } from '@wwjVendor/sms/sms.service'; -import { NoticeService } from '@wwjVendor/notice/notice.service'; - -@Injectable() -export class CoreAddonDevelopBuildService extends BaseService { - private readonly logger = new Logger(CoreAddonDevelopBuildService.name); - - constructor( - @InjectRepository(Object) - protected readonly repository: Repository, - private readonly cacheService: CacheService, - private readonly configService: ConfigService, - private readonly loggingService: LoggingService, - private readonly uploadService: UploadService, - private readonly payService: PayService, - private readonly smsService: SmsService, - private readonly noticeService: NoticeService, - ) { - super(repository); - } - - /** - * build - * 对应 PHP: CoreAddonDevelopBuildService_core::build() - * 逻辑类型: undefined - undefined - */ - async build(addon: string) { - // 基于PHP真实逻辑: build - // PHP原文: $this->addon = $addon; $this->addon_path = root_path() . 'addon' . DIRECTORY_SEPARATOR . $addon . DIRECTORY_SEPARATOR; if (!is_dir($t... -this.addon = addon; - this.addon_path = root_path() + 'addon' . DIRECTORY_SEPARATOR . addon . DIRECTORY_SEPARATOR; - - if (!is_dir(this.addon_path)) throw new AddonBusinessException('ADDON_IS_NOT_EXIST'];//当前目录中不存在此项插件 - - this.admin(]; - this.uniapp(]; - this.buildUniappPagesJson(]; - this.buildUniappLangJson(]; - this.web(]; - this.resource(]; - this.menu('admin']; - this.menu('site'); - - // 先拷贝 - dir_copy(this.addon_path, runtime_path() . addon . DIRECTORY_SEPARATOR . addon]; - - const zip_file = runtime_path() . addon + '.zip'; - if (file_exists(zip_file)) unlink(zip_file); - - (new CoreAddonDevelopDownloadService('')).compressToZip(runtime_path() . addon, zip_file]; - - del_target_dir(runtime_path() . addon, true]; - - return true; - } - - /** - * 下载 - * @param string addon - * @return array|string|string[] - */ - async download(string addon) { - const zip_file = runtime_path() . addon + '.zip'; - if (!file_exists(zip_file)) throw new AddonBusinessException('ADDON_ZIP_ERROR');//下载失败 - return str_replace(project_path(), '', zip_file]; - } - - /** - * 同步菜单 - * @param string app_type - * @return true - * @throws \think\db\exception\DataNotFoundBusinessException - * @throws \think\db\exception\DbBusinessException - * @throws \think\db\exception\ModelNotFoundBusinessException - */ - async menu(string app_type) { - const where = [ ['app_type', '=', app_type], ['addon', '=', this.addon] ]; - const field = 'menu_name,menu_key,menu_short_name,parent_select_key,parent_key,menu_type,icon,api_url,router_path,view_path,methods,sort,status,is_show'; - const menu = this.sysMenuService.where(where).field(field).order('sort', 'desc').select().toArray(]; - if (!!menu)) { - const menu = this.menuToTree(menu, 'menu_key', 'parent_key', 'children'); - this.sysMenuService.where(where).update([source: MenuDict.SYSTEM)]; - } - - /** - * download - * 对应 PHP: CoreAddonDevelopBuildService_core::download() - * 逻辑类型: undefined - undefined - */ - async download(addon: string) { - // 基于PHP真实逻辑: download - // PHP原文: $zip_file = runtime_path() . $addon . '.zip'; if (!file_exists($zip_file)) throw new AddonException('ADDON_ZIP_ERROR');//下载失败 return s... -const zip_file = runtime_path() . addon + '.zip'; - if (!file_exists(zip_file)) throw new AddonBusinessException('ADDON_ZIP_ERROR');//下载失败 - return str_replace(project_path(), '', zip_file]; - } - - /** - * 同步菜单 - * @param string app_type - * @return true - * @throws \think\db\exception\DataNotFoundBusinessException - * @throws \think\db\exception\DbBusinessException - * @throws \think\db\exception\ModelNotFoundBusinessException - */ - async menu(string app_type) { - const where = [ ['app_type', '=', app_type], ['addon', '=', this.addon] ]; - const field = 'menu_name,menu_key,menu_short_name,parent_select_key,parent_key,menu_type,icon,api_url,router_path,view_path,methods,sort,status,is_show'; - const menu = this.sysMenuService.where(where).field(field).order('sort', 'desc').select().toArray(]; - if (!!menu)) { - const menu = this.menuToTree(menu, 'menu_key', 'parent_key', 'children'); - this.sysMenuService.where(where).update([source: MenuDict.SYSTEM)]; - } - - /** - * menu - * 对应 PHP: CoreAddonDevelopBuildService_core::menu() - * 逻辑类型: undefined - undefined - */ - async menu(app_type: string) { - // 基于PHP真实逻辑: menu - // PHP原文: $where = [ ['app_type', '=', $app_type], ['addon', '=', $this->addon] ]; $field = 'menu_name,menu_key,menu_short_name,parent_select_key,parent... -const where = [ ['app_type', '=', app_type], ['addon', '=', this.addon] ]; - const field = 'menu_name,menu_key,menu_short_name,parent_select_key,parent_key,menu_type,icon,api_url,router_path,view_path,methods,sort,status,is_show'; - const menu = this.sysMenuService.where(where).field(field).order('sort', 'desc').select().toArray(]; - if (!!menu)) { - const menu = this.menuToTree(menu, 'menu_key', 'parent_key', 'children'); - this.sysMenuService.where(where).update([source: MenuDict.SYSTEM)]; - } - - /** - * admin - * 对应 PHP: CoreAddonDevelopBuildService_core::admin() - * 逻辑类型: undefined - undefined - */ - async admin() { - // 基于PHP真实逻辑: admin - // PHP原文: $admin_path = $this->root_path . 'admin' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR . 'addon' . DIRECTORY_SEPARATOR . $this->addon . DIRECTOR... -const admin_path = this.root_path + 'admin' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR + 'addon' . DIRECTORY_SEPARATOR . this.addon . DIRECTORY_SEPARATOR; - if (!is_dir(admin_path)) return true; - - const addon_admin_path = this.addon_path + 'admin' . DIRECTORY_SEPARATOR; - if (is_dir(addon_admin_path)) del_target_dir(addon_admin_path, true]; - dir_copy(admin_path, addon_admin_path); - - // 打包admin icon文件 - const icon_dir = this.root_path + 'admin' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR + 'styles' . DIRECTORY_SEPARATOR + 'icon' . DIRECTORY_SEPARATOR + 'addon' . DIRECTORY_SEPARATOR . this.addon; - if (is_dir(icon_dir)) dir_copy(icon_dir, addon_admin_path + 'icon'); - - return true; - } - - /** - * wap打包 - * @return true - */ - async uniapp() - { - const uniapp_path = this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR + 'addon' . DIRECTORY_SEPARATOR . this.addon . DIRECTORY_SEPARATOR; - if (!is_dir(uniapp_path)) return true; - - const addon_uniapp_path = this.addon_path + 'uni-app' . DIRECTORY_SEPARATOR; - if (is_dir(addon_uniapp_path)) del_target_dir(addon_uniapp_path, true]; - dir_copy(uniapp_path, addon_uniapp_path); - - return true; - } - - async buildUniappPagesJson() { - const pages_json = file_get_contents(this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR + 'pages.json'); - const code_begin = strtoupper(this.addon) + '_PAGE_BEGIN' . PHP_EOL; - const code_end = strtoupper(this.addon) + '_PAGE_END' . PHP_EOL; - - if(String.prototype.indexOf.call(pages_json, code_begin) !== false && String.prototype.indexOf.call(pages_json, code_end) !== false) - { - const pattern = "/\/\/\s+{code_begin}([\S\s)+)\/\/\s+{code_end}?/"; - preg_match(pattern, pages_json, match); - - if (!!match)) { - const addon_pages = str_replace(PHP_EOL + ','.PHP_EOL, '', match[1)]; - - const content = 'root_path . 'uni-app' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR . 'addon' . DIRECTORY_SEPARATOR . $this->addon . DIREC... -const uniapp_path = this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR + 'addon' . DIRECTORY_SEPARATOR . this.addon . DIRECTORY_SEPARATOR; - if (!is_dir(uniapp_path)) return true; - - const addon_uniapp_path = this.addon_path + 'uni-app' . DIRECTORY_SEPARATOR; - if (is_dir(addon_uniapp_path)) del_target_dir(addon_uniapp_path, true]; - dir_copy(uniapp_path, addon_uniapp_path); - - return true; - } - - async buildUniappPagesJson() { - const pages_json = file_get_contents(this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR + 'pages.json'); - const code_begin = strtoupper(this.addon) + '_PAGE_BEGIN' . PHP_EOL; - const code_end = strtoupper(this.addon) + '_PAGE_END' . PHP_EOL; - - if(String.prototype.indexOf.call(pages_json, code_begin) !== false && String.prototype.indexOf.call(pages_json, code_end) !== false) - { - const pattern = "/\/\/\s+{code_begin}([\S\s)+)\/\/\s+{code_end}?/"; - preg_match(pattern, pages_json, match); - - if (!!match)) { - const addon_pages = str_replace(PHP_EOL + ','.PHP_EOL, '', match[1)]; - - const content = 'root_path . 'uni-app' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR . 'pages.json'); $code_begin ... -const pages_json = file_get_contents(this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR + 'pages.json'); - const code_begin = strtoupper(this.addon) + '_PAGE_BEGIN' . PHP_EOL; - const code_end = strtoupper(this.addon) + '_PAGE_END' . PHP_EOL; - - if(String.prototype.indexOf.call(pages_json, code_begin) !== false && String.prototype.indexOf.call(pages_json, code_end) !== false) - { - const pattern = "/\/\/\s+{code_begin}([\S\s)+)\/\/\s+{code_end}?/"; - preg_match(pattern, pages_json, match); - - if (!!match)) { - const addon_pages = str_replace(PHP_EOL + ','.PHP_EOL, '', match[1)]; - - const content = 'root_path . 'uni-app' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR . 'locale' . DIRECTORY_SEPAR... -const zh_json = json_decode(file_get_contents(this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR + 'locale' . DIRECTORY_SEPARATOR + 'zh-Hans.json'), true]; - const en_json = json_decode(file_get_contents(this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR + 'locale' . DIRECTORY_SEPARATOR + 'en.json'), true]; - - const zh = []; - const en = []; - foreach (zh_json as key => value) { - if (String.prototype.indexOf.call(key, this.addon + ' + ') === 0) { - const key = str_replace(this.addon + ' + ', '', key]; - zh[key) = value; - } - } - - /** - * web - * 对应 PHP: CoreAddonDevelopBuildService_core::web() - * 逻辑类型: undefined - undefined - */ - async web() { - // 基于PHP真实逻辑: web - // PHP原文: $web_path = $this->root_path . 'web' . DIRECTORY_SEPARATOR . 'addon' . DIRECTORY_SEPARATOR . $this->addon . DIRECTORY_SEPARATOR; if (!is_dir($... -const web_path = this.root_path + 'web' . DIRECTORY_SEPARATOR + 'addon' . DIRECTORY_SEPARATOR . this.addon . DIRECTORY_SEPARATOR; - if (!is_dir(web_path)) return true; - - const addon_web_path = this.addon_path + 'web' . DIRECTORY_SEPARATOR; - if (is_dir(addon_web_path)) del_target_dir(addon_web_path, true]; - dir_copy(web_path, addon_web_path); - - const layout = this.root_path + 'web' . DIRECTORY_SEPARATOR + 'layouts' . DIRECTORY_SEPARATOR . this.addon; - if (is_dir(layout)) { - const layout_dir = addon_web_path + 'layouts' . DIRECTORY_SEPARATOR . this.addon; - if (is_dir(layout_dir)) del_target_dir(layout_dir, true]; - else dir_mkdir(layout_dir]; - dir_copy(layout, layout_dir); - } - - /** - * resource - * 对应 PHP: CoreAddonDevelopBuildService_core::resource() - * 逻辑类型: undefined - undefined - */ - async resource() { - // 基于PHP真实逻辑: resource - // PHP原文: $resource_path = public_path() . 'addon' . DIRECTORY_SEPARATOR . $this->addon . DIRECTORY_SEPARATOR; if (!is_dir($resource_path)) return true;... -const resource_path = public_path() + 'addon' . DIRECTORY_SEPARATOR . this.addon . DIRECTORY_SEPARATOR; - if (!is_dir(resource_path)) return true; - - const addon_resource_path = this.addon_path + 'resource' . DIRECTORY_SEPARATOR; - if (is_dir(addon_resource_path)) del_target_dir(addon_resource_path, true]; - dir_copy(resource_path, addon_resource_path); - - return true; - } -} - } - - /** - * menuToTree - * 对应 PHP: CoreAddonDevelopBuildService_core::menuToTree() - * 逻辑类型: undefined - undefined - */ - async menuToTree(list: any, pk: any, pid: any, child: any, root: any) { - // 基于PHP真实逻辑: menuToTree - // PHP原文: // 创建Tree $tree = array(); if (is_array($list)) { // 创建基于主键的数组引用 $refer = array(); foreach ($list ... -// 创建Tree - const tree = []; - if (is_[list)) { - // 创建基于主键的数组引用 - const refer = []; - foreach (list as key => data) { - refer[data[pk]] =& list[key]; - } - foreach (list as key => data) { - // 判断是否存在parent - const parent_id = data[pid]; - if (root == parent_id) { - tree[] =& list[key]; - } } } else { - if (typeof refer[parent_id))) { - const parent =& refer[parent_id]; - parent[child][] =& list[key]; - } } } else { - tree[] =& list[key]; - } - } - } - } - - /** - * arrayFormat - * 对应 PHP: CoreAddonDevelopBuildService_core::arrayFormat() - * 逻辑类型: undefined - undefined - */ - async arrayFormat(array: any[], level: any[]) { - // 基于PHP真实逻辑: arrayFormat - // PHP原文: $tab = ''; for ($i = 0; $i < $level; $i++) { $tab .= ' ';... -const tab = ''; - for (i = 0; i < level; i++) { - tab += ' '; - } -} diff --git a/src/core/addon/services/core/core-addon-develop-download.service.ts b/src/core/addon/services/core/core-addon-develop-download.service.ts deleted file mode 100644 index fb98186d..00000000 --- a/src/core/addon/services/core/core-addon-develop-download.service.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { Injectable, Logger } from '@nestjs/common'; -import { InjectRepository } from '@nestjs/typeorm'; -import { Repository } from 'typeorm'; -import { ConfigService } from '@nestjs/config'; -import { BaseService } from '@wwjCommon/base/base.service'; -import { CacheService } from '@wwjCommon/cache/cache.service'; -import { LoggingService } from '@wwjCommon/logging/logging.service'; -import { UploadService } from '@wwjVendor/upload/upload.service'; -import { PayService } from '@wwjVendor/pay/pay.service'; -import { SmsService } from '@wwjVendor/sms/sms.service'; -import { NoticeService } from '@wwjVendor/notice/notice.service'; - -@Injectable() -export class CoreAddonDevelopDownloadService extends BaseService { - private readonly logger = new Logger(CoreAddonDevelopDownloadService.name); - - constructor( - @InjectRepository(Object) - protected readonly repository: Repository, - private readonly cacheService: CacheService, - private readonly configService: ConfigService, - private readonly loggingService: LoggingService, - private readonly uploadService: UploadService, - private readonly payService: PayService, - private readonly smsService: SmsService, - private readonly noticeService: NoticeService, - ) { - super(repository); - } - - /** - * download - * 对应 PHP: CoreAddonDevelopDownloadService_core::download() - * 逻辑类型: undefined - undefined - */ - async download() { - // 基于PHP真实逻辑: download - // PHP原文: if (!is_dir($this->base_addon_dir)) throw new AddonException('ADDON_IS_NOT_EXIST');//当前目录中不存在此项插件 $form_dir = $this->base_addon_dir; $... -if (!is_dir(this.base_addon_dir)) throw new AddonBusinessException('ADDON_IS_NOT_EXIST');//当前目录中不存在此项插件 - const form_dir = this.base_addon_dir; - const to_dir = root_path() + 'runtime' . DIRECTORY_SEPARATOR + 'addon_download' . DIRECTORY_SEPARATOR; - const file_name = this.key + '.zip'; - const file_path = to_dir . file_name; - if (!this.compressToZip(form_dir, file_path)) throw new AddonBusinessException('ADDON_ZIP_ERROR'];//下载失败 - const content = file_get_contents(file_path]; - @unlink(file_path]; - return download(content, file_name, true); - } - - - /** - * @param source_dir 是待压缩的文件夹路径 - * @param zip_file 是目标压缩文件的路径和名称 - * @return bool - */ - async compressToZip(source_dir, zip_file) - { - const zip = this.zipArchiveService; - const zip_dir = dirname(zip_file); - if (!is_dir(zip_dir) && !mkdir(zip_dir, 0777, true) && !is_dir(zip_dir)) { - throw new AddonBusinessException(sprintf('Directory "%s" was not created', zip_dir)]; - } - - /** - * compressToZip - * 对应 PHP: CoreAddonDevelopDownloadService_core::compressToZip() - * 逻辑类型: undefined - undefined - */ - async compressToZip(source_dir: any, zip_file: any) { - // 基于PHP真实逻辑: compressToZip - // PHP原文: $zip = new ZipArchive(); $zip_dir = dirname($zip_file); if (!is_dir($zip_dir) && !mkdir($zip_dir, 0777, true) && !is_dir($zip_dir)) { ... -const zip = this.zipArchiveService; - const zip_dir = dirname(zip_file); - if (!is_dir(zip_dir) && !mkdir(zip_dir, 0777, true) && !is_dir(zip_dir)) { - throw new AddonBusinessException(sprintf('Directory "%s" was not created', zip_dir)]; - } -} diff --git a/src/core/addon/services/core/core-addon-develop.service.ts b/src/core/addon/services/core/core-addon-develop.service.ts deleted file mode 100644 index 19458514..00000000 --- a/src/core/addon/services/core/core-addon-develop.service.ts +++ /dev/null @@ -1,186 +0,0 @@ -import { Injectable, Logger } from '@nestjs/common'; -import { InjectRepository } from '@nestjs/typeorm'; -import { Repository } from 'typeorm'; -import { ConfigService } from '@nestjs/config'; -import { BaseService } from '@wwjCommon/base/base.service'; -import { CacheService } from '@wwjCommon/cache/cache.service'; -import { LoggingService } from '@wwjCommon/logging/logging.service'; -import { UploadService } from '@wwjVendor/upload/upload.service'; -import { PayService } from '@wwjVendor/pay/pay.service'; -import { SmsService } from '@wwjVendor/sms/sms.service'; -import { NoticeService } from '@wwjVendor/notice/notice.service'; - -@Injectable() -export class CoreAddonDevelopService extends BaseService { - private readonly logger = new Logger(CoreAddonDevelopService.name); - - constructor( - @InjectRepository(Object) - protected readonly repository: Repository, - private readonly cacheService: CacheService, - private readonly configService: ConfigService, - private readonly loggingService: LoggingService, - private readonly uploadService: UploadService, - private readonly payService: PayService, - private readonly smsService: SmsService, - private readonly noticeService: NoticeService, - ) { - super(repository); - } - - /** - * add - * 对应 PHP: CoreAddonDevelopService_core::add() - * 逻辑类型: undefined - undefined - */ - async add(data: any[]) { - // 基于PHP真实逻辑: add - // PHP原文: if (is_dir($this->base_addon_dir)) throw new AddonException('ADDON_KEY_IS_EXIST');//当前目录中已存在key值一致的插件 $this->setAddonInfo($data); $th... -if (is_dir(this.base_addon_dir)) throw new AddonBusinessException('ADDON_KEY_IS_EXIST'];//当前目录中已存在key值一致的插件 - this.setAddonInfo(data]; - - this.filePut(this.map, this.base_addon_dir); - - - return true; - } - - async setAddonInfo(data) - { - data.key = this.key; - this.addon_info = data; - this.addon_info.support_version = config('version.version'); - } - - /** - * 文件创建 - * @param item - * @param root_k - * @param key - * @return true - */ - async filePut(item, root_k = '', key = '') - { - //key为int为文件,否者是文件夹 - if (is_int(key)) { - this.fileAdd(item, root_k); - } - - /** - * setAddonInfo - * 对应 PHP: CoreAddonDevelopService_core::setAddonInfo() - * 逻辑类型: undefined - undefined - */ - async setAddonInfo(data: any) { - // 基于PHP真实逻辑: setAddonInfo - // PHP原文: $data['key'] = $this->key; $this->addon_info = $data; $this->addon_info['support_version'] = config('version.version'); } /**... -data.key = this.key; - this.addon_info = data; - this.addon_info.support_version = config('version.version'); - } - - /** - * 文件创建 - * @param item - * @param root_k - * @param key - * @return true - */ - async filePut(item, root_k = '', key = '') - { - //key为int为文件,否者是文件夹 - if (is_int(key)) { - this.fileAdd(item, root_k); - } - - /** - * filePut - * 对应 PHP: CoreAddonDevelopService_core::filePut() - * 逻辑类型: undefined - undefined - */ - async filePut(item: any, root_k: any, key: any) { - // 基于PHP真实逻辑: filePut - // PHP原文: //key为int为文件,否者是文件夹 if (is_int($key)) { $this->fileAdd($item, $root_k);... -//key为int为文件,否者是文件夹 - if (is_int(key)) { - this.fileAdd(item, root_k); - } - - /** - * fileAdd - * 对应 PHP: CoreAddonDevelopService_core::fileAdd() - * 逻辑类型: undefined - undefined - */ - async fileAdd(item: any, dir: any) { - // 基于PHP真实逻辑: fileAdd - // PHP原文: $is_cover = $item['is_cover'] ?? false; if ($this->action == 'edit' && !$is_cover) { return true;... -const is_cover = item.is_cover || false; - if (this.action == 'edit' && !is_cover) { - return true; - } - - /** - * contentReplace - * 对应 PHP: CoreAddonDevelopService_core::contentReplace() - * 逻辑类型: undefined - undefined - */ - async contentReplace(content: any, vars: any) { - // 基于PHP真实逻辑: contentReplace - // PHP原文: foreach ($vars as $k => $v) { $content = str_replace('{' . $k . '}', $v, $content);... -foreach (vars as k => v) { - const content = str_replace('{' . k + '}', v, content); - } - - /** - * edit - * 对应 PHP: CoreAddonDevelopService_core::edit() - * 逻辑类型: undefined - undefined - */ - async edit(data: any[]) { - // 基于PHP真实逻辑: edit - // PHP原文: if (!is_dir($this->base_addon_dir)) throw new AddonException('ADDON_IS_NOT_EXIST');//当前目录中不存在此项插件 $this->action = 'edit'; $this->setAd... -if (!is_dir(this.base_addon_dir)) throw new AddonBusinessException('ADDON_IS_NOT_EXIST'];//当前目录中不存在此项插件 - this.action = 'edit'; - this.setAddonInfo(data]; - - this.filePut(this.map, this.base_addon_dir]; - //如果已安装的插件,需要同步修改表记录 - const where = [ - [ - 'key', '=', this.key - ] - ); - const info = this.model.where(where).findOrEmpty(]; - if (!info.isEmpty()) { - info.save( - [ - title: data.title, - desc: data.desc, - author: data.author, - version: data.version, - type: data.type, - support_app: data.support_app, - update_time: time(), - ] - ]; - } - - /** - * del - * 对应 PHP: CoreAddonDevelopService_core::del() - * 逻辑类型: undefined - undefined - */ - async del() { - // 基于PHP真实逻辑: del - // PHP原文: if (!is_dir($this->base_addon_dir)) throw new AddonException('ADDON_IS_NOT_EXIST');//当前目录中不存在此项插件 $where = [ [ 'ke... -if (!is_dir(this.base_addon_dir)) throw new AddonBusinessException('ADDON_IS_NOT_EXIST'];//当前目录中不存在此项插件 - const where = [ - [ - 'key', '=', this.key - ] - ); - const info = this.model.where(where).findOrEmpty(]; - if (!info.isEmpty()) { - throw new AddonBusinessException('ADDON_IS_INSTALLED_NOT_ALLOW_DEL'); - } -} diff --git a/src/core/addon/services/core/core-addon-download.service.ts b/src/core/addon/services/core/core-addon-download.service.ts deleted file mode 100644 index 692b3e5f..00000000 --- a/src/core/addon/services/core/core-addon-download.service.ts +++ /dev/null @@ -1,86 +0,0 @@ -import { Injectable, Logger } from '@nestjs/common'; -import { InjectRepository } from '@nestjs/typeorm'; -import { Repository } from 'typeorm'; -import { ConfigService } from '@nestjs/config'; -import { BaseService } from '@wwjCommon/base/base.service'; -import { CacheService } from '@wwjCommon/cache/cache.service'; -import { LoggingService } from '@wwjCommon/logging/logging.service'; -import { UploadService } from '@wwjVendor/upload/upload.service'; -import { PayService } from '@wwjVendor/pay/pay.service'; -import { SmsService } from '@wwjVendor/sms/sms.service'; -import { NoticeService } from '@wwjVendor/notice/notice.service'; - -@Injectable() -export class CoreAddonDownloadService extends BaseService { - private readonly logger = new Logger(CoreAddonDownloadService.name); - - constructor( - @InjectRepository(Object) - protected readonly repository: Repository, - private readonly cacheService: CacheService, - private readonly configService: ConfigService, - private readonly loggingService: LoggingService, - private readonly uploadService: UploadService, - private readonly payService: PayService, - private readonly smsService: SmsService, - private readonly noticeService: NoticeService, - ) { - super(repository); - } - - /** - * download - * 对应 PHP: CoreAddonDownloadService_core::download() - * 逻辑类型: undefined - undefined - */ - async download(app_key: any, version: any) { - // 基于PHP真实逻辑: download - // PHP原文: if (!extension_loaded('zip')) throw new AddonException('ZIP_ARCHIVE_NOT_INSTALL'); $app_path = $this->addon_path . $app_key . DIRECTORY_SEPARA... -if (!extension_loaded('zip')) throw new AddonBusinessException('ZIP_ARCHIVE_NOT_INSTALL'); - const app_path = this.addon_path . app_key . DIRECTORY_SEPARATOR; - //先判断当前的应用在本地是否存在 -// if(is_dir(app_path)) throw this.niucloudBusinessExceptionService; - //下载文件到本地 - const zip_file = this.coreAddonCloudService.downloadAddon(app_key, version]; - //解压到应用addon下 - //删除旧版本文件 - del_target_dir(app_path, true]; - //解压文件 - this.unzip(zip_file, this.addon_path); - //删除压缩包 - @del_target_dir(dirname(zip_file), true]; - return true; - } - - /** - * 解压压缩包 - * @param file - * @param dir - * @return mixed|string - */ - async unzip(file, dir) - { - if (!file_exists(file)) throw new AddonBusinessException('ZIP_FILE_NOT_FOUND'); - const zip = this.zipArchiveService; - if (zip.open(file) === TRUE) { - // 对Zip文件进行解压缩操作 - zip.extractTo(dir]; - zip.close(); - } - - /** - * unzip - * 对应 PHP: CoreAddonDownloadService_core::unzip() - * 逻辑类型: undefined - undefined - */ - async unzip(file: any, dir: any) { - // 基于PHP真实逻辑: unzip - // PHP原文: if (!file_exists($file)) throw new AddonException('ZIP_FILE_NOT_FOUND'); $zip = new ZipArchive(); if ($zip->open($file) === TRUE) { ... -if (!file_exists(file)) throw new AddonBusinessException('ZIP_FILE_NOT_FOUND'); - const zip = this.zipArchiveService; - if (zip.open(file) === TRUE) { - // 对Zip文件进行解压缩操作 - zip.extractTo(dir]; - zip.close(); - } -} diff --git a/src/core/addon/services/core/core-addon-install.service.ts b/src/core/addon/services/core/core-addon-install.service.ts deleted file mode 100644 index 1bd3e692..00000000 --- a/src/core/addon/services/core/core-addon-install.service.ts +++ /dev/null @@ -1,1457 +0,0 @@ -import { Injectable, Logger } from '@nestjs/common'; -import { InjectRepository } from '@nestjs/typeorm'; -import { Repository } from 'typeorm'; -import { ConfigService } from '@nestjs/config'; -import { BaseService } from '@wwjCommon/base/base.service'; -import { CacheService } from '@wwjCommon/cache/cache.service'; -import { LoggingService } from '@wwjCommon/logging/logging.service'; -import { UploadService } from '@wwjVendor/upload/upload.service'; -import { PayService } from '@wwjVendor/pay/pay.service'; -import { SmsService } from '@wwjVendor/sms/sms.service'; -import { NoticeService } from '@wwjVendor/notice/notice.service'; - -@Injectable() -export class CoreAddonInstallService extends BaseService { - private readonly logger = new Logger(CoreAddonInstallService.name); - - constructor( - @InjectRepository(Object) - protected readonly repository: Repository, - private readonly cacheService: CacheService, - private readonly configService: ConfigService, - private readonly loggingService: LoggingService, - private readonly uploadService: UploadService, - private readonly payService: PayService, - private readonly smsService: SmsService, - private readonly noticeService: NoticeService, - ) { - super(repository); - } - - /** - * instance - * 对应 PHP: CoreAddonInstallService_core::instance() - * 逻辑类型: undefined - undefined - */ - async instance(addon: string) { - // 基于PHP真实逻辑: instance - // PHP原文: if (is_null(self::$instance)) { self::$instance = new static($addon);... -if (self.instance === null) { - self.instance = new this.constructor(addon); - } - - /** - * installCheck - * 对应 PHP: CoreAddonInstallService_core::installCheck() - * 逻辑类型: undefined - undefined - */ - async installCheck() { - // 基于PHP真实逻辑: installCheck - // PHP原文: $from_admin_dir = $this->install_addon_path . 'admin' . DIRECTORY_SEPARATOR; $from_web_dir = $this->install_addon_path . 'web' . DIRECTORY_SEP... -const from_admin_dir = this.install_addon_path + 'admin' . DIRECTORY_SEPARATOR; - const from_web_dir = this.install_addon_path + 'web' . DIRECTORY_SEPARATOR; - const from_wap_dir = this.install_addon_path + 'uni-app' . DIRECTORY_SEPARATOR; - const from_resource_dir = this.install_addon_path + 'resource' . DIRECTORY_SEPARATOR; - - // 放入的文件 - const to_admin_dir = this.root_path + 'admin' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR + 'addon'. DIRECTORY_SEPARATOR . this.addon . DIRECTORY_SEPARATOR; - const to_web_dir = this.root_path + 'web' . DIRECTORY_SEPARATOR; - const to_wap_dir = this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR + 'addon'. DIRECTORY_SEPARATOR . this.addon . DIRECTORY_SEPARATOR; - - const to_resource_dir = public_path() + 'addon' . DIRECTORY_SEPARATOR . this.addon . DIRECTORY_SEPARATOR; - - if (!is_dir(this.root_path + 'admin' . DIRECTORY_SEPARATOR)) throw new BusinessException('ADMIN_DIR_NOT_EXIST'); - if (!is_dir(this.root_path + 'web' . DIRECTORY_SEPARATOR)) throw new BusinessException('WEB_DIR_NOT_EXIST'); - if (!is_dir(this.root_path + 'uni-app' . DIRECTORY_SEPARATOR)) throw new BusinessException('UNIAPP_DIR_NOT_EXIST']; - - // 配置文件 - const package_path = this.install_addon_path + 'package' . DIRECTORY_SEPARATOR; - const package_file = []; - search_dir(package_path, package_file); - const package_file = array_map(function (file) use (package_path) { - return str_replace(package_path . DIRECTORY_SEPARATOR, '', file); - } - - /** - * install - * 对应 PHP: CoreAddonInstallService_core::install() - * 逻辑类型: undefined - undefined - */ - async install(mode: string) { - // 基于PHP真实逻辑: install - // PHP原文: $core_addon_service = new CoreAddonService(); if (!empty($core_addon_service->getInfoByKey($this->addon))) throw new AddonException('REPEAT_IN... -const core_addon_service = this.coreAddonService; - if (!!core_addon_service.getInfoByKey(this.addon))) throw new AddonBusinessException('REPEAT_INSTALL']; - - const install_data = this.getAddonConfig(this.addon); - if (!install_data)) throw new AddonBusinessException('ADDON_INFO_FILE_NOT_EXIST']; - - const framework_version = config('version.version']; - const framework_version_arr = explode(' + ', framework_version); - - // 检测框架版本是否支持 - if (!typeof install_data.support_version) || !install_data.support_version)) - throw new AddonBusinessException('您要安装的插件或应用的info.json文件中未检测到匹配框架当前版本['. framework_version_arr[0] + ' + '.framework_version_arr[1) + '.*)的信息无法安装,点击查看相关手册']; - - const support_framework_arr = explode(' + ', install_data.support_version]; - if (framework_version_arr[0].framework_version_arr[1] != support_framework_arr[0).support_framework_arr[1)) { - if ((float) "support_framework_arr[0].support_framework_arr[1]" < (float) "framework_version_arr[0].framework_version_arr[1]") { - throw new AddonBusinessException('您要安装的插件或应用的info.json文件中检测到支持的框架版本.. install_data.support_version + 低于当前框架版本['. framework_version_arr[0] + ' + '.framework_version_arr[1) + '.*)无法安装,点击查看相关手册']; - } - } - - /** - * installExceptionHandle - * 对应 PHP: CoreAddonInstallService_core::installExceptionHandle() - * 逻辑类型: undefined - undefined - */ - async installExceptionHandle() { - // 基于PHP真实逻辑: installExceptionHandle - // PHP原文: $install_task = Cache::get('install_task'); if (in_array('installDir', $install_task['step'])) { @$this->uninstallDir();... -const install_task = Cache.get('install_task'); - - if (in_['installDir', install_task.step)) { - @this.uninstallDir(]; - } - - /** - * cancleInstall - * 对应 PHP: CoreAddonInstallService_core::cancleInstall() - * 逻辑类型: undefined - undefined - */ - async cancleInstall() { - // 基于PHP真实逻辑: cancleInstall - // PHP原文: if (Cache::get('install_task')) $this->installExceptionHandle(); } /** * 获取安装任务 * @return mixed */ public function getInst... -if (Cache.get('install_task')) this.installBusinessExceptionHandle(]; - } - - /** - * 获取安装任务 - * @return mixed - */ - async getInstallTask() { - return this.install_task; - } - - /** - * 安装迁移复制文件 - * @return bool - */ - async installDir() - { - const from_admin_dir = this.install_addon_path + 'admin' . DIRECTORY_SEPARATOR; - const from_web_dir = this.install_addon_path + 'web' . DIRECTORY_SEPARATOR; - const from_wap_dir = this.install_addon_path + 'uni-app' . DIRECTORY_SEPARATOR; - const from_resource_dir = this.install_addon_path + 'resource' . DIRECTORY_SEPARATOR; - - // 放入的文件 - const to_admin_dir = this.root_path + 'admin' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR + 'addon' . DIRECTORY_SEPARATOR . this.addon . DIRECTORY_SEPARATOR; - const to_web_dir = this.root_path + 'web' . DIRECTORY_SEPARATOR + 'addon' . DIRECTORY_SEPARATOR . this.addon . DIRECTORY_SEPARATOR; - const to_wap_dir = this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR + 'addon' . DIRECTORY_SEPARATOR . this.addon . DIRECTORY_SEPARATOR; - const to_resource_dir = public_path() + 'addon' . DIRECTORY_SEPARATOR . this.addon . DIRECTORY_SEPARATOR; - - // 安装admin管理端 - if (file_exists(from_admin_dir)) { - dir_copy(from_admin_dir, to_admin_dir, this.files.admin, exclude_dirs:.icon); - // 判断图标目录是否存在 - if (is_dir(from_admin_dir + 'icon')) { - const addon_icon_dir = this.root_path + 'admin' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR + 'styles' . DIRECTORY_SEPARATOR + 'icon' . DIRECTORY_SEPARATOR + 'addon' . DIRECTORY_SEPARATOR . this.addon; - dir_copy(from_admin_dir + 'icon', addon_icon_dir]; - } - // 编译后台图标库文件 - this.compileAdminIcon(); - } - - /** - * getInstallTask - * 对应 PHP: CoreAddonInstallService_core::getInstallTask() - * 逻辑类型: undefined - undefined - */ - async getInstallTask() { - // 基于PHP真实逻辑: getInstallTask - // PHP原文: return $this->install_task; } /** * 安装迁移复制文件 * @return bool */ public function installDir() { $from_admin_dir ... -return this.install_task; - } - - /** - * 安装迁移复制文件 - * @return bool - */ - async installDir() - { - const from_admin_dir = this.install_addon_path + 'admin' . DIRECTORY_SEPARATOR; - const from_web_dir = this.install_addon_path + 'web' . DIRECTORY_SEPARATOR; - const from_wap_dir = this.install_addon_path + 'uni-app' . DIRECTORY_SEPARATOR; - const from_resource_dir = this.install_addon_path + 'resource' . DIRECTORY_SEPARATOR; - - // 放入的文件 - const to_admin_dir = this.root_path + 'admin' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR + 'addon' . DIRECTORY_SEPARATOR . this.addon . DIRECTORY_SEPARATOR; - const to_web_dir = this.root_path + 'web' . DIRECTORY_SEPARATOR + 'addon' . DIRECTORY_SEPARATOR . this.addon . DIRECTORY_SEPARATOR; - const to_wap_dir = this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR + 'addon' . DIRECTORY_SEPARATOR . this.addon . DIRECTORY_SEPARATOR; - const to_resource_dir = public_path() + 'addon' . DIRECTORY_SEPARATOR . this.addon . DIRECTORY_SEPARATOR; - - // 安装admin管理端 - if (file_exists(from_admin_dir)) { - dir_copy(from_admin_dir, to_admin_dir, this.files.admin, exclude_dirs:.icon); - // 判断图标目录是否存在 - if (is_dir(from_admin_dir + 'icon')) { - const addon_icon_dir = this.root_path + 'admin' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR + 'styles' . DIRECTORY_SEPARATOR + 'icon' . DIRECTORY_SEPARATOR + 'addon' . DIRECTORY_SEPARATOR . this.addon; - dir_copy(from_admin_dir + 'icon', addon_icon_dir]; - } - // 编译后台图标库文件 - this.compileAdminIcon(); - } - - /** - * installDir - * 对应 PHP: CoreAddonInstallService_core::installDir() - * 逻辑类型: undefined - undefined - */ - async installDir() { - // 基于PHP真实逻辑: installDir - // PHP原文: $from_admin_dir = $this->install_addon_path . 'admin' . DIRECTORY_SEPARATOR; $from_web_dir = $this->install_addon_path . 'web' . DIRECTORY_SEP... -const from_admin_dir = this.install_addon_path + 'admin' . DIRECTORY_SEPARATOR; - const from_web_dir = this.install_addon_path + 'web' . DIRECTORY_SEPARATOR; - const from_wap_dir = this.install_addon_path + 'uni-app' . DIRECTORY_SEPARATOR; - const from_resource_dir = this.install_addon_path + 'resource' . DIRECTORY_SEPARATOR; - - // 放入的文件 - const to_admin_dir = this.root_path + 'admin' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR + 'addon' . DIRECTORY_SEPARATOR . this.addon . DIRECTORY_SEPARATOR; - const to_web_dir = this.root_path + 'web' . DIRECTORY_SEPARATOR + 'addon' . DIRECTORY_SEPARATOR . this.addon . DIRECTORY_SEPARATOR; - const to_wap_dir = this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR + 'addon' . DIRECTORY_SEPARATOR . this.addon . DIRECTORY_SEPARATOR; - const to_resource_dir = public_path() + 'addon' . DIRECTORY_SEPARATOR . this.addon . DIRECTORY_SEPARATOR; - - // 安装admin管理端 - if (file_exists(from_admin_dir)) { - dir_copy(from_admin_dir, to_admin_dir, this.files.admin, exclude_dirs:.icon); - // 判断图标目录是否存在 - if (is_dir(from_admin_dir + 'icon')) { - const addon_icon_dir = this.root_path + 'admin' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR + 'styles' . DIRECTORY_SEPARATOR + 'icon' . DIRECTORY_SEPARATOR + 'addon' . DIRECTORY_SEPARATOR . this.addon; - dir_copy(from_admin_dir + 'icon', addon_icon_dir]; - } - // 编译后台图标库文件 - this.compileAdminIcon(); - } - - /** - * compileAdminIcon - * 对应 PHP: CoreAddonInstallService_core::compileAdminIcon() - * 逻辑类型: undefined - undefined - */ - async compileAdminIcon() { - // 基于PHP真实逻辑: compileAdminIcon - // PHP原文: $compile_path = $this->root_path . str_replace('/', DIRECTORY_SEPARATOR, 'admin/src/styles/icon/'); $content = ""; $root_path = $comp... -const compile_path = this.root_path . str_replace('/', DIRECTORY_SEPARATOR, 'admin/src/styles/icon/']; - - const content = ""; - const root_path = compile_path + 'addon'; // 插件图标根目录 - const file_arr = getFileMap(root_path); - if (!!file_arr)) { - foreach (file_arr as ck => cv) { - if (str_contains(cv, '.css')) { - const path = str_replace(root_path + '/', '', ck]; - const path = str_replace('/.css', '', path); - content += "@import \"addon/{path}\";\n"; - } - } - } - - /** - * installSql - * 对应 PHP: CoreAddonInstallService_core::installSql() - * 逻辑类型: undefined - undefined - */ - async installSql() { - // 基于PHP真实逻辑: installSql - // PHP原文: $sql = $this->install_addon_path . 'sql' . DIRECTORY_SEPARATOR . 'install.sql'; $this->executeSql($sql); return true; } /** ... -const sql = this.install_addon_path + 'sql' . DIRECTORY_SEPARATOR + 'install.sql'; - this.executeSql(sql); - return true; - } - - /** - * 执行sql - * @param string sql_file - * @return bool - */ - public static function executeSql(string sql_file): boolean - { - if (is_file(sql_file)) { - const sql = file_get_contents(sql_file]; - // 执行sql - const sql_arr = parse_sql(sql); - if (!!sql_arr)) { - const prefix = config('database.connections.mysql.prefix']; - Db.startTrans(); - try { - foreach (sql_arr as sql_line) { - const sql_line = trim(sql_line); - if (!!sql_line)) { - const sql_line = str_ireplace('{{prefix}}', prefix, sql_line]; - const sql_line = str_ireplace('INSERT INTO ', 'INSERT IGNORE INTO ', sql_line]; - Db.execute(sql_line]; - } - } - Db.commit(); - return true; - } catch ( PDOBusinessException e ) { - Db.rollback(]; - throw new AddonBusinessException(e.getMessage(); - } - } - - /** - * executeSql - * 对应 PHP: CoreAddonInstallService_core::executeSql() - * 逻辑类型: undefined - undefined - */ - async executeSql(sql_file: string) { - // 基于PHP真实逻辑: executeSql - // PHP原文: if (is_file($sql_file)) { $sql = file_get_contents($sql_file); // 执行sql $sql_arr = parse_sql($sql); if... -if (is_file(sql_file)) { - const sql = file_get_contents(sql_file]; - // 执行sql - const sql_arr = parse_sql(sql); - if (!!sql_arr)) { - const prefix = config('database.connections.mysql.prefix']; - Db.startTrans(); - try { - foreach (sql_arr as sql_line) { - const sql_line = trim(sql_line); - if (!!sql_line)) { - const sql_line = str_ireplace('{{prefix}}', prefix, sql_line]; - const sql_line = str_ireplace('INSERT INTO ', 'INSERT IGNORE INTO ', sql_line]; - Db.execute(sql_line]; - } - } - Db.commit(); - return true; - } catch ( PDOBusinessException e ) { - Db.rollback(]; - throw new AddonBusinessException(e.getMessage(); - } - } - - /** - * handleAddonInstall - * 对应 PHP: CoreAddonInstallService_core::handleAddonInstall() - * 逻辑类型: undefined - undefined - */ - async handleAddonInstall() { - // 基于PHP真实逻辑: handleAddonInstall - // PHP原文: // 执行安装sql $this->installSql(); // 安装菜单 $this->installMenu(); // 安装计划任务 $this->installSchedule(); $co... -// 执行安装sql - this.installSql(]; - // 安装菜单 - this.installMenu(]; - // 安装计划任务 - this.installSchedule(]; - - const core_addon_service = this.coreAddonService; - const install_data = this.getAddonConfig(this.addon]; - install_data.icon = 'addon/' . this.addon + '/icon.png'; - core_addon_service.set(install_data); - //清理缓存 - Cache.tag(self.cache_tag_name).clear(]; - //执行命令 - //执行插件安装方法 - const class = "addon\\" . this.addon + '\\" + 'Addon'; - if (class_exists(class)) { - (new class()).install(]; - } - // 清除插件安装中标识 - Cache.delete('install_task']; - Cache.delete(this.cache_key + '_install_check'); - return true; - } - - /** - * 合并依赖 - * @return void - */ - async installDepend() - { - this.coreDependService.installDepend(this.addon); - } - - /** - * 备份前端页面 - * @return void - */ - async backupFrontend() { - const backup_dir = runtime_path() + 'backup' . DIRECTORY_SEPARATOR + 'frontend' . DIRECTORY_SEPARATOR; - if (is_dir(backup_dir)) del_target_dir(backup_dir, true); - - foreach (['admin', 'wap', 'web') as port) { - const to_dir = public_path() . port; - if (is_dir(to_dir)) { - if (is_dir(backup_dir . port)) del_target_dir(backup_dir . port, true]; - // 备份原目录 - dir_copy(to_dir, backup_dir . port); - } - } - } - - /** - * 还原被覆盖前的文件 - * @return void - */ - async revertFrontendBackup() { - const backup_dir = runtime_path() + 'backup' . DIRECTORY_SEPARATOR + 'frontend' . DIRECTORY_SEPARATOR; - const backup_file = []; - - search_dir(backup_dir, backup_file); - - if (!!backup_file)) { - dir_copy(public_path(), backup_dir]; - @del_target_dir(backup_dir, true); - } - } - - /** - * 插件编译文件覆盖 - * @return void - */ - async coverCompile() { - const compile = this.getAddonConfig(this.addon).compile; - foreach (compile as port) { - const to_dir = public_path() . port; - const from_dir = this.addon_path + 'compile' . DIRECTORY_SEPARATOR . port; - - if (is_dir(from_dir) && is_dir(to_dir)) { - // 删除后覆盖目录 - del_target_dir(to_dir, true]; - dir_copy(from_dir, to_dir . port); - } - } - } - - /** - * 云安装 - * @return void - */ - async cloudInstall() { - this.coreAddonCloudService.cloudBuild(this.addon]; - } - - /** - * 插件卸载环境检测 - * @return array|array[) - */ - async uninstallCheck() { - const data = [ - // 目录检测 - dir: [ - // 要求可读权限 - is_readable: [], - // 要求可写权限 - is_write: [] - ] - ]; - - // 将要删除的根目录 - const to_admin_dir = this.root_path + 'admin' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR . this.addon . DIRECTORY_SEPARATOR; - const to_web_dir = this.root_path + 'web' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR . this.addon . DIRECTORY_SEPARATOR; - const to_wap_dir = this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR . this.addon . DIRECTORY_SEPARATOR; - const to_resource_dir = public_path() + 'addon' . DIRECTORY_SEPARATOR . this.addon . DIRECTORY_SEPARATOR; - - if (is_dir(to_admin_dir)) data.dir.is_write[] = [dir: str_replace(project_path(), '', to_admin_dir), status: is_write(to_admin_dir)]; - if (is_dir(to_web_dir)) data.dir.is_write[] = [dir: str_replace(project_path(), '', to_web_dir), status: is_write(to_web_dir)]; - if (is_dir(to_wap_dir)) data.dir.is_write[] = [dir: str_replace(project_path(), '', to_wap_dir), status: is_write(to_wap_dir)]; - if (is_dir(to_resource_dir)) data.dir.is_write[] = [dir: str_replace(project_path(), '', to_resource_dir), status: is_write(to_resource_dir)]; - - const check_res = Object.assign( - array_column(data.dir.is_readable, 'status'), - array_column(data.dir.is_write, 'status') - ]; - - // 是否通过校验 - data.is_pass = !in_[false, check_res]; - return data; - } - - /** - * 卸载插件 - * @return true - */ - async uninstall() - { - const site_groups = this.siteGroupService.where([ ['app|addon', 'like', "%\"this.addon\"%") )).column("group_id"); - if (!!site_groups)) { - const site_num = this.siteService.where([ ['group_id', 'in', site_groups) )).count('site_id'); - if (site_num) throw new BusinessException('APP_NOT_ALLOW_UNINSTALL'); - } - - /** - * installDepend - * 对应 PHP: CoreAddonInstallService_core::installDepend() - * 逻辑类型: undefined - undefined - */ - async installDepend() { - // 基于PHP真实逻辑: installDepend - // PHP原文: (new CoreDependService())->installDepend($this->addon); } /** * 备份前端页面 * @return void */ public function backupFrontend() ... -this.coreDependService.installDepend(this.addon); - } - - /** - * 备份前端页面 - * @return void - */ - async backupFrontend() { - const backup_dir = runtime_path() + 'backup' . DIRECTORY_SEPARATOR + 'frontend' . DIRECTORY_SEPARATOR; - if (is_dir(backup_dir)) del_target_dir(backup_dir, true); - - foreach (['admin', 'wap', 'web') as port) { - const to_dir = public_path() . port; - if (is_dir(to_dir)) { - if (is_dir(backup_dir . port)) del_target_dir(backup_dir . port, true]; - // 备份原目录 - dir_copy(to_dir, backup_dir . port); - } - } - - /** - * backupFrontend - * 对应 PHP: CoreAddonInstallService_core::backupFrontend() - * 逻辑类型: undefined - undefined - */ - async backupFrontend() { - // 基于PHP真实逻辑: backupFrontend - // PHP原文: $backup_dir = runtime_path() . 'backup' . DIRECTORY_SEPARATOR . 'frontend' . DIRECTORY_SEPARATOR; if (is_dir($backup_dir)) del_target_dir($bac... -const backup_dir = runtime_path() + 'backup' . DIRECTORY_SEPARATOR + 'frontend' . DIRECTORY_SEPARATOR; - if (is_dir(backup_dir)) del_target_dir(backup_dir, true); - - foreach (['admin', 'wap', 'web') as port) { - const to_dir = public_path() . port; - if (is_dir(to_dir)) { - if (is_dir(backup_dir . port)) del_target_dir(backup_dir . port, true]; - // 备份原目录 - dir_copy(to_dir, backup_dir . port); - } - } - - /** - * revertFrontendBackup - * 对应 PHP: CoreAddonInstallService_core::revertFrontendBackup() - * 逻辑类型: undefined - undefined - */ - async revertFrontendBackup() { - // 基于PHP真实逻辑: revertFrontendBackup - // PHP原文: $backup_dir = runtime_path() . 'backup' . DIRECTORY_SEPARATOR . 'frontend' . DIRECTORY_SEPARATOR; $backup_file = []; search_dir($back... -const backup_dir = runtime_path() + 'backup' . DIRECTORY_SEPARATOR + 'frontend' . DIRECTORY_SEPARATOR; - const backup_file = []; - - search_dir(backup_dir, backup_file); - - if (!!backup_file)) { - dir_copy(public_path(), backup_dir]; - @del_target_dir(backup_dir, true); - } - - /** - * coverCompile - * 对应 PHP: CoreAddonInstallService_core::coverCompile() - * 逻辑类型: undefined - undefined - */ - async coverCompile() { - // 基于PHP真实逻辑: coverCompile - // PHP原文: $compile = $this->getAddonConfig($this->addon)['compile']; foreach ($compile as $port) { $to_dir = public_path() . $port; ... -const compile = this.getAddonConfig(this.addon).compile; - foreach (compile as port) { - const to_dir = public_path() . port; - const from_dir = this.addon_path + 'compile' . DIRECTORY_SEPARATOR . port; - - if (is_dir(from_dir) && is_dir(to_dir)) { - // 删除后覆盖目录 - del_target_dir(to_dir, true]; - dir_copy(from_dir, to_dir . port); - } - } - - /** - * cloudInstall - * 对应 PHP: CoreAddonInstallService_core::cloudInstall() - * 逻辑类型: undefined - undefined - */ - async cloudInstall() { - // 基于PHP真实逻辑: cloudInstall - // PHP原文: (new CoreAddonCloudService())->cloudBuild($this->addon); } /** * 插件卸载环境检测 * @return array|array[] */ public function unins... -this.coreAddonCloudService.cloudBuild(this.addon]; - } - - /** - * 插件卸载环境检测 - * @return array|array[) - */ - async uninstallCheck() { - const data = [ - // 目录检测 - dir: [ - // 要求可读权限 - is_readable: [], - // 要求可写权限 - is_write: [] - ] - ]; - - // 将要删除的根目录 - const to_admin_dir = this.root_path + 'admin' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR . this.addon . DIRECTORY_SEPARATOR; - const to_web_dir = this.root_path + 'web' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR . this.addon . DIRECTORY_SEPARATOR; - const to_wap_dir = this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR . this.addon . DIRECTORY_SEPARATOR; - const to_resource_dir = public_path() + 'addon' . DIRECTORY_SEPARATOR . this.addon . DIRECTORY_SEPARATOR; - - if (is_dir(to_admin_dir)) data.dir.is_write[] = [dir: str_replace(project_path(), '', to_admin_dir), status: is_write(to_admin_dir)]; - if (is_dir(to_web_dir)) data.dir.is_write[] = [dir: str_replace(project_path(), '', to_web_dir), status: is_write(to_web_dir)]; - if (is_dir(to_wap_dir)) data.dir.is_write[] = [dir: str_replace(project_path(), '', to_wap_dir), status: is_write(to_wap_dir)]; - if (is_dir(to_resource_dir)) data.dir.is_write[] = [dir: str_replace(project_path(), '', to_resource_dir), status: is_write(to_resource_dir)]; - - const check_res = Object.assign( - array_column(data.dir.is_readable, 'status'), - array_column(data.dir.is_write, 'status') - ]; - - // 是否通过校验 - data.is_pass = !in_[false, check_res]; - return data; - } - - /** - * 卸载插件 - * @return true - */ - async uninstall() - { - const site_groups = this.siteGroupService.where([ ['app|addon', 'like', "%\"this.addon\"%") )).column("group_id"); - if (!!site_groups)) { - const site_num = this.siteService.where([ ['group_id', 'in', site_groups) )).count('site_id'); - if (site_num) throw new BusinessException('APP_NOT_ALLOW_UNINSTALL'); - } - - /** - * uninstallCheck - * 对应 PHP: CoreAddonInstallService_core::uninstallCheck() - * 逻辑类型: undefined - undefined - */ - async uninstallCheck() { - // 基于PHP真实逻辑: uninstallCheck - // PHP原文: $data = [ // 目录检测 'dir' => [ // 要求可读权限 'is_readable' => [], // 要求可写权限 ... -const data = [ - // 目录检测 - dir: [ - // 要求可读权限 - is_readable: [], - // 要求可写权限 - is_write: [] - ] - ]; - - // 将要删除的根目录 - const to_admin_dir = this.root_path + 'admin' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR . this.addon . DIRECTORY_SEPARATOR; - const to_web_dir = this.root_path + 'web' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR . this.addon . DIRECTORY_SEPARATOR; - const to_wap_dir = this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR . this.addon . DIRECTORY_SEPARATOR; - const to_resource_dir = public_path() + 'addon' . DIRECTORY_SEPARATOR . this.addon . DIRECTORY_SEPARATOR; - - if (is_dir(to_admin_dir)) data.dir.is_write[] = [dir: str_replace(project_path(), '', to_admin_dir), status: is_write(to_admin_dir)]; - if (is_dir(to_web_dir)) data.dir.is_write[] = [dir: str_replace(project_path(), '', to_web_dir), status: is_write(to_web_dir)]; - if (is_dir(to_wap_dir)) data.dir.is_write[] = [dir: str_replace(project_path(), '', to_wap_dir), status: is_write(to_wap_dir)]; - if (is_dir(to_resource_dir)) data.dir.is_write[] = [dir: str_replace(project_path(), '', to_resource_dir), status: is_write(to_resource_dir)]; - - const check_res = Object.assign( - array_column(data.dir.is_readable, 'status'), - array_column(data.dir.is_write, 'status') - ]; - - // 是否通过校验 - data.is_pass = !in_[false, check_res]; - return data; - } - - /** - * 卸载插件 - * @return true - */ - async uninstall() - { - const site_groups = this.siteGroupService.where([ ['app|addon', 'like', "%\"this.addon\"%") )).column("group_id"); - if (!!site_groups)) { - const site_num = this.siteService.where([ ['group_id', 'in', site_groups) )).count('site_id'); - if (site_num) throw new BusinessException('APP_NOT_ALLOW_UNINSTALL'); - } - - /** - * uninstall - * 对应 PHP: CoreAddonInstallService_core::uninstall() - * 逻辑类型: undefined - undefined - */ - async uninstall() { - // 基于PHP真实逻辑: uninstall - // PHP原文: $site_groups = (new SiteGroup())->where([ ['app|addon', 'like', "%\"$this->addon\"%"] ])->column("group_id"); if (!empty($site_groups)) { ... -const site_groups = this.siteGroupService.where([ ['app|addon', 'like', "%\"this.addon\"%") )).column("group_id"); - if (!!site_groups)) { - const site_num = this.siteService.where([ ['group_id', 'in', site_groups) )).count('site_id'); - if (site_num) throw new BusinessException('APP_NOT_ALLOW_UNINSTALL'); - } - - /** - * uninstallSql - * 对应 PHP: CoreAddonInstallService_core::uninstallSql() - * 逻辑类型: undefined - undefined - */ - async uninstallSql() { - // 基于PHP真实逻辑: uninstallSql - // PHP原文: $sql = $this->install_addon_path . 'sql' . DIRECTORY_SEPARATOR . 'uninstall.sql'; $this->executeSql($sql); return true; } /**... -const sql = this.install_addon_path + 'sql' . DIRECTORY_SEPARATOR + 'uninstall.sql'; - this.executeSql(sql); - return true; - } - - /** - * 卸载插件 - * @return true - */ - async uninstallDir() - { - // 将要删除的根目录 - const to_admin_dir = this.root_path + 'admin' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR + 'addon' . DIRECTORY_SEPARATOR . this.addon . DIRECTORY_SEPARATOR; - const to_web_dir = this.root_path + 'web' . DIRECTORY_SEPARATOR + 'addon' . DIRECTORY_SEPARATOR . this.addon . DIRECTORY_SEPARATOR; - const to_web_layouts = this.root_path + 'web' . DIRECTORY_SEPARATOR + 'layouts' . DIRECTORY_SEPARATOR . this.addon . DIRECTORY_SEPARATOR; - const to_wap_dir = this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR + 'addon' . DIRECTORY_SEPARATOR . this.addon . DIRECTORY_SEPARATOR; - const to_resource_dir = public_path() + 'addon' . DIRECTORY_SEPARATOR . this.addon . DIRECTORY_SEPARATOR; - - // 卸载admin管理端 - if (is_dir(to_admin_dir)) del_target_dir(to_admin_dir, true); - // 移除admin图标 - const addon_icon_dir = this.root_path + 'admin' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR + 'styles' . DIRECTORY_SEPARATOR + 'icon' . DIRECTORY_SEPARATOR + 'addon' . DIRECTORY_SEPARATOR . this.addon; - if (is_dir(addon_icon_dir)) del_target_dir(addon_icon_dir, true]; - - // 编译后台图标库文件 - this.compileAdminIcon(); - - // 卸载pc端 - if (is_dir(to_web_dir)) del_target_dir(to_web_dir, true); - if (is_dir(to_web_layouts)) del_target_dir(to_web_layouts, true); - - // 卸载手机端 - if (is_dir(to_wap_dir)) del_target_dir(to_wap_dir, true); - - //删除资源文件 - if (is_dir(to_resource_dir)) del_target_dir(to_resource_dir, true); - - //todo 卸载插件目录涉及到的空文件 - return true; - } - - /** - * 卸载菜单 - * @return true - * @throws DbBusinessException - */ - async uninstallMenu() - { - const core_menu_service = this.coreMenuService; - core_menu_service.deleteByAddon(this.addon); - Cache.tag(MenuService.cache_tag_name).clear(]; - return true; - } - - /** - * 卸载计划任务 - * @return true - */ - async uninstallSchedule() - { - this.coreScheduleInstallService.uninstallAddonSchedule(this.addon); - return true; - } - - /** - * 卸载手机端 - * @return void - */ - async uninstallWap() - { - // 编译 diy-group 自定义组件代码文件 - this.compileDiyComponentsCode(this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR, this.addon]; - - // 编译 pages.json 页面路由代码文件 - this.uninstallPageCode(this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR]; - - // 编译 加载插件标题语言包 - this.compileLocale(this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR, this.addon); - - } - - /** - * 安装插件菜单 - * @return true - */ - async installMenu() - { - (new CoreMenuService).refreshAddonMenu(this.addon); - Cache.tag(MenuService.cache_tag_name).clear(]; - return true; - } - - /** - * 安装手机端 - * @return void - */ - async installWap() - { - - // 编译 diy-group 自定义组件代码文件 - this.compileDiyComponentsCode(this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR, this.addon]; - - // 编译 pages.json 页面路由代码文件 - this.installPageCode(this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR]; - - // 编译 加载插件标题语言包 - this.compileLocale(this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR, this.addon); - - } - - async download() - { - // 待实现 - } - - async edit() - { - // 待实现 - } - - /** - * 更新composer依赖 - * @return true - */ - async updateComposer() - { - const result = Terminal.execute(root_path(), 'composer update']; - if (result !== true) { - throw new BusinessException(result); - } - - /** - * uninstallDir - * 对应 PHP: CoreAddonInstallService_core::uninstallDir() - * 逻辑类型: undefined - undefined - */ - async uninstallDir() { - // 基于PHP真实逻辑: uninstallDir - // PHP原文: // 将要删除的根目录 $to_admin_dir = $this->root_path . 'admin' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR . 'addon' . DIRECTORY_SEPARATOR . $... -// 将要删除的根目录 - const to_admin_dir = this.root_path + 'admin' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR + 'addon' . DIRECTORY_SEPARATOR . this.addon . DIRECTORY_SEPARATOR; - const to_web_dir = this.root_path + 'web' . DIRECTORY_SEPARATOR + 'addon' . DIRECTORY_SEPARATOR . this.addon . DIRECTORY_SEPARATOR; - const to_web_layouts = this.root_path + 'web' . DIRECTORY_SEPARATOR + 'layouts' . DIRECTORY_SEPARATOR . this.addon . DIRECTORY_SEPARATOR; - const to_wap_dir = this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR + 'addon' . DIRECTORY_SEPARATOR . this.addon . DIRECTORY_SEPARATOR; - const to_resource_dir = public_path() + 'addon' . DIRECTORY_SEPARATOR . this.addon . DIRECTORY_SEPARATOR; - - // 卸载admin管理端 - if (is_dir(to_admin_dir)) del_target_dir(to_admin_dir, true); - // 移除admin图标 - const addon_icon_dir = this.root_path + 'admin' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR + 'styles' . DIRECTORY_SEPARATOR + 'icon' . DIRECTORY_SEPARATOR + 'addon' . DIRECTORY_SEPARATOR . this.addon; - if (is_dir(addon_icon_dir)) del_target_dir(addon_icon_dir, true]; - - // 编译后台图标库文件 - this.compileAdminIcon(); - - // 卸载pc端 - if (is_dir(to_web_dir)) del_target_dir(to_web_dir, true); - if (is_dir(to_web_layouts)) del_target_dir(to_web_layouts, true); - - // 卸载手机端 - if (is_dir(to_wap_dir)) del_target_dir(to_wap_dir, true); - - //删除资源文件 - if (is_dir(to_resource_dir)) del_target_dir(to_resource_dir, true); - - //todo 卸载插件目录涉及到的空文件 - return true; - } - - /** - * 卸载菜单 - * @return true - * @throws DbBusinessException - */ - async uninstallMenu() - { - const core_menu_service = this.coreMenuService; - core_menu_service.deleteByAddon(this.addon); - Cache.tag(MenuService.cache_tag_name).clear(]; - return true; - } - - /** - * 卸载计划任务 - * @return true - */ - async uninstallSchedule() - { - this.coreScheduleInstallService.uninstallAddonSchedule(this.addon); - return true; - } - - /** - * 卸载手机端 - * @return void - */ - async uninstallWap() - { - // 编译 diy-group 自定义组件代码文件 - this.compileDiyComponentsCode(this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR, this.addon]; - - // 编译 pages.json 页面路由代码文件 - this.uninstallPageCode(this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR]; - - // 编译 加载插件标题语言包 - this.compileLocale(this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR, this.addon); - - } - - /** - * 安装插件菜单 - * @return true - */ - async installMenu() - { - (new CoreMenuService).refreshAddonMenu(this.addon); - Cache.tag(MenuService.cache_tag_name).clear(]; - return true; - } - - /** - * 安装手机端 - * @return void - */ - async installWap() - { - - // 编译 diy-group 自定义组件代码文件 - this.compileDiyComponentsCode(this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR, this.addon]; - - // 编译 pages.json 页面路由代码文件 - this.installPageCode(this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR]; - - // 编译 加载插件标题语言包 - this.compileLocale(this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR, this.addon); - - } - - async download() - { - // 待实现 - } - - async edit() - { - // 待实现 - } - - /** - * 更新composer依赖 - * @return true - */ - async updateComposer() - { - const result = Terminal.execute(root_path(), 'composer update']; - if (result !== true) { - throw new BusinessException(result); - } - - /** - * uninstallMenu - * 对应 PHP: CoreAddonInstallService_core::uninstallMenu() - * 逻辑类型: undefined - undefined - */ - async uninstallMenu() { - // 基于PHP真实逻辑: uninstallMenu - // PHP原文: $core_menu_service = new CoreMenuService(); $core_menu_service->deleteByAddon($this->addon); Cache::tag(MenuService::$cache_tag_name)-... -const core_menu_service = this.coreMenuService; - core_menu_service.deleteByAddon(this.addon); - Cache.tag(MenuService.cache_tag_name).clear(]; - return true; - } - - /** - * 卸载计划任务 - * @return true - */ - async uninstallSchedule() - { - this.coreScheduleInstallService.uninstallAddonSchedule(this.addon); - return true; - } - - /** - * 卸载手机端 - * @return void - */ - async uninstallWap() - { - // 编译 diy-group 自定义组件代码文件 - this.compileDiyComponentsCode(this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR, this.addon]; - - // 编译 pages.json 页面路由代码文件 - this.uninstallPageCode(this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR]; - - // 编译 加载插件标题语言包 - this.compileLocale(this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR, this.addon); - - } - - /** - * 安装插件菜单 - * @return true - */ - async installMenu() - { - (new CoreMenuService).refreshAddonMenu(this.addon); - Cache.tag(MenuService.cache_tag_name).clear(]; - return true; - } - - /** - * 安装手机端 - * @return void - */ - async installWap() - { - - // 编译 diy-group 自定义组件代码文件 - this.compileDiyComponentsCode(this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR, this.addon]; - - // 编译 pages.json 页面路由代码文件 - this.installPageCode(this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR]; - - // 编译 加载插件标题语言包 - this.compileLocale(this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR, this.addon); - - } - - async download() - { - // 待实现 - } - - async edit() - { - // 待实现 - } - - /** - * 更新composer依赖 - * @return true - */ - async updateComposer() - { - const result = Terminal.execute(root_path(), 'composer update']; - if (result !== true) { - throw new BusinessException(result); - } - - /** - * uninstallSchedule - * 对应 PHP: CoreAddonInstallService_core::uninstallSchedule() - * 逻辑类型: undefined - undefined - */ - async uninstallSchedule() { - // 基于PHP真实逻辑: uninstallSchedule - // PHP原文: (new CoreScheduleInstallService())->uninstallAddonSchedule($this->addon); return true; } /** * 卸载手机端 * @return void */... -this.coreScheduleInstallService.uninstallAddonSchedule(this.addon); - return true; - } - - /** - * 卸载手机端 - * @return void - */ - async uninstallWap() - { - // 编译 diy-group 自定义组件代码文件 - this.compileDiyComponentsCode(this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR, this.addon]; - - // 编译 pages.json 页面路由代码文件 - this.uninstallPageCode(this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR]; - - // 编译 加载插件标题语言包 - this.compileLocale(this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR, this.addon); - - } - - /** - * 安装插件菜单 - * @return true - */ - async installMenu() - { - (new CoreMenuService).refreshAddonMenu(this.addon); - Cache.tag(MenuService.cache_tag_name).clear(]; - return true; - } - - /** - * 安装手机端 - * @return void - */ - async installWap() - { - - // 编译 diy-group 自定义组件代码文件 - this.compileDiyComponentsCode(this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR, this.addon]; - - // 编译 pages.json 页面路由代码文件 - this.installPageCode(this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR]; - - // 编译 加载插件标题语言包 - this.compileLocale(this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR, this.addon); - - } - - async download() - { - // 待实现 - } - - async edit() - { - // 待实现 - } - - /** - * 更新composer依赖 - * @return true - */ - async updateComposer() - { - const result = Terminal.execute(root_path(), 'composer update']; - if (result !== true) { - throw new BusinessException(result); - } - - /** - * uninstallWap - * 对应 PHP: CoreAddonInstallService_core::uninstallWap() - * 逻辑类型: undefined - undefined - */ - async uninstallWap() { - // 基于PHP真实逻辑: uninstallWap - // PHP原文: // 编译 diy-group 自定义组件代码文件 $this->compileDiyComponentsCode($this->root_path . 'uni-app' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR, $t... -// 编译 diy-group 自定义组件代码文件 - this.compileDiyComponentsCode(this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR, this.addon]; - - // 编译 pages.json 页面路由代码文件 - this.uninstallPageCode(this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR]; - - // 编译 加载插件标题语言包 - this.compileLocale(this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR, this.addon); - - } - - /** - * 安装插件菜单 - * @return true - */ - async installMenu() - { - (new CoreMenuService).refreshAddonMenu(this.addon); - Cache.tag(MenuService.cache_tag_name).clear(]; - return true; - } - - /** - * 安装手机端 - * @return void - */ - async installWap() - { - - // 编译 diy-group 自定义组件代码文件 - this.compileDiyComponentsCode(this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR, this.addon]; - - // 编译 pages.json 页面路由代码文件 - this.installPageCode(this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR]; - - // 编译 加载插件标题语言包 - this.compileLocale(this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR, this.addon); - - } - - async download() - { - // 待实现 - } - - async edit() - { - // 待实现 - } - - /** - * 更新composer依赖 - * @return true - */ - async updateComposer() - { - const result = Terminal.execute(root_path(), 'composer update']; - if (result !== true) { - throw new BusinessException(result); - } - - /** - * installMenu - * 对应 PHP: CoreAddonInstallService_core::installMenu() - * 逻辑类型: undefined - undefined - */ - async installMenu() { - // 基于PHP真实逻辑: installMenu - // PHP原文: (new CoreMenuService)->refreshAddonMenu($this->addon); Cache::tag(MenuService::$cache_tag_name)->clear(); return true; } /** ... -(new CoreMenuService).refreshAddonMenu(this.addon); - Cache.tag(MenuService.cache_tag_name).clear(]; - return true; - } - - /** - * 安装手机端 - * @return void - */ - async installWap() - { - - // 编译 diy-group 自定义组件代码文件 - this.compileDiyComponentsCode(this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR, this.addon]; - - // 编译 pages.json 页面路由代码文件 - this.installPageCode(this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR]; - - // 编译 加载插件标题语言包 - this.compileLocale(this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR, this.addon); - - } - - async download() - { - // 待实现 - } - - async edit() - { - // 待实现 - } - - /** - * 更新composer依赖 - * @return true - */ - async updateComposer() - { - const result = Terminal.execute(root_path(), 'composer update']; - if (result !== true) { - throw new BusinessException(result); - } - - /** - * installWap - * 对应 PHP: CoreAddonInstallService_core::installWap() - * 逻辑类型: undefined - undefined - */ - async installWap() { - // 基于PHP真实逻辑: installWap - // PHP原文: // 编译 diy-group 自定义组件代码文件 $this->compileDiyComponentsCode($this->root_path . 'uni-app' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR, $t... -// 编译 diy-group 自定义组件代码文件 - this.compileDiyComponentsCode(this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR, this.addon]; - - // 编译 pages.json 页面路由代码文件 - this.installPageCode(this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR]; - - // 编译 加载插件标题语言包 - this.compileLocale(this.root_path + 'uni-app' . DIRECTORY_SEPARATOR + 'src' . DIRECTORY_SEPARATOR, this.addon); - - } - - async download() - { - // 待实现 - } - - async edit() - { - // 待实现 - } - - /** - * 更新composer依赖 - * @return true - */ - async updateComposer() - { - const result = Terminal.execute(root_path(), 'composer update']; - if (result !== true) { - throw new BusinessException(result); - } - - /** - * download - * 对应 PHP: CoreAddonInstallService_core::download() - * 逻辑类型: undefined - undefined - */ - async download() { - // 基于PHP真实逻辑: download - // PHP原文: } public function edit() { } /** * 更新composer依赖 * @return true */ public function updateComposer() { ... -} - - async edit() - { - // 待实现 - } - - /** - * 更新composer依赖 - * @return true - */ - async updateComposer() - { - const result = Terminal.execute(root_path(), 'composer update']; - if (result !== true) { - throw new BusinessException(result); - } - - /** - * edit - * 对应 PHP: CoreAddonInstallService_core::edit() - * 逻辑类型: undefined - undefined - */ - async edit() { - // 基于PHP真实逻辑: edit - // PHP原文: } /** * 更新composer依赖 * @return true */ public function updateComposer() { $result = Terminal::execute(root_path(),... -} - - /** - * 更新composer依赖 - * @return true - */ - async updateComposer() - { - const result = Terminal.execute(root_path(), 'composer update']; - if (result !== true) { - throw new BusinessException(result); - } - - /** - * updateComposer - * 对应 PHP: CoreAddonInstallService_core::updateComposer() - * 逻辑类型: undefined - undefined - */ - async updateComposer() { - // 基于PHP真实逻辑: updateComposer - // PHP原文: $result = Terminal::execute(root_path(), 'composer update'); if ($result !== true) { throw new CommonException($result);... -const result = Terminal.execute(root_path(), 'composer update']; - if (result !== true) { - throw new BusinessException(result); - } - - /** - * updateAdminDependencies - * 对应 PHP: CoreAddonInstallService_core::updateAdminDependencies() - * 逻辑类型: undefined - undefined - */ - async updateAdminDependencies() { - // 基于PHP真实逻辑: updateAdminDependencies - // PHP原文: $result = Terminal::execute(root_path() . '../admin/', 'npm install'); if ($result !== true) { throw new CommonException($result);... -const result = Terminal.execute(root_path() + '../admin/', 'npm install']; - if (result !== true) { - throw new BusinessException(result); - } - - /** - * updateWapDependencies - * 对应 PHP: CoreAddonInstallService_core::updateWapDependencies() - * 逻辑类型: undefined - undefined - */ - async updateWapDependencies() { - // 基于PHP真实逻辑: updateWapDependencies - // PHP原文: $result = Terminal::execute(root_path() . '../uni-app/', 'npm install'); if ($result !== true) { throw new CommonException($result... -const result = Terminal.execute(root_path() + '../uni-app/', 'npm install']; - if (result !== true) { - throw new BusinessException(result); - } - - /** - * updateWebDependencies - * 对应 PHP: CoreAddonInstallService_core::updateWebDependencies() - * 逻辑类型: undefined - undefined - */ - async updateWebDependencies() { - // 基于PHP真实逻辑: updateWebDependencies - // PHP原文: $result = Terminal::execute(root_path() . '../web/', 'npm install'); if ($result !== true) { throw new CommonException($result);... -const result = Terminal.execute(root_path() + '../web/', 'npm install']; - if (result !== true) { - throw new BusinessException(result); - } - - /** - * installComplete - * 对应 PHP: CoreAddonInstallService_core::installComplete() - * 逻辑类型: undefined - undefined - */ - async installComplete() { - // 基于PHP真实逻辑: installComplete - // PHP原文: return true; } /** * 安装计划任务 * @return true */ public function installSchedule() { (new CoreScheduleInstallServ... -return true; - } - - /** - * 安装计划任务 - * @return true - */ - async installSchedule() - { - this.coreScheduleInstallService.installAddonSchedule(this.addon); - return true; - } - - /** - * 处理编译之后的文件 - * @return true - */ - async handleBuildFile() { - return true; - } -} - } - - /** - * installSchedule - * 对应 PHP: CoreAddonInstallService_core::installSchedule() - * 逻辑类型: undefined - undefined - */ - async installSchedule() { - // 基于PHP真实逻辑: installSchedule - // PHP原文: (new CoreScheduleInstallService())->installAddonSchedule($this->addon); return true; } /** * 处理编译之后的文件 * @return true ... -this.coreScheduleInstallService.installAddonSchedule(this.addon); - return true; - } - - /** - * 处理编译之后的文件 - * @return true - */ - async handleBuildFile() { - return true; - } -} - } - - /** - * handleBuildFile - * 对应 PHP: CoreAddonInstallService_core::handleBuildFile() - * 逻辑类型: undefined - undefined - */ - async handleBuildFile() { - // 基于PHP真实逻辑: handleBuildFile - // PHP原文: return true; } }... -return true; - } -} - } -} diff --git a/src/core/addon/services/core/core-addon-log.service.ts b/src/core/addon/services/core/core-addon-log.service.ts deleted file mode 100644 index 675b447a..00000000 --- a/src/core/addon/services/core/core-addon-log.service.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { Injectable, Logger } from '@nestjs/common'; -import { InjectRepository } from '@nestjs/typeorm'; -import { Repository } from 'typeorm'; -import { ConfigService } from '@nestjs/config'; -import { BaseService } from '@wwjCommon/base/base.service'; -import { CacheService } from '@wwjCommon/cache/cache.service'; -import { LoggingService } from '@wwjCommon/logging/logging.service'; -import { UploadService } from '@wwjVendor/upload/upload.service'; -import { PayService } from '@wwjVendor/pay/pay.service'; -import { SmsService } from '@wwjVendor/sms/sms.service'; -import { NoticeService } from '@wwjVendor/notice/notice.service'; - -@Injectable() -export class CoreAddonLogService extends BaseService { - private readonly logger = new Logger(CoreAddonLogService.name); - - constructor( - @InjectRepository(Object) - protected readonly repository: Repository, - private readonly cacheService: CacheService, - private readonly configService: ConfigService, - private readonly loggingService: LoggingService, - private readonly uploadService: UploadService, - private readonly payService: PayService, - private readonly smsService: SmsService, - private readonly noticeService: NoticeService, - ) { - super(repository); - } - - /** - * add - * 对应 PHP: CoreAddonLogService_core::add() - * 逻辑类型: undefined - undefined - */ - async add(params: any[]) { - // 基于PHP真实逻辑: add - // PHP原文: $data = array( 'type' => $params['type'], 'key' => $params['key'], 'from_version' => $params['from_version'], ... -const data = [ - type: params.type, - key: params.key, - from_version: params.from_version, - to_version: params.to_version, - ]; - this.model.create(data); - return true; - } - -} - } -} diff --git a/src/core/addon/services/core/core-addon.service.ts b/src/core/addon/services/core/core-addon.service.ts deleted file mode 100644 index d09c7f76..00000000 --- a/src/core/addon/services/core/core-addon.service.ts +++ /dev/null @@ -1,613 +0,0 @@ -import { Injectable, Logger } from '@nestjs/common'; -import { InjectRepository } from '@nestjs/typeorm'; -import { Repository } from 'typeorm'; -import { ConfigService } from '@nestjs/config'; -import { BaseService } from '@wwjCommon/base/base.service'; -import { CacheService } from '@wwjCommon/cache/cache.service'; -import { LoggingService } from '@wwjCommon/logging/logging.service'; -import { UploadService } from '@wwjVendor/upload/upload.service'; -import { PayService } from '@wwjVendor/pay/pay.service'; -import { SmsService } from '@wwjVendor/sms/sms.service'; -import { NoticeService } from '@wwjVendor/notice/notice.service'; - -@Injectable() -export class CoreAddonService extends BaseService { - private readonly logger = new Logger(CoreAddonService.name); - - constructor( - @InjectRepository(Object) - protected readonly repository: Repository, - private readonly cacheService: CacheService, - private readonly configService: ConfigService, - private readonly loggingService: LoggingService, - private readonly uploadService: UploadService, - private readonly payService: PayService, - private readonly smsService: SmsService, - private readonly noticeService: NoticeService, - ) { - super(repository); - } - - /** - * getInitList - * 对应 PHP: CoreAddonService_core::getInitList() - * 逻辑类型: undefined - undefined - */ - async getInitList() { - // 基于PHP真实逻辑: getInitList - // PHP原文: return [ 'type_list' => AddonDict::getType() ]; } /** * 获取已下载的插件 * @return array */ public function ge... -return [ - type_list: AddonDict.getType() - ]; - } - - /** - * 获取已下载的插件 - * @return */ - async getLocalAddonList() - { - const list = []; - const online_app_list = []; - const install_addon_list = this.model.append(.status_name).column('title, icon, key, desc, status, author, version, install_time, update_time, cover', 'key'); - try { - const niucloud_module_list = this.coreModuleService.getModuleList().data || []; - foreach (niucloud_module_list as v) { - const data = [ - title: v.app.app_name, - desc: v.app.app_desc, - key: v.app.app_key || '', - version: v.version || '', - author: v.site_name, - type: v.app.app_type, - support_app: v.app.support_channel || [], - is_download: false, - is_local: false, - icon: v.app.app_logo, - cover: v.app.window_logo[0), - ]; - data.install_info = install_addon_list[v.app.app_key] || []; - list[v.app.app_key] = data; - } - const online_app_list = array_column(list, 'key'); - } - - /** - * getLocalAddonList - * 对应 PHP: CoreAddonService_core::getLocalAddonList() - * 逻辑类型: undefined - undefined - */ - async getLocalAddonList() { - // 基于PHP真实逻辑: getLocalAddonList - // PHP原文: $list = []; $online_app_list = []; $install_addon_list = $this->model->append(['status_name'])->column('title, icon, key, desc, status... -const list = []; - const online_app_list = []; - const install_addon_list = this.model.append(.status_name).column('title, icon, key, desc, status, author, version, install_time, update_time, cover', 'key'); - try { - const niucloud_module_list = this.coreModuleService.getModuleList().data || []; - foreach (niucloud_module_list as v) { - const data = [ - title: v.app.app_name, - desc: v.app.app_desc, - key: v.app.app_key || '', - version: v.version || '', - author: v.site_name, - type: v.app.app_type, - support_app: v.app.support_channel || [], - is_download: false, - is_local: false, - icon: v.app.app_logo, - cover: v.app.window_logo[0), - ]; - data.install_info = install_addon_list[v.app.app_key] || []; - list[v.app.app_key] = data; - } - const online_app_list = array_column(list, 'key'); - } - - /** - * getLocalAddonCount - * 对应 PHP: CoreAddonService_core::getLocalAddonCount() - * 逻辑类型: undefined - undefined - */ - async getLocalAddonCount() { - // 基于PHP真实逻辑: getLocalAddonCount - // PHP原文: $files = get_files_by_dir($this->addon_path); return count($files); } /** * 获取已安装插件数量 * @param array $where * @return ... -const files = get_files_by_dir(this.addon_path]; - return count(files); - } - - /** - * 获取已安装插件数量 - * @param where - * @return int - * @throws DbBusinessException - */ - async getCount(where = [)) - { - - return this.model.where(where).count(]; - } - - /** - * 安装的插件分页 - * @param where - * @return * @throws DbBusinessException - * @throws DbBusinessException - */ - async getPage(where) - { - const field = 'id, title, key, desc, version, status, icon, create_time, install_time'; - const search_model = this.model.withSearch(.title, where).field(field).order('id desc']; - return this.pageQuery(search_model); - } - - /** - * 插件详情 - * @param int id - * @return */ - async getInfo(int id) - { - return this.model.where([['id', '=', id))).findOrEmpty().toArray(]; - } - - /** - * 设置插件(安装或更新) - * @param params - * @return true - */ - async set(params) - { - const title = params.title; - const key = params.key; - const addon = this.model.where([ - ['key', '=', key), - )).findOrEmpty(]; - const version = params.version;//版本号 - const desc = params.desc; - const icon = params.icon; - const data = [ - title: title, - version: version, - status: 1, - desc: desc, - icon: icon, - key: key, - compile: params.compile || [), - type: params.type, - support_app: params.support_app || '' - ]; - if (addon.isEmpty()) { - data.install_time = time(]; - this.model.create(data); - } - - /** - * getCount - * 对应 PHP: CoreAddonService_core::getCount() - * 逻辑类型: undefined - undefined - */ - async getCount(where: any[]) { - // 基于PHP真实逻辑: getCount - // PHP原文: return $this->model->where($where)->count(); } /** * 安装的插件分页 * @param array $where * @return array * @throws DbException ... -return this.model.where(where).count(]; - } - - /** - * 安装的插件分页 - * @param where - * @return * @throws DbBusinessException - * @throws DbBusinessException - */ - async getPage(where) - { - const field = 'id, title, key, desc, version, status, icon, create_time, install_time'; - const search_model = this.model.withSearch(.title, where).field(field).order('id desc']; - return this.pageQuery(search_model); - } - - /** - * 插件详情 - * @param int id - * @return */ - async getInfo(int id) - { - return this.model.where([['id', '=', id))).findOrEmpty().toArray(]; - } - - /** - * 设置插件(安装或更新) - * @param params - * @return true - */ - async set(params) - { - const title = params.title; - const key = params.key; - const addon = this.model.where([ - ['key', '=', key), - )).findOrEmpty(]; - const version = params.version;//版本号 - const desc = params.desc; - const icon = params.icon; - const data = [ - title: title, - version: version, - status: 1, - desc: desc, - icon: icon, - key: key, - compile: params.compile || [), - type: params.type, - support_app: params.support_app || '' - ]; - if (addon.isEmpty()) { - data.install_time = time(]; - this.model.create(data); - } - - /** - * getPage - * 对应 PHP: CoreAddonService_core::getPage() - * 逻辑类型: undefined - undefined - */ - async getPage(where: any[]) { - // 基于PHP真实逻辑: getPage - // PHP原文: $field = 'id, title, key, desc, version, status, icon, create_time, install_time'; $search_model = $this->model->withSearch(['title'], $where)... -const field = 'id, title, key, desc, version, status, icon, create_time, install_time'; - const search_model = this.model.withSearch(.title, where).field(field).order('id desc']; - return this.pageQuery(search_model); - } - - /** - * 插件详情 - * @param int id - * @return */ - async getInfo(int id) - { - return this.model.where([['id', '=', id))).findOrEmpty().toArray(]; - } - - /** - * 设置插件(安装或更新) - * @param params - * @return true - */ - async set(params) - { - const title = params.title; - const key = params.key; - const addon = this.model.where([ - ['key', '=', key), - )).findOrEmpty(]; - const version = params.version;//版本号 - const desc = params.desc; - const icon = params.icon; - const data = [ - title: title, - version: version, - status: 1, - desc: desc, - icon: icon, - key: key, - compile: params.compile || [), - type: params.type, - support_app: params.support_app || '' - ]; - if (addon.isEmpty()) { - data.install_time = time(]; - this.model.create(data); - } - - /** - * getInfo - * 对应 PHP: CoreAddonService_core::getInfo() - * 逻辑类型: undefined - undefined - */ - async getInfo(id: number) { - // 基于PHP真实逻辑: getInfo - // PHP原文: return $this->model->where([['id', '=', $id]])->findOrEmpty()->toArray(); } /** * 设置插件(安装或更新) * @param array $params * @return... -return this.model.where([['id', '=', id))).findOrEmpty().toArray(]; - } - - /** - * 设置插件(安装或更新) - * @param params - * @return true - */ - async set(params) - { - const title = params.title; - const key = params.key; - const addon = this.model.where([ - ['key', '=', key), - )).findOrEmpty(]; - const version = params.version;//版本号 - const desc = params.desc; - const icon = params.icon; - const data = [ - title: title, - version: version, - status: 1, - desc: desc, - icon: icon, - key: key, - compile: params.compile || [), - type: params.type, - support_app: params.support_app || '' - ]; - if (addon.isEmpty()) { - data.install_time = time(]; - this.model.create(data); - } - - /** - * set - * 对应 PHP: CoreAddonService_core::set() - * 逻辑类型: undefined - undefined - */ - async set(params: any[]) { - // 基于PHP真实逻辑: set - // PHP原文: $title = $params['title']; $key = $params['key']; $addon = $this->model->where([ ['key', '=', $key], ])->findOrEmp... -const title = params.title; - const key = params.key; - const addon = this.model.where([ - ['key', '=', key), - )).findOrEmpty(]; - const version = params.version;//版本号 - const desc = params.desc; - const icon = params.icon; - const data = [ - title: title, - version: version, - status: 1, - desc: desc, - icon: icon, - key: key, - compile: params.compile || [), - type: params.type, - support_app: params.support_app || '' - ]; - if (addon.isEmpty()) { - data.install_time = time(]; - this.model.create(data); - } - - /** - * getInfoByKey - * 对应 PHP: CoreAddonService_core::getInfoByKey() - * 逻辑类型: undefined - undefined - */ - async getInfoByKey(key: string) { - // 基于PHP真实逻辑: getInfoByKey - // PHP原文: return $this->model->where([['key', '=', $key]])->findOrEmpty()->toArray(); } /** * 通过插件名删除插件 * @param string $key * @return t... -return this.model.where([['key', '=', key))).findOrEmpty().toArray(]; - } - - /** - * 通过插件名删除插件 - * @param string key - * @return true - */ - async delByKey(string key) - { - this.model.where([['key', '=', key))).delete(]; - return true; - } - - /** - * 修改插件状态 - * @param int id - * @param int status - * @return true - */ - async setStatus(int id, int status) - { - this.model.where([['id', '=', id))).update([status: status)]; - return true; - } - - async getAppList() - { - return event('addon', [)]; - } - - /** - * 查询已安装的有效的应用 - * @return */ - async getInstallAddonList() - { - const addon_list = this.model.where([['status', '=', AddonDict.ON))).append(.status_name).column('title, icon, key, desc, status, type, support_app', 'key'); - if (!!addon_list)) { - foreach (addon_list as &data) { - data.icon = is_file(data.icon) ? image_to_base64(data.icon) : ''; - } - } - - /** - * delByKey - * 对应 PHP: CoreAddonService_core::delByKey() - * 逻辑类型: undefined - undefined - */ - async delByKey(key: string) { - // 基于PHP真实逻辑: delByKey - // PHP原文: $this->model->where([['key', '=', $key]])->delete(); return true; } /** * 修改插件状态 * @param int $id * @param int $status... -this.model.where([['key', '=', key))).delete(]; - return true; - } - - /** - * 修改插件状态 - * @param int id - * @param int status - * @return true - */ - async setStatus(int id, int status) - { - this.model.where([['id', '=', id))).update([status: status)]; - return true; - } - - async getAppList() - { - return event('addon', [)]; - } - - /** - * 查询已安装的有效的应用 - * @return */ - async getInstallAddonList() - { - const addon_list = this.model.where([['status', '=', AddonDict.ON))).append(.status_name).column('title, icon, key, desc, status, type, support_app', 'key'); - if (!!addon_list)) { - foreach (addon_list as &data) { - data.icon = is_file(data.icon) ? image_to_base64(data.icon) : ''; - } - } - - /** - * setStatus - * 对应 PHP: CoreAddonService_core::setStatus() - * 逻辑类型: undefined - undefined - */ - async setStatus(id: number, status: number) { - // 基于PHP真实逻辑: setStatus - // PHP原文: $this->model->where([['id', '=', $id]])->update(['status' => $status]); return true; } public function getAppList() { ret... -this.model.where([['id', '=', id))).update([status: status)]; - return true; - } - - async getAppList() - { - return event('addon', [)]; - } - - /** - * 查询已安装的有效的应用 - * @return */ - async getInstallAddonList() - { - const addon_list = this.model.where([['status', '=', AddonDict.ON))).append(.status_name).column('title, icon, key, desc, status, type, support_app', 'key'); - if (!!addon_list)) { - foreach (addon_list as &data) { - data.icon = is_file(data.icon) ? image_to_base64(data.icon) : ''; - } - } - - /** - * getAppList - * 对应 PHP: CoreAddonService_core::getAppList() - * 逻辑类型: undefined - undefined - */ - async getAppList() { - // 基于PHP真实逻辑: getAppList - // PHP原文: return event('addon', []); } /** * 查询已安装的有效的应用 * @return array */ public function getInstallAddonList() { $add... -return event('addon', [)]; - } - - /** - * 查询已安装的有效的应用 - * @return */ - async getInstallAddonList() - { - const addon_list = this.model.where([['status', '=', AddonDict.ON))).append(.status_name).column('title, icon, key, desc, status, type, support_app', 'key'); - if (!!addon_list)) { - foreach (addon_list as &data) { - data.icon = is_file(data.icon) ? image_to_base64(data.icon) : ''; - } - } - - /** - * getInstallAddonList - * 对应 PHP: CoreAddonService_core::getInstallAddonList() - * 逻辑类型: undefined - undefined - */ - async getInstallAddonList() { - // 基于PHP真实逻辑: getInstallAddonList - // PHP原文: $addon_list = $this->model->where([['status', '=', AddonDict::ON]])->append(['status_name'])->column('title, icon, key, desc, status, type, support_ap... -const addon_list = this.model.where([['status', '=', AddonDict.ON))).append(.status_name).column('title, icon, key, desc, status, type, support_app', 'key'); - if (!!addon_list)) { - foreach (addon_list as &data) { - data.icon = is_file(data.icon) ? image_to_base64(data.icon) : ''; - } - } - - /** - * getAddonDevelopList - * 对应 PHP: CoreAddonService_core::getAddonDevelopList() - * 逻辑类型: undefined - undefined - */ - async getAddonDevelopList(search: string) { - // 基于PHP真实逻辑: getAddonDevelopList - // PHP原文: $list = []; $install_addon_list = (new Addon())->append(['status_name', 'type_name'])->column('title, icon, key, desc, status, author, versio... -const list = []; - - const install_addon_list = this.addonService.append(['status_name', 'type_name')).column('title, icon, key, desc, status, author, version, install_time, update_time, cover, type', 'key']; - const files = get_files_by_dir(this.addon_path); - if (!!files)) { - const core_addon_service = this.coreAddonService; - foreach (files as path) { - const data = core_addon_service.getAddonConfig(path); - if (typeof data.key)) { - const key = data.key; - data.install_info = install_addon_list[key] || []; - data.icon = is_file(data.icon) ? image_to_base64(data.icon) : ''; - data.cover = is_file(data.cover) ? image_to_base64(data.cover) : ''; - data.is_download = true; - data.type_name = !data.type) ? '' : AddonDict.getType()[data.type] || ''; - list[key] = data; - } - } - } - - /** - * getAddonDevelopInfo - * 对应 PHP: CoreAddonService_core::getAddonDevelopInfo() - * 逻辑类型: undefined - undefined - */ - async getAddonDevelopInfo(key: string) { - // 基于PHP真实逻辑: getAddonDevelopInfo - // PHP原文: $dir = $this->addon_path . $key . DIRECTORY_SEPARATOR; if (!is_dir($dir)) return []; $core_addon_service = new CoreAddonService(); ... -const dir = this.addon_path . key . DIRECTORY_SEPARATOR; - if (!is_dir(dir)) return []; - const core_addon_service = this.coreAddonService; - - const data = core_addon_service.getAddonConfig(key); - if (typeof data.key)) { - data.icon = is_file(data.icon) ? image_to_base64(data.icon) : ''; - data.cover = is_file(data.cover) ? image_to_base64(data.cover) : ''; - data.type_name = !data.type) ? '' : AddonDict.getType()[data.type] || ''; - } - - /** - * getIndexAddonLabelList - * 对应 PHP: CoreAddonService_core::getIndexAddonLabelList() - * 逻辑类型: undefined - undefined - */ - async getIndexAddonLabelList() { - // 基于PHP真实逻辑: getIndexAddonLabelList - // PHP原文: return (new CoreModuleService())->getIndexModuleLabelList()['data'] ?? []; } /** * 获取首页应用 * @param int $label_id * @return arr... -return this.coreModuleService.getIndexModuleLabelList().data || []; - } - - /** - * 获取首页应用 - * @param int label_id - * @return */ - async getIndexAddonList(label_id) - { - return this.coreModuleService.getIndexModuleList(label_id).data || []; - } - } - - /** - * getIndexAddonList - * 对应 PHP: CoreAddonService_core::getIndexAddonList() - * 逻辑类型: undefined - undefined - */ - async getIndexAddonList(label_id: any) { - // 基于PHP真实逻辑: getIndexAddonList - // PHP原文: return (new CoreModuleService())->getIndexModuleList($label_id)['data'] ?? []; } }... -return this.coreModuleService.getIndexModuleList(label_id).data || []; - } - } -} diff --git a/src/core/addon/services/core/core-depend.service.ts b/src/core/addon/services/core/core-depend.service.ts deleted file mode 100644 index 9c721766..00000000 --- a/src/core/addon/services/core/core-depend.service.ts +++ /dev/null @@ -1,176 +0,0 @@ -import { Injectable, Logger } from '@nestjs/common'; -import { InjectRepository } from '@nestjs/typeorm'; -import { Repository } from 'typeorm'; -import { ConfigService } from '@nestjs/config'; -import { BaseService } from '@wwjCommon/base/base.service'; -import { CacheService } from '@wwjCommon/cache/cache.service'; -import { LoggingService } from '@wwjCommon/logging/logging.service'; -import { UploadService } from '@wwjVendor/upload/upload.service'; -import { PayService } from '@wwjVendor/pay/pay.service'; -import { SmsService } from '@wwjVendor/sms/sms.service'; -import { NoticeService } from '@wwjVendor/notice/notice.service'; - -@Injectable() -export class CoreDependService extends BaseService { - private readonly logger = new Logger(CoreDependService.name); - - constructor( - @InjectRepository(Object) - protected readonly repository: Repository, - private readonly cacheService: CacheService, - private readonly configService: ConfigService, - private readonly loggingService: LoggingService, - private readonly uploadService: UploadService, - private readonly payService: PayService, - private readonly smsService: SmsService, - private readonly noticeService: NoticeService, - ) { - super(repository); - } - - /** - * installDepend - * 对应 PHP: CoreDependService_core::installDepend() - * 逻辑类型: undefined - undefined - */ - async installDepend(addon: any) { - // 基于PHP真实逻辑: installDepend - // PHP原文: //composer文件扩展 $composer_content = $this->getComposerContent(); $addon_composer_content = $this->getAddonComposerContent($addon); ... -//composer文件扩展 - const composer_content = this.getComposerContent(]; - const addon_composer_content = this.getAddonComposerContent(addon); - if (typeof addon_composer_content.require)) { - composer_content.require = Object.assign(composer_content.require, addon_composer_content.require); - } - - /** - * getComposerContent - * 对应 PHP: CoreDependService_core::getComposerContent() - * 逻辑类型: undefined - undefined - */ - async getComposerContent() { - // 基于PHP真实逻辑: getComposerContent - // PHP原文: return $this->jsonFileToArray($this->server_composer_file); } /** * 获取插件的composer内容 * @param string $addon * @return array|mix... -return this.jsonFileToArray(this.server_composer_file); - } - - /** - * 获取插件的composer内容 - * @param string addon - * @return array|mixed - */ - async getAddonComposerContent(string addon) - { - const composer_path = this.geAddonPackagePath(addon) + 'composer.json'; - return this.jsonFileToArray(composer_path); - } - - /** - * 更新composer内容 - * @param content - * @return bool - */ - async setComposerContent(content) - { - return this.writeArrayToJsonFile(content, this.server_composer_file); - } - - /** - * 获取npm文件内容 - * @param type //端口类型:admin wap web - */ - async getNpmContent(string type) - { - if (type == 'admin') { - const file_path = this.admin_npm_file; - } - - /** - * getAddonComposerContent - * 对应 PHP: CoreDependService_core::getAddonComposerContent() - * 逻辑类型: undefined - undefined - */ - async getAddonComposerContent(addon: string) { - // 基于PHP真实逻辑: getAddonComposerContent - // PHP原文: $composer_path = $this->geAddonPackagePath($addon) . 'composer.json'; return $this->jsonFileToArray($composer_path); } /** * 更新c... -const composer_path = this.geAddonPackagePath(addon) + 'composer.json'; - return this.jsonFileToArray(composer_path); - } - - /** - * 更新composer内容 - * @param content - * @return bool - */ - async setComposerContent(content) - { - return this.writeArrayToJsonFile(content, this.server_composer_file); - } - - /** - * 获取npm文件内容 - * @param type //端口类型:admin wap web - */ - async getNpmContent(string type) - { - if (type == 'admin') { - const file_path = this.admin_npm_file; - } - - /** - * setComposerContent - * 对应 PHP: CoreDependService_core::setComposerContent() - * 逻辑类型: undefined - undefined - */ - async setComposerContent(content: any[]) { - // 基于PHP真实逻辑: setComposerContent - // PHP原文: return $this->writeArrayToJsonFile($content, $this->server_composer_file); } /** * 获取npm文件内容 * @param $type //端口类型:admin wap web ... -return this.writeArrayToJsonFile(content, this.server_composer_file); - } - - /** - * 获取npm文件内容 - * @param type //端口类型:admin wap web - */ - async getNpmContent(string type) - { - if (type == 'admin') { - const file_path = this.admin_npm_file; - } - - /** - * getNpmContent - * 对应 PHP: CoreDependService_core::getNpmContent() - * 逻辑类型: undefined - undefined - */ - async getNpmContent(type: string) { - // 基于PHP真实逻辑: getNpmContent - // PHP原文: if ($type == 'admin') { $file_path = $this->admin_npm_file;... -if (type == 'admin') { - const file_path = this.admin_npm_file; - } - - /** - * getAddonNpmContent - * 对应 PHP: CoreDependService_core::getAddonNpmContent() - * 逻辑类型: undefined - undefined - */ - async getAddonNpmContent(addon: string, type: string) { - // 基于PHP真实逻辑: getAddonNpmContent - // PHP原文: if ($type == 'admin') { $file_path = $this->geAddonPackagePath($addon) . 'admin-package.json';... -if (type == 'admin') { - const file_path = this.geAddonPackagePath(addon) + 'admin-package.json'; - } - - /** - * setNpmContent - * 对应 PHP: CoreDependService_core::setNpmContent() - * 逻辑类型: undefined - undefined - */ - async setNpmContent(content: any[], type: any[]) { - // 基于PHP真实逻辑: setNpmContent - // PHP原文: if ($type == 'admin') { $file_path = $this->admin_npm_file;... -if (type == 'admin') { - const file_path = this.admin_npm_file; - } -} diff --git a/src/core/addon/services/core/wap-trait.service.ts b/src/core/addon/services/core/wap-trait.service.ts deleted file mode 100644 index 3d7cc457..00000000 --- a/src/core/addon/services/core/wap-trait.service.ts +++ /dev/null @@ -1,185 +0,0 @@ -import { Injectable, Logger } from '@nestjs/common'; -import { InjectRepository } from '@nestjs/typeorm'; -import { Repository } from 'typeorm'; -import { ConfigService } from '@nestjs/config'; -import { BaseService } from '@wwjCommon/base/base.service'; -import { CacheService } from '@wwjCommon/cache/cache.service'; -import { LoggingService } from '@wwjCommon/logging/logging.service'; -import { UploadService } from '@wwjVendor/upload/upload.service'; -import { PayService } from '@wwjVendor/pay/pay.service'; -import { SmsService } from '@wwjVendor/sms/sms.service'; -import { NoticeService } from '@wwjVendor/notice/notice.service'; - -@Injectable() -export class CoreWapTraitService extends BaseService { - private readonly logger = new Logger(CoreWapTraitService.name); - - constructor( - @InjectRepository(Object) - protected readonly repository: Repository, - private readonly cacheService: CacheService, - private readonly configService: ConfigService, - private readonly loggingService: LoggingService, - private readonly uploadService: UploadService, - private readonly payService: PayService, - private readonly smsService: SmsService, - private readonly noticeService: NoticeService, - ) { - super(repository); - } - - /** - * compileDiyComponentsCode - * 对应 PHP: WapTrait_core::compileDiyComponentsCode() - * 逻辑类型: undefined - undefined - */ - async compileDiyComponentsCode(compile_path: any, addon: any) { - // 基于PHP真实逻辑: compileDiyComponentsCode - // PHP原文: $content = "