diff --git a/README.md b/README.md index c7e05af0e5ef243992fc82794ea734a68ec2234f..1a016332050f6079daf0f4e93754ba2032ab6c44 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ [github地址](https://github.com/flipped-aurora/gin-vue-admin): https://github.com/flipped-aurora/gin-vue-admin -[vue3版本分支地址](https://github.com/flipped-aurora/gin-vue-admin/tree/vue3Develop): https://github.com/flipped-aurora/gin-vue-admin/tree/vue3Develop +[插件仓库以及开发规范](https://github.com/flipped-aurora/gva-plugins):https://github.com/flipped-aurora/gva-plugins [审批流分支](https://github.com/flipped-aurora/gin-vue-admin/tree/gva_workflow): https://github.com/flipped-aurora/gin-vue-admin/tree/gva_workflow diff --git a/server/docs/docs.go b/server/docs/docs.go index 28c80d9651a77356d75fd2702ade698555cde56c..a0abd33267e6e17bcc381f2c7e1c9703fa3c325e 100644 --- a/server/docs/docs.go +++ b/server/docs/docs.go @@ -24,108 +24,6 @@ var doc = `{ "host": "{{.Host}}", "basePath": "{{.BasePath}}", "paths": { - "/SimpleUploaderApi/checkFileMd5": { - "get": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "produces": [ - "application/json" - ], - "tags": [ - "SimpleUploader" - ], - "summary": "断点续传插件版示例", - "parameters": [ - { - "type": "string", - "description": "md5", - "name": "md5", - "in": "query", - "required": true - } - ], - "responses": { - "200": { - "description": "{\"success\":true,\"data\":{},\"msg\":\"查询成功\"}", - "schema": { - "type": "string" - } - } - } - } - }, - "/SimpleUploaderApi/mergeFileMd5": { - "get": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "produces": [ - "application/json" - ], - "tags": [ - "SimpleUploader" - ], - "summary": "合并文件", - "parameters": [ - { - "type": "string", - "description": "md5", - "name": "md5", - "in": "query", - "required": true - } - ], - "responses": { - "200": { - "description": "{\"success\":true,\"data\":{},\"msg\":\"合并成功\"}", - "schema": { - "type": "string" - } - } - } - } - }, - "/SimpleUploaderApi/upload": { - "post": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "consumes": [ - "multipart/form-data" - ], - "produces": [ - "application/json" - ], - "tags": [ - "SimpleUploader" - ], - "summary": "断点续传插件版示例", - "parameters": [ - { - "type": "file", - "description": "断点续传插件版示例", - "name": "file", - "in": "formData", - "required": true - } - ], - "responses": { - "200": { - "description": "{\"success\":true,\"data\":{},\"msg\":\"切片创建成功\"}", - "schema": { - "type": "string" - } - } - } - } - }, "/api/createApi": { "post": { "security": [ @@ -1527,6 +1425,41 @@ var doc = `{ } } }, + "/email/sendEmail": { + "post": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "produces": [ + "application/json" + ], + "tags": [ + "System" + ], + "summary": "发送邮件", + "parameters": [ + { + "description": "发送邮件必须的参数", + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/response.Email" + } + } + ], + "responses": { + "200": { + "description": "{\"success\":true,\"data\":{},\"msg\":\"发送成功\"}", + "schema": { + "type": "string" + } + } + } + } + }, "/excel/downloadTemplate": { "get": { "security": [ @@ -4376,6 +4309,23 @@ var doc = `{ } } }, + "response.Email": { + "type": "object", + "properties": { + "body": { + "description": "邮件内容", + "type": "string" + }, + "subject": { + "description": "邮件标题", + "type": "string" + }, + "to": { + "description": "邮件发送给谁", + "type": "string" + } + } + }, "response.SysAuthorityCopyResponse": { "type": "object", "properties": { diff --git a/server/docs/swagger.json b/server/docs/swagger.json index ed0e1e2b78c17341f5f61736a7e74c621a01dbde..60db1a597cb50d84bb941e9a63bd973733b26808 100644 --- a/server/docs/swagger.json +++ b/server/docs/swagger.json @@ -8,108 +8,6 @@ }, "basePath": "/", "paths": { - "/SimpleUploaderApi/checkFileMd5": { - "get": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "produces": [ - "application/json" - ], - "tags": [ - "SimpleUploader" - ], - "summary": "断点续传插件版示例", - "parameters": [ - { - "type": "string", - "description": "md5", - "name": "md5", - "in": "query", - "required": true - } - ], - "responses": { - "200": { - "description": "{\"success\":true,\"data\":{},\"msg\":\"查询成功\"}", - "schema": { - "type": "string" - } - } - } - } - }, - "/SimpleUploaderApi/mergeFileMd5": { - "get": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "produces": [ - "application/json" - ], - "tags": [ - "SimpleUploader" - ], - "summary": "合并文件", - "parameters": [ - { - "type": "string", - "description": "md5", - "name": "md5", - "in": "query", - "required": true - } - ], - "responses": { - "200": { - "description": "{\"success\":true,\"data\":{},\"msg\":\"合并成功\"}", - "schema": { - "type": "string" - } - } - } - } - }, - "/SimpleUploaderApi/upload": { - "post": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "consumes": [ - "multipart/form-data" - ], - "produces": [ - "application/json" - ], - "tags": [ - "SimpleUploader" - ], - "summary": "断点续传插件版示例", - "parameters": [ - { - "type": "file", - "description": "断点续传插件版示例", - "name": "file", - "in": "formData", - "required": true - } - ], - "responses": { - "200": { - "description": "{\"success\":true,\"data\":{},\"msg\":\"切片创建成功\"}", - "schema": { - "type": "string" - } - } - } - } - }, "/api/createApi": { "post": { "security": [ @@ -1511,6 +1409,41 @@ } } }, + "/email/sendEmail": { + "post": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "produces": [ + "application/json" + ], + "tags": [ + "System" + ], + "summary": "发送邮件", + "parameters": [ + { + "description": "发送邮件必须的参数", + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/response.Email" + } + } + ], + "responses": { + "200": { + "description": "{\"success\":true,\"data\":{},\"msg\":\"发送成功\"}", + "schema": { + "type": "string" + } + } + } + } + }, "/excel/downloadTemplate": { "get": { "security": [ @@ -4360,6 +4293,23 @@ } } }, + "response.Email": { + "type": "object", + "properties": { + "body": { + "description": "邮件内容", + "type": "string" + }, + "subject": { + "description": "邮件标题", + "type": "string" + }, + "to": { + "description": "邮件发送给谁", + "type": "string" + } + } + }, "response.SysAuthorityCopyResponse": { "type": "object", "properties": { diff --git a/server/docs/swagger.yaml b/server/docs/swagger.yaml index acdd8708b5a51b441c31e8fe1af1abfbfbc64fe8..fae34820f16e030f1c4c44788607d58f630d8570 100644 --- a/server/docs/swagger.yaml +++ b/server/docs/swagger.yaml @@ -567,6 +567,18 @@ definitions: description: 每页大小 type: integer type: object + response.Email: + properties: + body: + description: 邮件内容 + type: string + subject: + description: 邮件标题 + type: string + to: + description: 邮件发送给谁 + type: string + type: object response.SysAuthorityCopyResponse: properties: authority: @@ -930,68 +942,6 @@ info: title: Swagger Example API version: 0.0.1 paths: - /SimpleUploaderApi/checkFileMd5: - get: - parameters: - - description: md5 - in: query - name: md5 - required: true - type: string - produces: - - application/json - responses: - "200": - description: '{"success":true,"data":{},"msg":"查询成功"}' - schema: - type: string - security: - - ApiKeyAuth: [] - summary: 断点续传插件版示例 - tags: - - SimpleUploader - /SimpleUploaderApi/mergeFileMd5: - get: - parameters: - - description: md5 - in: query - name: md5 - required: true - type: string - produces: - - application/json - responses: - "200": - description: '{"success":true,"data":{},"msg":"合并成功"}' - schema: - type: string - security: - - ApiKeyAuth: [] - summary: 合并文件 - tags: - - SimpleUploader - /SimpleUploaderApi/upload: - post: - consumes: - - multipart/form-data - parameters: - - description: 断点续传插件版示例 - in: formData - name: file - required: true - type: file - produces: - - application/json - responses: - "200": - description: '{"success":true,"data":{},"msg":"切片创建成功"}' - schema: - type: string - security: - - ApiKeyAuth: [] - summary: 断点续传插件版示例 - tags: - - SimpleUploader /api/createApi: post: consumes: @@ -1844,6 +1794,27 @@ paths: summary: 发送测试邮件 tags: - System + /email/sendEmail: + post: + parameters: + - description: 发送邮件必须的参数 + in: body + name: data + required: true + schema: + $ref: '#/definitions/response.Email' + produces: + - application/json + responses: + "200": + description: '{"success":true,"data":{},"msg":"发送成功"}' + schema: + type: string + security: + - ApiKeyAuth: [] + summary: 发送邮件 + tags: + - System /excel/downloadTemplate: get: consumes: diff --git a/server/go.mod b/server/go.mod index 8b16e38a80436d30c392fe4c4c841adcd9701ce5..e9aab535338f3221af2ef9f335b56f49a87b6108 100644 --- a/server/go.mod +++ b/server/go.mod @@ -5,52 +5,31 @@ go 1.16 require ( github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 github.com/aliyun/aliyun-oss-go-sdk v2.1.6+incompatible - github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f // indirect github.com/casbin/casbin/v2 v2.11.0 github.com/casbin/gorm-adapter/v3 v3.0.2 github.com/dgrijalva/jwt-go v3.2.0+incompatible - github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 // indirect - github.com/flipped-aurora/ws v1.0.1 + github.com/flipped-aurora/gva-plugins v0.0.0-20210828060501-fc8b729b9a4a github.com/fsnotify/fsnotify v1.4.9 github.com/fvbock/endless v0.0.0-20170109170031-447134032cb6 github.com/gin-gonic/gin v1.6.3 - github.com/go-openapi/jsonreference v0.19.6 // indirect - github.com/go-openapi/spec v0.20.3 // indirect - github.com/go-openapi/swag v0.19.15 // indirect - github.com/go-playground/validator/v10 v10.3.0 // indirect github.com/go-redis/redis/v8 v8.11.0 github.com/go-sql-driver/mysql v1.5.0 github.com/gookit/color v1.3.1 - github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869 // indirect github.com/jordan-wright/email v0.0.0-20200824153738-3f5bafa1cd84 - github.com/json-iterator/go v1.1.10 // indirect github.com/lestrrat-go/file-rotatelogs v2.3.0+incompatible - github.com/lestrrat-go/strftime v1.0.3 // indirect - github.com/mailru/easyjson v0.7.7 // indirect - github.com/mitchellh/mapstructure v1.2.2 // indirect github.com/mojocn/base64Captcha v1.3.1 - github.com/pelletier/go-toml v1.6.0 // indirect github.com/qiniu/api.v7/v7 v7.4.1 github.com/robfig/cron/v3 v3.0.1 github.com/satori/go.uuid v1.2.0 github.com/shirou/gopsutil v3.21.1+incompatible - github.com/songzhibin97/gkit v1.1.1 - github.com/spf13/afero v1.2.2 // indirect - github.com/spf13/cast v1.3.1 // indirect - github.com/spf13/jwalterweatherman v1.1.0 // indirect - github.com/spf13/pflag v1.0.5 // indirect github.com/spf13/viper v1.7.0 github.com/swaggo/gin-swagger v1.3.0 github.com/swaggo/swag v1.7.0 - github.com/tebeka/strftime v0.1.3 // indirect github.com/tencentyun/cos-go-sdk-v5 v0.7.19 github.com/unrolled/secure v1.0.7 github.com/xuri/excelize/v2 v2.4.1 go.uber.org/zap v1.16.0 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c - golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c // indirect - golang.org/x/tools v0.1.5 // indirect - gopkg.in/ini.v1 v1.55.0 // indirect gorm.io/driver/mysql v1.0.1 gorm.io/gorm v1.20.7 nhooyr.io/websocket v1.8.6 diff --git a/server/initialize/plugin.go b/server/initialize/plugin.go index 3fb3fdf240850f52f86cdb18deb2c55e8a71318a..69b8a1af1f805931a37f8b7b8ea908e994a0ddbc 100644 --- a/server/initialize/plugin.go +++ b/server/initialize/plugin.go @@ -2,11 +2,8 @@ package initialize import ( "github.com/flipped-aurora/gin-vue-admin/server/global" - "github.com/flipped-aurora/gin-vue-admin/server/plugin/ws" - "go.uber.org/zap" - "github.com/flipped-aurora/gin-vue-admin/server/plugin/notify" - //email "github.com/flipped-aurora/gva-plug-email" // 在线仓库模式 - "github.com/flipped-aurora/gin-vue-admin/server/plugin/email" // 本地插件仓库地址模式 + email "github.com/flipped-aurora/gva-plugins/email" // 在线仓库模式go + //"github.com/flipped-aurora/gin-vue-admin/server/plugin/email" // 本地插件仓库地址模式 "github.com/flipped-aurora/gin-vue-admin/server/plugin/example_plugin" "github.com/flipped-aurora/gin-vue-admin/server/utils/plugin" "github.com/gin-gonic/gin" @@ -21,8 +18,8 @@ func PluginInit(group *gin.RouterGroup, Plugin ...plugin.Plugin) { func InstallPlugin(PublicGroup *gin.RouterGroup, PrivateGroup *gin.RouterGroup) { // 添加开放权限的插件 示例 - PluginInit(PublicGroup, example_plugin.ExamplePlugin, ws.GenerateWs( - zap.L(), 100, ws.DefaultCheckMap())) + PluginInit(PublicGroup, + example_plugin.ExamplePlugin) // 添加跟角色挂钩权限的插件 示例 本地示例模式于在线仓库模式注意上方的import 可以自行切换 效果相同 PluginInit(PrivateGroup, email.CreateEmailPlug( @@ -35,9 +32,4 @@ func InstallPlugin(PublicGroup *gin.RouterGroup, PrivateGroup *gin.RouterGroup) global.GVA_CONFIG.Email.IsSSL, )) - // 钉钉通知,暂时开放权限 - PluginInit(PublicGroup, notify.CreateDDPlug( - "https://oapi.dingtalk.com/robot/send", - "8ded23f91917dc4f6275f44ba5ef243e6ed1d2cc74de83f01a6f5f5f39905671", - "SECaecf452bd6e671ab0d47469c3ad933e32fcc47b335333049a1b8961606192f38")) } diff --git a/server/plugin/notify/README.MD b/server/plugin/notify/README.MD deleted file mode 100644 index 4b8d8f8448f3998b7bea26eeba4879180291e9b8..0000000000000000000000000000000000000000 --- a/server/plugin/notify/README.MD +++ /dev/null @@ -1,74 +0,0 @@ -## GVA 钉钉群通知插件 - -本插件用于向钉钉群推送消息 - -### 1. 使用场景 - -- 当服务运行异常时,可以向钉钉推送异常信息,便于及时发现解决问题 -- 推送一些关键业务的运行日志等 - -### 2. 配置说明 - -钉钉 token 等相关信息的获取,请参考 [钉钉官网](https://developers.dingtalk.com/document/robots/custom-robot-access?spm=ding_open_doc.document.0.0.7f8710afbfzduV#topic-2026027) - -在`plugin/notify/global/global.go` 文件中配置钉钉通知的URL ,Token 等 - -```go - // 在gin-vue-admin 主程序的initialize中的plugin的InstallPlugin 函数中写入如下代码 - PluginInit(PublicGroup, notify.CreateDDPlug( - URL, - Token, - 密钥)) -} -``` - -### 3 参数说明 -#### 3-1 全局参数说明 - -```go - Url string `mapstructure:"url" json:"url" yaml:"url"` // Url - Token string `mapstructure:"token" json:"token" yaml:"token"` // access_token - Secret string `mapstructure:"secret" json:"secret" yaml:"secret"` // 密钥 -``` -#### 3-2 请求入参说明 -```go - - -``` - -### 3方法API(可调用方法) -```go - -//content 发送的内容 -//atMobiles 需要艾特的人的手机号 -//isAtAll 是否艾特全体 -SendTextMessage(content string,atMobiles []string,isAtAll bool) - -//content 发送的内容 -//title 内容标题 -//picUrl 配图 -//messageUrl 点击跳转路径 -SendLinkMessage(content,title,picUrl,messageUrl string) - -//content 发送的内容(markdown语法) -//title 内容标题 -//atMobiles 需要艾特的人的手机号 -//isAtAll 是否艾特全体 -SendMarkdownMessage(content,title string,atMobiles []string,isAtAll bool) - -``` - -### 4. 可直接调用接口 - - 发送文字消息接口: /notify/sendTextMessage [post] 已配置swagger - 发送图文链接消息接口: /notify/sendLinkMessage [post] 已配置swagger - 发送markdown消息接口: /notify/sendMarkdownMessage [post] 已配置swagger - - 入参: - type Email struct { - To string `json:"to"` // 邮件发送给谁 - Subject string `json:"subject"` // 邮件标题 - Body string `json:"body"` // 邮件内容 - } - - diff --git a/server/plugin/notify/api/api.go b/server/plugin/notify/api/api.go deleted file mode 100644 index e52102cb247bf5ea2a05be402bcb25bd5cff3c87..0000000000000000000000000000000000000000 --- a/server/plugin/notify/api/api.go +++ /dev/null @@ -1,67 +0,0 @@ -package api - -import ( - "github.com/flipped-aurora/gin-vue-admin/server/global" - "github.com/flipped-aurora/gin-vue-admin/server/model/common/response" - notify_response "github.com/flipped-aurora/gin-vue-admin/server/plugin/notify/model/response" - "github.com/flipped-aurora/gin-vue-admin/server/plugin/notify/service" - "github.com/gin-gonic/gin" - "go.uber.org/zap" -) - -type Api struct { -} - -// @Tags Notify -// @Summary 发送文字消息接口 -// @Security ApiKeyAuth -// @Produce application/json -// @Param data body notify_response.TextNotify true "发送文字消息的参数" -// @Success 200 {string} string "{"success":true,"data":{},"msg":"发送成功"}" -// @Router /notify/sendTextMessage [post] -func (s *Api) SendTextMessage(c *gin.Context) { - var textNotify notify_response.TextNotify - _ = c.ShouldBindJSON(&textNotify) - if err := service.ServiceGroupApp.SendTextMessage(textNotify.Content, textNotify.AtMobiles, textNotify.IsAtAll); err != nil { - global.GVA_LOG.Error("发送失败!", zap.Any("err", err)) - response.FailWithMessage("发送失败", c) - } else { - response.OkWithData("发送成功", c) - } -} - -// @Tags Notify -// @Summary 发送图文链接消息接口 -// @Security ApiKeyAuth -// @Produce application/json -// @Param data body notify_response.LinkNotify true "发送图文链接消息的参数" -// @Success 200 {string} string "{"success":true,"data":{},"msg":"发送成功"}" -// @Router /notify/sendLinkMessage [post] -func (s *Api) SendLinkMessage(c *gin.Context) { - var linkNotify notify_response.LinkNotify - _ = c.ShouldBindJSON(&linkNotify) - if err := service.ServiceGroupApp.SendLinkMessage(linkNotify.Content, linkNotify.Title, linkNotify.PicUrl, linkNotify.MessageUrl); err != nil { - global.GVA_LOG.Error("发送失败!", zap.Any("err", err)) - response.FailWithMessage("发送失败", c) - } else { - response.OkWithData("发送成功", c) - } -} - -// @Tags Notify -// @Summary 发送markdown消息接口 -// @Security ApiKeyAuth -// @Produce application/json -// @Param data body notify_response.MarkdownNotify true "发送markdown消息的参数" -// @Success 200 {string} string "{"success":true,"data":{},"msg":"发送成功"}" -// @Router /notify/sendMarkdownMessage [post] -func (s *Api) SendMarkdownMessage(c *gin.Context) { - var markdownNotify notify_response.MarkdownNotify - _ = c.ShouldBindJSON(&markdownNotify) - if err := service.ServiceGroupApp.SendMarkdownMessage(markdownNotify.Content, markdownNotify.Title, markdownNotify.AtMobiles, markdownNotify.IsAtAll); err != nil { - global.GVA_LOG.Error("发送失败!", zap.Any("err", err)) - response.FailWithMessage("发送失败", c) - } else { - response.OkWithData("发送成功", c) - } -} diff --git a/server/plugin/notify/api/enter.go b/server/plugin/notify/api/enter.go deleted file mode 100644 index 5fe286c1e96d91abce03982ff2bb2b3f9de8bc36..0000000000000000000000000000000000000000 --- a/server/plugin/notify/api/enter.go +++ /dev/null @@ -1,7 +0,0 @@ -package api - -type ApiGroup struct { - Api -} - -var ApiGroupApp = new(ApiGroup) diff --git a/server/plugin/notify/config/dingding.go b/server/plugin/notify/config/dingding.go deleted file mode 100644 index 7ce67b1fc4d642f080f70e2525057f993acc69b7..0000000000000000000000000000000000000000 --- a/server/plugin/notify/config/dingding.go +++ /dev/null @@ -1,7 +0,0 @@ -package config - -type DingDing struct { - Url string `mapstructure:"url" json:"url" yaml:"url"` // Url - Token string `mapstructure:"token" json:"token" yaml:"token"` // access_token - Secret string `mapstructure:"secret" json:"secret" yaml:"secret"` // 密钥 -} diff --git a/server/plugin/notify/global/global.go b/server/plugin/notify/global/global.go deleted file mode 100644 index 12e15ca4d6ecaf3e8aea881af0a0ae97a2a86b62..0000000000000000000000000000000000000000 --- a/server/plugin/notify/global/global.go +++ /dev/null @@ -1,5 +0,0 @@ -package global - -import "github.com/flipped-aurora/gin-vue-admin/server/plugin/notify/config" - -var GlobalConfig_ = &config.DingDing{} diff --git a/server/plugin/notify/main.go b/server/plugin/notify/main.go deleted file mode 100644 index 2c2d939151f438ac512a8cf7fc5ce02ffc017f8a..0000000000000000000000000000000000000000 --- a/server/plugin/notify/main.go +++ /dev/null @@ -1,28 +0,0 @@ -package notify - -import ( - "github.com/flipped-aurora/gin-vue-admin/server/plugin/notify/global" - "github.com/flipped-aurora/gin-vue-admin/server/plugin/notify/router" - "github.com/gin-gonic/gin" -) - -type ddPlugin struct { - Secret string - Token string - Url string -} - -func CreateDDPlug(url, Token, Secret string) *ddPlugin { - global.GlobalConfig_.Url = url - global.GlobalConfig_.Token = Token - global.GlobalConfig_.Secret = Secret - return &ddPlugin{} -} - -func (*ddPlugin) Register(group *gin.RouterGroup) { - router.RouterGroupApp.InitRouter(group) -} - -func (*ddPlugin) RouterPath() string { - return "notify" -} diff --git a/server/plugin/notify/model/response/notify.go b/server/plugin/notify/model/response/notify.go deleted file mode 100644 index 1555ae58bb36e6e367b263a7f2b9a6fe86072d34..0000000000000000000000000000000000000000 --- a/server/plugin/notify/model/response/notify.go +++ /dev/null @@ -1,21 +0,0 @@ -package response - -type TextNotify struct { // 文字信息 - Content string `json:"content"` // 发送的内容 - AtMobiles []string `json:"atMobiles"` // 需要艾特的人的手机号 - IsAtAll bool `json:"isAtAll"` // 是否艾特全体 -} - -type LinkNotify struct { // 图文链接信息 - Content string `json:"content"` // 发送的内容 - Title string `json:"title"` // 内容标题 - PicUrl string `json:"picUrl"` // 配图 - MessageUrl string `json:"messageUrl"` // 点击跳转路径 -} - -type MarkdownNotify struct { // markdown信息 - Title string `json:"title"` // 内容标题 - Content string `json:"content"` // 发送的内容 - AtMobiles []string `json:"atMobiles"` // 需要艾特的人的手机号 - IsAtAll bool `json:"isAtAll"` // 是否艾特全体 -} diff --git a/server/plugin/notify/router/enter.go b/server/plugin/notify/router/enter.go deleted file mode 100644 index 30aca42c9076e34dc9ce7ed9cf1e93b52c08223e..0000000000000000000000000000000000000000 --- a/server/plugin/notify/router/enter.go +++ /dev/null @@ -1,7 +0,0 @@ -package router - -type RouterGroup struct { - NotifyRouter -} - -var RouterGroupApp = new(RouterGroup) diff --git a/server/plugin/notify/router/router.go b/server/plugin/notify/router/router.go deleted file mode 100644 index b500d52c55ef5abd48a605f42dcf0e8155ea799f..0000000000000000000000000000000000000000 --- a/server/plugin/notify/router/router.go +++ /dev/null @@ -1,18 +0,0 @@ -package router - -import ( - "github.com/flipped-aurora/gin-vue-admin/server/middleware" - "github.com/flipped-aurora/gin-vue-admin/server/plugin/notify/api" - "github.com/gin-gonic/gin" -) - -type NotifyRouter struct { -} - -func (s *NotifyRouter) InitRouter(Router *gin.RouterGroup) { - router := Router.Use(middleware.OperationRecord()) - var SendTextMessage = api.ApiGroupApp.Api.SendTextMessage - { - router.POST("sendTextMessage", SendTextMessage) - } -} diff --git a/server/plugin/notify/service/enter.go b/server/plugin/notify/service/enter.go deleted file mode 100644 index 0eb00088290ef67c43e7cd091a4d0b943ea09e1d..0000000000000000000000000000000000000000 --- a/server/plugin/notify/service/enter.go +++ /dev/null @@ -1,7 +0,0 @@ -package service - -type ServiceGroup struct { - NotifyService -} - -var ServiceGroupApp = new(ServiceGroup) diff --git a/server/plugin/notify/service/notify.go b/server/plugin/notify/service/notify.go deleted file mode 100644 index 4e3045f696a4f45384ccb9e111d8326963371a6f..0000000000000000000000000000000000000000 --- a/server/plugin/notify/service/notify.go +++ /dev/null @@ -1,157 +0,0 @@ -package service - -import ( - "bytes" - "crypto/hmac" - "crypto/sha256" - "encoding/base64" - "encoding/json" - "fmt" - "github.com/flipped-aurora/gin-vue-admin/server/plugin/notify/global" - "io/ioutil" - "net/http" - "net/url" - "time" -) - -type NotifyService struct { -} - -//@author: [Espoir](https://github.com/nightsimon) -//@function: SendTextMessage -//@description: 发送钉钉文字信息 -//@params content string发送的文字内容 -//@params atMobiles []string 艾特的手机号 -//@params isAtAll bool 是否艾特全体 -//@return: err error - -func (e *NotifyService) SendTextMessage(content string, atMobiles []string, isAtAll bool) (err error) { - msg := map[string]interface{}{ - "msgtype": "text", - "text": map[string]string{ - "content": content, - }, - "at": map[string]interface{}{ - "atMobiles": atMobiles, - "isAtAll": isAtAll, - }, - } - return SendMessage(msg) -} - -//@author: [Espoir](https://github.com/nightsimon) -//@function: SendLinkMessage -//@description: 发送钉钉图文链接信息 -//@params content string 发送的文字内容 -//@params title string 发送的标题 -//@params picUrl string 艾特的手机号 -//@params messageUrl string 是否艾特全体 -//@return: err error - -func (e *NotifyService) SendLinkMessage(content, title, picUrl, messageUrl string) (err error) { - msg := map[string]interface{}{ - "msgtype": "link", - "link": map[string]string{ - "text": content, - "title": title, - "picUrl": picUrl, - "messageUrl": messageUrl, - }, - } - return SendMessage(msg) -} - -//@author: [Espoir](https://github.com/nightsimon) -//@function: SendMarkdownMessage -//@description: 发送钉钉Markdown信息 -//@params content 发送的文字内容 -//@params title 发送的标题 -//@params atMobiles []string 艾特的手机号 -//@params isAtAll bool 是否艾特全体 -//@return: err error - -func (e *NotifyService) SendMarkdownMessage(content, title string, atMobiles []string, isAtAll bool) (err error) { - msg := map[string]interface{}{ - "msgtype": "markdown", - "markdown": map[string]string{ - "text": content, - "title": title, - }, - "at": map[string]interface{}{ - "atMobiles": atMobiles, - "isAtAll": isAtAll, - }, - } - return SendMessage(msg) -} - -func SendMessage(msg interface{}) error { - body := bytes.NewBuffer(nil) - err := json.NewEncoder(body).Encode(msg) - if err != nil { - return fmt.Errorf("msg json failed, msg: %v, err: %v", msg, err.Error()) - } - - value := url.Values{} - value.Set("access_token", global.GlobalConfig_.Token) - if global.GlobalConfig_.Secret != "" { - t := time.Now().UnixNano() / 1e6 - value.Set("timestamp", fmt.Sprintf("%d", t)) - value.Set("sign", sign(t, global.GlobalConfig_.Secret)) - } - - request, err := http.NewRequest(http.MethodPost, global.GlobalConfig_.Url, body) - if err != nil { - return fmt.Errorf("error request: %v", err.Error()) - } - request.URL.RawQuery = value.Encode() - request.Header.Add("Content-Type", "application/json") - res, err := (&http.Client{}).Do(request) - if err != nil { - return fmt.Errorf("send dingTalk message failed, error: %v", err.Error()) - } - defer func() { _ = res.Body.Close() }() - result, err := ioutil.ReadAll(res.Body) - - if res.StatusCode != 200 { - return fmt.Errorf("send dingTalk message failed, %s", httpError(request, res, result, "http code is not 200")) - } - if err != nil { - return fmt.Errorf("send dingTalk message failed, %s", httpError(request, res, result, err.Error())) - } - - type response struct { - ErrCode int `json:"errcode"` - } - var ret response - - if err := json.Unmarshal(result, &ret); err != nil { - return fmt.Errorf("send dingTalk message failed, %s", httpError(request, res, result, err.Error())) - } - - if ret.ErrCode != 0 { - return fmt.Errorf("send dingTalk message failed, %s", httpError(request, res, result, "errcode is not 0")) - } - - return nil -} - -func httpError(request *http.Request, response *http.Response, body []byte, error string) string { - return fmt.Sprintf( - "http request failure, error: %s, status code: %d, %s %s, body:\n%s", - error, - response.StatusCode, - request.Method, - request.URL.String(), - string(body), - ) -} -func sign(t int64, secret string) string { - strToHash := fmt.Sprintf("%d\n%s", t, secret) - hmac256 := hmac.New(sha256.New, []byte(secret)) - hmac256.Write([]byte(strToHash)) - data := hmac256.Sum(nil) - return base64.StdEncoding.EncodeToString(data) -} - -// 其余方法请参考 https://developers.dingtalk.com/document/robots/custom-robot-access?spm=ding_open_doc.document.0.0.7f8710afbfzduV#topic-2026027 diff --git a/server/plugin/notify/utils/utils.go b/server/plugin/notify/utils/utils.go deleted file mode 100644 index d4b585bf78552d05bde959b2eae4c1e850bd2de4..0000000000000000000000000000000000000000 --- a/server/plugin/notify/utils/utils.go +++ /dev/null @@ -1 +0,0 @@ -package utils diff --git a/web/package-lock.json b/web/package-lock.json index 997cdee3c914ddc429d9c0c60fd39aeb5a6d3189..fd4ac33c00cf661caf217de341d9e5fdf745256e 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -1,5 +1,5 @@ { - "name": "gvav3", + "name": "gin-vue-admin", "version": "0.1.0", "lockfileVersion": 1, "requires": true, @@ -1156,21 +1156,6 @@ "postcss": "^7.0.0" } }, - "@moefe/vue-aplayer": { - "version": "2.0.0-beta.5", - "resolved": "https://registry.npmjs.org/@moefe/vue-aplayer/-/vue-aplayer-2.0.0-beta.5.tgz", - "integrity": "sha512-ytzp4GStzjftuh7H1rIS/ziqwV1FO67iTLSkDxgN0J2bqlO+rBgDDr83Y+pZKBIgRUc30uu/UZHqmE4QiBHHeg==", - "requires": { - "vue": "^2.5.17" - }, - "dependencies": { - "vue": { - "version": "2.6.14", - "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.14.tgz", - "integrity": "sha512-x2284lgYvjOMj3Za7kqzRcUSxBboHqtgRE2zlos1qWaOye5yUmHn42LB1250NJBLRwEcdrB0JRwyPTEPhfQjiQ==" - } - } - }, "@mrmlnc/readdir-enhanced": { "version": "2.2.1", "resolved": "https://registry.npm.taobao.org/@mrmlnc/readdir-enhanced/download/@mrmlnc/readdir-enhanced-2.2.1.tgz", @@ -1780,6 +1765,63 @@ "integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=", "dev": true }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "optional": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "optional": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "optional": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "optional": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "optional": true + }, + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "optional": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, "ssri": { "version": "8.0.1", "resolved": "https://registry.nlark.com/ssri/download/ssri-8.0.1.tgz", @@ -1788,6 +1830,28 @@ "requires": { "minipass": "^3.1.1" } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "optional": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "vue-loader-v16": { + "version": "npm:vue-loader@16.5.0", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.5.0.tgz", + "integrity": "sha512-WXh+7AgFxGTgb5QAkQtFeUcHNIEq3PGVQ8WskY5ZiFbWBkOwcCPRs4w/2tVyTbh2q6TVRlO3xfvIukUtjsu62A==", + "dev": true, + "optional": true, + "requires": { + "chalk": "^4.1.0", + "hash-sum": "^2.0.0", + "loader-utils": "^2.0.0" + } } } }, @@ -10113,11 +10177,6 @@ } } }, - "simple-uploader.js": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/simple-uploader.js/-/simple-uploader.js-0.5.6.tgz", - "integrity": "sha512-ukjL0wZhK1dNMaQa6sd+UpCSmnUjblaUGbAd/B8f5IFrChMzDsC/7eFSK4bs4BS5NPJFSZVLI+l6Ri7THTkQtw==" - }, "slash": { "version": "2.0.0", "resolved": "https://registry.npm.taobao.org/slash/download/slash-2.0.0.tgz", @@ -10962,21 +11021,6 @@ "integrity": "sha1-Wrr3FKlAXbBQRzK7zNLO3Z75U30=", "dev": true }, - "timeline-vuejs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/timeline-vuejs/-/timeline-vuejs-1.1.1.tgz", - "integrity": "sha512-jsdr0xNCBH/GBiW7qsOTbBxZuyk7WKD5YmtTGP1sm0su0fy+iBsEJLDyhHhQ4nTAxca8MkSbJhKGUgF5eNoEfA==", - "requires": { - "vue": "^2.5.17" - }, - "dependencies": { - "vue": { - "version": "2.6.14", - "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.14.tgz", - "integrity": "sha512-x2284lgYvjOMj3Za7kqzRcUSxBboHqtgRE2zlos1qWaOye5yUmHn42LB1250NJBLRwEcdrB0JRwyPTEPhfQjiQ==" - } - } - }, "timers-browserify": { "version": "2.0.12", "resolved": "https://registry.npm.taobao.org/timers-browserify/download/timers-browserify-2.0.12.tgz?cache=0&sync_timestamp=1603793712916&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftimers-browserify%2Fdownload%2Ftimers-browserify-2.0.12.tgz", @@ -11544,87 +11588,6 @@ } } }, - "vue-loader-v16": { - "version": "npm:vue-loader@16.5.0", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.5.0.tgz", - "integrity": "sha512-WXh+7AgFxGTgb5QAkQtFeUcHNIEq3PGVQ8WskY5ZiFbWBkOwcCPRs4w/2tVyTbh2q6TVRlO3xfvIukUtjsu62A==", - "dev": true, - "optional": true, - "requires": { - "chalk": "^4.1.0", - "hash-sum": "^2.0.0", - "loader-utils": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "optional": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "optional": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "optional": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "optional": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "optional": true - }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dev": true, - "optional": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "optional": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, "vue-particle-line": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/vue-particle-line/-/vue-particle-line-0.1.4.tgz", @@ -11648,14 +11611,6 @@ "@vue/devtools-api": "^6.0.0-beta.14" } }, - "vue-simple-uploader": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/vue-simple-uploader/-/vue-simple-uploader-0.7.6.tgz", - "integrity": "sha512-DYddedNi+ZZzqxmKgW2t4lBN3aiB66oKOxgAfS9Hz9J1FHv7Xt+u1Pq8F48BFS4vG0+MFHCNzjzS2xaEUOIcHQ==", - "requires": { - "simple-uploader.js": "^0.5.6" - } - }, "vue-style-loader": { "version": "4.1.3", "resolved": "https://registry.npm.taobao.org/vue-style-loader/download/vue-style-loader-4.1.3.tgz?cache=0&sync_timestamp=1614758661292&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-style-loader%2Fdownload%2Fvue-style-loader-4.1.3.tgz", @@ -11680,11 +11635,6 @@ "integrity": "sha1-HuO8mhbsv1EYvjNLsV+cRvgvWCU=", "dev": true }, - "vuescroll": { - "version": "4.17.3", - "resolved": "https://registry.npmjs.org/vuescroll/-/vuescroll-4.17.3.tgz", - "integrity": "sha512-5P3hje/fYjo1eAB0Y8zboLbaq/mnPNczYyZ1aPHHM6wIFKcqal9Mi42CBCZizUnEtoXtbsGlnyLcVbnalTNptA==" - }, "vuex": { "version": "4.0.2", "resolved": "https://registry.nlark.com/vuex/download/vuex-4.0.2.tgz?cache=0&sync_timestamp=1623945253165&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fvuex%2Fdownload%2Fvuex-4.0.2.tgz", diff --git a/web/package.json b/web/package.json index 27cb3714746af4d0337b048df8c944f552ed236f..fc754b2ab59a6bbba797fad40805458f4ffbe827 100644 --- a/web/package.json +++ b/web/package.json @@ -1,5 +1,5 @@ { - "name": "gvav3", + "name": "gin-vue-admin", "version": "0.1.0", "private": true, "scripts": { @@ -8,7 +8,6 @@ "lint": "vue-cli-service lint" }, "dependencies": { - "@moefe/vue-aplayer": "^2.0.0-beta.5", "axios": "^0.19.2", "core-js": "^3.6.5", "element-plus": "^1.1.0-beta.4", @@ -22,12 +21,9 @@ "screenfull": "^5.0.2", "script-ext-html-webpack-plugin": "^2.1.4", "spark-md5": "^3.0.1", - "timeline-vuejs": "1.1.1", "vue": "^3.0.0", "vue-particle-line": "^0.1.4", "vue-router": "^4.0.0-0", - "vue-simple-uploader": "^0.7.4", - "vuescroll": "^4.14.4", "vuex": "^4.0.0-0", "vuex-persist": "^2.1.0" }, diff --git a/web/src/core/gin-vue-admin.js b/web/src/core/gin-vue-admin.js index 66fda07ec8bd601ffd583888ba267ff5e069b3b5..fa2cb3e27dd245ad808dfa81847ea8808c1f8fe6 100644 --- a/web/src/core/gin-vue-admin.js +++ b/web/src/core/gin-vue-admin.js @@ -2,17 +2,11 @@ * gin-vue-admin web框架组 * * */ -// time line css -import '../../node_modules/timeline-vuejs/dist/timeline-vuejs.css' - // 加载网站配置文件夹 -import config from './config' +import { register } from './global' export const run = function(app) { - app.config.globalProperties.$GIN_VUE_ADMIN = config - - // app.use(uploader) - + register(app) console.log(` 欢迎使用 Gin-Vue-Admin 当前版本:V2.4.5 alpha diff --git a/web/src/core/global.js b/web/src/core/global.js new file mode 100644 index 0000000000000000000000000000000000000000..988fd2d38dfd3e166d76c0e379403ad7a1bf3bbf --- /dev/null +++ b/web/src/core/global.js @@ -0,0 +1,11 @@ +import config from './config' +import { emitter } from '@/utils/bus.js' + +const closeThisPage = () => { + emitter.emit('closeThisPage') +} + +export const register = (app) => { + app.config.globalProperties.$GIN_VUE_ADMIN = config + app.config.globalProperties.$CloseThisPage = closeThisPage +} diff --git a/web/src/utils/request.js b/web/src/utils/request.js index ac9946b23564d96e129c73c3612266793ad12ef0..9498482a15bae0aef4e785870c2ffd455e48eb2e 100644 --- a/web/src/utils/request.js +++ b/web/src/utils/request.js @@ -81,19 +81,34 @@ service.interceptors.response.use( }, error => { closeLoading() - ElMessageBox.confirm(` -

检测到接口错误${error}

-

错误码500:此类错误内容常见于后台panic,如果影响您正常使用可强制登出清理缓存

-

错误码404:此类错误多为接口未注册(或未重启)或者请求路径(方法)与api路径(方法)不符

- `, '接口报错', { - dangerouslyUseHTMLString: true, - distinguishCancelAndClose: true, - confirmButtonText: '清理缓存', - cancelButtonText: '取消' - }) - .then(() => { - store.commit('user/LoginOut') - }) + switch (error.response.status) { + case 500: + ElMessageBox.confirm(` +

检测到接口错误${error}

+

错误码 500 :此类错误内容常见于后台panic,请先查看后台日志,如果影响您正常使用可强制登出清理缓存

+ `, '接口报错', { + dangerouslyUseHTMLString: true, + distinguishCancelAndClose: true, + confirmButtonText: '清理缓存', + cancelButtonText: '取消' + }) + .then(() => { + store.commit('user/LoginOut') + }) + break + case 404: + ElMessageBox.confirm(` +

检测到接口错误${error}

+

错误码 404 :此类错误多为接口未注册(或未重启)或者请求路径(方法)与api路径(方法)不符--如果为自动化代码请检查是否存在空格

+ `, '接口报错', { + dangerouslyUseHTMLString: true, + distinguishCancelAndClose: true, + confirmButtonText: '我知道了', + cancelButtonText: '取消' + }) + break + } + return error } ) diff --git a/web/src/view/about/index.vue b/web/src/view/about/index.vue index 71dcce6cda80262f2c16fb583fff9958b179f8b1..9599612e90ae1d26e2c17a15cc9da68b4159c06c 100644 --- a/web/src/view/about/index.vue +++ b/web/src/view/about/index.vue @@ -79,20 +79,22 @@
- + + + +

{{ item.title }}

+

{{ item.message }}

+
+
+
import { Commits, Members } from '@/api/github' -import Timeline from 'timeline-vuejs' export default { name: 'About', - components: { - Timeline - }, data() { return { messageWhenNoItems: 'There arent commits', members: [], dataTimeline: [], - page: 0 + page: 0, } }, created() { @@ -138,7 +136,7 @@ export default { from: new Date(element.commit.author.date), title: element.commit.author.name, showDayAndMonth: true, - description: `${element.commit.message}` + message: element.commit.message, }) } }) @@ -149,8 +147,8 @@ export default { this.members = data this.members.sort() }) - } - } + }, + }, } diff --git a/web/src/view/dashboard/index.vue b/web/src/view/dashboard/index.vue index 89a7fe5b81ac464231547a160425a77ed48a95ee..bdbb286f53d30591914ceab61d5a3675eda95fa3 100644 --- a/web/src/view/dashboard/index.vue +++ b/web/src/view/dashboard/index.vue @@ -57,11 +57,11 @@

- 使用教学:https://www.bilibili.com/video/BV1fV411y7dT/ + 使用教学:https://www.bilibili.com/video/BV1Rg411u7xH/


- 工作流教学:https://www.bilibili.com/video/BV1Ka411F7Ji/ + 插件仓库:https://github.com/flipped-aurora/gva-plugins

@@ -83,16 +83,6 @@
-
- - -
- - -
- - -
@@ -187,7 +177,7 @@ export default { } .bottom { width: 100%; - height: 300px; + height: 420px; // margin: 20px 0; .el-row { margin-right: 4px !important; @@ -198,6 +188,10 @@ export default { padding: 10px; background-color: #fff; } + .iPlayer{ + width: 100%; + height: 100%; + } } } diff --git a/web/src/view/layout/aside/historyComponent/history.vue b/web/src/view/layout/aside/historyComponent/history.vue index 835ac9a988d2004c80169e6e8a75ecc0f981d8ac..cd464d9453fef670dd14d22c10509317cbea24aa 100644 --- a/web/src/view/layout/aside/historyComponent/history.vue +++ b/web/src/view/layout/aside/historyComponent/history.vue @@ -17,7 +17,7 @@ class="gva-tab" > @@ -109,7 +109,12 @@ export default { } this.setTab(this.$route) }, - + mounted() { + // 全局监听 关闭当前页面函数 + emitter.on('closeThisPage', () => { + this.removeTab(this.name(this.$route)) + }) + }, beforeDestroy() { emitter.off('collapse') emitter.off('mobile') diff --git a/web/src/view/layout/index.vue b/web/src/view/layout/index.vue index 60a85a9b44eb922a53f74f6c7f58a7a1c0602577..8eef7cd88029cd735ee110a524ed5eecdca95080 100644 --- a/web/src/view/layout/index.vue +++ b/web/src/view/layout/index.vue @@ -75,7 +75,7 @@ - +
diff --git a/web/src/view/superAdmin/user/user.vue b/web/src/view/superAdmin/user/user.vue index c6b2e83c988fc2f3ad0f00319203edf4fccb0b2e..be3363daca1de2a72b4c2d91d424638a66baa460 100644 --- a/web/src/view/superAdmin/user/user.vue +++ b/web/src/view/superAdmin/user/user.vue @@ -74,8 +74,7 @@