# sunadmin-core--npm
**Repository Path**: sunjinglong/sunadmin-core--npm
## Basic Information
- **Project Name**: sunadmin-core--npm
- **Description**: sunadmin核心依赖库,一般无需独立安装,若要使用sunadmin完整版,请使用npm create sunadmin命令创建项目
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-06-18
- **Last Updated**: 2025-06-21
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# SunAdmin 后台管理系统前端框架
> **一句命令即可安装完整的后台管理系统前端框架!**
## 介绍
SunAdmin Admin UI 是一个基于 Vue 3 和 Element Plus 开发的通用后台管理系统前端框架,旨在提供一套完整的后台管理界面解决方案,帮助开发者快速搭建专业的管理后台。
### 开发目的
- **一句命令安装**:通过简单的 npm/pnpm 命令即可获得完整后台框架
- **零侵入性**:作为独立的 npm 包,对宿主项目无任何侵入性
- **便捷更新**:版本更新只需更改依赖版本号,无需修改现有代码
- **避免依赖冲突**:使用 peerDependencies 设计,避免重复依赖安装
- 提供开箱即用的后台管理界面
- 减少重复开发常见后台功能的工作量
- 统一管理后台的界面风格与交互体验
- 与 SunAdmin 后端框架无缝集成,形成完整解决方案
### 为什么开发成独立的包?
- **便于安装**:一句命令即可完成安装,无需复杂配置
- **无侵入性**:作为独立包引入,不会污染宿主项目的代码结构
- **便捷更新**:只需修改版本号即可获取最新功能和安全修复
- **跨项目复用**:可在多个项目中使用相同的管理界面
- **统一维护**:集中维护一套代码,确保各项目使用相同标准
- **避免依赖冲突**:通过 peerDependencies 设计,让宿主项目管理依赖版本
### 技术栈
- **Vue 3**: 渐进式 JavaScript 框架
- **TypeScript**: 类型安全的 JavaScript 超集
- **Element Plus**: 基于 Vue 3 的组件库
- **Pinia**: Vue 的状态管理库
- **Vue Router**: Vue.js 的官方路由
- **Axios**: 基于 Promise 的 HTTP 客户端
- **Vite**: 现代前端构建工具
## 起步
### 安装
> **只需一句命令,即可拥有完整的后台管理系统前端框架!**
#### 1. 安装依赖
由于采用了 peerDependencies 设计,您需要先安装必要的依赖:
```bash
# 使用 npm
npm install vue@^3.4.29 element-plus@^2.7.7 @element-plus/icons-vue@^2.3.1 pinia@^3.0.3 pinia-plugin-persistedstate@^4.2.0 vue-router@^4.3.3 axios@^1.7.2
# 使用 pnpm
pnpm add vue@^3.4.29 element-plus@^2.7.7 @element-plus/icons-vue@^2.3.1 pinia@^3.0.3 pinia-plugin-persistedstate@^4.2.0 vue-router@^4.3.3 axios@^1.7.2
```
#### 2. 安装 SunAdmin
```bash
# 使用 npm
npm install @sunjinglong/sunadmin-admin-ui
# 使用 pnpm
pnpm add @sunjinglong/sunadmin-admin-ui
```
### 基础配置
由于新的设计架构,您需要在宿主项目中自行配置第三方库:
#### main.js 配置示例
```js
import { createApp } from "vue";
import App from "./App.vue";
// 手动配置第三方库
import ElementPlus from "element-plus";
import "element-plus/dist/index.css";
import zhCn from "element-plus/dist/locale/zh-cn.mjs";
import * as ElementPlusIconsVue from "@element-plus/icons-vue";
import { createRouter, createWebHistory } from "vue-router";
import { createPinia } from "pinia";
import piniaPluginPersistedstate from "pinia-plugin-persistedstate";
// 导入 SunAdmin
import SunAdminUI from "@sunjinglong/sunadmin-admin-ui";
import "@sunjinglong/sunadmin-admin-ui/dist/style.css";
const app = createApp(App);
// 1. 配置 Element Plus
app.use(ElementPlus, { locale: zhCn });
// 2. 注册 Element Plus Icons
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
app.component(key, component);
}
// 3. 配置 Pinia
const pinia = createPinia();
pinia.use(piniaPluginPersistedstate);
app.use(pinia);
// 4. 配置路由
const router = createRouter({
history: createWebHistory(),
routes: [
// 您的自定义路由
],
});
app.use(router);
// 5. 配置 SunAdmin
app.use(SunAdminUI, {
apiConfig: {
baseURL: "http://your-api-domain.com/sunAdmin", // 后端API基础地址
timeout: 60000, // 请求超时时间
wsUrl: "ws://xxxx",
},
});
app.mount("#app");
```
### 与后端集成
SunAdmin 前端框架设计为与 `sunjinglong/sunadmin-server` 后端框架无缝集成,一句命令即可拥有高性能后端。
[请阅读后端仓库中的使用文档](https://gitee.com/sunjinglong/sunadmin-server)
#### 后端 API 格式要求
响应格式:
```json
{
"code": 200,
"message": "操作成功",
"data": {}
}
```
认证方式:
- 使用 Bearer Token 认证
- Token 通过请求头 `Authorization: Bearer {token}` 传递
## 封装列表
### 用户认证与权限管理
- 登录页面与认证流程
- 基于角色的权限控制
- 动态菜单权限
- Token 自动刷新
- 用户信息管理
### 布局与导航
- 响应式侧边栏
- 面包屑导航
- 标签页导航
- 自适应布局
- 主题定制
### 数据管理页面
- 管理员账号管理
- 角色权限管理
- 菜单管理
- 数据字典管理
- 附件管理
- 定时任务管理
### WebSocket 实时通信
- 自动连接与重连
- 消息订阅与发布
- 实时通知
- 用户在线状态
### 通用组件
- 页面容器组件
- 搜索卡片组件
- 表单构建器
- 图标选择器
- 图片选择器
- 附件选择器
## 二开文档
### 创建页面
- 在你的项目 pages 目录中创建页面 vue 文件,例: src/test.vue
- 在 main.js 中加载 sunadmin 的时候传入路由配置
```js
app.use(SunAdminCore,{
apiConfig: {....api配置信息},
//layoutRoutes中的路由页面将在系统框架内显示
layoutRoutes: [
//该数组中加入你的路由地址
{
path: '/test',
component: () => import('./pages/test.vue')
}
],
outsideRoutes:[
{
path:'/其他不需要再框架内显示的页面'
}
]
})
```
- 最后需要在后台 - 运维 - 菜单权限 - 新增 - 菜单类型(页面路由) - 路由地址(/test), 将菜单路由信息提交到服务区,该步骤请保证你已经安装了后端服务,具体请参阅[sunadmin 配套后端服务安装方式,一条命令即可安装](https://gitee.com/sunjinglong/sunadmin-server)
- 刷新页面后会即可在后台看到菜单
### 使用 ElementPlus 相关 api
> sunadmin 包内已经安装了 ElementPlus 组件库,用户宿主项目中无需重复安装
```js
import { ElMessage,ElMessageBox, ...其他api } from "@sunjinglong/sunadmin-admin-ui";
ElMessage.info("信息提示");
ElMessage.error("错误提示");
```
### 使用 pinia
> sunadmin 中已经导入并加载了 pinia, 用户在宿主项目中无需安装和导入 pinia
```js
import { defineStore } from "@sunjinglong/sunadmin-admin-ui";
export const useAccountStore = defineStore("account", {
state: () => {
return {
test: "",
};
},
});
```
### 路由实例 router 的使用
> npm 包内已经创建了路由实例,并且导出了该实例,宿主项目中无需引入并创建路由实例
- 如果是 vue 组合式 api 风格,那么请直接使用 vue 原生的 useRouter()钩子来获取当前的路由实例(推荐);
```js
// 组合式api风格,在宿主项目中
import { useRouter } from "vue-router";
// 在setup函数或组件中
const router = useRouter();
// 使用路由
router.push("/dashboard");
```
- 如果使用的不是组合式 api 风格,那么请使用 vue 原生的 this.$router 来访问路由实例 (推荐)
```js
// 选项式API组件
export default {
methods: {
navigateTo(path) {
this.$router.push(path);
},
goBack() {
this.$router.go(-1);
},
},
mounted() {
// 在生命周期钩子中使用
console.log(this.$router.currentRoute.value);
},
};
```
- 如果需要在组件外或者特殊需求下获取 sunadmin 包内创建的路由实例,那么请使用 sunadmin 导出的 router(一般很少遇到这种场景)
```js
import { router } from "@sunjinglong/sunadmin-admin-ui";
router.push("/some-path");
```
### HTTP 请求
> sunadmin 包内已经自行使用 axios 封装了网络请求方法,导出了 get,post,del,service(axios 实例)
> 请求返回拦截处理原则是:当接口 http 状态码为 200,且业务数据中 response.code 为 200,那么认为该接口成功。否则一律按照接口异常处理,返回 Promise.reject,走 catch。
```js
import { get, post } from "@sunjinglong/sunadmin-admin-ui";
// GET 请求
http.get("请求地址(会自动拼接host)", {'请求数据对象'})
.then((response) => {
console.log(response.data);
})
.catch((err) => {
console.error(err.message);
});
// POST 请求
http.post("/api/users", { name: "John", email: "john@example.com" }).then((response) => {
console.log(response.data);
});
// DELETE 请求
http.del("/api/users/1").then((response) => {
console.log(response.data);
});
```
### WebSocket 管理
#### 主动订阅 ws 消息
```js
import { wsManager } from "@sunjinglong/sunadmin-admin-ui";
//消息订阅 (一般在页面组件create的时候订阅),返回销毁方法
this.wsHandle = wsManager.addMessageHandler((data) => {
console.log("收到ws消息");
});
//记得在合适时机取消订阅(一般在页面组件销毁beforeUnmount)
this.wsHandle();
```
### sunadmin 包内可用的 pinia 状态实例
#### 后台管理员登录信息
```js
import { useAccountStore } from "@sunjinglong/sunadmin-admin-ui";
// 账户状态
const accountStore = useAccountStore();
```
##### 属性:
- 自行打印 accountStore 查看
- isLogin 可判断当前登录状态,是一个 getters 属性
##### 方法:
- loginOut() 退出登录
- accountOffLine() 强制踢出某管理员下线
### 日期工具
```js
import { formatFriendlyTime } from "@sunjinglong/sunadmin-admin-ui";
```
#### 友好时间显示
- formatFriendlyTime(dateTime: string | number | Date | null | undefined)
#### 判断两个日志是否为同一天
- isSameDay(date1: Date, date2: Date)
### 业务初始化
```js
import { initBusiness, cleanupBusiness, reinitBusiness } from "@sunjinglong/sunadmin-admin-ui";
// 初始化业务逻辑
initBusiness();
// 清理业务资源
cleanupBusiness();
// 重新初始化业务逻辑
reinitBusiness();
```
## 自定义开发
### 扩展组件
您可以通过导入并扩展 SunAdmin 的组件来创建自定义组件:
```vue
```
## 相关链接
- [SunAdmin 前端仓库](https://gitee.com/sunjinglong/sunadmin-admin-ui)
- [SunAdmin 后端仓库](https://gitee.com/sunjinglong/sunadmin-server)
- [Vue 3 文档](https://cn.vuejs.org/)
- [Element Plus 文档](https://element-plus.org/zh-CN/)
## 许可证
SunAdmin Admin UI 使用 MIT 许可证,详见 LICENSE 文件。