├── data └── .gitkeep ├── backend ├── ai │ ├── __init__.py │ ├── migrations │ │ └── __init__.py │ ├── llm │ │ └── adapter │ │ │ └── __init__.py │ ├── tests.py │ ├── admin.py │ ├── views.py │ ├── apps.py │ └── utils.py ├── system │ ├── __init__.py │ ├── migrations │ │ └── __init__.py │ ├── admin.py │ ├── tests.py │ ├── apps.py │ └── management │ │ └── commands │ │ └── tpl │ │ └── frontend_model.ts.tpl ├── data │ └── 省市区.xlsx ├── backend │ ├── __init__.py │ ├── asgi.py │ └── wsgi.py └── utils │ ├── string_utils.py │ └── authentication.py ├── web ├── .node-version ├── docs │ ├── src │ │ ├── guide │ │ │ ├── in-depth │ │ │ │ └── layout.md │ │ │ ├── introduction │ │ │ │ ├── roadmap.md │ │ │ │ └── changelog.md │ │ │ ├── project │ │ │ │ └── changeset.md │ │ │ └── other │ │ │ │ └── remove-code.md │ │ ├── en │ │ │ └── guide │ │ │ │ ├── in-depth │ │ │ │ └── layout.md │ │ │ │ └── introduction │ │ │ │ ├── changelog.md │ │ │ │ └── roadmap.md │ │ ├── public │ │ │ ├── favicon.ico │ │ │ ├── guide │ │ │ │ ├── qq.png │ │ │ │ ├── locale.png │ │ │ │ ├── login.png │ │ │ │ ├── report.png │ │ │ │ ├── test.png │ │ │ │ ├── devtools.png │ │ │ │ ├── loading.png │ │ │ │ ├── preferences.png │ │ │ │ ├── qq_channel.png │ │ │ │ ├── login-expired.png │ │ │ │ └── update-notice.png │ │ │ └── logos │ │ │ │ └── shadcn-ui.svg │ │ ├── _env │ │ │ └── node │ │ │ │ └── adapter │ │ │ │ ├── vxe-table.ts │ │ │ │ └── form.ts │ │ ├── demos │ │ │ ├── vben-count-to-animator │ │ │ │ ├── basic │ │ │ │ │ └── index.vue │ │ │ │ └── custom │ │ │ │ │ └── index.vue │ │ │ ├── vben-modal │ │ │ │ ├── extra │ │ │ │ │ ├── modal.vue │ │ │ │ │ └── index.vue │ │ │ │ ├── draggable │ │ │ │ │ ├── modal.vue │ │ │ │ │ └── index.vue │ │ │ │ ├── basic │ │ │ │ │ └── index.vue │ │ │ │ └── auto-height │ │ │ │ │ └── index.vue │ │ │ ├── vben-drawer │ │ │ │ ├── extra │ │ │ │ │ ├── drawer.vue │ │ │ │ │ └── index.vue │ │ │ │ ├── basic │ │ │ │ │ └── index.vue │ │ │ │ └── auto-height │ │ │ │ │ └── index.vue │ │ │ └── vben-ellipsis-text │ │ │ │ ├── tooltip │ │ │ │ └── index.vue │ │ │ │ └── auto-display │ │ │ │ └── index.vue │ │ ├── commercial │ │ │ ├── technical-support.md │ │ │ └── customized.md │ │ ├── sponsor │ │ │ └── personal.md │ │ └── components │ │ │ └── introduction.md │ ├── .vitepress │ │ ├── components │ │ │ └── index.ts │ │ └── theme │ │ │ └── styles │ │ │ ├── index.ts │ │ │ └── base.css │ ├── tailwind.config.mjs │ └── tsconfig.json ├── packages │ ├── @core │ │ ├── ui-kit │ │ │ ├── menu-ui │ │ │ │ ├── README.md │ │ │ │ ├── tailwind.config.mjs │ │ │ │ ├── postcss.config.mjs │ │ │ │ ├── src │ │ │ │ │ ├── hooks │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── components │ │ │ │ │ │ ├── normal-menu │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── index.ts │ │ │ │ └── tsconfig.json │ │ │ ├── README.md │ │ │ ├── form-ui │ │ │ │ ├── tailwind.config.mjs │ │ │ │ ├── postcss.config.mjs │ │ │ │ ├── src │ │ │ │ │ ├── form-render │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── tsconfig.json │ │ │ │ └── build.config.ts │ │ │ ├── layout-ui │ │ │ │ ├── tailwind.config.mjs │ │ │ │ ├── postcss.config.mjs │ │ │ │ ├── src │ │ │ │ │ ├── index.ts │ │ │ │ │ └── components │ │ │ │ │ │ ├── widgets │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ └── index.ts │ │ │ │ ├── tsconfig.json │ │ │ │ └── build.config.ts │ │ │ ├── popup-ui │ │ │ │ ├── tailwind.config.mjs │ │ │ │ ├── postcss.config.mjs │ │ │ │ ├── src │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── modal │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── drawer │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── alert │ │ │ │ │ │ └── index.ts │ │ │ │ ├── tsconfig.json │ │ │ │ └── build.config.ts │ │ │ ├── shadcn-ui │ │ │ │ ├── tailwind.config.mjs │ │ │ │ ├── src │ │ │ │ │ ├── ui │ │ │ │ │ │ ├── input │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── label │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── switch │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── checkbox │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── textarea │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── separator │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── badge │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── Badge.vue │ │ │ │ │ │ ├── toggle │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── tree │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── button │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── types.ts │ │ │ │ │ │ ├── scroll-area │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── radio-group │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── toggle-group │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── form │ │ │ │ │ │ │ ├── injectionKeys.ts │ │ │ │ │ │ │ ├── FormMessage.vue │ │ │ │ │ │ │ └── FormDescription.vue │ │ │ │ │ │ ├── hover-card │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── HoverCardTrigger.vue │ │ │ │ │ │ ├── avatar │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── AvatarImage.vue │ │ │ │ │ │ │ └── AvatarFallback.vue │ │ │ │ │ │ ├── resizable │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── alert-dialog │ │ │ │ │ │ │ ├── AlertDialogOverlay.vue │ │ │ │ │ │ │ ├── AlertDialogAction.vue │ │ │ │ │ │ │ ├── AlertDialogCancel.vue │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── popover │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── PopoverTrigger.vue │ │ │ │ │ │ ├── tooltip │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── TooltipTrigger.vue │ │ │ │ │ │ │ └── TooltipProvider.vue │ │ │ │ │ │ ├── breadcrumb │ │ │ │ │ │ │ ├── Breadcrumb.vue │ │ │ │ │ │ │ ├── BreadcrumbItem.vue │ │ │ │ │ │ │ ├── BreadcrumbPage.vue │ │ │ │ │ │ │ └── BreadcrumbList.vue │ │ │ │ │ │ ├── pin-input │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── accordion │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── tabs │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── Tabs.vue │ │ │ │ │ │ ├── card │ │ │ │ │ │ │ ├── CardContent.vue │ │ │ │ │ │ │ ├── CardFooter.vue │ │ │ │ │ │ │ ├── CardDescription.vue │ │ │ │ │ │ │ ├── CardHeader.vue │ │ │ │ │ │ │ ├── CardTitle.vue │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── Card.vue │ │ │ │ │ │ ├── sheet │ │ │ │ │ │ │ ├── SheetHeader.vue │ │ │ │ │ │ │ ├── SheetClose.vue │ │ │ │ │ │ │ ├── SheetOverlay.vue │ │ │ │ │ │ │ ├── SheetTrigger.vue │ │ │ │ │ │ │ └── SheetFooter.vue │ │ │ │ │ │ ├── dialog │ │ │ │ │ │ │ ├── DialogClose.vue │ │ │ │ │ │ │ ├── DialogOverlay.vue │ │ │ │ │ │ │ ├── DialogTrigger.vue │ │ │ │ │ │ │ ├── DialogHeader.vue │ │ │ │ │ │ │ └── DialogFooter.vue │ │ │ │ │ │ ├── select │ │ │ │ │ │ │ ├── SelectValue.vue │ │ │ │ │ │ │ ├── SelectItemText.vue │ │ │ │ │ │ │ └── SelectLabel.vue │ │ │ │ │ │ ├── dropdown-menu │ │ │ │ │ │ │ ├── DropdownMenuShortcut.vue │ │ │ │ │ │ │ └── DropdownMenuGroup.vue │ │ │ │ │ │ ├── context-menu │ │ │ │ │ │ │ ├── ContextMenuGroup.vue │ │ │ │ │ │ │ ├── ContextMenuPortal.vue │ │ │ │ │ │ │ ├── ContextMenuShortcut.vue │ │ │ │ │ │ │ └── ContextMenuTrigger.vue │ │ │ │ │ │ └── number-field │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── components │ │ │ │ │ │ ├── icon │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── logo │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── avatar │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── popover │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── select │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── back-top │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── checkbox │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── scrollbar │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── full-screen │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── spine-text │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── input-password │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── render-content │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── expandable-arrow │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── count-to-animator │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── pin-input │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── segmented │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── types.ts │ │ │ │ │ │ ├── breadcrumb │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── types.ts │ │ │ │ │ │ ├── context-menu │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── spinner │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── hover-card │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── tooltip │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── dropdown-menu │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ └── button │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── postcss.config.mjs │ │ │ │ ├── tsconfig.json │ │ │ │ └── components.json │ │ │ └── tabs-ui │ │ │ │ ├── tailwind.config.mjs │ │ │ │ ├── postcss.config.mjs │ │ │ │ ├── src │ │ │ │ ├── components │ │ │ │ │ ├── index.ts │ │ │ │ │ └── widgets │ │ │ │ │ │ └── index.ts │ │ │ │ └── index.ts │ │ │ │ ├── tsconfig.json │ │ │ │ └── build.config.ts │ │ ├── base │ │ │ ├── README.md │ │ │ ├── shared │ │ │ │ ├── src │ │ │ │ │ ├── cache │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── store.ts │ │ │ │ │ ├── constants │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── color │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── color.ts │ │ │ │ │ └── utils │ │ │ │ │ │ ├── cn.ts │ │ │ │ │ │ ├── merge.ts │ │ │ │ │ │ └── unique.ts │ │ │ │ ├── tsconfig.json │ │ │ │ └── build.config.ts │ │ │ ├── design │ │ │ │ ├── src │ │ │ │ │ ├── design-tokens │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── scss-bem │ │ │ │ │ │ └── constants.scss │ │ │ │ ├── tsconfig.json │ │ │ │ └── vite.config.mts │ │ │ ├── icons │ │ │ │ ├── tsconfig.json │ │ │ │ ├── build.config.ts │ │ │ │ └── src │ │ │ │ │ ├── index.ts │ │ │ │ │ └── create-icon.ts │ │ │ └── typings │ │ │ │ ├── build.config.ts │ │ │ │ ├── tsconfig.json │ │ │ │ ├── src │ │ │ │ ├── tabs.ts │ │ │ │ └── index.ts │ │ │ │ └── vue-router.d.ts │ │ ├── README.md │ │ ├── composables │ │ │ ├── src │ │ │ │ ├── use-simple-locale │ │ │ │ │ └── README.md │ │ │ │ ├── use-is-mobile.ts │ │ │ │ └── index.ts │ │ │ ├── build.config.ts │ │ │ └── tsconfig.json │ │ └── preferences │ │ │ ├── build.config.ts │ │ │ ├── tsconfig.json │ │ │ └── __tests__ │ │ │ └── config.test.ts │ ├── styles │ │ ├── src │ │ │ ├── index.ts │ │ │ └── global │ │ │ │ └── index.scss │ │ ├── tsconfig.json │ │ └── README.md │ ├── effects │ │ ├── common-ui │ │ │ ├── src │ │ │ │ ├── index.ts │ │ │ │ ├── ui │ │ │ │ │ ├── about │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── about.ts │ │ │ │ │ ├── fallback │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── dashboard │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── analysis │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ └── workbench │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── authentication │ │ │ │ │ │ └── auth-title.vue │ │ │ │ └── components │ │ │ │ │ ├── resize │ │ │ │ │ └── index.ts │ │ │ │ │ ├── icon-picker │ │ │ │ │ └── index.ts │ │ │ │ │ ├── api-component │ │ │ │ │ └── index.ts │ │ │ │ │ ├── ellipsis-text │ │ │ │ │ └── index.ts │ │ │ │ │ ├── page │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ │ ├── col-page │ │ │ │ │ └── index.ts │ │ │ │ │ ├── count-to │ │ │ │ │ └── index.ts │ │ │ │ │ ├── json-viewer │ │ │ │ │ └── index.ts │ │ │ │ │ ├── loading │ │ │ │ │ └── index.ts │ │ │ │ │ └── captcha │ │ │ │ │ ├── index.ts │ │ │ │ │ └── hooks │ │ │ │ │ └── useCaptchaPoints.ts │ │ │ └── tsconfig.json │ │ ├── layouts │ │ │ ├── src │ │ │ │ ├── basic │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── copyright │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── footer │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── footer.vue │ │ │ │ │ ├── header │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── tabbar │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── content │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── content-spinner.vue │ │ │ │ │ ├── menu │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── README.md │ │ │ │ ├── iframe │ │ │ │ │ ├── iframe-view.vue │ │ │ │ │ └── index.ts │ │ │ │ ├── widgets │ │ │ │ │ ├── theme-toggle │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── check-updates │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── global-search │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── user-dropdown │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── notification │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── lock-screen │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── preferences │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── use-open-preferences.ts │ │ │ │ │ │ └── blocks │ │ │ │ │ │ └── block.vue │ │ │ │ ├── authentication │ │ │ │ │ ├── types.ts │ │ │ │ │ └── index.ts │ │ │ │ └── index.ts │ │ │ └── tsconfig.json │ │ ├── request │ │ │ ├── src │ │ │ │ ├── index.ts │ │ │ │ └── request-client │ │ │ │ │ └── index.ts │ │ │ └── tsconfig.json │ │ ├── plugins │ │ │ ├── src │ │ │ │ ├── echarts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── echarts-ui.vue │ │ │ │ ├── motion │ │ │ │ │ └── index.ts │ │ │ │ └── vxe-table │ │ │ │ │ └── index.ts │ │ │ └── tsconfig.json │ │ ├── access │ │ │ ├── src │ │ │ │ └── index.ts │ │ │ └── tsconfig.json │ │ ├── hooks │ │ │ ├── tsconfig.json │ │ │ ├── README.md │ │ │ └── src │ │ │ │ ├── index.ts │ │ │ │ └── use-refresh.ts │ │ └── README.md │ ├── constants │ │ ├── src │ │ │ ├── index.ts │ │ │ └── core.ts │ │ ├── tsconfig.json │ │ └── README.md │ ├── types │ │ ├── src │ │ │ ├── index.ts │ │ │ └── user.ts │ │ ├── tsconfig.json │ │ └── README.md │ ├── stores │ │ ├── src │ │ │ ├── modules │ │ │ │ └── index.ts │ │ │ └── index.ts │ │ ├── tsconfig.json │ │ └── shim-pinia.d.ts │ ├── icons │ │ ├── src │ │ │ ├── index.ts │ │ │ └── iconify │ │ │ │ └── index.ts │ │ ├── tsconfig.json │ │ └── README.md │ ├── utils │ │ ├── src │ │ │ ├── index.ts │ │ │ └── helpers │ │ │ │ ├── index.ts │ │ │ │ └── get-popup-container.ts │ │ ├── tsconfig.json │ │ └── README.md │ ├── locales │ │ └── tsconfig.json │ └── preferences │ │ ├── tsconfig.json │ │ └── src │ │ └── index.ts ├── apps │ ├── web-antd │ │ ├── src │ │ │ ├── api │ │ │ │ ├── index.ts │ │ │ │ ├── core │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── user.ts │ │ │ │ │ └── menu.ts │ │ │ │ └── system │ │ │ │ │ └── index.ts │ │ │ ├── models │ │ │ │ ├── index.ts │ │ │ │ └── ai │ │ │ │ │ └── drawing.ts │ │ │ ├── store │ │ │ │ └── index.ts │ │ │ ├── views │ │ │ │ └── _core │ │ │ │ │ ├── README.md │ │ │ │ │ ├── fallback │ │ │ │ │ ├── coming-soon.vue │ │ │ │ │ ├── forbidden.vue │ │ │ │ │ ├── not-found.vue │ │ │ │ │ ├── internal-error.vue │ │ │ │ │ └── offline.vue │ │ │ │ │ ├── about │ │ │ │ │ └── index.vue │ │ │ │ │ └── authentication │ │ │ │ │ └── qrcode-login.vue │ │ │ ├── locales │ │ │ │ ├── README.md │ │ │ │ └── langs │ │ │ │ │ ├── zh-CN │ │ │ │ │ ├── demos.json │ │ │ │ │ └── page.json │ │ │ │ │ └── en-US │ │ │ │ │ ├── demos.json │ │ │ │ │ └── page.json │ │ │ ├── utils │ │ │ │ ├── auth.ts │ │ │ │ ├── dict.ts │ │ │ │ └── date.ts │ │ │ ├── components │ │ │ │ └── table-action │ │ │ │ │ ├── index.ts │ │ │ │ │ └── icons.ts │ │ │ ├── layouts │ │ │ │ └── index.ts │ │ │ └── preferences.ts │ │ ├── tailwind.config.mjs │ │ ├── postcss.config.mjs │ │ ├── public │ │ │ └── favicon.ico │ │ ├── .env.analyze │ │ ├── .env │ │ ├── tsconfig.node.json │ │ ├── .env.development │ │ └── tsconfig.json │ ├── web-ele │ │ ├── src │ │ │ ├── api │ │ │ │ ├── index.ts │ │ │ │ ├── core │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── user.ts │ │ │ │ │ └── menu.ts │ │ │ │ └── system │ │ │ │ │ └── index.ts │ │ │ ├── store │ │ │ │ └── index.ts │ │ │ ├── models │ │ │ │ └── index.ts │ │ │ ├── views │ │ │ │ └── _core │ │ │ │ │ ├── README.md │ │ │ │ │ ├── fallback │ │ │ │ │ ├── coming-soon.vue │ │ │ │ │ ├── forbidden.vue │ │ │ │ │ ├── not-found.vue │ │ │ │ │ ├── internal-error.vue │ │ │ │ │ └── offline.vue │ │ │ │ │ ├── about │ │ │ │ │ └── index.vue │ │ │ │ │ └── authentication │ │ │ │ │ └── qrcode-login.vue │ │ │ ├── locales │ │ │ │ ├── README.md │ │ │ │ └── langs │ │ │ │ │ ├── zh-CN │ │ │ │ │ ├── page.json │ │ │ │ │ └── demos.json │ │ │ │ │ └── en-US │ │ │ │ │ ├── demos.json │ │ │ │ │ └── page.json │ │ │ ├── utils │ │ │ │ ├── dict.ts │ │ │ │ └── date.ts │ │ │ ├── layouts │ │ │ │ └── index.ts │ │ │ ├── preferences.ts │ │ │ └── app.vue │ │ ├── tailwind.config.mjs │ │ ├── postcss.config.mjs │ │ ├── public │ │ │ └── favicon.ico │ │ ├── .env.analyze │ │ ├── tsconfig.node.json │ │ ├── .env.development │ │ ├── .env.production │ │ └── tsconfig.json │ ├── web-naive │ │ ├── src │ │ │ ├── api │ │ │ │ ├── index.ts │ │ │ │ └── core │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── user.ts │ │ │ │ │ └── menu.ts │ │ │ ├── store │ │ │ │ └── index.ts │ │ │ ├── views │ │ │ │ └── _core │ │ │ │ │ ├── README.md │ │ │ │ │ ├── fallback │ │ │ │ │ ├── coming-soon.vue │ │ │ │ │ ├── forbidden.vue │ │ │ │ │ ├── not-found.vue │ │ │ │ │ ├── internal-error.vue │ │ │ │ │ └── offline.vue │ │ │ │ │ ├── about │ │ │ │ │ └── index.vue │ │ │ │ │ └── authentication │ │ │ │ │ └── qrcode-login.vue │ │ │ ├── locales │ │ │ │ ├── README.md │ │ │ │ └── langs │ │ │ │ │ ├── zh-CN │ │ │ │ │ ├── page.json │ │ │ │ │ └── demos.json │ │ │ │ │ └── en-US │ │ │ │ │ ├── page.json │ │ │ │ │ └── demos.json │ │ │ ├── layouts │ │ │ │ └── index.ts │ │ │ └── preferences.ts │ │ ├── tailwind.config.mjs │ │ ├── postcss.config.mjs │ │ ├── public │ │ │ └── favicon.ico │ │ ├── .env.analyze │ │ ├── .env.development │ │ ├── tsconfig.node.json │ │ ├── .env.production │ │ └── tsconfig.json │ └── backend-mock │ │ ├── tsconfig.json │ │ ├── api │ │ ├── test.get.ts │ │ ├── test.post.ts │ │ ├── status.ts │ │ ├── user │ │ │ └── info.ts │ │ ├── auth │ │ │ ├── logout.post.ts │ │ │ └── codes.ts │ │ ├── system │ │ │ ├── dept │ │ │ │ ├── .post.ts │ │ │ │ ├── [id].put.ts │ │ │ │ └── [id].delete.ts │ │ │ └── menu │ │ │ │ └── list.ts │ │ ├── menu │ │ │ └── all.ts │ │ └── upload.ts │ │ ├── tsconfig.build.json │ │ ├── error.ts │ │ ├── README.md │ │ └── routes │ │ └── [...].ts ├── playground │ ├── src │ │ ├── store │ │ │ └── index.ts │ │ ├── api │ │ │ ├── examples │ │ │ │ ├── index.ts │ │ │ │ ├── json-bigint.ts │ │ │ │ ├── status.ts │ │ │ │ ├── table.ts │ │ │ │ └── params.ts │ │ │ ├── core │ │ │ │ ├── index.ts │ │ │ │ ├── user.ts │ │ │ │ └── menu.ts │ │ │ ├── index.ts │ │ │ └── system │ │ │ │ └── index.ts │ │ ├── views │ │ │ ├── _core │ │ │ │ ├── README.md │ │ │ │ ├── fallback │ │ │ │ │ ├── coming-soon.vue │ │ │ │ │ ├── forbidden.vue │ │ │ │ │ ├── not-found.vue │ │ │ │ │ ├── internal-error.vue │ │ │ │ │ └── offline.vue │ │ │ │ ├── about │ │ │ │ │ └── index.vue │ │ │ │ └── authentication │ │ │ │ │ └── qrcode-login.vue │ │ │ ├── demos │ │ │ │ ├── nested │ │ │ │ │ ├── menu-1.vue │ │ │ │ │ ├── menu-2-1.vue │ │ │ │ │ ├── menu-3-1.vue │ │ │ │ │ └── menu-3-2-1.vue │ │ │ │ ├── access │ │ │ │ │ ├── user-visible.vue │ │ │ │ │ ├── admin-visible.vue │ │ │ │ │ ├── super-visible.vue │ │ │ │ │ └── menu-visible-403.vue │ │ │ │ ├── active-icon │ │ │ │ │ └── index.vue │ │ │ │ ├── features │ │ │ │ │ ├── menu-query │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── new-window │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── vue-query │ │ │ │ │ │ └── typing.ts │ │ │ │ │ └── hide-menu-children │ │ │ │ │ │ └── parent.vue │ │ │ │ └── breadcrumb │ │ │ │ │ └── level-detail.vue │ │ │ └── examples │ │ │ │ └── modal │ │ │ │ └── drag-demo.vue │ │ ├── locales │ │ │ ├── README.md │ │ │ └── langs │ │ │ │ ├── zh-CN │ │ │ │ └── page.json │ │ │ │ └── en-US │ │ │ │ └── page.json │ │ ├── layouts │ │ │ └── index.ts │ │ └── preferences.ts │ ├── tailwind.config.mjs │ ├── postcss.config.mjs │ ├── public │ │ └── favicon.ico │ ├── .env.analyze │ ├── .env.development │ ├── tsconfig.node.json │ ├── .env.production │ └── tsconfig.json ├── .stylelintignore ├── .prettierrc.mjs ├── .browserslistrc ├── .commitlintrc.js ├── scripts │ ├── vsh │ │ ├── bin │ │ │ └── vsh.mjs │ │ ├── build.config.ts │ │ └── tsconfig.json │ └── turbo-run │ │ ├── bin │ │ └── turbo-run.mjs │ │ ├── build.config.ts │ │ └── tsconfig.json ├── stylelint.config.mjs ├── internal │ ├── tailwind-config │ │ ├── src │ │ │ └── module.d.ts │ │ ├── build.config.ts │ │ └── tsconfig.json │ ├── vite-config │ │ ├── src │ │ │ ├── plugins │ │ │ │ └── inject-app-loading │ │ │ │ │ └── README.md │ │ │ ├── index.ts │ │ │ └── config │ │ │ │ └── common.ts │ │ ├── tsconfig.json │ │ └── build.config.ts │ ├── node-utils │ │ ├── src │ │ │ ├── constants.ts │ │ │ ├── path.ts │ │ │ ├── date.ts │ │ │ └── hash.ts │ │ ├── tsconfig.json │ │ └── build.config.ts │ ├── lint-configs │ │ ├── eslint-config │ │ │ ├── tsconfig.json │ │ │ ├── build.config.ts │ │ │ └── src │ │ │ │ ├── configs │ │ │ │ ├── command.ts │ │ │ │ └── turbo.ts │ │ │ │ └── util.ts │ │ └── prettier-config │ │ │ └── index.mjs │ └── tsconfig │ │ ├── web-app.json │ │ ├── node.json │ │ ├── library.json │ │ └── web.json ├── eslint.config.mjs ├── vitest.workspace.ts ├── tea.yaml ├── .prettierignore ├── .editorconfig ├── vitest.config.ts └── .npmrc ├── ai_service ├── llm │ └── adapter │ │ └── __init__.py ├── utils │ └── jwt.py ├── .env.example ├── schemas │ ├── user.py │ └── ai_chat.py ├── requirements.txt ├── api │ └── v1 │ │ ├── drawing │ │ └── vo.py │ │ └── chat │ │ └── vo.py ├── config.py └── db │ └── session.py ├── docs ├── docs │ └── essential │ │ ├── _category_.json │ │ ├── new_module.png │ │ ├── introduction.md │ │ ├── deploy.md │ │ ├── quickstart-frontend.md │ │ ├── features.md │ │ ├── frontend-manual.md │ │ ├── docker-start.md │ │ ├── backend-manual.md │ │ └── quickstart-backend.md ├── src │ ├── pages │ │ ├── markdown-page.md │ │ └── index.module.css │ └── components │ │ └── HomepageFeatures │ │ └── styles.module.css ├── blog │ ├── 2021-08-26-welcome │ │ └── docusaurus-plushie-banner.jpeg │ ├── 2019-05-28-first-blog-post.md │ └── tags.yml ├── tsconfig.json └── .gitignore └── images ├── ai_chat.png ├── celery.png ├── dj_dept.png ├── dj_menu.png ├── dj_post.png ├── dj_role.png ├── dj_user.png ├── dj_vue1.png ├── flower.png ├── ai_drawing.png └── dj_chenze.png /data/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /backend/ai/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /backend/system/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/.node-version: -------------------------------------------------------------------------------- 1 | 22.1.0 2 | -------------------------------------------------------------------------------- /backend/ai/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ai_service/llm/adapter/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /backend/ai/llm/adapter/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /backend/system/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ai_service/utils/jwt.py: -------------------------------------------------------------------------------- 1 | # 预留:如需JWT校验可在此实现 -------------------------------------------------------------------------------- /web/docs/src/guide/in-depth/layout.md: -------------------------------------------------------------------------------- 1 | # 布局 2 | -------------------------------------------------------------------------------- /web/docs/src/en/guide/in-depth/layout.md: -------------------------------------------------------------------------------- 1 | # Layout 2 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/menu-ui/README.md: -------------------------------------------------------------------------------- 1 | # 菜单组件 2 | -------------------------------------------------------------------------------- /web/apps/web-antd/src/api/index.ts: -------------------------------------------------------------------------------- 1 | export * from './core'; 2 | -------------------------------------------------------------------------------- /web/apps/web-ele/src/api/index.ts: -------------------------------------------------------------------------------- 1 | export * from './core'; 2 | -------------------------------------------------------------------------------- /web/apps/web-ele/src/store/index.ts: -------------------------------------------------------------------------------- 1 | export * from './auth'; 2 | -------------------------------------------------------------------------------- /web/apps/web-naive/src/api/index.ts: -------------------------------------------------------------------------------- 1 | export * from './core'; 2 | -------------------------------------------------------------------------------- /web/playground/src/store/index.ts: -------------------------------------------------------------------------------- 1 | export * from './auth'; 2 | -------------------------------------------------------------------------------- /web/.stylelintignore: -------------------------------------------------------------------------------- 1 | dist 2 | public 3 | __tests__ 4 | coverage 5 | -------------------------------------------------------------------------------- /web/apps/web-antd/src/models/index.ts: -------------------------------------------------------------------------------- 1 | export * from './base'; 2 | -------------------------------------------------------------------------------- /web/apps/web-antd/src/store/index.ts: -------------------------------------------------------------------------------- 1 | export * from './auth'; 2 | -------------------------------------------------------------------------------- /web/apps/web-ele/src/models/index.ts: -------------------------------------------------------------------------------- 1 | export * from './base'; 2 | -------------------------------------------------------------------------------- /web/apps/web-naive/src/store/index.ts: -------------------------------------------------------------------------------- 1 | export * from './auth'; 2 | -------------------------------------------------------------------------------- /web/docs/src/guide/introduction/roadmap.md: -------------------------------------------------------------------------------- 1 | # 路线图 2 | 3 | TODO: 4 | -------------------------------------------------------------------------------- /web/packages/styles/src/index.ts: -------------------------------------------------------------------------------- 1 | import '@vben-core/design'; 2 | -------------------------------------------------------------------------------- /web/.prettierrc.mjs: -------------------------------------------------------------------------------- 1 | export { default } from '@vben/prettier-config'; 2 | -------------------------------------------------------------------------------- /web/docs/src/guide/introduction/changelog.md: -------------------------------------------------------------------------------- 1 | # 更新日志 2 | 3 | TODO 4 | -------------------------------------------------------------------------------- /ai_service/.env.example: -------------------------------------------------------------------------------- 1 | OPENAI_API_KEY=你的API密钥 2 | DEEPSEEK_API_KEY='你的API密钥' -------------------------------------------------------------------------------- /web/.browserslistrc: -------------------------------------------------------------------------------- 1 | > 1% 2 | last 2 versions 3 | not dead 4 | not ie 11 5 | -------------------------------------------------------------------------------- /web/.commitlintrc.js: -------------------------------------------------------------------------------- 1 | export { default } from '@vben/commitlint-config'; 2 | -------------------------------------------------------------------------------- /web/docs/src/en/guide/introduction/changelog.md: -------------------------------------------------------------------------------- 1 | # CHANGE LOG 2 | 3 | TODO 4 | -------------------------------------------------------------------------------- /web/docs/src/en/guide/introduction/roadmap.md: -------------------------------------------------------------------------------- 1 | # Roadmap 2 | 3 | TODO: 4 | -------------------------------------------------------------------------------- /docs/docs/essential/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "文档", 3 | "position": 1 4 | } -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/README.md: -------------------------------------------------------------------------------- 1 | # ui-kit 2 | 3 | 用于管理公共组件、不同UI组件库封装的组件 4 | -------------------------------------------------------------------------------- /web/packages/styles/src/global/index.scss: -------------------------------------------------------------------------------- 1 | @use '@vben-core/design/bem' as *; 2 | -------------------------------------------------------------------------------- /web/packages/@core/base/README.md: -------------------------------------------------------------------------------- 1 | # base 2 | 3 | 基础共享包,请勿引入 workspace 依赖 4 | 5 | - 6 | -------------------------------------------------------------------------------- /web/packages/@core/base/shared/src/cache/index.ts: -------------------------------------------------------------------------------- 1 | export * from './storage-manager'; 2 | -------------------------------------------------------------------------------- /web/packages/@core/base/shared/src/store.ts: -------------------------------------------------------------------------------- 1 | export * from '@tanstack/vue-store'; 2 | -------------------------------------------------------------------------------- /web/playground/tailwind.config.mjs: -------------------------------------------------------------------------------- 1 | export { default } from '@vben/tailwind-config'; 2 | -------------------------------------------------------------------------------- /backend/ai/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /web/apps/web-antd/tailwind.config.mjs: -------------------------------------------------------------------------------- 1 | export { default } from '@vben/tailwind-config'; 2 | -------------------------------------------------------------------------------- /web/apps/web-ele/tailwind.config.mjs: -------------------------------------------------------------------------------- 1 | export { default } from '@vben/tailwind-config'; 2 | -------------------------------------------------------------------------------- /web/apps/web-naive/tailwind.config.mjs: -------------------------------------------------------------------------------- 1 | export { default } from '@vben/tailwind-config'; 2 | -------------------------------------------------------------------------------- /web/scripts/vsh/bin/vsh.mjs: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | import('../dist/index.mjs'); 4 | -------------------------------------------------------------------------------- /backend/ai/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | # Register your models here. 4 | -------------------------------------------------------------------------------- /backend/ai/views.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render 2 | 3 | # Create your views here. 4 | -------------------------------------------------------------------------------- /backend/system/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | # Register your models here. 4 | -------------------------------------------------------------------------------- /backend/system/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /images/ai_chat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XIE7654/django-vue3-admin/HEAD/images/ai_chat.png -------------------------------------------------------------------------------- /images/celery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XIE7654/django-vue3-admin/HEAD/images/celery.png -------------------------------------------------------------------------------- /images/dj_dept.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XIE7654/django-vue3-admin/HEAD/images/dj_dept.png -------------------------------------------------------------------------------- /images/dj_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XIE7654/django-vue3-admin/HEAD/images/dj_menu.png -------------------------------------------------------------------------------- /images/dj_post.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XIE7654/django-vue3-admin/HEAD/images/dj_post.png -------------------------------------------------------------------------------- /images/dj_role.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XIE7654/django-vue3-admin/HEAD/images/dj_role.png -------------------------------------------------------------------------------- /images/dj_user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XIE7654/django-vue3-admin/HEAD/images/dj_user.png -------------------------------------------------------------------------------- /images/dj_vue1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XIE7654/django-vue3-admin/HEAD/images/dj_vue1.png -------------------------------------------------------------------------------- /images/flower.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XIE7654/django-vue3-admin/HEAD/images/flower.png -------------------------------------------------------------------------------- /web/apps/backend-mock/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./.nitro/types/tsconfig.json" 3 | } 4 | -------------------------------------------------------------------------------- /web/apps/web-antd/postcss.config.mjs: -------------------------------------------------------------------------------- 1 | export { default } from '@vben/tailwind-config/postcss'; 2 | -------------------------------------------------------------------------------- /web/apps/web-ele/postcss.config.mjs: -------------------------------------------------------------------------------- 1 | export { default } from '@vben/tailwind-config/postcss'; 2 | -------------------------------------------------------------------------------- /web/apps/web-naive/postcss.config.mjs: -------------------------------------------------------------------------------- 1 | export { default } from '@vben/tailwind-config/postcss'; 2 | -------------------------------------------------------------------------------- /web/playground/postcss.config.mjs: -------------------------------------------------------------------------------- 1 | export { default } from '@vben/tailwind-config/postcss'; 2 | -------------------------------------------------------------------------------- /backend/data/省市区.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XIE7654/django-vue3-admin/HEAD/backend/data/省市区.xlsx -------------------------------------------------------------------------------- /images/ai_drawing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XIE7654/django-vue3-admin/HEAD/images/ai_drawing.png -------------------------------------------------------------------------------- /images/dj_chenze.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XIE7654/django-vue3-admin/HEAD/images/dj_chenze.png -------------------------------------------------------------------------------- /web/apps/backend-mock/api/test.get.ts: -------------------------------------------------------------------------------- 1 | export default defineEventHandler(() => 'Test get handler'); 2 | -------------------------------------------------------------------------------- /web/packages/effects/common-ui/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './components'; 2 | export * from './ui'; 3 | -------------------------------------------------------------------------------- /web/playground/src/api/examples/index.ts: -------------------------------------------------------------------------------- 1 | export * from './status'; 2 | export * from './table'; 3 | -------------------------------------------------------------------------------- /web/playground/src/views/_core/README.md: -------------------------------------------------------------------------------- 1 | # \_core 2 | 3 | 此目录包含应用程序正常运行所需的基本视图。这些视图是应用程序布局中使用的视图。 4 | -------------------------------------------------------------------------------- /web/scripts/turbo-run/bin/turbo-run.mjs: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | import('../dist/index.mjs'); 4 | -------------------------------------------------------------------------------- /backend/backend/__init__.py: -------------------------------------------------------------------------------- 1 | from .celery import app as celery_app 2 | 3 | __all__ = ('celery_app',) 4 | -------------------------------------------------------------------------------- /web/apps/backend-mock/api/test.post.ts: -------------------------------------------------------------------------------- 1 | export default defineEventHandler(() => 'Test post handler'); 2 | -------------------------------------------------------------------------------- /web/apps/web-antd/src/views/_core/README.md: -------------------------------------------------------------------------------- 1 | # \_core 2 | 3 | 此目录包含应用程序正常运行所需的基本视图。这些视图是应用程序布局中使用的视图。 4 | -------------------------------------------------------------------------------- /web/apps/web-ele/src/views/_core/README.md: -------------------------------------------------------------------------------- 1 | # \_core 2 | 3 | 此目录包含应用程序正常运行所需的基本视图。这些视图是应用程序布局中使用的视图。 4 | -------------------------------------------------------------------------------- /web/apps/web-naive/src/views/_core/README.md: -------------------------------------------------------------------------------- 1 | # \_core 2 | 3 | 此目录包含应用程序正常运行所需的基本视图。这些视图是应用程序布局中使用的视图。 4 | -------------------------------------------------------------------------------- /web/docs/.vitepress/components/index.ts: -------------------------------------------------------------------------------- 1 | export { default as DemoPreview } from './demo-preview.vue'; 2 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/form-ui/tailwind.config.mjs: -------------------------------------------------------------------------------- 1 | export { default } from '@vben/tailwind-config'; 2 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/layout-ui/tailwind.config.mjs: -------------------------------------------------------------------------------- 1 | export { default } from '@vben/tailwind-config'; 2 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/menu-ui/tailwind.config.mjs: -------------------------------------------------------------------------------- 1 | export { default } from '@vben/tailwind-config'; 2 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/popup-ui/tailwind.config.mjs: -------------------------------------------------------------------------------- 1 | export { default } from '@vben/tailwind-config'; 2 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/tailwind.config.mjs: -------------------------------------------------------------------------------- 1 | export { default } from '@vben/tailwind-config'; 2 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/tabs-ui/tailwind.config.mjs: -------------------------------------------------------------------------------- 1 | export { default } from '@vben/tailwind-config'; 2 | -------------------------------------------------------------------------------- /web/packages/effects/common-ui/src/ui/about/index.ts: -------------------------------------------------------------------------------- 1 | export { default as About } from './about.vue'; 2 | -------------------------------------------------------------------------------- /web/packages/effects/layouts/src/basic/index.ts: -------------------------------------------------------------------------------- 1 | export { default as BasicLayout } from './layout.vue'; 2 | -------------------------------------------------------------------------------- /web/packages/effects/layouts/src/iframe/iframe-view.vue: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /web/packages/effects/request/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './request-client'; 2 | export * from 'axios'; 3 | -------------------------------------------------------------------------------- /web/packages/@core/base/shared/src/constants/index.ts: -------------------------------------------------------------------------------- 1 | export * from './globals'; 2 | export * from './vben'; 3 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/form-ui/postcss.config.mjs: -------------------------------------------------------------------------------- 1 | export { default } from '@vben/tailwind-config/postcss'; 2 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/menu-ui/postcss.config.mjs: -------------------------------------------------------------------------------- 1 | export { default } from '@vben/tailwind-config/postcss'; 2 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/input/index.ts: -------------------------------------------------------------------------------- 1 | export { default as Input } from './Input.vue'; 2 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/label/index.ts: -------------------------------------------------------------------------------- 1 | export { default as Label } from './Label.vue'; 2 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/switch/index.ts: -------------------------------------------------------------------------------- 1 | export { default as Switch } from './Switch.vue'; 2 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/tabs-ui/postcss.config.mjs: -------------------------------------------------------------------------------- 1 | export { default } from '@vben/tailwind-config/postcss'; 2 | -------------------------------------------------------------------------------- /web/packages/constants/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './core'; 2 | export * from '@vben-core/shared/constants'; 3 | -------------------------------------------------------------------------------- /web/packages/types/src/index.ts: -------------------------------------------------------------------------------- 1 | export type * from './user'; 2 | export type * from '@vben-core/typings'; 3 | -------------------------------------------------------------------------------- /web/stylelint.config.mjs: -------------------------------------------------------------------------------- 1 | export default { 2 | extends: ['@vben/stylelint-config'], 3 | root: true, 4 | }; 5 | -------------------------------------------------------------------------------- /web/packages/@core/README.md: -------------------------------------------------------------------------------- 1 | # @vben-core 2 | 3 | 系统一些比较基础的SDK和UI组件库,该目录后续完善后,可能会迁移出去或者发布到npm,请勿将任何业务逻辑和业务包放在该目录。 4 | -------------------------------------------------------------------------------- /web/packages/@core/composables/src/use-simple-locale/README.md: -------------------------------------------------------------------------------- 1 | # Simple i18n 2 | 3 | Simple i18 implementation 4 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/layout-ui/postcss.config.mjs: -------------------------------------------------------------------------------- 1 | export { default } from '@vben/tailwind-config/postcss'; 2 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/popup-ui/postcss.config.mjs: -------------------------------------------------------------------------------- 1 | export { default } from '@vben/tailwind-config/postcss'; 2 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/postcss.config.mjs: -------------------------------------------------------------------------------- 1 | export { default } from '@vben/tailwind-config/postcss'; 2 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/components/icon/index.ts: -------------------------------------------------------------------------------- 1 | export { default as VbenIcon } from './icon.vue'; 2 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/components/logo/index.ts: -------------------------------------------------------------------------------- 1 | export { default as VbenLogo } from './logo.vue'; 2 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/checkbox/index.ts: -------------------------------------------------------------------------------- 1 | export { default as Checkbox } from './Checkbox.vue'; 2 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/textarea/index.ts: -------------------------------------------------------------------------------- 1 | export { default as Textarea } from './Textarea.vue'; 2 | -------------------------------------------------------------------------------- /web/packages/effects/common-ui/src/components/resize/index.ts: -------------------------------------------------------------------------------- 1 | export { default as VResize } from './resize.vue'; 2 | -------------------------------------------------------------------------------- /web/packages/effects/layouts/src/basic/copyright/index.ts: -------------------------------------------------------------------------------- 1 | export { default as Copyright } from './copyright.vue'; 2 | -------------------------------------------------------------------------------- /web/packages/effects/layouts/src/basic/footer/index.ts: -------------------------------------------------------------------------------- 1 | export { default as LayoutFooter } from './footer.vue'; 2 | -------------------------------------------------------------------------------- /web/packages/effects/layouts/src/basic/header/index.ts: -------------------------------------------------------------------------------- 1 | export { default as LayoutHeader } from './header.vue'; 2 | -------------------------------------------------------------------------------- /web/apps/web-antd/src/api/core/index.ts: -------------------------------------------------------------------------------- 1 | export * from './auth'; 2 | export * from './menu'; 3 | export * from './user'; 4 | -------------------------------------------------------------------------------- /web/apps/web-ele/src/api/core/index.ts: -------------------------------------------------------------------------------- 1 | export * from './auth'; 2 | export * from './menu'; 3 | export * from './user'; 4 | -------------------------------------------------------------------------------- /web/docs/src/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XIE7654/django-vue3-admin/HEAD/web/docs/src/public/favicon.ico -------------------------------------------------------------------------------- /web/internal/tailwind-config/src/module.d.ts: -------------------------------------------------------------------------------- 1 | declare module '@tailwindcss/nesting' { 2 | export default any; 3 | } 4 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/separator/index.ts: -------------------------------------------------------------------------------- 1 | export { default as Separator } from './Separator.vue'; 2 | -------------------------------------------------------------------------------- /web/playground/src/api/core/index.ts: -------------------------------------------------------------------------------- 1 | export * from './auth'; 2 | export * from './menu'; 3 | export * from './user'; 4 | -------------------------------------------------------------------------------- /web/playground/src/api/index.ts: -------------------------------------------------------------------------------- 1 | export * from './core'; 2 | export * from './examples'; 3 | export * from './system'; 4 | -------------------------------------------------------------------------------- /web/playground/src/api/system/index.ts: -------------------------------------------------------------------------------- 1 | export * from './dept'; 2 | export * from './menu'; 3 | export * from './role'; 4 | -------------------------------------------------------------------------------- /web/apps/web-antd/src/api/system/index.ts: -------------------------------------------------------------------------------- 1 | export * from './dept'; 2 | export * from './menu'; 3 | export * from './role'; 4 | -------------------------------------------------------------------------------- /web/apps/web-ele/src/api/system/index.ts: -------------------------------------------------------------------------------- 1 | export * from './dept'; 2 | export * from './menu'; 3 | export * from './role'; 4 | -------------------------------------------------------------------------------- /web/apps/web-naive/src/api/core/index.ts: -------------------------------------------------------------------------------- 1 | export * from './auth'; 2 | export * from './menu'; 3 | export * from './user'; 4 | -------------------------------------------------------------------------------- /web/docs/.vitepress/theme/styles/index.ts: -------------------------------------------------------------------------------- 1 | import '@vben/styles'; 2 | 3 | import './variables.css'; 4 | import './base.css'; 5 | -------------------------------------------------------------------------------- /web/docs/src/public/guide/qq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XIE7654/django-vue3-admin/HEAD/web/docs/src/public/guide/qq.png -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/menu-ui/src/hooks/index.ts: -------------------------------------------------------------------------------- 1 | export * from './use-menu'; 2 | export * from './use-menu-context'; 3 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/components/avatar/index.ts: -------------------------------------------------------------------------------- 1 | export { default as VbenAvatar } from './avatar.vue'; 2 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/components/popover/index.ts: -------------------------------------------------------------------------------- 1 | export { default as VbenPopover } from './popover.vue'; 2 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/components/select/index.ts: -------------------------------------------------------------------------------- 1 | export { default as VbenSelect } from './select.vue'; 2 | -------------------------------------------------------------------------------- /web/packages/effects/layouts/src/widgets/theme-toggle/index.ts: -------------------------------------------------------------------------------- 1 | export { default as ThemeToggle } from './theme-toggle.vue'; 2 | -------------------------------------------------------------------------------- /web/packages/stores/src/modules/index.ts: -------------------------------------------------------------------------------- 1 | export * from './access'; 2 | export * from './tabbar'; 3 | export * from './user'; 4 | -------------------------------------------------------------------------------- /web/playground/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XIE7654/django-vue3-admin/HEAD/web/playground/public/favicon.ico -------------------------------------------------------------------------------- /web/playground/src/locales/README.md: -------------------------------------------------------------------------------- 1 | # locale 2 | 3 | 每个app使用的国际化可能不同,这里用于扩展国际化的功能,例如扩展 dayjs、antd组件库的多语言切换,以及app本身的国际化文件。 4 | -------------------------------------------------------------------------------- /docs/docs/essential/new_module.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XIE7654/django-vue3-admin/HEAD/docs/docs/essential/new_module.png -------------------------------------------------------------------------------- /web/apps/web-antd/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XIE7654/django-vue3-admin/HEAD/web/apps/web-antd/public/favicon.ico -------------------------------------------------------------------------------- /web/apps/web-antd/src/locales/README.md: -------------------------------------------------------------------------------- 1 | # locale 2 | 3 | 每个app使用的国际化可能不同,这里用于扩展国际化的功能,例如扩展 dayjs、antd组件库的多语言切换,以及app本身的国际化文件。 4 | -------------------------------------------------------------------------------- /web/apps/web-ele/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XIE7654/django-vue3-admin/HEAD/web/apps/web-ele/public/favicon.ico -------------------------------------------------------------------------------- /web/apps/web-ele/src/locales/README.md: -------------------------------------------------------------------------------- 1 | # locale 2 | 3 | 每个app使用的国际化可能不同,这里用于扩展国际化的功能,例如扩展 dayjs、antd组件库的多语言切换,以及app本身的国际化文件。 4 | -------------------------------------------------------------------------------- /web/apps/web-naive/src/locales/README.md: -------------------------------------------------------------------------------- 1 | # locale 2 | 3 | 每个app使用的国际化可能不同,这里用于扩展国际化的功能,例如扩展 dayjs、antd组件库的多语言切换,以及app本身的国际化文件。 4 | -------------------------------------------------------------------------------- /web/docs/src/public/guide/locale.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XIE7654/django-vue3-admin/HEAD/web/docs/src/public/guide/locale.png -------------------------------------------------------------------------------- /web/docs/src/public/guide/login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XIE7654/django-vue3-admin/HEAD/web/docs/src/public/guide/login.png -------------------------------------------------------------------------------- /web/docs/src/public/guide/report.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XIE7654/django-vue3-admin/HEAD/web/docs/src/public/guide/report.png -------------------------------------------------------------------------------- /web/docs/src/public/guide/test.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XIE7654/django-vue3-admin/HEAD/web/docs/src/public/guide/test.png -------------------------------------------------------------------------------- /web/internal/vite-config/src/plugins/inject-app-loading/README.md: -------------------------------------------------------------------------------- 1 | # inject-app-loading 2 | 3 | 用于在应用加载时显示加载动画的插件,可自行选择加载动画的样式。 4 | -------------------------------------------------------------------------------- /web/packages/@core/base/design/src/design-tokens/index.ts: -------------------------------------------------------------------------------- 1 | import './default.css'; 2 | import './dark.css'; 3 | 4 | export {}; 5 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/components/back-top/index.ts: -------------------------------------------------------------------------------- 1 | export { default as VbenBackTop } from './back-top.vue'; 2 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/components/checkbox/index.ts: -------------------------------------------------------------------------------- 1 | export { default as VbenCheckbox } from './checkbox.vue'; 2 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/components/scrollbar/index.ts: -------------------------------------------------------------------------------- 1 | export { default as VbenScrollbar } from './scrollbar.vue'; 2 | -------------------------------------------------------------------------------- /web/packages/effects/common-ui/src/components/icon-picker/index.ts: -------------------------------------------------------------------------------- 1 | export { default as IconPicker } from './icon-picker.vue'; 2 | -------------------------------------------------------------------------------- /web/packages/effects/layouts/src/authentication/types.ts: -------------------------------------------------------------------------------- 1 | export type ToolbarType = 'color' | 'language' | 'layout' | 'theme'; 2 | -------------------------------------------------------------------------------- /web/packages/effects/layouts/src/widgets/check-updates/index.ts: -------------------------------------------------------------------------------- 1 | export { default as CheckUpdates } from './check-updates.vue'; 2 | -------------------------------------------------------------------------------- /web/packages/effects/layouts/src/widgets/global-search/index.ts: -------------------------------------------------------------------------------- 1 | export { default as GlobalSearch } from './global-search.vue'; 2 | -------------------------------------------------------------------------------- /web/packages/effects/layouts/src/widgets/user-dropdown/index.ts: -------------------------------------------------------------------------------- 1 | export { default as UserDropdown } from './user-dropdown.vue'; 2 | -------------------------------------------------------------------------------- /web/apps/web-naive/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XIE7654/django-vue3-admin/HEAD/web/apps/web-naive/public/favicon.ico -------------------------------------------------------------------------------- /web/docs/src/public/guide/devtools.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XIE7654/django-vue3-admin/HEAD/web/docs/src/public/guide/devtools.png -------------------------------------------------------------------------------- /web/docs/src/public/guide/loading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XIE7654/django-vue3-admin/HEAD/web/docs/src/public/guide/loading.png -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/popup-ui/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './alert'; 2 | export * from './drawer'; 3 | export * from './modal'; 4 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/components/full-screen/index.ts: -------------------------------------------------------------------------------- 1 | export { default as VbenFullScreen } from './full-screen.vue'; 2 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/components/spine-text/index.ts: -------------------------------------------------------------------------------- 1 | export { default as VbenSpineText } from './spine-text.vue'; 2 | -------------------------------------------------------------------------------- /web/packages/effects/common-ui/src/components/api-component/index.ts: -------------------------------------------------------------------------------- 1 | export { default as ApiComponent } from './api-component.vue'; 2 | -------------------------------------------------------------------------------- /web/packages/effects/common-ui/src/components/ellipsis-text/index.ts: -------------------------------------------------------------------------------- 1 | export { default as EllipsisText } from './ellipsis-text.vue'; 2 | -------------------------------------------------------------------------------- /web/packages/effects/common-ui/src/components/page/index.ts: -------------------------------------------------------------------------------- 1 | export { default as Page } from './page.vue'; 2 | export * from './types'; 3 | -------------------------------------------------------------------------------- /web/docs/src/_env/node/adapter/vxe-table.ts: -------------------------------------------------------------------------------- 1 | export type * from '@vben/plugins/vxe-table'; 2 | 3 | export const useVbenVxeGrid = () => {}; 4 | -------------------------------------------------------------------------------- /web/docs/src/public/guide/preferences.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XIE7654/django-vue3-admin/HEAD/web/docs/src/public/guide/preferences.png -------------------------------------------------------------------------------- /web/docs/src/public/guide/qq_channel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XIE7654/django-vue3-admin/HEAD/web/docs/src/public/guide/qq_channel.png -------------------------------------------------------------------------------- /web/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | 3 | import { defineConfig } from '@vben/eslint-config'; 4 | 5 | export default defineConfig(); 6 | -------------------------------------------------------------------------------- /web/packages/@core/base/shared/src/color/index.ts: -------------------------------------------------------------------------------- 1 | export * from './color'; 2 | export * from './convert'; 3 | export * from './generator'; 4 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/badge/index.ts: -------------------------------------------------------------------------------- 1 | export * from './badge'; 2 | 3 | export { default as Badge } from './Badge.vue'; 4 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/toggle/index.ts: -------------------------------------------------------------------------------- 1 | export * from './toggle'; 2 | export { default as Toggle } from './Toggle.vue'; 3 | -------------------------------------------------------------------------------- /web/vitest.workspace.ts: -------------------------------------------------------------------------------- 1 | import { defineWorkspace } from 'vitest/config'; 2 | 3 | export default defineWorkspace(['vitest.config.ts']); 4 | -------------------------------------------------------------------------------- /web/apps/web-antd/src/utils/auth.ts: -------------------------------------------------------------------------------- 1 | export function formatToken(token: null | string) { 2 | return token ? `Bearer ${token}` : null; 3 | } 4 | -------------------------------------------------------------------------------- /web/docs/src/public/guide/login-expired.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XIE7654/django-vue3-admin/HEAD/web/docs/src/public/guide/login-expired.png -------------------------------------------------------------------------------- /web/docs/src/public/guide/update-notice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XIE7654/django-vue3-admin/HEAD/web/docs/src/public/guide/update-notice.png -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/components/input-password/index.ts: -------------------------------------------------------------------------------- 1 | export { default as VbenInputPassword } from './input-password.vue'; 2 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/components/render-content/index.ts: -------------------------------------------------------------------------------- 1 | export { default as VbenRenderContent } from './render-content.vue'; 2 | -------------------------------------------------------------------------------- /web/packages/effects/layouts/src/basic/tabbar/index.ts: -------------------------------------------------------------------------------- 1 | export { default as LayoutTabbar } from './tabbar.vue'; 2 | export * from './use-tabbar'; 3 | -------------------------------------------------------------------------------- /web/packages/stores/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './modules'; 2 | export * from './setup'; 3 | export { defineStore, storeToRefs } from 'pinia'; 4 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/components/expandable-arrow/index.ts: -------------------------------------------------------------------------------- 1 | export { default as VbenExpandableArrow } from './expandable-arrow.vue'; 2 | -------------------------------------------------------------------------------- /web/packages/effects/common-ui/src/components/col-page/index.ts: -------------------------------------------------------------------------------- 1 | export { default as ColPage } from './col-page.vue'; 2 | export * from './types'; 3 | -------------------------------------------------------------------------------- /web/packages/effects/common-ui/src/components/count-to/index.ts: -------------------------------------------------------------------------------- 1 | export { default as CountTo } from './count-to.vue'; 2 | export * from './types'; 3 | -------------------------------------------------------------------------------- /web/packages/effects/common-ui/src/ui/fallback/index.ts: -------------------------------------------------------------------------------- 1 | export type * from './fallback'; 2 | export { default as Fallback } from './fallback.vue'; 3 | -------------------------------------------------------------------------------- /web/apps/backend-mock/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "exclude": ["node_modules", "test", "dist", "**/*spec.ts"] 4 | } 5 | -------------------------------------------------------------------------------- /web/apps/web-antd/src/utils/dict.ts: -------------------------------------------------------------------------------- 1 | export enum DICT_TYPE { 2 | USER_TYPE = 'user_type', 3 | 4 | // TEMU_ORDER_STATUS = 'temu_order_status', 5 | } 6 | -------------------------------------------------------------------------------- /web/apps/web-ele/src/utils/dict.ts: -------------------------------------------------------------------------------- 1 | export enum DICT_TYPE { 2 | USER_TYPE = 'user_type', 3 | 4 | // TEMU_ORDER_STATUS = 'temu_order_status', 5 | } 6 | -------------------------------------------------------------------------------- /web/internal/node-utils/src/constants.ts: -------------------------------------------------------------------------------- 1 | enum UNICODE { 2 | FAILURE = '\u2716', // ✖ 3 | SUCCESS = '\u2714', // ✔ 4 | } 5 | 6 | export { UNICODE }; 7 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/layout-ui/src/index.ts: -------------------------------------------------------------------------------- 1 | export type * from './vben-layout'; 2 | export { default as VbenAdminLayout } from './vben-layout.vue'; 3 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/components/count-to-animator/index.ts: -------------------------------------------------------------------------------- 1 | export { default as VbenCountToAnimator } from './count-to-animator.vue'; 2 | -------------------------------------------------------------------------------- /web/packages/effects/common-ui/src/components/json-viewer/index.ts: -------------------------------------------------------------------------------- 1 | export { default as JsonViewer } from './index.vue'; 2 | 3 | export * from './types'; 4 | -------------------------------------------------------------------------------- /web/packages/effects/common-ui/src/ui/dashboard/index.ts: -------------------------------------------------------------------------------- 1 | export * from './analysis'; 2 | export type * from './typing'; 3 | export * from './workbench'; 4 | -------------------------------------------------------------------------------- /web/packages/effects/layouts/src/authentication/index.ts: -------------------------------------------------------------------------------- 1 | export { default as AuthPageLayout } from './authentication.vue'; 2 | export * from './types'; 3 | -------------------------------------------------------------------------------- /web/packages/icons/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './iconify'; 2 | export { default as EmptyIcon } from './icons/empty-icon.vue'; 3 | export * from './svg'; 4 | -------------------------------------------------------------------------------- /web/playground/.env.analyze: -------------------------------------------------------------------------------- 1 | # public path 2 | VITE_BASE=/ 3 | 4 | # Basic interface address SPA 5 | VITE_GLOB_API_URL=/api 6 | 7 | VITE_VISUALIZER=true 8 | -------------------------------------------------------------------------------- /web/apps/web-antd/.env.analyze: -------------------------------------------------------------------------------- 1 | # public path 2 | VITE_BASE=/ 3 | 4 | # Basic interface address SPA 5 | VITE_GLOB_API_URL=/api 6 | 7 | VITE_VISUALIZER=true 8 | -------------------------------------------------------------------------------- /web/apps/web-ele/.env.analyze: -------------------------------------------------------------------------------- 1 | # public path 2 | VITE_BASE=/ 3 | 4 | # Basic interface address SPA 5 | VITE_GLOB_API_URL=/api 6 | 7 | VITE_VISUALIZER=true 8 | -------------------------------------------------------------------------------- /web/apps/web-naive/.env.analyze: -------------------------------------------------------------------------------- 1 | # public path 2 | VITE_BASE=/ 3 | 4 | # Basic interface address SPA 5 | VITE_GLOB_API_URL=/api 6 | 7 | VITE_VISUALIZER=true 8 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/tree/index.ts: -------------------------------------------------------------------------------- 1 | export { default as VbenTree } from './tree.vue'; 2 | export type { FlattenedItem } from 'radix-vue'; 3 | -------------------------------------------------------------------------------- /web/tea.yaml: -------------------------------------------------------------------------------- 1 | # https://tea.xyz/what-is-this-file 2 | --- 3 | version: 1.0.0 4 | codeOwners: 5 | - '0xB33cc732DFc15Cd39eF50Fb165c876E24417E48f' 6 | quorum: 1 7 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/components/pin-input/index.ts: -------------------------------------------------------------------------------- 1 | export { default as VbenPinInput } from './input.vue'; 2 | 3 | export type * from './types'; 4 | -------------------------------------------------------------------------------- /web/packages/effects/layouts/src/widgets/notification/index.ts: -------------------------------------------------------------------------------- 1 | export { default as Notification } from './notification.vue'; 2 | 3 | export type * from './types'; 4 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/menu-ui/src/components/normal-menu/index.ts: -------------------------------------------------------------------------------- 1 | export type * from './normal-menu'; 2 | export { default as NormalMenu } from './normal-menu.vue'; 3 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/components/segmented/index.ts: -------------------------------------------------------------------------------- 1 | export { default as VbenSegmented } from './segmented.vue'; 2 | 3 | export type * from './types'; 4 | -------------------------------------------------------------------------------- /web/packages/effects/layouts/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './authentication'; 2 | export * from './basic'; 3 | export * from './iframe'; 4 | export * from './widgets'; 5 | -------------------------------------------------------------------------------- /web/packages/effects/request/src/request-client/index.ts: -------------------------------------------------------------------------------- 1 | export * from './preset-interceptors'; 2 | export * from './request-client'; 3 | export type * from './types'; 4 | -------------------------------------------------------------------------------- /backend/ai/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class AiConfig(AppConfig): 5 | default_auto_field = 'django.db.models.BigAutoField' 6 | name = 'ai' 7 | -------------------------------------------------------------------------------- /docs/src/pages/markdown-page.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Markdown page example 3 | --- 4 | 5 | # Markdown page example 6 | 7 | You don't need React to write simple standalone pages. 8 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './components'; 2 | export * from './ui'; 3 | export { createContext, Slot, VisuallyHidden } from 'radix-vue'; 4 | -------------------------------------------------------------------------------- /web/packages/effects/common-ui/src/ui/index.ts: -------------------------------------------------------------------------------- 1 | export * from './about'; 2 | export * from './authentication'; 3 | export * from './dashboard'; 4 | export * from './fallback'; 5 | -------------------------------------------------------------------------------- /web/packages/effects/plugins/src/echarts/index.ts: -------------------------------------------------------------------------------- 1 | export * from './echarts'; 2 | export { default as EchartsUI } from './echarts-ui.vue'; 3 | export * from './use-echarts'; 4 | -------------------------------------------------------------------------------- /docs/blog/2021-08-26-welcome/docusaurus-plushie-banner.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XIE7654/django-vue3-admin/HEAD/docs/blog/2021-08-26-welcome/docusaurus-plushie-banner.jpeg -------------------------------------------------------------------------------- /web/apps/web-antd/src/components/table-action/index.ts: -------------------------------------------------------------------------------- 1 | export * from './icons'; 2 | 3 | export { default as TableAction } from './table-action.vue'; 4 | export * from './typing'; 5 | -------------------------------------------------------------------------------- /web/docs/src/_env/node/adapter/form.ts: -------------------------------------------------------------------------------- 1 | export const useVbenForm = () => {}; 2 | export const z = {}; 3 | export type VbenFormSchema = any; 4 | export type VbenFormProps = any; 5 | -------------------------------------------------------------------------------- /web/internal/vite-config/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './config'; 2 | export * from './options'; 3 | export * from './plugins'; 4 | export { loadAndConvertEnv } from './utils/env'; 5 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/tabs-ui/src/components/index.ts: -------------------------------------------------------------------------------- 1 | export { default as TabsChrome } from './tabs-chrome/tabs.vue'; 2 | export { default as Tabs } from './tabs/tabs.vue'; 3 | -------------------------------------------------------------------------------- /docs/docs/essential/introduction.md: -------------------------------------------------------------------------------- 1 | --- 2 | sidebar_position: 1 3 | --- 4 | # 介绍 5 | 6 | django-vue3-admin 是一个基于 Django 后端与 Vue3 前端的全栈管理系统解决方案,集成了权限管理、菜单管理、用户管理等常用功能,支持多种前端框架,适合中后台管理系统开发。 -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/components/breadcrumb/index.ts: -------------------------------------------------------------------------------- 1 | export { default as VbenBreadcrumbView } from './breadcrumb-view.vue'; 2 | 3 | export type * from './types'; 4 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/components/context-menu/index.ts: -------------------------------------------------------------------------------- 1 | export { default as VbenContextMenu } from './context-menu.vue'; 2 | 3 | export type * from './interface'; 4 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/components/segmented/types.ts: -------------------------------------------------------------------------------- 1 | interface SegmentedItem { 2 | label: string; 3 | value: string; 4 | } 5 | 6 | export type { SegmentedItem }; 7 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/components/spinner/index.ts: -------------------------------------------------------------------------------- 1 | export { default as VbenLoading } from './loading.vue'; 2 | export { default as VbenSpinner } from './spinner.vue'; 3 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/button/index.ts: -------------------------------------------------------------------------------- 1 | export * from './button'; 2 | 3 | export { default as Button } from './Button.vue'; 4 | 5 | export type * from './types'; 6 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/scroll-area/index.ts: -------------------------------------------------------------------------------- 1 | export { default as ScrollArea } from './ScrollArea.vue'; 2 | export { default as ScrollBar } from './ScrollBar.vue'; 3 | -------------------------------------------------------------------------------- /web/packages/effects/layouts/src/iframe/index.ts: -------------------------------------------------------------------------------- 1 | export { default as IFrameRouterView } from './iframe-router-view.vue'; 2 | export { default as IFrameView } from './iframe-view.vue'; 3 | -------------------------------------------------------------------------------- /backend/system/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class SystemConfig(AppConfig): 5 | default_auto_field = 'django.db.models.BigAutoField' 6 | name = 'system' 7 | -------------------------------------------------------------------------------- /web/packages/stores/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "@vben/tsconfig/web.json", 4 | "include": ["src", "shim-pinia.d.ts"] 5 | } 6 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/components/hover-card/index.ts: -------------------------------------------------------------------------------- 1 | export { default as VbenHoverCard } from './hover-card.vue'; 2 | export type { HoverCardContentProps } from 'radix-vue'; 3 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/components/tooltip/index.ts: -------------------------------------------------------------------------------- 1 | export { default as VbenHelpTooltip } from './help-tooltip.vue'; 2 | export { default as VbenTooltip } from './tooltip.vue'; 3 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/radio-group/index.ts: -------------------------------------------------------------------------------- 1 | export { default as RadioGroup } from './RadioGroup.vue'; 2 | export { default as RadioGroupItem } from './RadioGroupItem.vue'; 3 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/tabs-ui/src/components/widgets/index.ts: -------------------------------------------------------------------------------- 1 | export { default as TabsToolMore } from './tool-more.vue'; 2 | export { default as TabsToolScreen } from './tool-screen.vue'; 3 | -------------------------------------------------------------------------------- /web/packages/effects/layouts/src/basic/content/index.ts: -------------------------------------------------------------------------------- 1 | export { default as LayoutContentSpinner } from './content-spinner.vue'; 2 | export { default as LayoutContent } from './content.vue'; 3 | -------------------------------------------------------------------------------- /web/packages/effects/layouts/src/widgets/lock-screen/index.ts: -------------------------------------------------------------------------------- 1 | export { default as LockScreenModal } from './lock-screen-modal.vue'; 2 | export { default as LockScreen } from './lock-screen.vue'; 3 | -------------------------------------------------------------------------------- /web/packages/utils/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './helpers'; 2 | export * from '@vben-core/shared/cache'; 3 | export * from '@vben-core/shared/color'; 4 | export * from '@vben-core/shared/utils'; 5 | -------------------------------------------------------------------------------- /backend/utils/string_utils.py: -------------------------------------------------------------------------------- 1 | import re 2 | 3 | def camel_to_snake(name): 4 | s1 = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', name) 5 | return re.sub('([a-z0-9])([A-Z])', r'\1_\2', s1).lower() 6 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/toggle-group/index.ts: -------------------------------------------------------------------------------- 1 | export { default as ToggleGroup } from './ToggleGroup.vue'; 2 | export { default as ToggleGroupItem } from './ToggleGroupItem.vue'; 3 | -------------------------------------------------------------------------------- /web/packages/effects/common-ui/src/components/loading/index.ts: -------------------------------------------------------------------------------- 1 | export * from './directive'; 2 | export { default as Loading } from './loading.vue'; 3 | export { default as Spinner } from './spinner.vue'; 4 | -------------------------------------------------------------------------------- /web/packages/icons/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "@vben/tsconfig/web.json", 4 | "include": ["src"], 5 | "exclude": ["node_modules"] 6 | } 7 | -------------------------------------------------------------------------------- /web/packages/locales/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "@vben/tsconfig/web.json", 4 | "include": ["src"], 5 | "exclude": ["node_modules"] 6 | } 7 | -------------------------------------------------------------------------------- /web/packages/styles/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "@vben/tsconfig/web.json", 4 | "include": ["src"], 5 | "exclude": ["node_modules"] 6 | } 7 | -------------------------------------------------------------------------------- /web/packages/types/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "@vben/tsconfig/web.json", 4 | "include": ["src"], 5 | "exclude": ["node_modules"] 6 | } 7 | -------------------------------------------------------------------------------- /web/scripts/vsh/build.config.ts: -------------------------------------------------------------------------------- 1 | import { defineBuildConfig } from 'unbuild'; 2 | 3 | export default defineBuildConfig({ 4 | clean: true, 5 | declaration: true, 6 | entries: ['src/index'], 7 | }); 8 | -------------------------------------------------------------------------------- /web/scripts/vsh/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "@vben/tsconfig/node.json", 4 | "include": ["src"], 5 | "exclude": ["node_modules"] 6 | } 7 | -------------------------------------------------------------------------------- /ai_service/schemas/user.py: -------------------------------------------------------------------------------- 1 | from pydantic import BaseModel 2 | 3 | class UserOut(BaseModel): 4 | id: int 5 | username: str 6 | email: str = None 7 | 8 | class Config: 9 | orm_mode = True -------------------------------------------------------------------------------- /web/internal/node-utils/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "@vben/tsconfig/node.json", 4 | "include": ["src"], 5 | "exclude": ["node_modules"] 6 | } 7 | -------------------------------------------------------------------------------- /web/internal/vite-config/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "@vben/tsconfig/node.json", 4 | "include": ["src"], 5 | "exclude": ["node_modules"] 6 | } 7 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/popup-ui/src/modal/index.ts: -------------------------------------------------------------------------------- 1 | export type * from './modal'; 2 | export { default as VbenModal } from './modal.vue'; 3 | export { setDefaultModalProps, useVbenModal } from './use-modal'; 4 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/tabs-ui/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './components/widgets'; 2 | export { default as TabsView } from './tabs-view.vue'; 3 | export type { IContextMenuItem } from '@vben-core/shadcn-ui'; 4 | -------------------------------------------------------------------------------- /web/packages/constants/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "@vben/tsconfig/web.json", 4 | "include": ["src"], 5 | "exclude": ["node_modules"] 6 | } 7 | -------------------------------------------------------------------------------- /web/packages/effects/access/src/index.ts: -------------------------------------------------------------------------------- 1 | export { default as AccessControl } from './access-control.vue'; 2 | export * from './accessible'; 3 | export * from './directive'; 4 | export * from './use-access'; 5 | -------------------------------------------------------------------------------- /web/packages/preferences/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "@vben/tsconfig/web.json", 4 | "include": ["src"], 5 | "exclude": ["node_modules"] 6 | } 7 | -------------------------------------------------------------------------------- /web/scripts/turbo-run/build.config.ts: -------------------------------------------------------------------------------- 1 | import { defineBuildConfig } from 'unbuild'; 2 | 3 | export default defineBuildConfig({ 4 | clean: true, 5 | declaration: true, 6 | entries: ['src/index'], 7 | }); 8 | -------------------------------------------------------------------------------- /web/scripts/turbo-run/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "@vben/tsconfig/node.json", 4 | "include": ["src"], 5 | "exclude": ["node_modules"] 6 | } 7 | -------------------------------------------------------------------------------- /web/internal/node-utils/build.config.ts: -------------------------------------------------------------------------------- 1 | import { defineBuildConfig } from 'unbuild'; 2 | 3 | export default defineBuildConfig({ 4 | clean: true, 5 | declaration: true, 6 | entries: ['src/index'], 7 | }); 8 | -------------------------------------------------------------------------------- /web/internal/vite-config/build.config.ts: -------------------------------------------------------------------------------- 1 | import { defineBuildConfig } from 'unbuild'; 2 | 3 | export default defineBuildConfig({ 4 | clean: true, 5 | declaration: true, 6 | entries: ['src/index'], 7 | }); 8 | -------------------------------------------------------------------------------- /web/packages/@core/base/design/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "@vben/tsconfig/web.json", 4 | "include": ["src"], 5 | "exclude": ["node_modules"] 6 | } 7 | -------------------------------------------------------------------------------- /web/packages/@core/base/icons/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "@vben/tsconfig/web.json", 4 | "include": ["src"], 5 | "exclude": ["node_modules"] 6 | } 7 | -------------------------------------------------------------------------------- /web/packages/effects/access/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "@vben/tsconfig/web.json", 4 | "include": ["src"], 5 | "exclude": ["node_modules"] 6 | } 7 | -------------------------------------------------------------------------------- /web/packages/effects/common-ui/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "@vben/tsconfig/web.json", 4 | "include": ["src"], 5 | "exclude": ["node_modules"] 6 | } 7 | -------------------------------------------------------------------------------- /web/packages/effects/layouts/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "@vben/tsconfig/web.json", 4 | "include": ["src"], 5 | "exclude": ["node_modules"] 6 | } 7 | -------------------------------------------------------------------------------- /web/packages/effects/plugins/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "@vben/tsconfig/web.json", 4 | "include": ["src"], 5 | "exclude": ["node_modules"] 6 | } 7 | -------------------------------------------------------------------------------- /web/packages/effects/request/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "@vben/tsconfig/web.json", 4 | "include": ["src"], 5 | "exclude": ["node_modules"] 6 | } 7 | -------------------------------------------------------------------------------- /web/playground/src/views/demos/nested/menu-1.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /web/playground/src/views/demos/nested/menu-2-1.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /web/playground/src/views/demos/nested/menu-3-1.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /docs/docs/essential/deploy.md: -------------------------------------------------------------------------------- 1 | --- 2 | sidebar_position: 5 3 | --- 4 | # 部署 5 | 6 | 1. 克隆项目代码 7 | 2. 安装依赖(前后端) 8 | 3. 配置数据库与环境变量 9 | 4. 运行数据库迁移 10 | 5. 启动后端服务 11 | 6. 启动前端服务 12 | 13 | 可根据实际环境选择 Docker 或传统部署方式。 -------------------------------------------------------------------------------- /web/apps/backend-mock/api/status.ts: -------------------------------------------------------------------------------- 1 | export default eventHandler((event) => { 2 | const { status } = getQuery(event); 3 | setResponseStatus(event, Number(status)); 4 | return useResponseError(`${status}`); 5 | }); 6 | -------------------------------------------------------------------------------- /web/packages/@core/base/icons/build.config.ts: -------------------------------------------------------------------------------- 1 | import { defineBuildConfig } from 'unbuild'; 2 | 3 | export default defineBuildConfig({ 4 | clean: true, 5 | declaration: true, 6 | entries: ['src/index'], 7 | }); 8 | -------------------------------------------------------------------------------- /web/packages/@core/base/shared/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "@vben/tsconfig/library.json", 4 | "include": ["src"], 5 | "exclude": ["node_modules"] 6 | } 7 | -------------------------------------------------------------------------------- /web/packages/@core/base/typings/build.config.ts: -------------------------------------------------------------------------------- 1 | import { defineBuildConfig } from 'unbuild'; 2 | 3 | export default defineBuildConfig({ 4 | clean: true, 5 | declaration: true, 6 | entries: ['src/index'], 7 | }); 8 | -------------------------------------------------------------------------------- /web/packages/@core/base/typings/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "@vben/tsconfig/library.json", 4 | "include": ["src"], 5 | "exclude": ["node_modules"] 6 | } 7 | -------------------------------------------------------------------------------- /web/packages/@core/composables/build.config.ts: -------------------------------------------------------------------------------- 1 | import { defineBuildConfig } from 'unbuild'; 2 | 3 | export default defineBuildConfig({ 4 | clean: true, 5 | declaration: true, 6 | entries: ['src/index'], 7 | }); 8 | -------------------------------------------------------------------------------- /web/packages/@core/composables/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "@vben/tsconfig/library.json", 4 | "include": ["src"], 5 | "exclude": ["node_modules"] 6 | } 7 | -------------------------------------------------------------------------------- /web/packages/@core/preferences/build.config.ts: -------------------------------------------------------------------------------- 1 | import { defineBuildConfig } from 'unbuild'; 2 | 3 | export default defineBuildConfig({ 4 | clean: true, 5 | declaration: true, 6 | entries: ['src/index'], 7 | }); 8 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/layout-ui/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "@vben/tsconfig/web.json", 4 | "include": ["src"], 5 | "exclude": ["node_modules"] 6 | } 7 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/menu-ui/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "@vben/tsconfig/web.json", 4 | "include": ["src"], 5 | "exclude": ["node_modules"] 6 | } 7 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/popup-ui/src/drawer/index.ts: -------------------------------------------------------------------------------- 1 | export type * from './drawer'; 2 | export { default as VbenDrawer } from './drawer.vue'; 3 | export { setDefaultDrawerProps, useVbenDrawer } from './use-drawer'; 4 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/popup-ui/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "@vben/tsconfig/web.json", 4 | "include": ["src"], 5 | "exclude": ["node_modules"] 6 | } 7 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/tabs-ui/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "@vben/tsconfig/web.json", 4 | "include": ["src"], 5 | "exclude": ["node_modules"] 6 | } 7 | -------------------------------------------------------------------------------- /web/playground/src/views/_core/fallback/coming-soon.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /web/playground/src/views/demos/nested/menu-3-2-1.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /ai_service/schemas/ai_chat.py: -------------------------------------------------------------------------------- 1 | from pydantic import BaseModel 2 | 3 | class ChatCreate(BaseModel): 4 | pass 5 | 6 | class Chat(ChatCreate): 7 | id: int 8 | 9 | class Config: 10 | orm_mode = True -------------------------------------------------------------------------------- /web/apps/web-antd/src/views/_core/fallback/coming-soon.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /web/apps/web-ele/src/views/_core/fallback/coming-soon.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /web/apps/web-naive/src/views/_core/fallback/coming-soon.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /web/internal/lint-configs/eslint-config/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "@vben/tsconfig/node.json", 4 | "include": ["src"], 5 | "exclude": ["node_modules"] 6 | } 7 | -------------------------------------------------------------------------------- /web/packages/@core/base/design/src/index.ts: -------------------------------------------------------------------------------- 1 | import './design-tokens'; 2 | 3 | import './css/global.css'; 4 | import './css/transition.css'; 5 | import './css/nprogress.css'; 6 | import './css/ui.css'; 7 | 8 | export {}; 9 | -------------------------------------------------------------------------------- /web/internal/lint-configs/eslint-config/build.config.ts: -------------------------------------------------------------------------------- 1 | import { defineBuildConfig } from 'unbuild'; 2 | 3 | export default defineBuildConfig({ 4 | clean: true, 5 | declaration: true, 6 | entries: ['src/index'], 7 | }); 8 | -------------------------------------------------------------------------------- /web/packages/@core/preferences/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "@vben/tsconfig/web.json", 4 | "include": ["src", "__tests__"], 5 | "exclude": ["node_modules"] 6 | } 7 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/form-ui/src/form-render/index.ts: -------------------------------------------------------------------------------- 1 | export { default as FormField } from './form-field.vue'; 2 | export { default as FormLabel } from './form-label.vue'; 3 | export { default as Form } from './form.vue'; 4 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/layout-ui/src/components/widgets/index.ts: -------------------------------------------------------------------------------- 1 | export { default as SidebarCollapseButton } from './sidebar-collapse-button.vue'; 2 | export { default as SidebarFixedButton } from './sidebar-fixed-button.vue'; 3 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/form-ui/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "@vben/tsconfig/web.json", 4 | "include": ["src", "__tests__"], 5 | "exclude": ["node_modules"] 6 | } 7 | -------------------------------------------------------------------------------- /backend/utils/authentication.py: -------------------------------------------------------------------------------- 1 | from rest_framework.authentication import TokenAuthentication 2 | 3 | class BearerTokenAuthentication(TokenAuthentication): 4 | """ 5 | 使用 'Bearer' 前缀的 Token 认证 6 | """ 7 | keyword = 'Bearer' -------------------------------------------------------------------------------- /web/.prettierignore: -------------------------------------------------------------------------------- 1 | dist 2 | dev-dist 3 | .local 4 | .output.js 5 | node_modules 6 | .nvmrc 7 | coverage 8 | CODEOWNERS 9 | .nitro 10 | .output 11 | 12 | 13 | **/*.svg 14 | **/*.sh 15 | 16 | public 17 | .npmrc 18 | *-lock.yaml 19 | -------------------------------------------------------------------------------- /web/apps/web-antd/src/views/_core/about/index.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /web/apps/web-ele/src/views/_core/about/index.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /web/apps/web-naive/src/views/_core/about/index.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /web/packages/@core/base/design/src/scss-bem/constants.scss: -------------------------------------------------------------------------------- 1 | $namespace: 'vben' !default; 2 | $common-separator: '-' !default; 3 | $element-separator: '__' !default; 4 | $modifier-separator: '--' !default; 5 | $state-prefix: 'is' !default; 6 | -------------------------------------------------------------------------------- /web/packages/@core/base/typings/src/tabs.ts: -------------------------------------------------------------------------------- 1 | import type { RouteLocationNormalized } from 'vue-router'; 2 | 3 | export interface TabDefinition extends RouteLocationNormalized { 4 | /** 5 | * 标签页的key 6 | */ 7 | key?: string; 8 | } 9 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/form/injectionKeys.ts: -------------------------------------------------------------------------------- 1 | import type { InjectionKey } from 'vue'; 2 | 3 | // eslint-disable-next-line symbol-description 4 | export const FORM_ITEM_INJECTION_KEY = Symbol() as InjectionKey; 5 | -------------------------------------------------------------------------------- /web/packages/effects/plugins/src/motion/index.ts: -------------------------------------------------------------------------------- 1 | export * from './types'; 2 | 3 | export { 4 | MotionComponent as Motion, 5 | MotionDirective, 6 | MotionGroupComponent as MotionGroup, 7 | MotionPlugin, 8 | } from '@vueuse/motion'; 9 | -------------------------------------------------------------------------------- /web/playground/src/views/_core/about/index.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /docs/src/components/HomepageFeatures/styles.module.css: -------------------------------------------------------------------------------- 1 | .features { 2 | display: flex; 3 | align-items: center; 4 | padding: 2rem 0; 5 | width: 100%; 6 | } 7 | 8 | .featureSvg { 9 | height: 200px; 10 | width: 200px; 11 | } 12 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/menu-ui/src/index.ts: -------------------------------------------------------------------------------- 1 | export { default as MenuBadge } from './components/menu-badge.vue'; 2 | export * from './components/normal-menu'; 3 | export { default as Menu } from './menu.vue'; 4 | export type * from './types'; 5 | -------------------------------------------------------------------------------- /web/packages/effects/layouts/src/widgets/preferences/index.ts: -------------------------------------------------------------------------------- 1 | export { default as PreferencesButton } from './preferences-button.vue'; 2 | export { default as Preferences } from './preferences.vue'; 3 | export * from './use-open-preferences'; 4 | -------------------------------------------------------------------------------- /docs/docs/essential/quickstart-frontend.md: -------------------------------------------------------------------------------- 1 | --- 2 | sidebar_position: 3 3 | --- 4 | # 快速启动-前端 5 | 6 | 以 web-antd 为例: 7 | 8 | ```bash 9 | cd web 10 | pnpm install 11 | npm run dev:antd 12 | ``` 13 | 14 | 其他前端(web-ele、web-naive)暂时未兼容, 未来支持web-ele -------------------------------------------------------------------------------- /web/packages/@core/base/design/vite.config.mts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from '@vben/vite-config'; 2 | 3 | export default defineConfig(async () => { 4 | return { 5 | vite: { 6 | publicDir: 'src/scss-bem', 7 | }, 8 | }; 9 | }); 10 | -------------------------------------------------------------------------------- /web/packages/@core/base/typings/src/index.ts: -------------------------------------------------------------------------------- 1 | export type * from './app'; 2 | export type * from './basic'; 3 | export type * from './helper'; 4 | export type * from './menu-record'; 5 | export type * from './tabs'; 6 | export type * from './vue-router'; 7 | -------------------------------------------------------------------------------- /web/internal/tsconfig/web-app.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "display": "Web Application", 4 | "extends": "./web.json", 5 | "compilerOptions": { 6 | "types": ["vite/client", "@vben/types/global"] 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /docs/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | // This file is not used in compilation. It is here just for a nice editor experience. 3 | "extends": "@docusaurus/tsconfig", 4 | "compilerOptions": { 5 | "baseUrl": "." 6 | }, 7 | "exclude": [".docusaurus", "build"] 8 | } 9 | -------------------------------------------------------------------------------- /web/apps/backend-mock/error.ts: -------------------------------------------------------------------------------- 1 | import type { NitroErrorHandler } from 'nitropack'; 2 | 3 | const errorHandler: NitroErrorHandler = function (error, event) { 4 | event.node.res.end(`[Error Handler] ${error.stack}`); 5 | }; 6 | 7 | export default errorHandler; 8 | -------------------------------------------------------------------------------- /web/packages/effects/layouts/src/widgets/notification/types.ts: -------------------------------------------------------------------------------- 1 | interface NotificationItem { 2 | avatar: string; 3 | date: string; 4 | isRead?: boolean; 5 | message: string; 6 | title: string; 7 | } 8 | 9 | export type { NotificationItem }; 10 | -------------------------------------------------------------------------------- /web/playground/src/api/examples/json-bigint.ts: -------------------------------------------------------------------------------- 1 | import { requestClient } from '#/api/request'; 2 | 3 | /** 4 | * 发起请求 5 | */ 6 | async function getBigIntData() { 7 | return requestClient.get('/demo/bigint'); 8 | } 9 | 10 | export { getBigIntData }; 11 | -------------------------------------------------------------------------------- /docs/docs/essential/features.md: -------------------------------------------------------------------------------- 1 | --- 2 | sidebar_position: 2 3 | --- 4 | # 功能列表 5 | 6 | - 用户与权限管理 7 | - 菜单与角色管理 8 | - 部门管理 9 | - 数据字典 10 | - 日志审计 11 | - 多端前端支持(Antd、Element、Naive) 12 | - Docker 一键部署 13 | - API 接口自动生成 14 | - 多环境配置 15 | - 任务调度(Celery) 16 | - 代码生成器 -------------------------------------------------------------------------------- /web/apps/web-antd/.env: -------------------------------------------------------------------------------- 1 | # 应用标题 2 | VITE_APP_TITLE=Django Vue Admin 3 | 4 | # 应用命名空间,用于缓存、store等功能的前缀,确保隔离 5 | VITE_APP_NAMESPACE=django-vue-admin 6 | 7 | # 对store进行加密的密钥,在将store持久化到localStorage时会使用该密钥进行加密 8 | VITE_APP_STORE_SECURE_KEY=d41d8cd98f00b204e9800998ecf8427e 9 | -------------------------------------------------------------------------------- /web/docs/src/demos/vben-count-to-animator/basic/index.vue: -------------------------------------------------------------------------------- 1 | 4 | 7 | -------------------------------------------------------------------------------- /web/docs/src/demos/vben-modal/extra/modal.vue: -------------------------------------------------------------------------------- 1 | 6 | 9 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/components/dropdown-menu/index.ts: -------------------------------------------------------------------------------- 1 | export { default as VbenDropdownMenu } from './dropdown-menu.vue'; 2 | export { default as VbenDropdownRadioMenu } from './dropdown-radio-menu.vue'; 3 | 4 | export type * from './interface'; 5 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/hover-card/index.ts: -------------------------------------------------------------------------------- 1 | export { default as HoverCard } from './HoverCard.vue'; 2 | export { default as HoverCardContent } from './HoverCardContent.vue'; 3 | export { default as HoverCardTrigger } from './HoverCardTrigger.vue'; 4 | -------------------------------------------------------------------------------- /web/apps/web-antd/src/views/_core/fallback/forbidden.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /web/apps/web-antd/src/views/_core/fallback/not-found.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /web/apps/web-ele/src/views/_core/fallback/forbidden.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /web/apps/web-ele/src/views/_core/fallback/not-found.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /web/docs/src/demos/vben-drawer/extra/drawer.vue: -------------------------------------------------------------------------------- 1 | 6 | 9 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/avatar/index.ts: -------------------------------------------------------------------------------- 1 | export * from './avatar'; 2 | export { default as Avatar } from './Avatar.vue'; 3 | export { default as AvatarFallback } from './AvatarFallback.vue'; 4 | export { default as AvatarImage } from './AvatarImage.vue'; 5 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/resizable/index.ts: -------------------------------------------------------------------------------- 1 | export { default as ResizableHandle } from './ResizableHandle.vue'; 2 | export { default as ResizablePanelGroup } from './ResizablePanelGroup.vue'; 3 | export { SplitterPanel as ResizablePanel } from 'radix-vue'; 4 | -------------------------------------------------------------------------------- /web/playground/src/views/_core/fallback/forbidden.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /web/playground/src/views/_core/fallback/not-found.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /ai_service/requirements.txt: -------------------------------------------------------------------------------- 1 | fastapi==0.116.1 2 | uvicorn[standard]==0.35.0 3 | langchain-openai==0.3.28 4 | langchain-deepseek==0.1.3 5 | langchain==0.3.26 6 | langchain-community==0.3.26 7 | PyMySQL==1.1.1 8 | SQLAlchemy==2.0.41 9 | gunicorn==23.0.0 10 | dashscope==1.23.8 -------------------------------------------------------------------------------- /web/apps/web-antd/src/views/_core/fallback/internal-error.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /web/apps/web-ele/src/views/_core/fallback/internal-error.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /web/apps/web-ele/src/views/_core/fallback/offline.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /web/apps/web-naive/src/views/_core/fallback/forbidden.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /web/apps/web-naive/src/views/_core/fallback/not-found.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /web/playground/src/views/_core/fallback/internal-error.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /web/playground/src/views/_core/fallback/offline.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /web/apps/web-antd/src/views/_core/fallback/offline.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /web/apps/web-naive/src/views/_core/fallback/internal-error.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /web/apps/web-naive/src/views/_core/fallback/offline.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/menu-ui/src/components/index.ts: -------------------------------------------------------------------------------- 1 | export { default as MenuBadge } from './menu-badge.vue'; 2 | export { default as MenuItem } from './menu-item.vue'; 3 | export { default as Menu } from './menu.vue'; 4 | export { default as SubMenu } from './sub-menu.vue'; 5 | -------------------------------------------------------------------------------- /web/apps/web-antd/src/layouts/index.ts: -------------------------------------------------------------------------------- 1 | const BasicLayout = () => import('./basic.vue'); 2 | const AuthPageLayout = () => import('./auth.vue'); 3 | 4 | const IFrameView = () => import('@vben/layouts').then((m) => m.IFrameView); 5 | 6 | export { AuthPageLayout, BasicLayout, IFrameView }; 7 | -------------------------------------------------------------------------------- /web/apps/web-ele/src/layouts/index.ts: -------------------------------------------------------------------------------- 1 | const BasicLayout = () => import('./basic.vue'); 2 | const AuthPageLayout = () => import('./auth.vue'); 3 | 4 | const IFrameView = () => import('@vben/layouts').then((m) => m.IFrameView); 5 | 6 | export { AuthPageLayout, BasicLayout, IFrameView }; 7 | -------------------------------------------------------------------------------- /web/apps/web-naive/src/layouts/index.ts: -------------------------------------------------------------------------------- 1 | const BasicLayout = () => import('./basic.vue'); 2 | const AuthPageLayout = () => import('./auth.vue'); 3 | 4 | const IFrameView = () => import('@vben/layouts').then((m) => m.IFrameView); 5 | 6 | export { AuthPageLayout, BasicLayout, IFrameView }; 7 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogOverlay.vue: -------------------------------------------------------------------------------- 1 | 6 | 9 | -------------------------------------------------------------------------------- /web/packages/stores/shim-pinia.d.ts: -------------------------------------------------------------------------------- 1 | // https://github.com/vuejs/pinia/issues/2098 2 | declare module 'pinia' { 3 | export function acceptHMRUpdate( 4 | initialUseStore: any | StoreDefinition, 5 | hot: any, 6 | ): (newModule: any) => any; 7 | } 8 | 9 | export {}; 10 | -------------------------------------------------------------------------------- /web/playground/src/api/core/user.ts: -------------------------------------------------------------------------------- 1 | import type { UserInfo } from '@vben/types'; 2 | 3 | import { requestClient } from '#/api/request'; 4 | 5 | /** 6 | * 获取用户信息 7 | */ 8 | export async function getUserInfoApi() { 9 | return requestClient.get('/user/info'); 10 | } 11 | -------------------------------------------------------------------------------- /web/playground/src/layouts/index.ts: -------------------------------------------------------------------------------- 1 | const BasicLayout = () => import('./basic.vue'); 2 | const AuthPageLayout = () => import('./auth.vue'); 3 | 4 | const IFrameView = () => import('@vben/layouts').then((m) => m.IFrameView); 5 | 6 | export { AuthPageLayout, BasicLayout, IFrameView }; 7 | -------------------------------------------------------------------------------- /web/apps/web-ele/src/api/core/user.ts: -------------------------------------------------------------------------------- 1 | import type { UserInfo } from '@vben/types'; 2 | 3 | import { requestClient } from '#/api/request'; 4 | 5 | /** 6 | * 获取用户信息 7 | */ 8 | export async function getUserInfoApi() { 9 | return requestClient.get('/system/info/'); 10 | } 11 | -------------------------------------------------------------------------------- /web/apps/web-naive/src/api/core/user.ts: -------------------------------------------------------------------------------- 1 | import type { UserInfo } from '@vben/types'; 2 | 3 | import { requestClient } from '#/api/request'; 4 | 5 | /** 6 | * 获取用户信息 7 | */ 8 | export async function getUserInfoApi() { 9 | return requestClient.get('/user/info'); 10 | } 11 | -------------------------------------------------------------------------------- /web/docs/src/commercial/technical-support.md: -------------------------------------------------------------------------------- 1 | # 技术支持 2 | 3 | ## 问题反馈 4 | 5 | 在使用项目的过程中,如果遇到问题,你可以先详细阅读本文档,未找到解决方案时,可以通过以下方式获取技术支持: 6 | 7 | - 通过 [GitHub Issues](https://github.com/vbenjs/vue-vben-admin/issues) 8 | - 通过 [GitHub Discussions](https://github.com/vbenjs/vue-vben-admin/discussions) 9 | -------------------------------------------------------------------------------- /web/packages/effects/common-ui/src/ui/dashboard/analysis/index.ts: -------------------------------------------------------------------------------- 1 | export { default as AnalysisChartCard } from './analysis-chart-card.vue'; 2 | export { default as AnalysisChartsTabs } from './analysis-charts-tabs.vue'; 3 | export { default as AnalysisOverview } from './analysis-overview.vue'; 4 | -------------------------------------------------------------------------------- /web/apps/web-antd/src/api/core/user.ts: -------------------------------------------------------------------------------- 1 | import type { UserInfo } from '@vben/types'; 2 | 3 | import { requestClient } from '#/api/request'; 4 | 5 | /** 6 | * 获取用户信息 7 | */ 8 | export async function getUserInfoApi() { 9 | return requestClient.get('/system/info/'); 10 | } 11 | -------------------------------------------------------------------------------- /web/internal/lint-configs/eslint-config/src/configs/command.ts: -------------------------------------------------------------------------------- 1 | import createCommand from 'eslint-plugin-command/config'; 2 | 3 | export async function command() { 4 | return [ 5 | { 6 | // @ts-expect-error - no types 7 | ...createCommand(), 8 | }, 9 | ]; 10 | } 11 | -------------------------------------------------------------------------------- /web/internal/tailwind-config/build.config.ts: -------------------------------------------------------------------------------- 1 | import { defineBuildConfig } from 'unbuild'; 2 | 3 | export default defineBuildConfig({ 4 | clean: true, 5 | declaration: true, 6 | entries: ['src/index', './src/postcss.config'], 7 | rollup: { 8 | emitCJS: true, 9 | }, 10 | }); 11 | -------------------------------------------------------------------------------- /web/internal/tailwind-config/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "@vben/tsconfig/node.json", 4 | "compilerOptions": { 5 | "moduleResolution": "bundler" 6 | }, 7 | "include": ["src"], 8 | "exclude": ["node_modules"] 9 | } 10 | -------------------------------------------------------------------------------- /web/packages/@core/base/shared/src/utils/cn.ts: -------------------------------------------------------------------------------- 1 | import type { ClassValue } from 'clsx'; 2 | 3 | import { clsx } from 'clsx'; 4 | import { twMerge } from 'tailwind-merge'; 5 | 6 | function cn(...inputs: ClassValue[]) { 7 | return twMerge(clsx(inputs)); 8 | } 9 | 10 | export { cn }; 11 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/popover/index.ts: -------------------------------------------------------------------------------- 1 | export { default as Popover } from './Popover.vue'; 2 | export { default as PopoverContent } from './PopoverContent.vue'; 3 | export { default as PopoverTrigger } from './PopoverTrigger.vue'; 4 | export { PopoverAnchor } from 'radix-vue'; 5 | -------------------------------------------------------------------------------- /web/docs/src/demos/vben-modal/draggable/modal.vue: -------------------------------------------------------------------------------- 1 | 8 | 11 | -------------------------------------------------------------------------------- /web/docs/src/sponsor/personal.md: -------------------------------------------------------------------------------- 1 | # 赞助 2 | 3 | 如果你觉得这个项目对你有帮助,你可以帮作者买一杯咖啡表示支持! 4 | 5 | ![](https://unpkg.com/@vbenjs/static-source@0.1.7/source/sponsor.png) 6 | 7 | 您的赞助将帮助我们: 8 | 9 | - 维持项目的基础设施,如服务器、域名、社群费用。 10 | - 支持开发者的贡献和加快新功能的开发。 11 | 12 | 感谢所有现有的和未来的赞助者,您的支持对我们来说至关重要,让我们一起推动项目继续前行。 13 | -------------------------------------------------------------------------------- /web/packages/utils/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "@vben/tsconfig/library.json", 4 | "compilerOptions": { 5 | "types": ["@vben-core/typings/vue-router"] 6 | }, 7 | "include": ["src"], 8 | "exclude": ["node_modules"] 9 | } 10 | -------------------------------------------------------------------------------- /web/playground/src/api/examples/status.ts: -------------------------------------------------------------------------------- 1 | import { requestClient } from '#/api/request'; 2 | 3 | /** 4 | * 模拟任意状态码 5 | */ 6 | async function getMockStatusApi(status: string) { 7 | return requestClient.get('/status', { params: { status } }); 8 | } 9 | 10 | export { getMockStatusApi }; 11 | -------------------------------------------------------------------------------- /web/playground/src/views/demos/access/user-visible.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /web/playground/src/views/demos/active-icon/index.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /web/internal/node-utils/src/path.ts: -------------------------------------------------------------------------------- 1 | import { posix } from 'node:path'; 2 | 3 | /** 4 | * 将给定的文件路径转换为 POSIX 风格。 5 | * @param {string} pathname - 原始文件路径。 6 | */ 7 | function toPosixPath(pathname: string) { 8 | return pathname.split(`\\`).join(posix.sep); 9 | } 10 | 11 | export { toPosixPath }; 12 | -------------------------------------------------------------------------------- /web/packages/@core/composables/src/use-is-mobile.ts: -------------------------------------------------------------------------------- 1 | import { breakpointsTailwind, useBreakpoints } from '@vueuse/core'; 2 | 3 | export function useIsMobile() { 4 | const breakpoints = useBreakpoints(breakpointsTailwind); 5 | const isMobile = breakpoints.smaller('md'); 6 | return { isMobile }; 7 | } 8 | -------------------------------------------------------------------------------- /web/playground/src/views/demos/access/admin-visible.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /web/playground/src/views/demos/access/super-visible.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /web/playground/src/views/demos/features/menu-query/index.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /web/playground/src/views/demos/features/new-window/index.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /web/internal/lint-configs/eslint-config/src/util.ts: -------------------------------------------------------------------------------- 1 | export type Awaitable = Promise | T; 2 | 3 | export async function interopDefault( 4 | m: Awaitable, 5 | ): Promise { 6 | const resolved = await m; 7 | return (resolved as any).default || resolved; 8 | } 9 | -------------------------------------------------------------------------------- /web/packages/@core/base/shared/src/color/color.ts: -------------------------------------------------------------------------------- 1 | import { TinyColor } from '@ctrl/tinycolor'; 2 | 3 | export function isDarkColor(color: string) { 4 | return new TinyColor(color).isDark(); 5 | } 6 | 7 | export function isLightColor(color: string) { 8 | return new TinyColor(color).isLight(); 9 | } 10 | -------------------------------------------------------------------------------- /web/packages/effects/hooks/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "@vben/tsconfig/web.json", 4 | "compilerOptions": { 5 | "types": ["vite/client", "@vben/types/global"] 6 | }, 7 | "include": ["src"], 8 | "exclude": ["node_modules"] 9 | } 10 | -------------------------------------------------------------------------------- /web/packages/effects/layouts/src/basic/menu/index.ts: -------------------------------------------------------------------------------- 1 | export { default as LayoutExtraMenu } from './extra-menu.vue'; 2 | export { default as LayoutMenu } from './menu.vue'; 3 | export { default as LayoutMixedMenu } from './mixed-menu.vue'; 4 | export * from './use-extra-menu'; 5 | export * from './use-mixed-menu'; 6 | -------------------------------------------------------------------------------- /web/playground/src/views/demos/access/menu-visible-403.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /web/playground/src/views/demos/breadcrumb/level-detail.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /docs/docs/essential/frontend-manual.md: -------------------------------------------------------------------------------- 1 | --- 2 | sidebar_position: 9 3 | --- 4 | # 前端手册 5 | 6 | ## 目录结构 7 | - web/apps/web-antd:Ant Design Vue 版本 8 | - web/apps/web-ele:Element Plus 版本 9 | - web/apps/web-naive:Naive UI 版本 10 | 11 | ## 常用命令 12 | - 安装依赖:`pnpm install` 13 | - 启动开发:`pnpm dev` 14 | - 打包构建:`pnpm build` -------------------------------------------------------------------------------- /web/packages/effects/layouts/src/basic/footer/footer.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | -------------------------------------------------------------------------------- /web/packages/@core/base/icons/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './create-icon'; 2 | 3 | export * from './lucide'; 4 | 5 | export type { IconifyIcon as IconifyIconStructure } from '@iconify/vue'; 6 | export { 7 | addCollection, 8 | addIcon, 9 | Icon as IconifyIcon, 10 | listIcons, 11 | } from '@iconify/vue'; 12 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/tooltip/index.ts: -------------------------------------------------------------------------------- 1 | export { default as Tooltip } from './Tooltip.vue'; 2 | export { default as TooltipContent } from './TooltipContent.vue'; 3 | export { default as TooltipProvider } from './TooltipProvider.vue'; 4 | export { default as TooltipTrigger } from './TooltipTrigger.vue'; 5 | -------------------------------------------------------------------------------- /web/docs/tailwind.config.mjs: -------------------------------------------------------------------------------- 1 | import tailwindcssConfig from '@vben/tailwind-config'; 2 | 3 | export default { 4 | ...tailwindcssConfig, 5 | content: [ 6 | ...tailwindcssConfig.content, 7 | '.vitepress/**/*.{js,mts,ts,vue}', 8 | 'src/demos/**/*.{js,mts,ts,vue}', 9 | 'src/**/*.md', 10 | ], 11 | }; 12 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/Breadcrumb.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/pin-input/index.ts: -------------------------------------------------------------------------------- 1 | export { default as PinInput } from './PinInput.vue'; 2 | export { default as PinInputGroup } from './PinInputGroup.vue'; 3 | export { default as PinInputInput } from './PinInputInput.vue'; 4 | export { default as PinInputSeparator } from './PinInputSeparator.vue'; 5 | -------------------------------------------------------------------------------- /web/playground/src/api/core/menu.ts: -------------------------------------------------------------------------------- 1 | import type { RouteRecordStringComponent } from '@vben/types'; 2 | 3 | import { requestClient } from '#/api/request'; 4 | 5 | /** 6 | * 获取用户所有菜单 7 | */ 8 | export async function getAllMenusApi() { 9 | return requestClient.get('/menu/all'); 10 | } 11 | -------------------------------------------------------------------------------- /web/apps/web-naive/src/api/core/menu.ts: -------------------------------------------------------------------------------- 1 | import type { RouteRecordStringComponent } from '@vben/types'; 2 | 3 | import { requestClient } from '#/api/request'; 4 | 5 | /** 6 | * 获取用户所有菜单 7 | */ 8 | export async function getAllMenusApi() { 9 | return requestClient.get('/menu/all'); 10 | } 11 | -------------------------------------------------------------------------------- /web/internal/node-utils/src/date.ts: -------------------------------------------------------------------------------- 1 | import dayjs from 'dayjs'; 2 | import timezone from 'dayjs/plugin/timezone'; 3 | import utc from 'dayjs/plugin/utc'; 4 | 5 | dayjs.extend(utc); 6 | dayjs.extend(timezone); 7 | 8 | dayjs.tz.setDefault('Asia/Shanghai'); 9 | 10 | const dateUtil = dayjs; 11 | 12 | export { dateUtil }; 13 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/accordion/index.ts: -------------------------------------------------------------------------------- 1 | export { default as Accordion } from './Accordion.vue'; 2 | export { default as AccordionContent } from './AccordionContent.vue'; 3 | export { default as AccordionItem } from './AccordionItem.vue'; 4 | export { default as AccordionTrigger } from './AccordionTrigger.vue'; 5 | -------------------------------------------------------------------------------- /web/packages/effects/layouts/src/basic/README.md: -------------------------------------------------------------------------------- 1 | ## layout 2 | 3 | ### header 4 | 5 | - 支持N个自定义插槽,命名方式:header-right-n,header-left-n 6 | - header-left-n ,排序方式:0-19 ,breadcrumb 21-x 7 | - header-right-n ,排序方式:0-49,global-search,51-59,theme-toggle,61-69,language-toggle,71-79,fullscreen,81-89,notification,91-149,user-dropdown,151-x 8 | -------------------------------------------------------------------------------- /web/apps/web-antd/src/locales/langs/zh-CN/demos.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "演示", 3 | "antd": "Ant Design Vue", 4 | "vben": { 5 | "title": "项目", 6 | "about": "关于", 7 | "document": "文档", 8 | "antdv": "Ant Design Vue 版本", 9 | "naive-ui": "Naive UI 版本", 10 | "element-plus": "Element Plus 版本" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/tabs/index.ts: -------------------------------------------------------------------------------- 1 | export { default as Tabs } from './Tabs.vue'; 2 | export { default as TabsContent } from './TabsContent.vue'; 3 | export { default as TabsList } from './TabsList.vue'; 4 | export { default as TabsTrigger } from './TabsTrigger.vue'; 5 | export { TabsIndicator } from 'radix-vue'; 6 | -------------------------------------------------------------------------------- /web/playground/.env.development: -------------------------------------------------------------------------------- 1 | # 端口号 2 | VITE_PORT=5555 3 | 4 | VITE_BASE=/ 5 | 6 | # 接口地址 7 | VITE_GLOB_API_URL=/api 8 | 9 | # 是否开启 Nitro Mock服务,true 为开启,false 为关闭 10 | VITE_NITRO_MOCK=true 11 | 12 | # 是否打开 devtools,true 为打开,false 为关闭 13 | VITE_DEVTOOLS=false 14 | 15 | # 是否注入全局loading 16 | VITE_INJECT_APP_LOADING=true 17 | -------------------------------------------------------------------------------- /ai_service/api/v1/drawing/vo.py: -------------------------------------------------------------------------------- 1 | from pydantic import BaseModel 2 | from llm.enums import LLMProvider 3 | 4 | 5 | class CreateDrawingTaskRequest(BaseModel): 6 | prompt: str 7 | style: str = 'auto' 8 | size: str = '1024*1024' 9 | model: str = 'wanx_v1' 10 | platform: str = LLMProvider.TONGYI 11 | n: int = 1 12 | -------------------------------------------------------------------------------- /web/apps/web-naive/.env.development: -------------------------------------------------------------------------------- 1 | # 端口号 2 | VITE_PORT=5888 3 | 4 | VITE_BASE=/ 5 | 6 | # 接口地址 7 | VITE_GLOB_API_URL=/api 8 | 9 | # 是否开启 Nitro Mock服务,true 为开启,false 为关闭 10 | VITE_NITRO_MOCK=true 11 | 12 | # 是否打开 devtools,true 为打开,false 为关闭 13 | VITE_DEVTOOLS=false 14 | 15 | # 是否注入全局loading 16 | VITE_INJECT_APP_LOADING=true 17 | -------------------------------------------------------------------------------- /docs/.gitignore: -------------------------------------------------------------------------------- 1 | # Dependencies 2 | /node_modules 3 | 4 | # Production 5 | /build 6 | 7 | # Generated files 8 | .docusaurus 9 | .cache-loader 10 | 11 | # Misc 12 | .DS_Store 13 | .env.local 14 | .env.development.local 15 | .env.test.local 16 | .env.production.local 17 | 18 | npm-debug.log* 19 | yarn-debug.log* 20 | yarn-error.log* 21 | -------------------------------------------------------------------------------- /web/apps/web-ele/src/locales/langs/zh-CN/page.json: -------------------------------------------------------------------------------- 1 | { 2 | "auth": { 3 | "login": "登录", 4 | "register": "注册", 5 | "codeLogin": "验证码登录", 6 | "qrcodeLogin": "二维码登录", 7 | "forgetPassword": "忘记密码" 8 | }, 9 | "dashboard": { 10 | "title": "概览", 11 | "analytics": "分析页", 12 | "workspace": "工作台" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /web/internal/tsconfig/node.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "display": "Node Config", 4 | "extends": "./base.json", 5 | "compilerOptions": { 6 | "composite": false, 7 | "lib": ["ESNext"], 8 | "baseUrl": "./", 9 | "types": ["node"], 10 | "noImplicitAny": true 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /web/packages/icons/README.md: -------------------------------------------------------------------------------- 1 | # @vben/icons 2 | 3 | 用于多个 `app` 公用的图标文件,继承了 `@vben-core/icons` 的所有能力。业务上有通用图标可以放在这里。 4 | 5 | ## 用法 6 | 7 | ### 添加依赖 8 | 9 | ```bash 10 | # 进入目标应用目录,例如 apps/xxxx-app 11 | # cd apps/xxxx-app 12 | pnpm add @vben/icons 13 | ``` 14 | 15 | ### 使用 16 | 17 | ```ts 18 | import { X } from '@vben/icons'; 19 | ``` 20 | -------------------------------------------------------------------------------- /web/packages/styles/README.md: -------------------------------------------------------------------------------- 1 | # @vben/styles 2 | 3 | 用于多个 `app` 公用的样式文件,继承了 `@vben-core/design` 的所有能力。业务上有通用的样式文件可以放在这里。 4 | 5 | ## 用法 6 | 7 | ### 添加依赖 8 | 9 | ```bash 10 | # 进入目标应用目录,例如 apps/xxxx-app 11 | # cd apps/xxxx-app 12 | pnpm add @vben/styles 13 | ``` 14 | 15 | ### 使用 16 | 17 | ```ts 18 | import '@vben/styles'; 19 | ``` 20 | -------------------------------------------------------------------------------- /web/apps/web-antd/src/locales/langs/zh-CN/page.json: -------------------------------------------------------------------------------- 1 | { 2 | "auth": { 3 | "login": "登录", 4 | "register": "注册", 5 | "codeLogin": "验证码登录", 6 | "qrcodeLogin": "二维码登录", 7 | "forgetPassword": "忘记密码" 8 | }, 9 | "dashboard": { 10 | "title": "概览", 11 | "analytics": "分析页", 12 | "workspace": "工作台" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /web/apps/web-naive/src/locales/langs/zh-CN/page.json: -------------------------------------------------------------------------------- 1 | { 2 | "auth": { 3 | "login": "登录", 4 | "register": "注册", 5 | "codeLogin": "验证码登录", 6 | "qrcodeLogin": "二维码登录", 7 | "forgetPassword": "忘记密码" 8 | }, 9 | "dashboard": { 10 | "title": "概览", 11 | "analytics": "分析页", 12 | "workspace": "工作台" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /web/docs/src/demos/vben-count-to-animator/custom/index.vue: -------------------------------------------------------------------------------- 1 | 4 | 13 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/card/CardContent.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 14 | -------------------------------------------------------------------------------- /docs/docs/essential/docker-start.md: -------------------------------------------------------------------------------- 1 | --- 2 | sidebar_position: 6 3 | --- 4 | # Docker 启动 5 | 6 | 1. 安装 Docker 与 Docker Compose 7 | 2. 在项目根目录执行: 8 | 9 | ```bash 10 | cp docker/.env.example docker/.env.local 11 | # 根据实际情况修改 docker/.env.local 12 | docker-compose -f docker-compose.dev.yml up -d 13 | ``` 14 | 15 | 3. 访问前后端服务地址,默认端口可在 compose 文件中查看和修改。 -------------------------------------------------------------------------------- /web/apps/web-antd/tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "@vben/tsconfig/node.json", 4 | "compilerOptions": { 5 | "composite": true, 6 | "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", 7 | "noEmit": false 8 | }, 9 | "include": ["vite.config.mts"] 10 | } 11 | -------------------------------------------------------------------------------- /web/apps/web-ele/tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "@vben/tsconfig/node.json", 4 | "compilerOptions": { 5 | "composite": true, 6 | "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", 7 | "noEmit": false 8 | }, 9 | "include": ["vite.config.mts"] 10 | } 11 | -------------------------------------------------------------------------------- /web/apps/web-naive/tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "@vben/tsconfig/node.json", 4 | "compilerOptions": { 5 | "composite": true, 6 | "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", 7 | "noEmit": false 8 | }, 9 | "include": ["vite.config.mts"] 10 | } 11 | -------------------------------------------------------------------------------- /web/playground/tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "@vben/tsconfig/node.json", 4 | "compilerOptions": { 5 | "composite": true, 6 | "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", 7 | "noEmit": false 8 | }, 9 | "include": ["vite.config.mts"] 10 | } 11 | -------------------------------------------------------------------------------- /web/apps/web-antd/src/api/core/menu.ts: -------------------------------------------------------------------------------- 1 | import type { RouteRecordStringComponent } from '@vben/types'; 2 | 3 | import { requestClient } from '#/api/request'; 4 | 5 | /** 6 | * 获取用户所有菜单 7 | */ 8 | export async function getAllMenusApi() { 9 | return requestClient.get( 10 | '/system/menu/user_menu', 11 | ); 12 | } 13 | -------------------------------------------------------------------------------- /web/apps/web-ele/.env.development: -------------------------------------------------------------------------------- 1 | # 端口号 2 | VITE_PORT=5777 3 | 4 | VITE_BASE=/ 5 | 6 | # 接口地址 7 | VITE_GLOB_API_URL=http://127.0.0.1:8000/api 8 | 9 | # 是否开启 Nitro Mock服务,true 为开启,false 为关闭 10 | VITE_NITRO_MOCK=false 11 | 12 | # 是否打开 devtools,true 为打开,false 为关闭 13 | VITE_DEVTOOLS=false 14 | 15 | # 是否注入全局loading 16 | VITE_INJECT_APP_LOADING=true 17 | -------------------------------------------------------------------------------- /web/apps/web-ele/src/api/core/menu.ts: -------------------------------------------------------------------------------- 1 | import type { RouteRecordStringComponent } from '@vben/types'; 2 | 3 | import { requestClient } from '#/api/request'; 4 | 5 | /** 6 | * 获取用户所有菜单 7 | */ 8 | export async function getAllMenusApi() { 9 | return requestClient.get( 10 | '/system/menu/user_menu', 11 | ); 12 | } 13 | -------------------------------------------------------------------------------- /web/apps/web-ele/src/locales/langs/zh-CN/demos.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "演示", 3 | "elementPlus": "Element Plus", 4 | "form": "表单演示", 5 | "vben": { 6 | "title": "项目", 7 | "about": "关于", 8 | "document": "文档", 9 | "antdv": "Ant Design Vue 版本", 10 | "naive-ui": "Naive UI 版本", 11 | "element-plus": "Element Plus 版本" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /docs/docs/essential/backend-manual.md: -------------------------------------------------------------------------------- 1 | --- 2 | sidebar_position: 8 3 | --- 4 | # 后端手册 5 | 6 | ## 目录结构 7 | - backend/backend:Django 主程序 8 | - backend/system:系统相关模块 9 | - backend/utils:工具类 10 | - backend/static:静态文件 11 | 12 | ## 常用命令 13 | - 数据迁移:`python manage.py migrate` 14 | - 创建超级用户:`python manage.py createsuperuser` 15 | - 启动服务:`python manage.py runserver` -------------------------------------------------------------------------------- /web/apps/web-antd/src/locales/langs/en-US/demos.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "Demos", 3 | "antd": "Ant Design Vue", 4 | "vben": { 5 | "title": "Project", 6 | "about": "About", 7 | "document": "Document", 8 | "antdv": "Ant Design Vue Version", 9 | "naive-ui": "Naive UI Version", 10 | "element-plus": "Element Plus Version" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /web/docs/src/commercial/customized.md: -------------------------------------------------------------------------------- 1 | # 定制开发 2 | 3 | 我们提供基于 Vben Admin 的技术支持服务及定制开发,基本需求我们都可以满足。 4 | 5 | 详细需求可添加作者了解,并注明来意: 6 | 7 | - 通过邮箱联系开发者: [ann.vben@gmail.com](mailto:ann.vben@gmail.com) 8 | - 通过微信联系开发者: 9 | 10 | 11 | 12 | 我们会在第一时间回复您,定制费用根据需求而定。 13 | -------------------------------------------------------------------------------- /web/internal/vite-config/src/config/common.ts: -------------------------------------------------------------------------------- 1 | import type { UserConfig } from 'vite'; 2 | 3 | async function getCommonConfig(): Promise { 4 | return { 5 | build: { 6 | chunkSizeWarningLimit: 2000, 7 | reportCompressedSize: false, 8 | sourcemap: false, 9 | }, 10 | }; 11 | } 12 | 13 | export { getCommonConfig }; 14 | -------------------------------------------------------------------------------- /web/packages/@core/base/typings/vue-router.d.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable no-restricted-imports */ 2 | import type { RouteMeta as IRouteMeta } from '@vben-core/typings'; 3 | 4 | import 'vue-router'; 5 | 6 | declare module 'vue-router' { 7 | // eslint-disable-next-line @typescript-eslint/no-empty-object-type 8 | interface RouteMeta extends IRouteMeta {} 9 | } 10 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/card/CardFooter.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 14 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "@vben/tsconfig/web.json", 4 | "compilerOptions": { 5 | "baseUrl": ".", 6 | "paths": { 7 | "@vben-core/shadcn-ui/*": ["./src/*"] 8 | } 9 | }, 10 | "include": ["src"], 11 | "exclude": ["node_modules"] 12 | } 13 | -------------------------------------------------------------------------------- /web/packages/effects/common-ui/src/ui/about/about.ts: -------------------------------------------------------------------------------- 1 | import type { Component } from 'vue'; 2 | 3 | interface AboutProps { 4 | description?: string; 5 | name?: string; 6 | title?: string; 7 | } 8 | 9 | interface DescriptionItem { 10 | content: Component | string; 11 | title: string; 12 | } 13 | 14 | export type { AboutProps, DescriptionItem }; 15 | -------------------------------------------------------------------------------- /web/packages/effects/hooks/README.md: -------------------------------------------------------------------------------- 1 | # @vben/hooks 2 | 3 | 用于多个 `app` 公用的 hook,继承了 `@vben/hooks` 的所有能力。业务上有通用 hooks 可以放在这里。 4 | 5 | ## 用法 6 | 7 | ### 添加依赖 8 | 9 | ```bash 10 | # 进入目标应用目录,例如 apps/xxxx-app 11 | # cd apps/xxxx-app 12 | pnpm add @vben/hooks 13 | ``` 14 | 15 | ### 使用 16 | 17 | ```ts 18 | import { useNamespace } from '@vben/hooks'; 19 | ``` 20 | -------------------------------------------------------------------------------- /web/packages/utils/README.md: -------------------------------------------------------------------------------- 1 | # @vben/utils 2 | 3 | 用于多个 `app` 公用的工具包,继承了 `@vben-core/shared/utils` 的所有能力。业务上有通用的工具函数可以放在这里。 4 | 5 | ## 用法 6 | 7 | ### 添加依赖 8 | 9 | ```bash 10 | # 进入目标应用目录,例如 apps/xxxx-app 11 | # cd apps/xxxx-app 12 | pnpm add @vben/utils 13 | ``` 14 | 15 | ### 使用 16 | 17 | ```ts 18 | import { isString } from '@vben/utils'; 19 | ``` 20 | -------------------------------------------------------------------------------- /docs/docs/essential/quickstart-backend.md: -------------------------------------------------------------------------------- 1 | --- 2 | sidebar_position: 4 3 | --- 4 | # 快速启动(后端) 5 | 6 | ```bash 7 | cd backend 8 | pip install -r requirements.txt 9 | # 如有需要代理: pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple 10 | #python manage.py migrate 11 | python manage.py runserver 12 | ``` 13 | 14 | 访问 http://127.0.0.1:8000/ 进入后端管理。 -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/components/button/index.ts: -------------------------------------------------------------------------------- 1 | export type * from './button'; 2 | export { default as VbenButtonGroup } from './button-group.vue'; 3 | export { default as VbenButton } from './button.vue'; 4 | export { default as VbenCheckButtonGroup } from './check-button-group.vue'; 5 | export { default as VbenIconButton } from './icon-button.vue'; 6 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/card/CardDescription.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 14 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/card/CardHeader.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 14 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetHeader.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | -------------------------------------------------------------------------------- /web/playground/src/views/_core/authentication/qrcode-login.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 11 | -------------------------------------------------------------------------------- /web/apps/web-antd/src/views/_core/authentication/qrcode-login.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 11 | -------------------------------------------------------------------------------- /web/apps/web-ele/src/views/_core/authentication/qrcode-login.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 11 | -------------------------------------------------------------------------------- /web/apps/web-naive/src/locales/langs/zh-CN/demos.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "演示", 3 | "naive": "Naive UI", 4 | "table": "Table", 5 | "form": "表单", 6 | "vben": { 7 | "title": "项目", 8 | "about": "关于", 9 | "document": "文档", 10 | "antdv": "Ant Design Vue 版本", 11 | "naive-ui": "Naive UI 版本", 12 | "element-plus": "Element Plus 版本" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /web/apps/web-naive/src/views/_core/authentication/qrcode-login.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 11 | -------------------------------------------------------------------------------- /web/docs/src/components/introduction.md: -------------------------------------------------------------------------------- 1 | # 介绍 2 | 3 | ::: info README 4 | 5 | 该文档介绍的是框架组件的使用方法、属性、事件等。如果你觉得现有组件的封装不够理想,或者不完全符合你的需求,大可以直接使用原生组件,亦或亲手封装一个适合的组件。框架提供的组件并非束缚,使用与否,完全取决于你的需求与自由。 6 | 7 | ::: 8 | 9 | ## 布局组件 10 | 11 | 布局组件一般在页面内容区域用作顶层容器组件,提供一些统一的布局样式和基本功能。 12 | 13 | ## 通用组件 14 | 15 | 通用组件是一些常用的组件,比如弹窗、抽屉、表单等。大部分基于 `Tailwind CSS` 实现,可适用于不同 UI 组件库的应用。 16 | -------------------------------------------------------------------------------- /web/packages/effects/plugins/src/echarts/echarts-ui.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 16 | -------------------------------------------------------------------------------- /web/packages/effects/plugins/src/vxe-table/index.ts: -------------------------------------------------------------------------------- 1 | export { setupVbenVxeTable } from './init'; 2 | export type { VxeTableGridOptions } from './types'; 3 | export * from './use-vxe-grid'; 4 | 5 | export { default as VbenVxeGrid } from './use-vxe-grid.vue'; 6 | export type { 7 | VxeGridListeners, 8 | VxeGridProps, 9 | VxeGridPropTypes, 10 | } from 'vxe-table'; 11 | -------------------------------------------------------------------------------- /web/packages/utils/src/helpers/index.ts: -------------------------------------------------------------------------------- 1 | export * from './find-menu-by-path'; 2 | export * from './generate-menus'; 3 | export * from './generate-routes-backend'; 4 | export * from './generate-routes-frontend'; 5 | export * from './get-popup-container'; 6 | export * from './merge-route-modules'; 7 | export * from './reset-routes'; 8 | export * from './unmount-global-loading'; 9 | -------------------------------------------------------------------------------- /web/.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset=utf-8 5 | end_of_line=lf 6 | insert_final_newline=true 7 | indent_style=space 8 | indent_size=2 9 | max_line_length = 100 10 | trim_trailing_whitespace = true 11 | quote_type = single 12 | 13 | [*.{yml,yaml,json}] 14 | indent_style = space 15 | indent_size = 2 16 | 17 | [*.md] 18 | trim_trailing_whitespace = false 19 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/card/CardTitle.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 14 | -------------------------------------------------------------------------------- /web/packages/constants/README.md: -------------------------------------------------------------------------------- 1 | # @vben/constants 2 | 3 | 用于多个 `app` 公用的常量,继承了 `@vben-core/shared/constants` 的所有能力。业务上有通用常量可以放在这里。 4 | 5 | ## 用法 6 | 7 | ### 添加依赖 8 | 9 | ```bash 10 | # 进入目标应用目录,例如 apps/xxxx-app 11 | # cd apps/xxxx-app 12 | pnpm add @vben/constants 13 | ``` 14 | 15 | ### 使用 16 | 17 | ```ts 18 | import { LOGIN_PATH } from '@vben/constants'; 19 | ``` 20 | -------------------------------------------------------------------------------- /web/vitest.config.ts: -------------------------------------------------------------------------------- 1 | import Vue from '@vitejs/plugin-vue'; 2 | import VueJsx from '@vitejs/plugin-vue-jsx'; 3 | import { configDefaults, defineConfig } from 'vitest/config'; 4 | 5 | export default defineConfig({ 6 | plugins: [Vue(), VueJsx()], 7 | test: { 8 | environment: 'happy-dom', 9 | exclude: [...configDefaults.exclude, '**/e2e/**'], 10 | }, 11 | }); 12 | -------------------------------------------------------------------------------- /web/packages/@core/base/shared/build.config.ts: -------------------------------------------------------------------------------- 1 | import { defineBuildConfig } from 'unbuild'; 2 | 3 | export default defineBuildConfig({ 4 | clean: true, 5 | declaration: true, 6 | entries: [ 7 | 'src/store', 8 | 'src/constants/index', 9 | 'src/utils/index', 10 | 'src/color/index', 11 | 'src/cache/index', 12 | 'src/global-state', 13 | ], 14 | }); 15 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/form-ui/src/index.ts: -------------------------------------------------------------------------------- 1 | export { setupVbenForm } from './config'; 2 | 3 | export type { 4 | BaseFormComponentType, 5 | ExtendedFormApi, 6 | VbenFormProps, 7 | FormSchema as VbenFormSchema, 8 | } from './types'; 9 | 10 | export * from './use-vben-form'; 11 | // export { default as VbenForm } from './vben-form.vue'; 12 | export * as z from 'zod'; 13 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/avatar/AvatarImage.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 12 | -------------------------------------------------------------------------------- /web/packages/types/README.md: -------------------------------------------------------------------------------- 1 | # @vben/types 2 | 3 | 用于多个 `app` 公用的工具类型,继承了 `@vben-core/typings` 的所有能力。业务上有通用的类型定义可以放在这里。 4 | 5 | ## 用法 6 | 7 | ### 添加依赖 8 | 9 | ```bash 10 | # 进入目标应用目录,例如 apps/xxxx-app 11 | # cd apps/xxxx-app 12 | pnpm add @vben/types 13 | ``` 14 | 15 | ### 使用 16 | 17 | ```ts 18 | // 推荐加上 type 19 | import type { SelectOption } from '@vben/types'; 20 | ``` 21 | -------------------------------------------------------------------------------- /web/apps/backend-mock/api/user/info.ts: -------------------------------------------------------------------------------- 1 | import { verifyAccessToken } from '~/utils/jwt-utils'; 2 | import { unAuthorizedResponse } from '~/utils/response'; 3 | 4 | export default eventHandler((event) => { 5 | const userinfo = verifyAccessToken(event); 6 | if (!userinfo) { 7 | return unAuthorizedResponse(event); 8 | } 9 | return useResponseSuccess(userinfo); 10 | }); 11 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/layout-ui/src/components/index.ts: -------------------------------------------------------------------------------- 1 | export { default as LayoutContent } from './layout-content.vue'; 2 | export { default as LayoutFooter } from './layout-footer.vue'; 3 | export { default as LayoutHeader } from './layout-header.vue'; 4 | export { default as LayoutSidebar } from './layout-sidebar.vue'; 5 | export { default as LayoutTabbar } from './layout-tabbar.vue'; 6 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogClose.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 14 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectValue.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 14 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetClose.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 14 | -------------------------------------------------------------------------------- /web/packages/effects/hooks/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './use-app-config'; 2 | export * from './use-content-maximize'; 3 | export * from './use-design-tokens'; 4 | export * from './use-hover-toggle'; 5 | export * from './use-pagination'; 6 | export * from './use-refresh'; 7 | export * from './use-tabs'; 8 | export * from './use-watermark'; 9 | export * from '@vben-core/composables'; 10 | -------------------------------------------------------------------------------- /web/apps/web-antd/.env.development: -------------------------------------------------------------------------------- 1 | # 端口号 2 | VITE_PORT=5678 3 | 4 | VITE_BASE=/ 5 | 6 | # 接口地址 7 | VITE_GLOB_API_URL=/api/admin 8 | 9 | VITE_BACKEND_URL=http://localhost:8000 10 | 11 | # 是否开启 Nitro Mock服务,true 为开启,false 为关闭 12 | VITE_NITRO_MOCK=false 13 | 14 | # 是否打开 devtools,true 为打开,false 为关闭 15 | VITE_DEVTOOLS=false 16 | 17 | # 是否注入全局loading 18 | VITE_INJECT_APP_LOADING=true 19 | -------------------------------------------------------------------------------- /web/apps/web-antd/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "@vben/tsconfig/web-app.json", 4 | "compilerOptions": { 5 | "baseUrl": ".", 6 | "paths": { 7 | "#/*": ["./src/*"] 8 | } 9 | }, 10 | "references": [{ "path": "./tsconfig.node.json" }], 11 | "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"] 12 | } 13 | -------------------------------------------------------------------------------- /web/apps/web-ele/.env.production: -------------------------------------------------------------------------------- 1 | VITE_BASE=/ 2 | 3 | # 接口地址 4 | VITE_GLOB_API_URL=http://127.0.0.1:8000/api 5 | 6 | # 是否开启压缩,可以设置为 none, brotli, gzip 7 | VITE_COMPRESS=gzip 8 | 9 | # 是否开启 PWA 10 | VITE_PWA=false 11 | 12 | # vue-router 的模式 13 | VITE_ROUTER_HISTORY=hash 14 | 15 | # 是否注入全局loading 16 | VITE_INJECT_APP_LOADING=true 17 | 18 | # 打包后是否生成dist.zip 19 | VITE_ARCHIVER=true 20 | -------------------------------------------------------------------------------- /web/apps/web-ele/src/locales/langs/en-US/demos.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "Demos", 3 | "elementPlus": "Element Plus", 4 | "form": "Form", 5 | "vben": { 6 | "title": "Project", 7 | "about": "About", 8 | "document": "Document", 9 | "antdv": "Ant Design Vue Version", 10 | "naive-ui": "Naive UI Version", 11 | "element-plus": "Element Plus Version" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /web/apps/web-ele/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "@vben/tsconfig/web-app.json", 4 | "compilerOptions": { 5 | "baseUrl": ".", 6 | "paths": { 7 | "#/*": ["./src/*"] 8 | } 9 | }, 10 | "references": [{ "path": "./tsconfig.node.json" }], 11 | "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"] 12 | } 13 | -------------------------------------------------------------------------------- /web/packages/@core/base/shared/src/utils/merge.ts: -------------------------------------------------------------------------------- 1 | import { createDefu } from 'defu'; 2 | 3 | export { createDefu as createMerge, defu as merge } from 'defu'; 4 | 5 | export const mergeWithArrayOverride = createDefu((originObj, key, updates) => { 6 | if (Array.isArray(originObj[key]) && Array.isArray(updates)) { 7 | originObj[key] = updates; 8 | return true; 9 | } 10 | }); 11 | -------------------------------------------------------------------------------- /web/packages/@core/preferences/__tests__/config.test.ts: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest'; 2 | 3 | import { defaultPreferences } from '../src/config'; 4 | 5 | describe('defaultPreferences immutability test', () => { 6 | // 创建快照,确保默认配置对象不被修改 7 | it('should not modify the config object', () => { 8 | expect(defaultPreferences).toMatchSnapshot(); 9 | }); 10 | }); 11 | -------------------------------------------------------------------------------- /web/playground/.env.production: -------------------------------------------------------------------------------- 1 | VITE_BASE=/ 2 | 3 | # 接口地址 4 | VITE_GLOB_API_URL=https://mock-napi.vben.pro/api 5 | 6 | # 是否开启压缩,可以设置为 none, brotli, gzip 7 | VITE_COMPRESS=none 8 | 9 | # 是否开启 PWA 10 | VITE_PWA=false 11 | 12 | # vue-router 的模式 13 | VITE_ROUTER_HISTORY=hash 14 | 15 | # 是否注入全局loading 16 | VITE_INJECT_APP_LOADING=true 17 | 18 | # 打包后是否生成dist.zip 19 | VITE_ARCHIVER=true 20 | -------------------------------------------------------------------------------- /web/playground/src/preferences.ts: -------------------------------------------------------------------------------- 1 | import { defineOverridesPreferences } from '@vben/preferences'; 2 | 3 | /** 4 | * @description 项目配置文件 5 | * 只需要覆盖项目中的一部分配置,不需要的配置不用覆盖,会自动使用默认配置 6 | * !!! 更改配置后请清空缓存,否则可能不生效 7 | */ 8 | export const overridesPreferences = defineOverridesPreferences({ 9 | // overrides 10 | app: { 11 | name: import.meta.env.VITE_APP_TITLE, 12 | }, 13 | }); 14 | -------------------------------------------------------------------------------- /web/playground/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "@vben/tsconfig/web-app.json", 4 | "compilerOptions": { 5 | "baseUrl": ".", 6 | "paths": { 7 | "#/*": ["./src/*"] 8 | } 9 | }, 10 | "references": [{ "path": "./tsconfig.node.json" }], 11 | "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"] 12 | } 13 | -------------------------------------------------------------------------------- /web/apps/web-antd/src/locales/langs/en-US/page.json: -------------------------------------------------------------------------------- 1 | { 2 | "auth": { 3 | "login": "Login", 4 | "register": "Register", 5 | "codeLogin": "Code Login", 6 | "qrcodeLogin": "Qr Code Login", 7 | "forgetPassword": "Forget Password" 8 | }, 9 | "dashboard": { 10 | "title": "Dashboard", 11 | "analytics": "Analytics", 12 | "workspace": "Workspace" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /web/apps/web-ele/src/locales/langs/en-US/page.json: -------------------------------------------------------------------------------- 1 | { 2 | "auth": { 3 | "login": "Login", 4 | "register": "Register", 5 | "codeLogin": "Code Login", 6 | "qrcodeLogin": "Qr Code Login", 7 | "forgetPassword": "Forget Password" 8 | }, 9 | "dashboard": { 10 | "title": "Dashboard", 11 | "analytics": "Analytics", 12 | "workspace": "Workspace" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /web/apps/web-naive/.env.production: -------------------------------------------------------------------------------- 1 | VITE_BASE=/ 2 | 3 | # 接口地址 4 | VITE_GLOB_API_URL=https://mock-napi.vben.pro/api 5 | 6 | # 是否开启压缩,可以设置为 none, brotli, gzip 7 | VITE_COMPRESS=none 8 | 9 | # 是否开启 PWA 10 | VITE_PWA=false 11 | 12 | # vue-router 的模式 13 | VITE_ROUTER_HISTORY=hash 14 | 15 | # 是否注入全局loading 16 | VITE_INJECT_APP_LOADING=true 17 | 18 | # 打包后是否生成dist.zip 19 | VITE_ARCHIVER=true 20 | -------------------------------------------------------------------------------- /web/apps/web-naive/src/locales/langs/en-US/page.json: -------------------------------------------------------------------------------- 1 | { 2 | "auth": { 3 | "login": "Login", 4 | "register": "Register", 5 | "codeLogin": "Code Login", 6 | "qrcodeLogin": "Qr Code Login", 7 | "forgetPassword": "Forget Password" 8 | }, 9 | "dashboard": { 10 | "title": "Dashboard", 11 | "analytics": "Analytics", 12 | "workspace": "Workspace" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /web/apps/web-naive/src/preferences.ts: -------------------------------------------------------------------------------- 1 | import { defineOverridesPreferences } from '@vben/preferences'; 2 | 3 | /** 4 | * @description 项目配置文件 5 | * 只需要覆盖项目中的一部分配置,不需要的配置不用覆盖,会自动使用默认配置 6 | * !!! 更改配置后请清空缓存,否则可能不生效 7 | */ 8 | export const overridesPreferences = defineOverridesPreferences({ 9 | // overrides 10 | app: { 11 | name: import.meta.env.VITE_APP_TITLE, 12 | }, 13 | }); 14 | -------------------------------------------------------------------------------- /web/apps/web-naive/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "@vben/tsconfig/web-app.json", 4 | "compilerOptions": { 5 | "baseUrl": ".", 6 | "paths": { 7 | "#/*": ["./src/*"] 8 | } 9 | }, 10 | "references": [{ "path": "./tsconfig.node.json" }], 11 | "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"] 12 | } 13 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogOverlay.vue: -------------------------------------------------------------------------------- 1 | 9 | 12 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetOverlay.vue: -------------------------------------------------------------------------------- 1 | 9 | 12 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetTrigger.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 14 | -------------------------------------------------------------------------------- /docs/blog/2019-05-28-first-blog-post.md: -------------------------------------------------------------------------------- 1 | --- 2 | slug: first-blog-post 3 | title: First Blog Post 4 | authors: [slorber, yangshun] 5 | tags: [hola, docusaurus] 6 | --- 7 | 8 | Lorem ipsum dolor sit amet... 9 | 10 | 11 | 12 | ...consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet 13 | -------------------------------------------------------------------------------- /web/docs/src/demos/vben-modal/basic/index.vue: -------------------------------------------------------------------------------- 1 | 6 | 12 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogTrigger.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 14 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuShortcut.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 14 | -------------------------------------------------------------------------------- /web/apps/web-naive/src/locales/langs/en-US/demos.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "Demos", 3 | "naive": "Naive UI", 4 | "table": "Table", 5 | "form": "Form", 6 | "vben": { 7 | "title": "Project", 8 | "about": "About", 9 | "document": "Document", 10 | "antdv": "Ant Design Vue Version", 11 | "naive-ui": "Naive UI Version", 12 | "element-plus": "Element Plus Version" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/avatar/AvatarFallback.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 14 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogHeader.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 16 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/popover/PopoverTrigger.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 14 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectItemText.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 14 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/tooltip/TooltipTrigger.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 14 | -------------------------------------------------------------------------------- /web/apps/web-ele/src/utils/date.ts: -------------------------------------------------------------------------------- 1 | import dayjs from 'dayjs'; 2 | 3 | /** 4 | * 格式化 ISO 时间字符串为 'YYYY-MM-DD HH:mm:ss' 5 | * @param value ISO 时间字符串 6 | * @param format 自定义格式,默认 'YYYY-MM-DD HH:mm:ss' 7 | */ 8 | export function format_datetime( 9 | value: Date | string, 10 | format = 'YYYY-MM-DD HH:mm:ss', 11 | ): string { 12 | if (!value) return ''; 13 | return dayjs(value).format(format); 14 | } 15 | -------------------------------------------------------------------------------- /web/docs/src/demos/vben-drawer/basic/index.vue: -------------------------------------------------------------------------------- 1 | 6 | 12 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/tooltip/TooltipProvider.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 14 | -------------------------------------------------------------------------------- /web/packages/effects/hooks/src/use-refresh.ts: -------------------------------------------------------------------------------- 1 | import { useRouter } from 'vue-router'; 2 | 3 | import { useTabbarStore } from '@vben/stores'; 4 | 5 | export function useRefresh() { 6 | const router = useRouter(); 7 | const tabbarStore = useTabbarStore(); 8 | 9 | async function refresh() { 10 | await tabbarStore.refresh(router); 11 | } 12 | 13 | return { 14 | refresh, 15 | }; 16 | } 17 | -------------------------------------------------------------------------------- /web/playground/src/locales/langs/zh-CN/page.json: -------------------------------------------------------------------------------- 1 | { 2 | "auth": { 3 | "login": "登录", 4 | "register": "注册", 5 | "codeLogin": "验证码登录", 6 | "qrcodeLogin": "二维码登录", 7 | "forgetPassword": "忘记密码", 8 | "sendingCode": "正在发送验证码", 9 | "codeSentTo": "验证码已发送至{0}" 10 | }, 11 | "dashboard": { 12 | "title": "概览", 13 | "analytics": "分析页", 14 | "workspace": "工作台" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /web/apps/web-antd/src/utils/date.ts: -------------------------------------------------------------------------------- 1 | import dayjs from 'dayjs'; 2 | 3 | /** 4 | * 格式化 ISO 时间字符串为 'YYYY-MM-DD HH:mm:ss' 5 | * @param value ISO 时间字符串 6 | * @param format 自定义格式,默认 'YYYY-MM-DD HH:mm:ss' 7 | */ 8 | export function format_datetime( 9 | value: Date | string, 10 | format = 'YYYY-MM-DD HH:mm:ss', 11 | ): string { 12 | if (!value) return ''; 13 | return dayjs(value).format(format); 14 | } 15 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/card/index.ts: -------------------------------------------------------------------------------- 1 | export { default as Card } from './Card.vue'; 2 | export { default as CardContent } from './CardContent.vue'; 3 | export { default as CardDescription } from './CardDescription.vue'; 4 | export { default as CardFooter } from './CardFooter.vue'; 5 | export { default as CardHeader } from './CardHeader.vue'; 6 | export { default as CardTitle } from './CardTitle.vue'; 7 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogFooter.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 16 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetFooter.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 16 | -------------------------------------------------------------------------------- /web/packages/effects/README.md: -------------------------------------------------------------------------------- 1 | ## Effects 目录 2 | 3 | `effects` 目录专门用于存放与轻微耦合相关的代码和逻辑。如果你的包具有以下特点,建议将其放置在 `effects` 目录下: 4 | 5 | - **状态管理**:使用状态管理框架 `pinia`,并包含处理副作用(如异步操作、API 调用)的部分。 6 | - **用户偏好设置**:使用 `@vben-core/preferences` 处理用户偏好设置,涉及本地存储或浏览器缓存逻辑(如使用 `localStorage`)。 7 | - **导航和路由**:处理导航、页面跳转等场景,需要管理路由变化的逻辑。 8 | - **组件库依赖**:包含与特定组件库紧密耦合或依赖大型仓库的部分。 9 | 10 | 通过将相关代码归类到 `effects` 目录,可以使项目结构更加清晰,便于维护和扩展。 11 | -------------------------------------------------------------------------------- /web/packages/effects/layouts/src/widgets/preferences/use-open-preferences.ts: -------------------------------------------------------------------------------- 1 | import { ref } from 'vue'; 2 | 3 | const openPreferences = ref(false); 4 | 5 | function useOpenPreferences() { 6 | function handleOpenPreference() { 7 | openPreferences.value = true; 8 | } 9 | 10 | return { 11 | handleOpenPreference, 12 | openPreferences, 13 | }; 14 | } 15 | 16 | export { useOpenPreferences }; 17 | -------------------------------------------------------------------------------- /web/internal/tsconfig/library.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "display": "Web Application", 4 | "extends": "./base.json", 5 | "compilerOptions": { 6 | "jsx": "preserve", 7 | "lib": ["ESNext", "DOM", "DOM.Iterable"], 8 | "useDefineForClassFields": true, 9 | "moduleResolution": "bundler", 10 | "declaration": true, 11 | "noEmit": false 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /web/packages/@core/base/icons/src/create-icon.ts: -------------------------------------------------------------------------------- 1 | import { defineComponent, h } from 'vue'; 2 | 3 | import { Icon } from '@iconify/vue'; 4 | 5 | function createIconifyIcon(icon: string) { 6 | return defineComponent({ 7 | name: `Icon-${icon}`, 8 | setup(props, { attrs }) { 9 | return () => h(Icon, { icon, ...props, ...attrs }); 10 | }, 11 | }); 12 | } 13 | 14 | export { createIconifyIcon }; 15 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/popup-ui/src/alert/index.ts: -------------------------------------------------------------------------------- 1 | export type { 2 | AlertProps, 3 | BeforeCloseScope, 4 | IconType, 5 | PromptProps, 6 | } from './alert'; 7 | export { useAlertContext } from './alert'; 8 | export { default as Alert } from './alert.vue'; 9 | export { 10 | vbenAlert as alert, 11 | clearAllAlerts, 12 | vbenConfirm as confirm, 13 | vbenPrompt as prompt, 14 | } from './AlertBuilder'; 15 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/button/types.ts: -------------------------------------------------------------------------------- 1 | export type ButtonVariantSize = 2 | | 'default' 3 | | 'icon' 4 | | 'lg' 5 | | 'sm' 6 | | 'xs' 7 | | null 8 | | undefined; 9 | 10 | export type ButtonVariants = 11 | | 'default' 12 | | 'destructive' 13 | | 'ghost' 14 | | 'heavy' 15 | | 'icon' 16 | | 'link' 17 | | 'outline' 18 | | 'secondary' 19 | | null 20 | | undefined; 21 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuGroup.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 14 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/hover-card/HoverCardTrigger.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 14 | -------------------------------------------------------------------------------- /web/packages/effects/layouts/src/basic/content/content-spinner.vue: -------------------------------------------------------------------------------- 1 | 10 | 13 | -------------------------------------------------------------------------------- /web/packages/effects/common-ui/src/ui/dashboard/workbench/index.ts: -------------------------------------------------------------------------------- 1 | export { default as WorkbenchHeader } from './workbench-header.vue'; 2 | export { default as WorkbenchProject } from './workbench-project.vue'; 3 | export { default as WorkbenchQuickNav } from './workbench-quick-nav.vue'; 4 | export { default as WorkbenchTodo } from './workbench-todo.vue'; 5 | export { default as WorkbenchTrends } from './workbench-trends.vue'; 6 | -------------------------------------------------------------------------------- /web/docs/src/guide/project/changeset.md: -------------------------------------------------------------------------------- 1 | # Changeset 2 | 3 | 项目内置了 [changeset](https://github.com/changesets/changesets) 作为版本管理工具。Changeset 是一个版本管理工具,它可以帮助我们更好的管理版本,生成 changelog,以及自动发布。 4 | 5 | 详细使用方式可查看官方文档,这里不再阐述。如果你不需要它,可以直接忽略。 6 | 7 | ## 命令行 8 | 9 | changeset 命令在项目中已经内置: 10 | 11 | ### 交互式填写变更集 12 | 13 | ```bash 14 | pnpm run changeset 15 | ``` 16 | 17 | ### 统一提升版本号 18 | 19 | ```bash 20 | pnpm run version 21 | ``` 22 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogAction.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 14 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/AlertDialogCancel.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 14 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuPortal.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 14 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuGroup.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 14 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbItem.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 18 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/number-field/index.ts: -------------------------------------------------------------------------------- 1 | export { default as NumberField } from './NumberField.vue'; 2 | export { default as NumberFieldContent } from './NumberFieldContent.vue'; 3 | export { default as NumberFieldDecrement } from './NumberFieldDecrement.vue'; 4 | export { default as NumberFieldIncrement } from './NumberFieldIncrement.vue'; 5 | export { default as NumberFieldInput } from './NumberFieldInput.vue'; 6 | -------------------------------------------------------------------------------- /backend/ai/utils.py: -------------------------------------------------------------------------------- 1 | from ai.models import AIModel 2 | from utils.models import CommonStatus 3 | from asgiref.sync import sync_to_async 4 | 5 | @sync_to_async 6 | def get_first_available_ai_config(): 7 | # 这里只取第一个可用的,可以根据实际业务加筛选条件 8 | ai = AIModel.objects.filter(status=CommonStatus.ENABLED).prefetch_related('key').first() 9 | if not ai: 10 | raise Exception('没有可用的AI配置') 11 | return ai.model, ai.key.api_key, ai.key.url -------------------------------------------------------------------------------- /web/apps/web-antd/src/components/table-action/icons.ts: -------------------------------------------------------------------------------- 1 | export const ACTION_ICON = { 2 | DOWNLOAD: 'lucide:download', 3 | UPLOAD: 'lucide:upload', 4 | ADD: 'lucide:plus', 5 | EDIT: 'lucide:edit', 6 | DELETE: 'lucide:trash-2', 7 | REFRESH: 'lucide:refresh-cw', 8 | SEARCH: 'lucide:search', 9 | FILTER: 'lucide:filter', 10 | MORE: 'lucide:ellipsis-vertical', 11 | VIEW: 'lucide:eye', 12 | COPY: 'lucide:copy', 13 | }; 14 | -------------------------------------------------------------------------------- /web/apps/web-antd/src/preferences.ts: -------------------------------------------------------------------------------- 1 | import { defineOverridesPreferences } from '@vben/preferences'; 2 | 3 | /** 4 | * @description 项目配置文件 5 | * 只需要覆盖项目中的一部分配置,不需要的配置不用覆盖,会自动使用默认配置 6 | * !!! 更改配置后请清空缓存,否则可能不生效 7 | */ 8 | export const overridesPreferences = defineOverridesPreferences({ 9 | // overrides 10 | app: { 11 | name: import.meta.env.VITE_APP_TITLE, 12 | accessMode: 'backend', // 或 'frontend' 13 | }, 14 | }); 15 | -------------------------------------------------------------------------------- /web/apps/web-ele/src/preferences.ts: -------------------------------------------------------------------------------- 1 | import { defineOverridesPreferences } from '@vben/preferences'; 2 | 3 | /** 4 | * @description 项目配置文件 5 | * 只需要覆盖项目中的一部分配置,不需要的配置不用覆盖,会自动使用默认配置 6 | * !!! 更改配置后请清空缓存,否则可能不生效 7 | */ 8 | export const overridesPreferences = defineOverridesPreferences({ 9 | // overrides 10 | app: { 11 | name: import.meta.env.VITE_APP_TITLE, 12 | accessMode: 'backend', // 或 'frontend' 13 | }, 14 | }); 15 | -------------------------------------------------------------------------------- /web/packages/effects/common-ui/src/components/captcha/index.ts: -------------------------------------------------------------------------------- 1 | export { default as PointSelectionCaptcha } from './point-selection-captcha/index.vue'; 2 | export { default as PointSelectionCaptchaCard } from './point-selection-captcha/index.vue'; 3 | 4 | export { default as SliderCaptcha } from './slider-captcha/index.vue'; 5 | export { default as SliderRotateCaptcha } from './slider-rotate-captcha/index.vue'; 6 | export type * from './types'; 7 | -------------------------------------------------------------------------------- /web/packages/effects/common-ui/src/ui/authentication/auth-title.vue: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuShortcut.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 18 | -------------------------------------------------------------------------------- /web/packages/types/src/user.ts: -------------------------------------------------------------------------------- 1 | import type { BasicUserInfo } from '@vben-core/typings'; 2 | 3 | /** 用户信息 */ 4 | interface UserInfo extends BasicUserInfo { 5 | /** 6 | * 用户描述 7 | */ 8 | desc: string; 9 | /** 10 | * 首页地址 11 | */ 12 | homePath: string; 13 | 14 | /** 15 | * accessToken 16 | */ 17 | token: string; 18 | roles?: string[]; 19 | permissions?: string[]; 20 | } 21 | 22 | export type { UserInfo }; 23 | -------------------------------------------------------------------------------- /web/packages/utils/src/helpers/get-popup-container.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * If the node is holding inside a form, return the form element, 3 | * otherwise return the parent node of the given element or 4 | * the document body if the element is not provided. 5 | */ 6 | export function getPopupContainer(node?: HTMLElement): HTMLElement { 7 | return ( 8 | node?.closest('form') ?? (node?.parentNode as HTMLElement) ?? document.body 9 | ); 10 | } 11 | -------------------------------------------------------------------------------- /docs/blog/tags.yml: -------------------------------------------------------------------------------- 1 | facebook: 2 | label: Facebook 3 | permalink: /facebook 4 | description: Facebook tag description 5 | 6 | hello: 7 | label: Hello 8 | permalink: /hello 9 | description: Hello tag description 10 | 11 | docusaurus: 12 | label: Docusaurus 13 | permalink: /docusaurus 14 | description: Docusaurus tag description 15 | 16 | hola: 17 | label: Hola 18 | permalink: /hola 19 | description: Hola tag description 20 | -------------------------------------------------------------------------------- /web/apps/backend-mock/api/auth/logout.post.ts: -------------------------------------------------------------------------------- 1 | import { 2 | clearRefreshTokenCookie, 3 | getRefreshTokenFromCookie, 4 | } from '~/utils/cookie-utils'; 5 | 6 | export default defineEventHandler(async (event) => { 7 | const refreshToken = getRefreshTokenFromCookie(event); 8 | if (!refreshToken) { 9 | return useResponseSuccess(''); 10 | } 11 | 12 | clearRefreshTokenCookie(event); 13 | 14 | return useResponseSuccess(''); 15 | }); 16 | -------------------------------------------------------------------------------- /web/packages/@core/composables/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './use-is-mobile'; 2 | export * from './use-layout-style'; 3 | export * from './use-namespace'; 4 | export * from './use-priority-value'; 5 | export * from './use-scroll-lock'; 6 | export * from './use-simple-locale'; 7 | export * from './use-sortable'; 8 | export { 9 | useEmitAsProps, 10 | useForwardExpose, 11 | useForwardProps, 12 | useForwardPropsEmits, 13 | } from 'radix-vue'; 14 | -------------------------------------------------------------------------------- /web/internal/tsconfig/web.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "display": "Web Package", 4 | "extends": "./base.json", 5 | "compilerOptions": { 6 | "jsx": "preserve", 7 | "jsxImportSource": "vue", 8 | "lib": ["ESNext", "DOM", "DOM.Iterable"], 9 | "useDefineForClassFields": true, 10 | "moduleResolution": "bundler", 11 | "types": ["vite/client"], 12 | "declaration": false 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /ai_service/config.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | # 数据库配置 4 | MYSQL_USER = os.getenv('DB_USER', 'root') 5 | MYSQL_PASSWORD = os.getenv('DB_PASSWORD', 'my-secret-pw') 6 | MYSQL_HOST = os.getenv('DB_HOST', 'localhost') 7 | MYSQL_PORT = os.getenv('DB_PORT', '3306') 8 | MYSQL_DB = os.getenv('DB_NAME', 'django_vue') 9 | 10 | SQLALCHEMY_DATABASE_URL = ( 11 | f"mysql+pymysql://{MYSQL_USER}:{MYSQL_PASSWORD}@{MYSQL_HOST}:{MYSQL_PORT}/{MYSQL_DB}?charset=utf8mb4" 12 | ) 13 | -------------------------------------------------------------------------------- /web/apps/backend-mock/README.md: -------------------------------------------------------------------------------- 1 | # @vben/backend-mock 2 | 3 | ## Description 4 | 5 | Vben Admin 数据 mock 服务,没有对接任何的数据库,所有数据都是模拟的,用于前端开发时提供数据支持。线上环境不再提供 mock 集成,可自行部署服务或者对接真实数据,由于 `mock.js` 等工具有一些限制,比如上传文件不行、无法模拟复杂的逻辑等,所以这里使用了真实的后端服务来实现。唯一麻烦的是本地需要同时启动后端服务和前端服务,但是这样可以更好的模拟真实环境。该服务不需要手动启动,已经集成在 vite 插件内,随应用一起启用。 6 | 7 | ## Running the app 8 | 9 | ```bash 10 | # development 11 | $ pnpm run start 12 | 13 | # production mode 14 | $ pnpm run build 15 | ``` 16 | -------------------------------------------------------------------------------- /web/internal/lint-configs/prettier-config/index.mjs: -------------------------------------------------------------------------------- 1 | export default { 2 | endOfLine: 'auto', 3 | overrides: [ 4 | { 5 | files: ['*.json5'], 6 | options: { 7 | quoteProps: 'preserve', 8 | singleQuote: false, 9 | }, 10 | }, 11 | ], 12 | plugins: ['prettier-plugin-tailwindcss'], 13 | printWidth: 80, 14 | proseWrap: 'never', 15 | semi: true, 16 | singleQuote: true, 17 | trailingComma: 'all', 18 | }; 19 | -------------------------------------------------------------------------------- /web/apps/web-ele/src/app.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 18 | -------------------------------------------------------------------------------- /web/packages/@core/base/shared/src/utils/unique.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 根据指定字段对对象数组进行去重 3 | * @param arr 要去重的对象数组 4 | * @param key 去重依据的字段名 5 | * @returns 去重后的对象数组 6 | */ 7 | function uniqueByField(arr: T[], key: keyof T): T[] { 8 | const seen = new Map(); 9 | return arr.filter((item) => { 10 | const value = item[key]; 11 | return seen.has(value) ? false : (seen.set(value, item), true); 12 | }); 13 | } 14 | 15 | export { uniqueByField }; 16 | -------------------------------------------------------------------------------- /web/.npmrc: -------------------------------------------------------------------------------- 1 | registry = "https://registry.npmmirror.com" 2 | public-hoist-pattern[]=lefthook 3 | public-hoist-pattern[]=eslint 4 | public-hoist-pattern[]=prettier 5 | public-hoist-pattern[]=prettier-plugin-tailwindcss 6 | public-hoist-pattern[]=stylelint 7 | public-hoist-pattern[]=*postcss* 8 | public-hoist-pattern[]=@commitlint/* 9 | public-hoist-pattern[]=czg 10 | 11 | strict-peer-dependencies=false 12 | auto-install-peers=true 13 | dedupe-peer-dependents=true 14 | -------------------------------------------------------------------------------- /web/apps/backend-mock/api/system/dept/.post.ts: -------------------------------------------------------------------------------- 1 | import { verifyAccessToken } from '~/utils/jwt-utils'; 2 | import { 3 | sleep, 4 | unAuthorizedResponse, 5 | useResponseSuccess, 6 | } from '~/utils/response'; 7 | 8 | export default eventHandler(async (event) => { 9 | const userinfo = verifyAccessToken(event); 10 | if (!userinfo) { 11 | return unAuthorizedResponse(event); 12 | } 13 | await sleep(600); 14 | return useResponseSuccess(null); 15 | }); 16 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbPage.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 19 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/card/Card.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 21 | -------------------------------------------------------------------------------- /web/apps/backend-mock/api/system/dept/[id].put.ts: -------------------------------------------------------------------------------- 1 | import { verifyAccessToken } from '~/utils/jwt-utils'; 2 | import { 3 | sleep, 4 | unAuthorizedResponse, 5 | useResponseSuccess, 6 | } from '~/utils/response'; 7 | 8 | export default eventHandler(async (event) => { 9 | const userinfo = verifyAccessToken(event); 10 | if (!userinfo) { 11 | return unAuthorizedResponse(event); 12 | } 13 | await sleep(2000); 14 | return useResponseSuccess(null); 15 | }); 16 | -------------------------------------------------------------------------------- /web/apps/backend-mock/routes/[...].ts: -------------------------------------------------------------------------------- 1 | export default defineEventHandler(() => { 2 | return ` 3 |

Hello Vben Admin

4 |

Mock service is starting

5 | 12 | `; 13 | }); 14 | -------------------------------------------------------------------------------- /web/docs/.vitepress/theme/styles/base.css: -------------------------------------------------------------------------------- 1 | html.dark { 2 | color-scheme: dark; 3 | } 4 | 5 | .dark .VPContent { 6 | /* background-color: #14161a; */ 7 | } 8 | 9 | .form-valid-error p { 10 | margin: 0; 11 | } 12 | 13 | /* 顶部导航栏选中项样式 */ 14 | .VPNavBarMenuLink, 15 | .VPNavBarMenuGroup { 16 | border-bottom: 1px solid transparent; 17 | } 18 | 19 | .VPNavBarMenuLink.active, 20 | .VPNavBarMenuGroup.active { 21 | border-bottom-color: var(--vp-c-brand-1); 22 | } 23 | -------------------------------------------------------------------------------- /web/playground/src/views/demos/features/vue-query/typing.ts: -------------------------------------------------------------------------------- 1 | export interface IProducts { 2 | limit: number; 3 | products: { 4 | brand: string; 5 | category: string; 6 | description: string; 7 | discountPercentage: string; 8 | id: string; 9 | images: string[]; 10 | price: string; 11 | rating: string; 12 | stock: string; 13 | thumbnail: string; 14 | title: string; 15 | }[]; 16 | skip: number; 17 | total: number; 18 | } 19 | -------------------------------------------------------------------------------- /web/apps/backend-mock/api/system/dept/[id].delete.ts: -------------------------------------------------------------------------------- 1 | import { verifyAccessToken } from '~/utils/jwt-utils'; 2 | import { 3 | sleep, 4 | unAuthorizedResponse, 5 | useResponseSuccess, 6 | } from '~/utils/response'; 7 | 8 | export default eventHandler(async (event) => { 9 | const userinfo = verifyAccessToken(event); 10 | if (!userinfo) { 11 | return unAuthorizedResponse(event); 12 | } 13 | await sleep(1000); 14 | return useResponseSuccess(null); 15 | }); 16 | -------------------------------------------------------------------------------- /web/docs/src/demos/vben-ellipsis-text/tooltip/index.vue: -------------------------------------------------------------------------------- 1 | 4 | 15 | -------------------------------------------------------------------------------- /web/internal/node-utils/src/hash.ts: -------------------------------------------------------------------------------- 1 | import { createHash } from 'node:crypto'; 2 | 3 | /** 4 | * 生产基于内容的 hash,可自定义长度 5 | * @param content 6 | * @param hashLSize 7 | */ 8 | function generatorContentHash(content: string, hashLSize?: number) { 9 | const hash = createHash('md5').update(content, 'utf8').digest('hex'); 10 | 11 | if (hashLSize) { 12 | return hash.slice(0, hashLSize); 13 | } 14 | 15 | return hash; 16 | } 17 | 18 | export { generatorContentHash }; 19 | -------------------------------------------------------------------------------- /web/packages/constants/src/core.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @zh_CN 登录页面 url 地址 3 | */ 4 | export const LOGIN_PATH = '/auth/login'; 5 | 6 | export interface LanguageOption { 7 | label: string; 8 | value: 'en-US' | 'zh-CN'; 9 | } 10 | 11 | /** 12 | * Supported languages 13 | */ 14 | export const SUPPORT_LANGUAGES: LanguageOption[] = [ 15 | { 16 | label: '简体中文', 17 | value: 'zh-CN', 18 | }, 19 | { 20 | label: 'English', 21 | value: 'en-US', 22 | }, 23 | ]; 24 | -------------------------------------------------------------------------------- /backend/backend/asgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | ASGI config for backend project. 3 | 4 | It exposes the ASGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/5.2/howto/deployment/asgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.asgi import get_asgi_application 13 | 14 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'backend.settings') 15 | 16 | application = get_asgi_application() 17 | -------------------------------------------------------------------------------- /backend/backend/wsgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | WSGI config for backend project. 3 | 4 | It exposes the WSGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/5.2/howto/deployment/wsgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.wsgi import get_wsgi_application 13 | 14 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'backend.settings') 15 | 16 | application = get_wsgi_application() 17 | -------------------------------------------------------------------------------- /web/apps/backend-mock/api/system/menu/list.ts: -------------------------------------------------------------------------------- 1 | import { verifyAccessToken } from '~/utils/jwt-utils'; 2 | import { MOCK_MENU_LIST } from '~/utils/mock-data'; 3 | import { unAuthorizedResponse, useResponseSuccess } from '~/utils/response'; 4 | 5 | export default eventHandler(async (event) => { 6 | const userinfo = verifyAccessToken(event); 7 | if (!userinfo) { 8 | return unAuthorizedResponse(event); 9 | } 10 | 11 | return useResponseSuccess(MOCK_MENU_LIST); 12 | }); 13 | -------------------------------------------------------------------------------- /web/docs/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "@vben/tsconfig/web.json", 4 | "compilerOptions": { 5 | "baseUrl": ".", 6 | "paths": { 7 | "#/*": ["./src/_env/*"] 8 | } 9 | }, 10 | "include": [ 11 | ".vitepress/*.mts", 12 | ".vitepress/**/*.ts", 13 | ".vitepress/**/*.vue", 14 | "src/*.mts", 15 | "src/**/*.ts", 16 | "src/**/*.vue" 17 | ], 18 | "exclude": ["node_modules"] 19 | } 20 | -------------------------------------------------------------------------------- /web/packages/icons/src/iconify/index.ts: -------------------------------------------------------------------------------- 1 | import { createIconifyIcon } from '@vben-core/icons'; 2 | 3 | export * from '@vben-core/icons'; 4 | 5 | export const MdiKeyboardEsc = createIconifyIcon('mdi:keyboard-esc'); 6 | 7 | export const MdiWechat = createIconifyIcon('mdi:wechat'); 8 | 9 | export const MdiGithub = createIconifyIcon('mdi:github'); 10 | 11 | export const MdiGoogle = createIconifyIcon('mdi:google'); 12 | 13 | export const MdiQqchat = createIconifyIcon('mdi:qqchat'); 14 | -------------------------------------------------------------------------------- /web/playground/src/api/examples/table.ts: -------------------------------------------------------------------------------- 1 | import { requestClient } from '#/api/request'; 2 | 3 | export namespace DemoTableApi { 4 | export interface PageFetchParams { 5 | [key: string]: any; 6 | page: number; 7 | pageSize: number; 8 | } 9 | } 10 | 11 | /** 12 | * 获取示例表格数据 13 | */ 14 | async function getExampleTableApi(params: DemoTableApi.PageFetchParams) { 15 | return requestClient.get('/table/list', { params }); 16 | } 17 | 18 | export { getExampleTableApi }; 19 | -------------------------------------------------------------------------------- /ai_service/db/session.py: -------------------------------------------------------------------------------- 1 | from sqlalchemy import create_engine 2 | from sqlalchemy.orm import sessionmaker, declarative_base 3 | from config import SQLALCHEMY_DATABASE_URL 4 | 5 | engine = create_engine(SQLALCHEMY_DATABASE_URL, pool_pre_ping=True) 6 | SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) 7 | 8 | def get_db(): 9 | db = SessionLocal() 10 | try: 11 | yield db 12 | finally: 13 | db.close() 14 | 15 | Base = declarative_base() 16 | -------------------------------------------------------------------------------- /backend/system/management/commands/tpl/frontend_model.ts.tpl: -------------------------------------------------------------------------------- 1 | import { BaseModel } from '#/models/base'; 2 | 3 | export namespace ${app_name_camel}${model_name}Api { 4 | export interface ${app_name_camel}${model_name} { 5 | $interface_fields 6 | } 7 | } 8 | 9 | export class ${app_name_camel}${model_name}Model extends BaseModel<${app_name_camel}${model_name}Api.${app_name_camel}${model_name}> { 10 | constructor() { 11 | super('/$app_name/${model_name_snake}/'); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /web/playground/src/api/examples/params.ts: -------------------------------------------------------------------------------- 1 | import type { Recordable } from '@vben/types'; 2 | 3 | import { requestClient } from '#/api/request'; 4 | 5 | /** 6 | * 发起数组请求 7 | */ 8 | async function getParamsData( 9 | params: Recordable, 10 | type: 'brackets' | 'comma' | 'indices' | 'repeat', 11 | ) { 12 | return requestClient.get('/status', { 13 | params, 14 | paramsSerializer: type, 15 | responseReturn: 'raw', 16 | }); 17 | } 18 | 19 | export { getParamsData }; 20 | -------------------------------------------------------------------------------- /web/playground/src/locales/langs/en-US/page.json: -------------------------------------------------------------------------------- 1 | { 2 | "auth": { 3 | "login": "Login", 4 | "register": "Register", 5 | "codeLogin": "Code Login", 6 | "qrcodeLogin": "Qr Code Login", 7 | "forgetPassword": "Forget Password", 8 | "sendingCode": "SMS Code is sending...", 9 | "codeSentTo": "Code has been sent to {0}" 10 | }, 11 | "dashboard": { 12 | "title": "Dashboard", 13 | "analytics": "Analytics", 14 | "workspace": "Workspace" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /docs/src/pages/index.module.css: -------------------------------------------------------------------------------- 1 | /** 2 | * CSS files with the .module.css suffix will be treated as CSS modules 3 | * and scoped locally. 4 | */ 5 | 6 | .heroBanner { 7 | padding: 4rem 0; 8 | text-align: center; 9 | position: relative; 10 | overflow: hidden; 11 | } 12 | 13 | @media screen and (max-width: 996px) { 14 | .heroBanner { 15 | padding: 2rem; 16 | } 17 | } 18 | 19 | .buttons { 20 | display: flex; 21 | align-items: center; 22 | justify-content: center; 23 | } 24 | -------------------------------------------------------------------------------- /web/apps/backend-mock/api/auth/codes.ts: -------------------------------------------------------------------------------- 1 | import { verifyAccessToken } from '~/utils/jwt-utils'; 2 | import { unAuthorizedResponse } from '~/utils/response'; 3 | 4 | export default eventHandler((event) => { 5 | const userinfo = verifyAccessToken(event); 6 | if (!userinfo) { 7 | return unAuthorizedResponse(event); 8 | } 9 | 10 | const codes = 11 | MOCK_CODES.find((item) => item.username === userinfo.username)?.codes ?? []; 12 | 13 | return useResponseSuccess(codes); 14 | }); 15 | -------------------------------------------------------------------------------- /web/apps/backend-mock/api/menu/all.ts: -------------------------------------------------------------------------------- 1 | import { verifyAccessToken } from '~/utils/jwt-utils'; 2 | import { unAuthorizedResponse } from '~/utils/response'; 3 | 4 | export default eventHandler(async (event) => { 5 | const userinfo = verifyAccessToken(event); 6 | if (!userinfo) { 7 | return unAuthorizedResponse(event); 8 | } 9 | 10 | const menus = 11 | MOCK_MENUS.find((item) => item.username === userinfo.username)?.menus ?? []; 12 | return useResponseSuccess(menus); 13 | }); 14 | -------------------------------------------------------------------------------- /web/docs/src/guide/other/remove-code.md: -------------------------------------------------------------------------------- 1 | # 移除代码 2 | 3 | ## 移除百度统计代码 4 | 5 | 在对应应用的 `index.html` 文件中,找到如下代码,删除即可: 6 | 7 | ```html 8 | 9 | 18 | ``` 19 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/components.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://shadcn-vue.com/schema.json", 3 | "style": "new-york", 4 | "typescript": true, 5 | "tailwind": { 6 | "config": "tailwind.config.mjs", 7 | "css": "src/assets/index.css", 8 | "baseColor": "slate", 9 | "cssVariables": true 10 | }, 11 | "framework": "vite", 12 | "aliases": { 13 | "components": "@vben-core/shadcn-ui/components", 14 | "utils": "@vben-core/shared/utils" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/form/FormMessage.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 19 | -------------------------------------------------------------------------------- /web/apps/backend-mock/api/upload.ts: -------------------------------------------------------------------------------- 1 | import { verifyAccessToken } from '~/utils/jwt-utils'; 2 | import { unAuthorizedResponse } from '~/utils/response'; 3 | 4 | export default eventHandler((event) => { 5 | const userinfo = verifyAccessToken(event); 6 | if (!userinfo) { 7 | return unAuthorizedResponse(event); 8 | } 9 | return useResponseSuccess({ 10 | url: 'https://unpkg.com/@vbenjs/static-source@0.1.7/source/logo-v1.webp', 11 | }); 12 | // return useResponseError("test") 13 | }); 14 | -------------------------------------------------------------------------------- /web/docs/src/public/logos/shadcn-ui.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/index.ts: -------------------------------------------------------------------------------- 1 | export { default as AlertDialog } from './AlertDialog.vue'; 2 | export { default as AlertDialogAction } from './AlertDialogAction.vue'; 3 | export { default as AlertDialogCancel } from './AlertDialogCancel.vue'; 4 | export { default as AlertDialogContent } from './AlertDialogContent.vue'; 5 | export { default as AlertDialogDescription } from './AlertDialogDescription.vue'; 6 | export { default as AlertDialogTitle } from './AlertDialogTitle.vue'; 7 | -------------------------------------------------------------------------------- /ai_service/api/v1/chat/vo.py: -------------------------------------------------------------------------------- 1 | from pydantic import BaseModel 2 | from datetime import datetime 3 | 4 | class MessageVO(BaseModel): 5 | id: int 6 | content: str 7 | conversation_id: int 8 | type: str 9 | 10 | class Config: 11 | from_attributes = True # 启用ORM模式支持 12 | 13 | class ConversationsVO(BaseModel): 14 | id: int 15 | title: str 16 | update_time: datetime 17 | last_message: str | None = None 18 | 19 | class Config: 20 | from_attributes = True -------------------------------------------------------------------------------- /web/apps/web-antd/src/models/ai/drawing.ts: -------------------------------------------------------------------------------- 1 | import { BaseModel } from '#/models/base'; 2 | 3 | export namespace DrawingApi { 4 | export interface Drawing { 5 | id: number; 6 | remark: string; 7 | creator: string; 8 | modifier: string; 9 | update_time: string; 10 | create_time: string; 11 | is_deleted: boolean; 12 | } 13 | } 14 | 15 | export class DrawingModel extends BaseModel { 16 | constructor() { 17 | super('/ai/drawing/'); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /web/docs/src/demos/vben-ellipsis-text/auto-display/index.vue: -------------------------------------------------------------------------------- 1 | 8 | 17 | -------------------------------------------------------------------------------- /web/internal/lint-configs/eslint-config/src/configs/turbo.ts: -------------------------------------------------------------------------------- 1 | import type { Linter } from 'eslint'; 2 | 3 | import { interopDefault } from '../util'; 4 | 5 | export async function turbo(): Promise { 6 | const [pluginTurbo] = await Promise.all([ 7 | // @ts-expect-error - no types 8 | interopDefault(import('eslint-config-turbo')), 9 | ] as const); 10 | 11 | return [ 12 | { 13 | plugins: { 14 | turbo: pluginTurbo, 15 | }, 16 | }, 17 | ]; 18 | } 19 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/badge/Badge.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 19 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbList.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 21 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/select/SelectLabel.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 16 | -------------------------------------------------------------------------------- /web/packages/effects/common-ui/src/components/page/types.ts: -------------------------------------------------------------------------------- 1 | export interface PageProps { 2 | title?: string; 3 | description?: string; 4 | contentClass?: string; 5 | /** 6 | * 根据content可见高度自适应 7 | */ 8 | autoContentHeight?: boolean; 9 | headerClass?: string; 10 | footerClass?: string; 11 | /** 12 | * Custom height offset value (in pixels) to adjust content area sizing 13 | * when used with autoContentHeight 14 | * @default 0 15 | */ 16 | heightOffset?: number; 17 | } 18 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/components/breadcrumb/types.ts: -------------------------------------------------------------------------------- 1 | import type { Component } from 'vue'; 2 | 3 | import type { BreadcrumbStyleType } from '@vben-core/typings'; 4 | 5 | export interface IBreadcrumb { 6 | icon?: Component | string; 7 | isHome?: boolean; 8 | items?: IBreadcrumb[]; 9 | path?: string; 10 | title?: string; 11 | } 12 | 13 | export interface BreadcrumbProps { 14 | breadcrumbs: IBreadcrumb[]; 15 | showIcon?: boolean; 16 | styleType?: BreadcrumbStyleType; 17 | } 18 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/tabs/Tabs.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 17 | -------------------------------------------------------------------------------- /web/packages/effects/common-ui/src/components/captcha/hooks/useCaptchaPoints.ts: -------------------------------------------------------------------------------- 1 | import type { CaptchaPoint } from '../types'; 2 | 3 | import { reactive } from 'vue'; 4 | 5 | export function useCaptchaPoints() { 6 | const points = reactive([]); 7 | function addPoint(point: CaptchaPoint) { 8 | points.push(point); 9 | } 10 | 11 | function clearPoints() { 12 | points.splice(0); 13 | } 14 | return { 15 | addPoint, 16 | clearPoints, 17 | points, 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /web/playground/src/views/demos/features/hide-menu-children/parent.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 18 | -------------------------------------------------------------------------------- /web/docs/src/demos/vben-drawer/extra/index.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 22 | -------------------------------------------------------------------------------- /web/docs/src/demos/vben-modal/extra/index.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 22 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/ContextMenuTrigger.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 16 | -------------------------------------------------------------------------------- /web/docs/src/demos/vben-drawer/auto-height/index.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 22 | -------------------------------------------------------------------------------- /web/docs/src/demos/vben-modal/auto-height/index.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 22 | -------------------------------------------------------------------------------- /web/docs/src/demos/vben-modal/draggable/index.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 22 | -------------------------------------------------------------------------------- /web/packages/effects/layouts/src/widgets/preferences/blocks/block.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 23 | -------------------------------------------------------------------------------- /web/playground/src/views/examples/modal/drag-demo.vue: -------------------------------------------------------------------------------- 1 | 17 | 20 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/form-ui/build.config.ts: -------------------------------------------------------------------------------- 1 | import { defineBuildConfig } from 'unbuild'; 2 | 3 | export default defineBuildConfig({ 4 | clean: true, 5 | declaration: true, 6 | entries: [ 7 | { 8 | builder: 'mkdist', 9 | input: './src', 10 | loaders: ['vue'], 11 | pattern: ['**/*.vue'], 12 | }, 13 | { 14 | builder: 'mkdist', 15 | format: 'esm', 16 | input: './src', 17 | loaders: ['js'], 18 | pattern: ['**/*.ts'], 19 | }, 20 | ], 21 | }); 22 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/layout-ui/build.config.ts: -------------------------------------------------------------------------------- 1 | import { defineBuildConfig } from 'unbuild'; 2 | 3 | export default defineBuildConfig({ 4 | clean: true, 5 | declaration: true, 6 | entries: [ 7 | { 8 | builder: 'mkdist', 9 | input: './src', 10 | loaders: ['vue'], 11 | pattern: ['**/*.vue'], 12 | }, 13 | { 14 | builder: 'mkdist', 15 | format: 'esm', 16 | input: './src', 17 | loaders: ['js'], 18 | pattern: ['**/*.ts'], 19 | }, 20 | ], 21 | }); 22 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/popup-ui/build.config.ts: -------------------------------------------------------------------------------- 1 | import { defineBuildConfig } from 'unbuild'; 2 | 3 | export default defineBuildConfig({ 4 | clean: true, 5 | declaration: true, 6 | entries: [ 7 | { 8 | builder: 'mkdist', 9 | input: './src', 10 | loaders: ['vue'], 11 | pattern: ['**/*.vue'], 12 | }, 13 | { 14 | builder: 'mkdist', 15 | format: 'esm', 16 | input: './src', 17 | loaders: ['js'], 18 | pattern: ['**/*.ts'], 19 | }, 20 | ], 21 | }); 22 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/shadcn-ui/src/ui/form/FormDescription.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 21 | -------------------------------------------------------------------------------- /web/packages/@core/ui-kit/tabs-ui/build.config.ts: -------------------------------------------------------------------------------- 1 | import { defineBuildConfig } from 'unbuild'; 2 | 3 | export default defineBuildConfig({ 4 | clean: true, 5 | declaration: true, 6 | entries: [ 7 | { 8 | builder: 'mkdist', 9 | input: './src', 10 | loaders: ['vue'], 11 | pattern: ['**/*.vue'], 12 | }, 13 | { 14 | builder: 'mkdist', 15 | format: 'esm', 16 | input: './src', 17 | loaders: ['js'], 18 | pattern: ['**/*.ts'], 19 | }, 20 | ], 21 | }); 22 | -------------------------------------------------------------------------------- /web/packages/preferences/src/index.ts: -------------------------------------------------------------------------------- 1 | import type { Preferences } from '@vben-core/preferences'; 2 | import type { DeepPartial } from '@vben-core/typings'; 3 | 4 | /** 5 | * 如果你想所有的app都使用相同的默认偏好设置,你可以在这里定义 6 | * 而不是去修改 @vben-core/preferences 中的默认偏好设置 7 | * @param preferences 8 | * @returns 9 | */ 10 | 11 | function defineOverridesPreferences(preferences: DeepPartial) { 12 | return preferences; 13 | } 14 | 15 | export { defineOverridesPreferences }; 16 | 17 | export * from '@vben-core/preferences'; 18 | --------------------------------------------------------------------------------