mirror of
https://gitee.com/xiangheng/x_admin.git
synced 2025-10-05 00:02:50 +08:00
完善文档
This commit is contained in:
@@ -1,27 +0,0 @@
|
|||||||
## vite configuration
|
|
||||||
|
|
||||||
See [Vite Configuration Reference](https://vitejs.dev/config/).
|
|
||||||
|
|
||||||
## Project Setup
|
|
||||||
|
|
||||||
```sh
|
|
||||||
npm install
|
|
||||||
```
|
|
||||||
|
|
||||||
### Development
|
|
||||||
|
|
||||||
```sh
|
|
||||||
npm run dev
|
|
||||||
```
|
|
||||||
|
|
||||||
### Production
|
|
||||||
|
|
||||||
```sh
|
|
||||||
npm run build
|
|
||||||
```
|
|
||||||
|
|
||||||
### Lint with [ESLint](https://eslint.org/)
|
|
||||||
|
|
||||||
```sh
|
|
||||||
npm run lint
|
|
||||||
```
|
|
@@ -5,6 +5,10 @@ export default defineConfig({
|
|||||||
base:'/x_admin/',
|
base:'/x_admin/',
|
||||||
title: "x_admin",
|
title: "x_admin",
|
||||||
description: "x_admin 开发文档",
|
description: "x_admin 开发文档",
|
||||||
|
|
||||||
|
markdown: {
|
||||||
|
lineNumbers: true
|
||||||
|
},
|
||||||
themeConfig: {
|
themeConfig: {
|
||||||
// https://vitepress.dev/reference/default-theme-config
|
// https://vitepress.dev/reference/default-theme-config
|
||||||
nav: [
|
nav: [
|
||||||
@@ -23,6 +27,10 @@ export default defineConfig({
|
|||||||
{ text: '准备', link: '/server/准备.md' },
|
{ text: '准备', link: '/server/准备.md' },
|
||||||
{ text: 'Go打包', link: '/server/部署Go.md' },
|
{ text: 'Go打包', link: '/server/部署Go.md' },
|
||||||
{ text: 'nginx配置', link: '/server/nginx配置.md' },
|
{ text: 'nginx配置', link: '/server/nginx配置.md' },
|
||||||
|
{ text: '.env配置选项', link: '/server/环境变量.md' },
|
||||||
|
{ text: '权限验证', link: '/server/权限验证.md' },
|
||||||
|
{ text: '结构说明', link: '/server/结构说明.md' },
|
||||||
|
{ text: '注意事项', link: '/server/注意事项.md' },
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -31,6 +39,8 @@ export default defineConfig({
|
|||||||
{ text: '准备', link: '/admin/准备.md' },
|
{ text: '准备', link: '/admin/准备.md' },
|
||||||
|
|
||||||
{ text: 'nginx配置', link: '/admin/nginx配置.md' },
|
{ text: 'nginx配置', link: '/admin/nginx配置.md' },
|
||||||
|
|
||||||
|
{ text: '路由', link: '/admin/路由.md' },
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
48
docs/0.使用.md
48
docs/0.使用.md
@@ -1,48 +0,0 @@
|
|||||||
# 前期准备
|
|
||||||
|
|
||||||
后端
|
|
||||||
1. 安装 go
|
|
||||||
2. 安装 mysql
|
|
||||||
3. 安装 redis
|
|
||||||
4. 安装 git
|
|
||||||
5. 安装 swag: `go install github.com/swaggo/swag/cmd/swag@latest`
|
|
||||||
|
|
||||||
前端
|
|
||||||
1. 安装 node
|
|
||||||
2. 安装 pnpm(可选)
|
|
||||||
3. 安装 git
|
|
||||||
|
|
||||||
|
|
||||||
# 使用
|
|
||||||
|
|
||||||
### 1.下载项目
|
|
||||||
|
|
||||||
```
|
|
||||||
git clone git@gitee.com:xiangheng/x_admin.git
|
|
||||||
```
|
|
||||||
|
|
||||||
### 2.创建数据库并导入`x_admin/sql/`目录下 sql 文件
|
|
||||||
|
|
||||||
### 3.运行后端
|
|
||||||
1. 复制并重命名`x_admin/server/.env.example`为`x_admin/server/.env`文件,
|
|
||||||
2. `.env`必须配置 `mysql` 和 `redis` 信息。
|
|
||||||
```bash
|
|
||||||
cd x_admin/server
|
|
||||||
# 生成接口文档
|
|
||||||
swag init
|
|
||||||
# 运行, 在vscode中打开server目录中的文件,按F5即可运行
|
|
||||||
go run .
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
### 4.运行前端
|
|
||||||
1. 复制并重命名`x_admin/admin/.env.development.example`为`x_admin/admin/.env.development`文件,
|
|
||||||
2. `.env.development`必须配置 `VITE_APP_BASE_URL`后端地址信息。
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd x_admin/admin
|
|
||||||
# 安装依赖
|
|
||||||
pnpm install
|
|
||||||
# 运行
|
|
||||||
pnpm run dev
|
|
||||||
```
|
|
@@ -1,27 +0,0 @@
|
|||||||
|
|
||||||
# nginx配置
|
|
||||||
## 反向代理接口
|
|
||||||
```nginx
|
|
||||||
location ^~ /api
|
|
||||||
{
|
|
||||||
proxy_pass http://127.0.0.1:8001;
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
|
||||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
||||||
proxy_set_header REMOTE-HOST $remote_addr;
|
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
|
||||||
proxy_set_header Connection $connection_upgrade;
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
# proxy_hide_header Upgrade;
|
|
||||||
|
|
||||||
add_header X-Cache $upstream_cache_status;
|
|
||||||
|
|
||||||
}
|
|
||||||
```
|
|
||||||
## 前端页面使用history模式需要重定向
|
|
||||||
```nginx
|
|
||||||
location / {
|
|
||||||
index /index.html;
|
|
||||||
try_files $uri $uri/ /index.html;
|
|
||||||
}
|
|
||||||
```
|
|
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
# nginx配置
|
# nginx配置
|
||||||
|
|
||||||
```
|
|
||||||
## 前端页面使用history模式需要重定向
|
## 前端页面使用history模式需要重定向
|
||||||
```nginx
|
```nginx
|
||||||
location / {
|
location / {
|
||||||
|
@@ -28,3 +28,5 @@ pnpm install
|
|||||||
# 运行
|
# 运行
|
||||||
pnpm run dev
|
pnpm run dev
|
||||||
```
|
```
|
||||||
|
|
||||||
|
<!-- <<< @/../admin/package.json#snippet{6-14} -->
|
||||||
|
9
docs/admin/路由.md
Normal file
9
docs/admin/路由.md
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# 路由
|
||||||
|
|
||||||
|
1. 扫描`/src/views/`目录下的所有`*.vue`文件,排除`edit.vue`和`/component/**`,生成组件列表供菜单管理选择。
|
||||||
|
|
||||||
|
2. 在菜单管理中添加
|
||||||
|
|
||||||
|
3. 在角色中绑定菜单
|
||||||
|
|
||||||
|
4. 在用户中绑定角色
|
@@ -1,49 +0,0 @@
|
|||||||
---
|
|
||||||
outline: deep
|
|
||||||
---
|
|
||||||
|
|
||||||
# Runtime API Examples
|
|
||||||
|
|
||||||
This page demonstrates usage of some of the runtime APIs provided by VitePress.
|
|
||||||
|
|
||||||
The main `useData()` API can be used to access site, theme, and page data for the current page. It works in both `.md` and `.vue` files:
|
|
||||||
|
|
||||||
```md
|
|
||||||
<script setup>
|
|
||||||
import { useData } from 'vitepress'
|
|
||||||
|
|
||||||
const { theme, page, frontmatter } = useData()
|
|
||||||
</script>
|
|
||||||
|
|
||||||
## Results
|
|
||||||
|
|
||||||
### Theme Data
|
|
||||||
<pre>{{ theme }}</pre>
|
|
||||||
|
|
||||||
### Page Data
|
|
||||||
<pre>{{ page }}</pre>
|
|
||||||
|
|
||||||
### Page Frontmatter
|
|
||||||
<pre>{{ frontmatter }}</pre>
|
|
||||||
```
|
|
||||||
|
|
||||||
<script setup>
|
|
||||||
import { useData } from 'vitepress'
|
|
||||||
|
|
||||||
const { site, theme, page, frontmatter } = useData()
|
|
||||||
</script>
|
|
||||||
|
|
||||||
## Results
|
|
||||||
|
|
||||||
### Theme Data
|
|
||||||
<pre>{{ theme }}</pre>
|
|
||||||
|
|
||||||
### Page Data
|
|
||||||
<pre>{{ page }}</pre>
|
|
||||||
|
|
||||||
### Page Frontmatter
|
|
||||||
<pre>{{ frontmatter }}</pre>
|
|
||||||
|
|
||||||
## More
|
|
||||||
|
|
||||||
Check out the documentation for the [full list of runtime APIs](https://vitepress.dev/reference/runtime-api#usedata).
|
|
@@ -1,85 +0,0 @@
|
|||||||
# Markdown Extension Examples
|
|
||||||
|
|
||||||
This page demonstrates some of the built-in markdown extensions provided by VitePress.
|
|
||||||
|
|
||||||
## Syntax Highlighting
|
|
||||||
|
|
||||||
VitePress provides Syntax Highlighting powered by [Shiki](https://github.com/shikijs/shiki), with additional features like line-highlighting:
|
|
||||||
|
|
||||||
**Input**
|
|
||||||
|
|
||||||
````md
|
|
||||||
```js{4}
|
|
||||||
export default {
|
|
||||||
data () {
|
|
||||||
return {
|
|
||||||
msg: 'Highlighted!'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
````
|
|
||||||
|
|
||||||
**Output**
|
|
||||||
|
|
||||||
```js{4}
|
|
||||||
export default {
|
|
||||||
data () {
|
|
||||||
return {
|
|
||||||
msg: 'Highlighted!'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Custom Containers
|
|
||||||
|
|
||||||
**Input**
|
|
||||||
|
|
||||||
```md
|
|
||||||
::: info
|
|
||||||
This is an info box.
|
|
||||||
:::
|
|
||||||
|
|
||||||
::: tip
|
|
||||||
This is a tip.
|
|
||||||
:::
|
|
||||||
|
|
||||||
::: warning
|
|
||||||
This is a warning.
|
|
||||||
:::
|
|
||||||
|
|
||||||
::: danger
|
|
||||||
This is a dangerous warning.
|
|
||||||
:::
|
|
||||||
|
|
||||||
::: details
|
|
||||||
This is a details block.
|
|
||||||
:::
|
|
||||||
```
|
|
||||||
|
|
||||||
**Output**
|
|
||||||
|
|
||||||
::: info
|
|
||||||
This is an info box.
|
|
||||||
:::
|
|
||||||
|
|
||||||
::: tip
|
|
||||||
This is a tip.
|
|
||||||
:::
|
|
||||||
|
|
||||||
::: warning
|
|
||||||
This is a warning.
|
|
||||||
:::
|
|
||||||
|
|
||||||
::: danger
|
|
||||||
This is a dangerous warning.
|
|
||||||
:::
|
|
||||||
|
|
||||||
::: details
|
|
||||||
This is a details block.
|
|
||||||
:::
|
|
||||||
|
|
||||||
## More
|
|
||||||
|
|
||||||
Check out the documentation for the [full list of markdown extensions](https://vitepress.dev/guide/markdown).
|
|
14
docs/server/权限验证.md
Normal file
14
docs/server/权限验证.md
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
# 权限验证
|
||||||
|
|
||||||
|
路由添加`TokenAuth`中间件,可实现登录验证,
|
||||||
|
|
||||||
|
接口路径就是权限标识,例如:`/api/admin/user`,标识位为`admin:user`
|
||||||
|
```
|
||||||
|
r := rg.Group("/", middleware.TokenAuth())
|
||||||
|
```
|
||||||
|
|
||||||
|
对于路由组下不需要验证的路由
|
||||||
|
1. 调整路由顺序,白名单路由在验证路由之前
|
||||||
|
2. `server/config/admin.go`添加白名单
|
||||||
|
|
||||||
|
<<< @/../server/config/admin.go#NotAuth
|
7
docs/server/注意事项.md
Normal file
7
docs/server/注意事项.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
|
||||||
|
### Go应该注意的问题
|
||||||
|
1. 循环依赖:go不允许循环依赖
|
||||||
|
2. Gorm零值不更新:避免数据库出现值0,这能避免很多工作
|
||||||
|
3. 软删除,本系统需要IsDelete和DeleteTime字段,https://gorm.io/zh_CN/docs/delete.html#%E6%B7%B7%E5%90%88%E6%A8%A1%E5%BC%8F
|
||||||
|
|
||||||
|
4. 时间:统一用自定义的`core.TsTime`
|
@@ -0,0 +1,6 @@
|
|||||||
|
# 环境变量.env
|
||||||
|
文件`/server/config/config.go`读取.env文件然后合并
|
||||||
|
|
||||||
|
有`mapstructure`tag的,名称以`mapstructure`为准
|
||||||
|
|
||||||
|
<<< @/../server/config/config.go#envConfig
|
@@ -4,17 +4,20 @@
|
|||||||
|
|
||||||
后台接口`api/admin`开头,后台权限及菜单设计以这个为主
|
后台接口`api/admin`开头,后台权限及菜单设计以这个为主
|
||||||
|
|
||||||
前台接口`api/*`开头,无权限设计,需要自己实现
|
static目录:映射为`api/static/*`,通过`go:embed`嵌入到了二进制文件中
|
||||||
|
|
||||||
|
前台接口`api/*`开头,无设计,需要自己实现
|
||||||
|
|
||||||
### 目录结构
|
### 目录结构
|
||||||
|
|
||||||
```
|
```
|
||||||
├── server
|
├── server
|
||||||
│ ├── admin // 后台,可以参照添加web,app等模块
|
│ ├── admin // 后台
|
||||||
│ │ ├──** //模块
|
│ │ ├──** //模块
|
||||||
│ │ ├──────/*_ctl.go // 模块控制器
|
│ │ ├──────/*_ctl.go // 模块控制器
|
||||||
│ │ ├──────/*_schema.go // 模块schema
|
│ │ ├──────/*_schema.go // 模块schema
|
||||||
│ │ ├──────/*_service.go // 模块服务
|
│ │ ├──────/*_service.go // 模块服务
|
||||||
|
│ │ ├──generator // 代码生成器
|
||||||
│ ├── config // 配置
|
│ ├── config // 配置
|
||||||
│ ├── middleware // 中间件
|
│ ├── middleware // 中间件
|
||||||
│ ├── model // 数据库模型
|
│ ├── model // 数据库模型
|
||||||
@@ -25,9 +28,3 @@
|
|||||||
│ ├── main.go // 入口
|
│ ├── main.go // 入口
|
||||||
│ ├── .env // 配置文件,注意不提交git
|
│ ├── .env // 配置文件,注意不提交git
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
### Go应该注意的问题
|
|
||||||
1. 循环依赖
|
|
||||||
2. 零值更新,避免数据库默认值为0
|
|
||||||
3. 软删除,本系统需要IsDelete和DeleteTime字段,https://gorm.io/zh_CN/docs/delete.html#%E6%B7%B7%E5%90%88%E6%A8%A1%E5%BC%8F
|
|
@@ -14,6 +14,9 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": ".github"
|
"path": ".github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": ".workflow"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
@@ -12,7 +12,7 @@ var AdminConfig = adminConfig{
|
|||||||
BackstageTokenKey: "backstage:token:",
|
BackstageTokenKey: "backstage:token:",
|
||||||
// 令牌的集合
|
// 令牌的集合
|
||||||
BackstageTokenSet: "backstage:token:set:",
|
BackstageTokenSet: "backstage:token:set:",
|
||||||
|
// #region NotAuth
|
||||||
// 免登录验证
|
// 免登录验证
|
||||||
NotLoginUri: []string{
|
NotLoginUri: []string{
|
||||||
"admin:system:login", // 登录接口
|
"admin:system:login", // 登录接口
|
||||||
@@ -33,7 +33,7 @@ var AdminConfig = adminConfig{
|
|||||||
"admin:setting:dict:data:all", // 所有字典数据
|
"admin:setting:dict:data:all", // 所有字典数据
|
||||||
"admin:article:cate:all", // 所有文章分类
|
"admin:article:cate:all", // 所有文章分类
|
||||||
},
|
},
|
||||||
|
// #endregion NotAuth
|
||||||
// 演示模式白名单
|
// 演示模式白名单
|
||||||
ShowWhitelistUri: []string{
|
ShowWhitelistUri: []string{
|
||||||
"admin:system:login", // 登录接口
|
"admin:system:login", // 登录接口
|
||||||
|
@@ -11,6 +11,7 @@ import (
|
|||||||
|
|
||||||
var Config = loadConfig(".")
|
var Config = loadConfig(".")
|
||||||
|
|
||||||
|
// #region envConfig
|
||||||
// envConfig 环境配置
|
// envConfig 环境配置
|
||||||
type envConfig struct {
|
type envConfig struct {
|
||||||
RootPath string // 项目根目录
|
RootPath string // 项目根目录
|
||||||
@@ -39,6 +40,8 @@ type envConfig struct {
|
|||||||
UploadVideoExt []string // 上传视频扩展
|
UploadVideoExt []string // 上传视频扩展
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// #endregion envConfig
|
||||||
|
|
||||||
// loadConfig 加载配置
|
// loadConfig 加载配置
|
||||||
func loadConfig(envPath string) envConfig {
|
func loadConfig(envPath string) envConfig {
|
||||||
var cfgPath string
|
var cfgPath string
|
||||||
|
Reference in New Issue
Block a user