Forked from shadcn-admin
Admin Dashboard UI crafted with Shadcn-vue, Vue3 and Vite. Built with responsiveness and accessibility in mind.
This is not a starter project (template) though. More components will be added later.
- Light/Dark Mode
- Global Search Command
- shadcn-ui sidebar
- 8+ pages
- some custom components
- auto generate routes
ui:
Build Tool:
State Management:
Styling:
Unplugins:
- Auto Import
- Components
- vite-plugin-pages [Deprecation]
- unplugin-vue-router
- Vite Plugin Vue Layouts
- Vite Plugin Vue Devtools
Icons:
Linting:
Charts:
- vue-chrts
If you use tailwindcss v4, shadcn-vue charts is 'Legacy'. We now use this library instead.
Clone the project
git clone https://github.com/Whbbit1999/shadcn-vue-admin.gitGo to the project directory
cd shadcn-vue-adminInstall dependencies
pnpm installStart the development server
pnpm devCreated by Whbbit, Design by shadcn-admin
If you need to change the website style, you can use the preset styles provided by tweakcn. You only need to copy the css variables provided by tweakcn to index.css and change the :root :dark and @theme inline parts.
For example, I don't want the pages in the pages/errors/ and pages/auth/ folders to use the default layout. I need to create a file in pages/ with the same name as the directory, src/pages/errors.vue src/pages/auth.vue, with the following file contents.
<template>
<router-view />
</template>
<route lang="yml">
meta:
layout: false # This is the layout you want. I use false here to indicate that it does not need layout components.
</route>This will result in an extra route being generated. In this example, if you follow the above steps, redundant
/error/and/auth/routes will be generated, and these two pages will be blank pages. If you don't need them and there is noindex.vuein the directory, you can create anindex.vuefile in the directory and redirect it to any page. I redirect it to/errors/404here, you can handle it according to your situation. The content of theindex.vuefile is as follows:
<script lang="ts" setup>
const router = useRouter()
router.replace({ name: '/errors/404' })
</script>