代码拉取完成,页面将自动刷新
基于 Vue 3 + TypeScript + Vite 的后台管理系统模板,集成了常用的组件和功能。
vue-demo
├── public/ # 静态资源
├── src/
│ ├── assets/ # 项目资源文件
│ ├── components/ # 公共组件
│ ├── composables/ # 组合式API
│ ├── config/ # 配置文件
│ ├── layouts/ # 布局组件
│ ├── router/ # 路由配置
│ ├── services/ # API服务
│ ├── stores/ # 状态管理
│ ├── types/ # 类型定义
│ ├── utils/ # 工具函数
│ ├── views/ # 页面文件
│ ├── App.vue # 根组件
│ └── main.ts # 入口文件
├── .editorconfig # 编辑器配置
├── .eslintrc.js # ESLint配置
├── .gitignore # Git忽略文件
├── package.json # 项目配置
├── tsconfig.json # TypeScript配置
├── vite.config.ts # Vite配置
└── README.md # 项目说明
yarn install
yarn dev
yarn build
yarn lint
<BaseButton
type="primary"
size="medium"
:loading="loading"
@click="handleClick"
>
按钮文本
</BaseButton>
<BaseForm
v-model="formData"
:rules="rules"
:loading="loading"
@submit="handleSubmit"
>
<template #form-items>
<!-- 表单项 -->
</template>
</BaseForm>
<BaseList
:data="tableData"
:loading="loading"
:pagination="pagination"
:search-fields="searchFields"
@search="handleSearch"
>
<template #columns>
<!-- 表格列 -->
</template>
</BaseList>
<UploadImage
v-model="imageUrl"
:storage-type="'local'"
shape="square"
@change="handleChange"
/>
const { loading, startLoading, stopLoading } = useLoading()
const fetchData = async () => {
startLoading()
try {
// 异步操作
} finally {
stopLoading()
}
}
const notify = useNotification()
notify.success('操作成功')
notify.error('操作失败')
notify.warning('警告信息')
notify.info('提示信息')
<!-- 组件方式 -->
<PermissionWrapper code="system:user:add">
<button>添加用户</button>
</PermissionWrapper>
<!-- 指令方式 -->
<button v-permission="'system:user:add'">添加用户</button>
<!-- 路由方式 -->
{
path: 'system-users',
name: 'system-users',
component: () => import('@/views/system/SystemUser.vue'),
meta: { title: '系统用户', permissions: ['system:users:list'] },
}
默认处理commonResult 直接返回 data 数据
import { request } from '@/utils/request'
// GET请求
const getData = () => request.get<ResponseType>('/api/data')
// POST请求
const createData = (data: any) => request.post<ResponseType>('/api/data', {
body: data,
serviceType: ServiceType.xxx, // 服务类型(无,调用默认)
customHeaders: { loginType: LoginType.ADMIN }, // 自定义请求头
})
单表组件自带防抖函数,无需手动实现
import { debounce } from '@/utils/debounce'
const handleSearch = debounce((value: string) => {
// 搜索逻辑
}, 300)
import { filterEmptyValue } from '@/utils/object'
const params = filterEmptyValue({
name: '',
age: 0,
address: undefined
}) // 结果: { age: 0 }
组件使用优先级:
组合式API使用优先级:
工具函数使用优先级:
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。