快速开始
安装
bash
npm install vue-admin-kit
# 或
pnpm add vue-admin-kit依赖要求
需要安装以下 peerDependencies:
json
{
"vue": "^3.4.0",
"element-plus": "^2.0.0",
"vxe-pc-ui": "^4.0.0",
"vxe-table": "^4.0.0",
"xe-utils": "^3.0.0",
"@element-plus/icons-vue": "^2.0.0",
"@vueuse/core": "^10.0.0"
}引入样式
typescript
// main.ts
import "vue-admin-kit/style.css";初始化配置
typescript
// src/config/pageTemplate/index.ts
import { setupPageTemplate } from "vue-admin-kit";
import { getDicts } from "@/api/system/dict/data";
import { uploadOSS, deleteOSS } from "@/api/system/oss";
export function setupPageTemplateConfig() {
setupPageTemplate({
ui: {
formItemSize: "default", // 'small' | 'default' | 'large'
},
dependencies: {
// 字典加载器
dictLoader: async (dictType) => {
const res = await getDicts(dictType);
const data = (res.data || []).map((item: any) => ({
label: item.dictLabel,
value: item.dictValue,
elTagType: item.listClass,
raw: item,
}));
return { success: true, data, fromCache: false, loadTime: 0 };
},
// OSS 文件上传/删除 API
oss: {
uploadOSS: async (file: File | FormData) => {
const formData =
file instanceof FormData
? file
: (() => {
const fd = new FormData();
fd.append("files", file);
return fd;
})();
const res = await uploadOSS(formData);
return {
url: res.data?.url || "",
fileName: res.data?.fileName || "",
ossId: res.data?.ossId || "",
};
},
deleteOSS: async (ossId: string | number) => {
const res = await deleteOSS(ossId);
return { code: res.code, msg: res.msg };
},
},
// 表格高度计算(可选)
calculateHeight: (formHeight, otherHeight = 0) => {
return window.innerHeight - formHeight - otherHeight - 200;
},
},
// 字典预加载配置(可选)
dict: {
preload: true,
commonTypes: ["sys_status", "sys_yes_no"],
cacheTime: 24 * 60 * 60 * 1000, // 24小时
},
// VXE-Table 全局配置(可选)
VXETableConfig: {
size: "medium",
zIndex: 3000,
table: {
border: true,
stripe: true,
showOverflow: true,
},
grid: {
toolbarConfig: {
refresh: true,
zoom: true,
},
},
},
});
}VXETableConfig 说明
VXETableConfig 用于配置 VXE-Table 的全局选项,会调用 VXETable.setConfig() 进行设置。常用配置:
typescript
VXETableConfig: {
size: 'medium', // 全局尺寸
zIndex: 3000, // 弹窗层级
table: {
border: true, // 边框
stripe: true, // 斑马纹
showOverflow: true, // 溢出隐藏
highlightHoverRow: true // 高亮悬停行
},
grid: {
toolbarConfig: {
refresh: true, // 刷新按钮
zoom: true // 全屏按钮
}
}
}在 main.ts 中调用
typescript
// main.ts
import { setupPageTemplateConfig } from "@/config/pageTemplate";
// 在 app.use(store) 之后调用
setupPageTemplateConfig();基础用法
vue
<script setup lang="ts">
import { useState, PageTemplate, Table } from "vue-admin-kit";
import type { PageTemplateExposed } from "vue-admin-kit";
const pageTemplateRef = ref<PageTemplateExposed>();
useState({
api: {
list: (params) => getList(params),
add: (data) => addItem(data),
edit: (data) => updateItem(data),
delete: (id) => deleteItem(id),
detail: (id) => getDetail(id),
},
searchConfig: [
{ type: "input", prop: "name", label: "名称" },
{ type: "select", prop: "status", label: "状态", dictType: "sys_status" },
],
formConfig: [
{ type: "input", prop: "name", label: "名称", required: true },
{ type: "select", prop: "status", label: "状态", dictType: "sys_status" },
],
columnsConfig: [
{ field: "name", title: "名称" },
{ field: "status", title: "状态", dictType: "sys_status" },
],
tableOptions: {
operateColumns: [
{
title: "编辑",
onClick: (row) => pageTemplateRef.value?.handleEdit(row),
},
{
title: "删除",
onClick: (row) => pageTemplateRef.value?.handleDelete(row),
},
],
},
});
</script>
<template>
<PageTemplate ref="pageTemplateRef">
<template #table>
<Table />
</template>
</PageTemplate>
</template>