mirror of
https://github.com/bufanyun/hotgo.git
synced 2025-09-17 16:56:39 +08:00
commit
20a9e38fa8
@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
1、HotGo 后台进入 开发工具->插件管理->找到创建新插件,根据引导进行创建即可。
|
1、HotGo 后台进入 开发工具->插件管理->找到创建新插件,根据引导进行创建即可。
|
||||||
|
|
||||||
```
|
```shell
|
||||||
创建成功后默认情况下会在以下目录中生成插件文件,假设新生成的插件名为:hgexample
|
创建成功后默认情况下会在以下目录中生成插件文件,假设新生成的插件名为:hgexample
|
||||||
|
|
||||||
1. /server/addons/hgexample/ # 插件模块目录
|
1. /server/addons/hgexample/ # 插件模块目录
|
||||||
@ -29,7 +29,7 @@
|
|||||||
|
|
||||||
2、创建插件完毕重启服务端后,插件管理中会出现你新创建的插件信息。操作栏有几个按钮,在此进行说明
|
2、创建插件完毕重启服务端后,插件管理中会出现你新创建的插件信息。操作栏有几个按钮,在此进行说明
|
||||||
- 安装:会自动执行 server/hgexample/main.go 文件中的Install方法,方法中的具体逻辑默认为空,可以根据实际情况自行配置。如生成后台菜单、生成插件配置表初始化数据、迁移home页面、web项目文件等。
|
- 安装:会自动执行 server/hgexample/main.go 文件中的Install方法,方法中的具体逻辑默认为空,可以根据实际情况自行配置。如生成后台菜单、生成插件配置表初始化数据、迁移home页面、web项目文件等。
|
||||||
```
|
```go
|
||||||
// Install 安装模块
|
// Install 安装模块
|
||||||
func (m *module) Install(ctx context.Context) (err error) {
|
func (m *module) Install(ctx context.Context) (err error) {
|
||||||
// ...
|
// ...
|
||||||
@ -38,7 +38,7 @@ func (m *module) Install(ctx context.Context) (err error) {
|
|||||||
```
|
```
|
||||||
|
|
||||||
- 更新:会自动执行 server/hgexample/main.go 文件中的Upgrade方法,方法中的具体逻辑默认为空,可以根据实际情况自行配置。
|
- 更新:会自动执行 server/hgexample/main.go 文件中的Upgrade方法,方法中的具体逻辑默认为空,可以根据实际情况自行配置。
|
||||||
```
|
```go
|
||||||
// Upgrade 更新模块
|
// Upgrade 更新模块
|
||||||
func (m *module) Upgrade(ctx context.Context) (err error) {
|
func (m *module) Upgrade(ctx context.Context) (err error) {
|
||||||
// ...
|
// ...
|
||||||
@ -47,7 +47,7 @@ func (m *module) Upgrade(ctx context.Context) (err error) {
|
|||||||
```
|
```
|
||||||
|
|
||||||
- 卸载:会自动执行 server/hgexample/main.go 文件中的UnInstall方法,方法中的具体逻辑默认为空,可以根据实际情况自行配置。如会清除所有的数据表和已安装的信息等。
|
- 卸载:会自动执行 server/hgexample/main.go 文件中的UnInstall方法,方法中的具体逻辑默认为空,可以根据实际情况自行配置。如会清除所有的数据表和已安装的信息等。
|
||||||
```
|
```go
|
||||||
// UnInstall 卸载模块
|
// UnInstall 卸载模块
|
||||||
func (m *module) UnInstall(ctx context.Context) (err error) {
|
func (m *module) UnInstall(ctx context.Context) (err error) {
|
||||||
// ...
|
// ...
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
|
|
||||||
#### 模块结构
|
#### 模块结构
|
||||||
- 文件路径:server/internal/library/addons/module.go
|
- 文件路径:server/internal/library/addons/module.go
|
||||||
|
|
||||||
```go
|
```go
|
||||||
// Skeleton 模块骨架
|
// Skeleton 模块骨架
|
||||||
type Skeleton struct {
|
type Skeleton struct {
|
||||||
@ -43,6 +44,7 @@ type Module interface {
|
|||||||
#### 获取模块信息
|
#### 获取模块信息
|
||||||
|
|
||||||
- 在插件模块内
|
- 在插件模块内
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package main
|
package main
|
||||||
|
|
||||||
@ -57,6 +59,7 @@ func test() {
|
|||||||
```
|
```
|
||||||
|
|
||||||
- 在插件模块外
|
- 在插件模块外
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package main
|
package main
|
||||||
|
|
||||||
|
@ -69,7 +69,7 @@ gfcli:
|
|||||||
三、 启动服务
|
三、 启动服务
|
||||||
|
|
||||||
1、服务端:
|
1、服务端:
|
||||||
```shell script
|
```shell
|
||||||
cd server
|
cd server
|
||||||
|
|
||||||
# 设置国内代理,如果已经设置好了代理可以跳过
|
# 设置国内代理,如果已经设置好了代理可以跳过
|
||||||
@ -86,7 +86,7 @@ gfcli:
|
|||||||
```
|
```
|
||||||
|
|
||||||
2、web前端:
|
2、web前端:
|
||||||
```shell script
|
```shell
|
||||||
cd web
|
cd web
|
||||||
# 首先确定你以安装node16.0以上版本并安装了包[npm、pnpm],否则可能会出现一些未知报错
|
# 首先确定你以安装node16.0以上版本并安装了包[npm、pnpm],否则可能会出现一些未知报错
|
||||||
|
|
||||||
|
@ -117,6 +117,7 @@
|
|||||||

|

|
||||||
|
|
||||||
- 查询代码片段,参考路径:[server/internal/logic/admin/member.go](../../server/internal/logic/admin/member.go)
|
- 查询代码片段,参考路径:[server/internal/logic/admin/member.go](../../server/internal/logic/admin/member.go)
|
||||||
|
|
||||||
```go
|
```go
|
||||||
|
|
||||||
// 查询创建者
|
// 查询创建者
|
||||||
|
@ -63,16 +63,17 @@
|
|||||||
#### import
|
#### import
|
||||||
* 单行import不建议用圆括号包裹
|
* 单行import不建议用圆括号包裹
|
||||||
* 按照`官方包`,NEW LINE,`当前工程包`,NEW LINE,`第三方依赖包`顺序引入
|
* 按照`官方包`,NEW LINE,`当前工程包`,NEW LINE,`第三方依赖包`顺序引入
|
||||||
```go
|
|
||||||
import (
|
```go
|
||||||
|
import (
|
||||||
"context"
|
"context"
|
||||||
"string"
|
"string"
|
||||||
|
|
||||||
"greet/user/internal/config"
|
"greet/user/internal/config"
|
||||||
|
|
||||||
"google.golang.org/grpc"
|
"google.golang.org/grpc"
|
||||||
)
|
)
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 函数返回
|
#### 函数返回
|
||||||
* 对象避免非指针返回
|
* 对象避免非指针返回
|
||||||
@ -84,7 +85,8 @@
|
|||||||
|
|
||||||
#### 函数体编码
|
#### 函数体编码
|
||||||
* 建议一个block结束空一行,如if、for等
|
* 建议一个block结束空一行,如if、for等
|
||||||
```go
|
|
||||||
|
```go
|
||||||
func main (){
|
func main (){
|
||||||
if x==1{
|
if x==1{
|
||||||
// do something
|
// do something
|
||||||
@ -92,15 +94,16 @@
|
|||||||
|
|
||||||
fmt.println("xxx")
|
fmt.println("xxx")
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
* return前尽可能空一行
|
* return前尽可能空一行
|
||||||
```go
|
|
||||||
func getUser(id string)(string,error){
|
```go
|
||||||
|
func getUser(id string)(string,error){
|
||||||
....
|
....
|
||||||
|
|
||||||
return "xx",nil
|
return "xx",nil
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### 框架规范
|
### 框架规范
|
||||||
|
|
||||||
|
@ -158,6 +158,7 @@ func test(ctx context.Context) {
|
|||||||
|
|
||||||
#### 字典数据选项
|
#### 字典数据选项
|
||||||
- 文件路径:server/internal/model/dict.go
|
- 文件路径:server/internal/model/dict.go
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package model
|
package model
|
||||||
|
|
||||||
@ -232,6 +233,7 @@ var CreditGroupOptions = []*model.Option{
|
|||||||
|
|
||||||
##### 方法字典接口
|
##### 方法字典接口
|
||||||
- 文件路径:server/internal/consts/credit_log.go
|
- 文件路径:server/internal/consts/credit_log.go
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package dict
|
package dict
|
||||||
|
|
||||||
|
@ -82,6 +82,7 @@ func main() {
|
|||||||
- 下面我们以`text/xml`为例简单演示几种使用方法:
|
- 下面我们以`text/xml`为例简单演示几种使用方法:
|
||||||
|
|
||||||
1. 当你使用规范化路由时,可直接在XxxRes结构体的`g.Meta`中声明响应类型:
|
1. 当你使用规范化路由时,可直接在XxxRes结构体的`g.Meta`中声明响应类型:
|
||||||
|
|
||||||
```go
|
```go
|
||||||
type HelloReq struct {
|
type HelloReq struct {
|
||||||
g.Meta `path:"/hello" tags:"Hello" method:"get" summary:"You first hello api"`
|
g.Meta `path:"/hello" tags:"Hello" method:"get" summary:"You first hello api"`
|
||||||
@ -95,6 +96,7 @@ type HelloRes struct {
|
|||||||
```
|
```
|
||||||
|
|
||||||
2. 在响应前设置响应头:
|
2. 在响应前设置响应头:
|
||||||
|
|
||||||
```go
|
```go
|
||||||
var (
|
var (
|
||||||
Hello = cHello{}
|
Hello = cHello{}
|
||||||
@ -146,9 +148,7 @@ func main() {
|
|||||||
|
|
||||||
2. 在`server/internal/logic/middleware/response.go`中根据请求的独有特征进行单独的处理,兼容后续http处理。
|
2. 在`server/internal/logic/middleware/response.go`中根据请求的独有特征进行单独的处理,兼容后续http处理。
|
||||||
|
|
||||||
|
|
||||||
#### 重写响应错误提示
|
#### 重写响应错误提示
|
||||||
|
|
||||||
- 在实际开发中,我们可能想要隐藏一些敏感错误,返回给客户端友好的错误提示,但开发者同时又想需要看到真实的敏感错误。对此hotgo已经进行了过滤处理,下面是一个简单的例子:
|
- 在实际开发中,我们可能想要隐藏一些敏感错误,返回给客户端友好的错误提示,但开发者同时又想需要看到真实的敏感错误。对此hotgo已经进行了过滤处理,下面是一个简单的例子:
|
||||||
|
|
||||||
```go
|
```go
|
||||||
@ -195,6 +195,7 @@ func test() error {
|
|||||||
```
|
```
|
||||||
|
|
||||||
- 控制台的输出日志:
|
- 控制台的输出日志:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
2023-05-15 18:05:07.776 {084022730d495f17f19e550140f3e1a8} 200 "GET http localhost:8000 /admin/member/list?page=1&pageSize=10&roleId=-1 HTTP/1.1" 0.002, 127.0.0.1, "http://192.168.0.207:8001/login", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 Co
|
2023-05-15 18:05:07.776 {084022730d495f17f19e550140f3e1a8} 200 "GET http localhost:8000 /admin/member/list?page=1&pageSize=10&roleId=-1 HTTP/1.1" 0.002, 127.0.0.1, "http://192.168.0.207:8001/login", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 Co
|
||||||
re/1.94.197.400 QQBrowser/11.7.5287.400", -1, "", ""
|
re/1.94.197.400 QQBrowser/11.7.5287.400", -1, "", ""
|
||||||
|
@ -44,6 +44,7 @@ SaaS系统多租户多应用设计,已成为互联网企业的重要发展建
|
|||||||
|
|
||||||
- 在用户登录成功后,server端可通过上下文来获取用户部门类型来确定用户身份
|
- 在用户登录成功后,server端可通过上下文来获取用户部门类型来确定用户身份
|
||||||
- 文件路径:server/internal/library/contexts/context.go
|
- 文件路径:server/internal/library/contexts/context.go
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package contexts
|
package contexts
|
||||||
|
|
||||||
@ -87,6 +88,7 @@ func IsUserDept(ctx context.Context) bool {
|
|||||||
|
|
||||||
- 在用户登录成功后,web端可通`useUserStore`来获取用户部门类型来确定用户身份
|
- 在用户登录成功后,web端可通`useUserStore`来获取用户部门类型来确定用户身份
|
||||||
- 文件路径:web/src/store/modules/user.ts
|
- 文件路径:web/src/store/modules/user.ts
|
||||||
|
|
||||||
```vue
|
```vue
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { useUserStore } from '@/store/modules/user';
|
import { useUserStore } from '@/store/modules/user';
|
||||||
@ -125,6 +127,7 @@ HotGo定位是中小型应用开发,推荐采用一套数据库不同Schema。
|
|||||||
下面是多租户功能演示例子代码中的使用片段
|
下面是多租户功能演示例子代码中的使用片段
|
||||||
|
|
||||||
- 封装查询Model
|
- 封装查询Model
|
||||||
|
|
||||||
```go
|
```go
|
||||||
// Model 多租户功能演示ORM模型
|
// Model 多租户功能演示ORM模型
|
||||||
func (s *sSysTenantOrder) Model(ctx context.Context, option ...*handler.Option) *gdb.Model {
|
func (s *sSysTenantOrder) Model(ctx context.Context, option ...*handler.Option) *gdb.Model {
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
### 全局消息监听
|
### 全局消息监听
|
||||||
- 所有全局的消息监听都在这里
|
- 所有全局的消息监听都在这里
|
||||||
- 文件路径:web/src/utils/websocket/registerMessage.ts
|
- 文件路径:web/src/utils/websocket/registerMessage.ts
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
import { TABS_ROUTES } from '@/store/mutation-types';
|
import { TABS_ROUTES } from '@/store/mutation-types';
|
||||||
import { SocketEnum } from '@/enums/socketEnum';
|
import { SocketEnum } from '@/enums/socketEnum';
|
||||||
@ -51,6 +52,7 @@ export function registerGlobalMessage() {
|
|||||||
#### 单页面消息监听
|
#### 单页面消息监听
|
||||||
- 当你只需要某个页面使用WebSocket,这将是一个不错的选择,下面是一个简单的演示例子
|
- 当你只需要某个页面使用WebSocket,这将是一个不错的选择,下面是一个简单的演示例子
|
||||||
- 文件路径:web/src/views/addons/hgexample/portal/websocketTest.vue
|
- 文件路径:web/src/views/addons/hgexample/portal/websocketTest.vue
|
||||||
|
|
||||||
```vue
|
```vue
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
@ -190,6 +192,7 @@ export function registerGlobalMessage() {
|
|||||||
|
|
||||||
#### 发送消息
|
#### 发送消息
|
||||||
- 向服务器发送一条消息
|
- 向服务器发送一条消息
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
import { sendMsg } from '@/utils/websocket';
|
import { sendMsg } from '@/utils/websocket';
|
||||||
|
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
#### 1.消息处理接口
|
#### 1.消息处理接口
|
||||||
- 消息处理在设计上采用了接口化的思路。只需要实现以下接口,即可进行WebSocket消息注册
|
- 消息处理在设计上采用了接口化的思路。只需要实现以下接口,即可进行WebSocket消息注册
|
||||||
- 文件路径:server/internal/websocket/model.go
|
- 文件路径:server/internal/websocket/model.go
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package websocket
|
package websocket
|
||||||
|
|
||||||
@ -26,6 +27,7 @@ type EventHandler func(client *Client, req *WRequest)
|
|||||||
#### 2.定义消息处理方法
|
#### 2.定义消息处理方法
|
||||||
- 以下是功能案例中的一个简单演示,实现了消息处理接口,并将收到的消息原样发送给客户端
|
- 以下是功能案例中的一个简单演示,实现了消息处理接口,并将收到的消息原样发送给客户端
|
||||||
- 文件路径:server/addons/hgexample/controller/websocket/handler/index.go
|
- 文件路径:server/addons/hgexample/controller/websocket/handler/index.go
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package handler
|
package handler
|
||||||
|
|
||||||
@ -52,6 +54,7 @@ func (c *cIndex) TestMessage(client *websocket.Client, req *websocket.WRequest)
|
|||||||
#### 3.注册消息
|
#### 3.注册消息
|
||||||
- 定义消息处理方法后,需要将其注册到WebSocket消息处理器,一般放在对应应用模块的`router/websocket.go`下即可
|
- 定义消息处理方法后,需要将其注册到WebSocket消息处理器,一般放在对应应用模块的`router/websocket.go`下即可
|
||||||
- 文件路径:server/addons/hgexample/router/websocket.go
|
- 文件路径:server/addons/hgexample/router/websocket.go
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package router
|
package router
|
||||||
|
|
||||||
@ -80,6 +83,7 @@ func WebSocket(ctx context.Context, group *ghttp.RouterGroup) {
|
|||||||
|
|
||||||
### 常用方法
|
### 常用方法
|
||||||
- websocket服务器还提供了一些常用的方法,下面只对部分进行说明
|
- websocket服务器还提供了一些常用的方法,下面只对部分进行说明
|
||||||
|
|
||||||
```go
|
```go
|
||||||
func test() {
|
func test() {
|
||||||
websocket.SendToAll() // 发送全部客户端
|
websocket.SendToAll() // 发送全部客户端
|
||||||
@ -105,6 +109,7 @@ func test() {
|
|||||||
### 其他
|
### 其他
|
||||||
- WebSocket被连接时需验证用户认证中间件,所以用户必须登录成功后才能连接成功
|
- WebSocket被连接时需验证用户认证中间件,所以用户必须登录成功后才能连接成功
|
||||||
- 参考文件:server/internal/logic/middleware/weboscket_auth.go
|
- 参考文件:server/internal/logic/middleware/weboscket_auth.go
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package middleware
|
package middleware
|
||||||
|
|
||||||
|
77
index.html
77
index.html
@ -10,16 +10,16 @@
|
|||||||
<title>HotGo-V2</title>
|
<title>HotGo-V2</title>
|
||||||
<meta name="description" content="基于全新GoFrame2+Vue3+NaiveUI+uniapp开发的全栖框架,为二次开发而生,适合中小型完整应用开发。">
|
<meta name="description" content="基于全新GoFrame2+Vue3+NaiveUI+uniapp开发的全栖框架,为二次开发而生,适合中小型完整应用开发。">
|
||||||
|
|
||||||
<!-- Default Theme (see https://docsify.js.org/#/themes) -->
|
<!-- Default Theme (see //docsify.js.org/#/themes) -->
|
||||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/docsify@4/lib/themes/vue.css">
|
<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/docsify@4/lib/themes/vue.css">
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<div id="app"></div>
|
<div id="app"></div>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
// Docsify Configuration (see https://docsify.js.org/#/configuration)
|
// Docsify Configuration (see //docsify.js.org/#/configuration)
|
||||||
window.$docsify = {
|
window.$docsify = {
|
||||||
name: "HotGo-V2",
|
name: "HotGo-V2",
|
||||||
nameLink: {
|
nameLink: {
|
||||||
@ -30,7 +30,7 @@
|
|||||||
// "/.*/_navbar.md": "/_navbar.md",
|
// "/.*/_navbar.md": "/_navbar.md",
|
||||||
// },
|
// },
|
||||||
// themeColor: "#42b983",
|
// themeColor: "#42b983",
|
||||||
// logo: "https://bufanyun.cn-bj.ufileos.com/hotgo/logo.sig.png",
|
// logo: "//bufanyun.cn-bj.ufileos.com/hotgo/logo.sig.png",
|
||||||
// coverpage: true,
|
// coverpage: true,
|
||||||
// homepage: "README.md",
|
// homepage: "README.md",
|
||||||
|
|
||||||
@ -120,27 +120,40 @@
|
|||||||
height: "3px",
|
height: "3px",
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<!-- Required -->
|
<!-- Required -->
|
||||||
<script src="https://cdn.jsdelivr.net/npm/docsify@4/lib/docsify.min.js"></script>
|
<script src="//cdn.jsdelivr.net/npm/docsify@4/lib/docsify.min.js"></script>
|
||||||
|
|
||||||
<!-- Recommended -->
|
<!-- Recommended -->
|
||||||
<script src="https://cdn.jsdelivr.net/npm/docsify@4/lib/plugins/zoom-image.min.js"></script>
|
<script src="//cdn.jsdelivr.net/npm/docsify@4/lib/plugins/zoom-image.min.js"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/docsify@4/lib/plugins/search.js"></script>
|
<script src="//cdn.jsdelivr.net/npm/docsify@4/lib/plugins/search.js"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/docsify-copy-code/dist/docsify-copy-code.min.js"></script>
|
<script src="//cdn.jsdelivr.net/npm/docsify-copy-code/dist/docsify-copy-code.min.js"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/docsify-pagination/dist/docsify-pagination.min.js"></script>
|
<script src="//cdn.jsdelivr.net/npm/docsify-pagination/dist/docsify-pagination.min.js"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/docsify-hide-code/dist/docsify-hide-code.min.js"></script>
|
<script src="//cdn.jsdelivr.net/npm/docsify-hide-code/dist/docsify-hide-code.min.js"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/docsify-progress@latest/dist/progress.min.js"></script>
|
<script src="//cdn.jsdelivr.net/npm/docsify-progress@latest/dist/progress.min.js"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/docsify-example-panels"></script>
|
<script src="//cdn.jsdelivr.net/npm/docsify-example-panels"></script>
|
||||||
|
|
||||||
<!-- Prism code highlight -->
|
<!-- Prism code highlight -->
|
||||||
<script src="https://cdn.jsdelivr.net/npm/prismjs@1/components/prism-bash.min.js"></script>
|
<script src="//cdn.jsdelivr.net/npm/prismjs@1/components/prism-bash.min.js"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/prismjs@1/components/prism-matlab.min.js"></script>
|
<script src="//cdn.jsdelivr.net/npm/prismjs@1/components/prism-matlab.min.js"></script>
|
||||||
|
<script src="//cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-go.min.js"></script>
|
||||||
|
<script src="//cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-yaml.min.js"></script>
|
||||||
|
<script src="//cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-vue.min.js"></script>
|
||||||
|
<script src="//cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-json.min.js"></script>
|
||||||
|
<script src="//cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-sql.min.js"></script>
|
||||||
|
|
||||||
<!-- docsify-dark-switcher -->
|
<!--mermaid插件-->
|
||||||
<script src="https://cdn.jsdelivr.net/gh/LIGMATV/docsify-dark-switcher@latest/docsify-dark-switcher.js"></script>
|
<script type="module">
|
||||||
<style>
|
import mermaid from "https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.esm.min.mjs";
|
||||||
|
mermaid.initialize({ startOnLoad: true });
|
||||||
|
window.mermaid = mermaid;
|
||||||
|
</script>
|
||||||
|
<script src="//unpkg.com/docsify-mermaid@2.0.1/dist/docsify-mermaid.js"></script>
|
||||||
|
|
||||||
|
<!-- docsify-dark-switcher -->
|
||||||
|
<script src="//cdn.jsdelivr.net/gh/LIGMATV/docsify-dark-switcher@latest/docsify-dark-switcher.js"></script>
|
||||||
|
<style>
|
||||||
:root {
|
:root {
|
||||||
--dark-base-background: #222;
|
--dark-base-background: #222;
|
||||||
--dark-base-color: #bbc0c4;
|
--dark-base-color: #bbc0c4;
|
||||||
@ -156,16 +169,18 @@
|
|||||||
--dark-moon-color: #000000;
|
--dark-moon-color: #000000;
|
||||||
--dark-sun-color: #ffffff;
|
--dark-sun-color: #ffffff;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
<!-- docsify-plugin-flexible-alerts -->
|
||||||
|
<script src="//cdn.jsdelivr.net/npm/docsify-plugin-flexible-alerts/dist/docsify-plugin-flexible-alerts.min.js"></script>
|
||||||
|
<script src="//cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free/js/all.min.js"></script>
|
||||||
|
<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free/css/fontawesome.min.css">
|
||||||
|
|
||||||
|
<!-- docsify-versioned-plugin -->
|
||||||
|
<!-- <script src="//cdn.jsdelivr.net/npm/docsify-versioned-plugin@0.0.1/index.js"></script>
|
||||||
|
<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/docsify-versioned-plugin@0.0.1/styles.css"> -->
|
||||||
|
|
||||||
<!-- docsify-plugin-flexible-alerts -->
|
|
||||||
<script src="https://cdn.jsdelivr.net/npm/docsify-plugin-flexible-alerts/dist/docsify-plugin-flexible-alerts.min.js"></script>
|
|
||||||
<script src="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free/js/all.min.js"></script>
|
|
||||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free/css/fontawesome.min.css">
|
|
||||||
|
|
||||||
<!-- docsify-versioned-plugin -->
|
|
||||||
<!-- <script src="https://cdn.jsdelivr.net/npm/docsify-versioned-plugin@0.0.1/index.js"></script>
|
|
||||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/docsify-versioned-plugin@0.0.1/styles.css"> -->
|
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user