From 423a33c9ffc547167b65231d069e54b3702c916d Mon Sep 17 00:00:00 2001 From: "meilin.huang" <954537473@qq.com> Date: Mon, 20 Dec 2021 20:42:52 +0800 Subject: [PATCH 1/5] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E5=A4=9A=E4=B8=AAsql=E6=A8=A1=E6=9D=BF=E5=86=85?= =?UTF-8?q?=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mayfly_go_web/src/views/ops/db/SqlExec.vue | 95 +++++++++++++++++++--- mayfly_go_web/src/views/ops/db/api.ts | 13 +-- server/devops/api/db.go | 31 ++++++- server/devops/api/form/form.go | 1 + server/devops/domain/entity/db_sql.go | 3 +- server/devops/router/db.go | 13 ++- server/mayfly-go.sql | 1 + 7 files changed, 130 insertions(+), 27 deletions(-) diff --git a/mayfly_go_web/src/views/ops/db/SqlExec.vue b/mayfly_go_web/src/views/ops/db/SqlExec.vue index 899b2df1..db547ebc 100644 --- a/mayfly_go_web/src/views/ops/db/SqlExec.vue +++ b/mayfly_go_web/src/views/ops/db/SqlExec.vue @@ -25,11 +25,28 @@
+ + + {{ item }} + + + 执行 格式化 保存 + + 删除
@@ -110,7 +127,7 @@ import 'codemirror/addon/hint/sql-hint.js'; import sqlFormatter from 'sql-formatter'; import { notNull, notEmpty } from '@/common/assert'; -import { ElMessage } from 'element-plus'; +import { ElMessage, ElMessageBox } from 'element-plus'; import ProjectEnvSelect from '../component/ProjectEnvSelect.vue'; import config from '@/common/config'; import { getSession } from '@/common/utils/storage'; @@ -133,6 +150,8 @@ export default defineComponent({ tableName: '', tableMetadata: [], columnMetadata: [], + sqlName: '', + sqlNames: [], sql: '', sqlTabs: { tabs: [] as any, @@ -302,9 +321,9 @@ export default defineComponent({ // 设置最小宽度 flexWidth = 80; } - if (flexWidth > 350) { + if (flexWidth > 500) { // 设置最大宽度 - flexWidth = 350; + flexWidth = 500; } return flexWidth + 'px'; }; @@ -321,13 +340,6 @@ export default defineComponent({ return selectSql; }; - const saveSql = async () => { - notEmpty(state.sql, 'sql内容不能为空'); - notNull(state.dbId, '请先选择数据库'); - await dbApi.saveSql.request({ id: state.dbId, sql: state.sql, type: 1 }); - ElMessage.success('保存成功'); - }; - /** * 更改数据库事件 */ @@ -353,13 +365,72 @@ export default defineComponent({ state.cmOptions.hintOptions.tables = res; }); - dbApi.getSql.request({ id, type: 1 }).then((res) => { + getSqlNames(); + }; + + const changeSqlTemplate = () => { + getUserSql(); + }; + + const getUserSql = () => { + notNull(state.dbId, '请先选择数据库'); + dbApi.getSql.request({ id: state.dbId, type: 1, name: state.sqlName }).then((res) => { if (res) { state.sql = res.sql; + } else { + state.sql = ''; } }); }; + const getSqlNames = () => { + dbApi.getSqlNames + .request({ + id: state.dbId, + }) + .then((res) => { + if (res && res.length > 0) { + state.sqlNames = res.map((r: any) => r.name); + state.sqlName = state.sqlNames[0]; + } else { + state.sqlNames = ['default'] as any; + state.sqlName = 'default'; + } + + getUserSql(); + }); + }; + + const saveSql = async () => { + notEmpty(state.sql, 'sql内容不能为空'); + notNull(state.dbId, '请先选择数据库'); + await dbApi.saveSql.request({ id: state.dbId, sql: state.sql, type: 1, name: state.sqlName }); + ElMessage.success('保存成功'); + + dbApi.getSqlNames + .request({ + id: state.dbId, + }) + .then((res) => { + if (res) { + state.sqlNames = res.map((r: any) => r.name); + } + }); + }; + + const deleteSql = async () => { + try { + await ElMessageBox.confirm(`确定删除【${state.sqlName}】该SQL模板?`, '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }); + await dbApi.deleteDbSql.request({ id: state.dbId, name: state.sqlName }); + ElMessage.success('删除成功'); + getSqlNames(); + } catch (err) {} + }; + // 清空数据库事件 const clearDb = () => { state.tableName = ''; @@ -427,6 +498,8 @@ export default defineComponent({ getUploadSqlFileUrl, execSqlFileSuccess, flexColumnWidth, + changeSqlTemplate, + deleteSql, saveSql, changeDb, clearDb, diff --git a/mayfly_go_web/src/views/ops/db/api.ts b/mayfly_go_web/src/views/ops/db/api.ts index f2810651..3c7173a3 100644 --- a/mayfly_go_web/src/views/ops/db/api.ts +++ b/mayfly_go_web/src/views/ops/db/api.ts @@ -17,14 +17,7 @@ export const dbApi = { saveSql: Api.create("/dbs/{id}/sql", 'post'), // 获取保存的sql getSql: Api.create("/dbs/{id}/sql", 'get'), - lsFile: Api.create("/devops/machines/files/{fileId}/ls", 'get'), - rmFile: Api.create("/devops/machines/files/{fileId}/rm", 'delete'), - uploadFile: Api.create("/devops/machines/files/upload", 'post'), - fileContent: Api.create("/devops/machines/files/{fileId}/cat", 'get'), - // 修改文件内容 - updateFileContent: Api.create("/devops/machines/files/{id}", 'put'), - // 添加文件or目录 - addConf: Api.create("/devops/machines/{machineId}/files", 'post'), - // 删除配置的文件or目录 - delConf: Api.create("/devops/machines/files/{id}", 'delete'), + // 获取保存的sql names + getSqlNames: Api.create("/dbs/{id}/sql-names", 'get'), + deleteDbSql: Api.create("/dbs/{id}/sql", 'delete'), } \ No newline at end of file diff --git a/server/devops/api/db.go b/server/devops/api/db.go index e93946db..559b58cd 100644 --- a/server/devops/api/db.go +++ b/server/devops/api/db.go @@ -49,7 +49,7 @@ func (d *Db) Save(rc *ctx.ReqCtx) { } func (d *Db) DeleteDb(rc *ctx.ReqCtx) { - d.DbApp.Delete(uint64(ginx.PathParamInt(rc.GinCtx, "id"))) + d.DbApp.Delete(GetDbId(rc.GinCtx)) } func (d *Db) TableInfos(rc *ctx.ReqCtx) { @@ -202,7 +202,7 @@ func (d *Db) SaveSql(rc *ctx.ReqCtx) { biz.ErrIsNil(err, "该数据库信息不存在") // 获取用于是否有该dbsql的保存记录,有则更改,否则新增 - dbSql := &entity.DbSql{Type: dbSqlForm.Type, DbId: dbId} + dbSql := &entity.DbSql{Type: dbSqlForm.Type, DbId: dbId, Name: dbSqlForm.Name} dbSql.CreatorId = account.Id e := model.GetBy(dbSql) @@ -216,11 +216,34 @@ func (d *Db) SaveSql(rc *ctx.ReqCtx) { } } -// @router /api/db/:dbId/sql [get] -func (d *Db) GetSql(rc *ctx.ReqCtx) { +// 获取所有保存的sql names +func (d *Db) GetSqlNames(rc *ctx.ReqCtx) { // 获取用于是否有该dbsql的保存记录,有则更改,否则新增 dbSql := &entity.DbSql{Type: 1, DbId: GetDbId(rc.GinCtx)} dbSql.CreatorId = rc.LoginAccount.Id + var sqls []entity.DbSql + model.ListBy(dbSql, &sqls, "id", "name") + + rc.ResData = sqls +} + +// 删除保存的sql +func (d *Db) DeleteSql(rc *ctx.ReqCtx) { + dbSql := &entity.DbSql{Type: 1, DbId: GetDbId(rc.GinCtx)} + dbSql.CreatorId = rc.LoginAccount.Id + dbSql.Name = rc.GinCtx.Query("name") + + model.DeleteByCondition(dbSql) + +} + +// @router /api/db/:dbId/sql [get] +func (d *Db) GetSql(rc *ctx.ReqCtx) { + // 根据创建者id, 数据库id,以及sql模板名称查询保存的sql信息 + dbSql := &entity.DbSql{Type: 1, DbId: GetDbId(rc.GinCtx)} + dbSql.CreatorId = rc.LoginAccount.Id + dbSql.Name = rc.GinCtx.Query("name") + e := model.GetBy(dbSql) if e != nil { return diff --git a/server/devops/api/form/form.go b/server/devops/api/form/form.go index 2f8ad371..e4c70857 100644 --- a/server/devops/api/form/form.go +++ b/server/devops/api/form/form.go @@ -38,6 +38,7 @@ type MachineScriptForm struct { } type DbSqlSaveForm struct { + Name string Sql string `binding:"required"` Type int `binding:"required"` } diff --git a/server/devops/domain/entity/db_sql.go b/server/devops/domain/entity/db_sql.go index e390b108..09c964b7 100644 --- a/server/devops/domain/entity/db_sql.go +++ b/server/devops/domain/entity/db_sql.go @@ -7,7 +7,8 @@ import ( type DbSql struct { model.Model `orm:"-"` - DbId uint64 `json:"db_id"` + DbId uint64 `json:"dbId"` Type int `json:"type"` // 类型 Sql string `json:"sql"` + Name string `json:"name"` } diff --git a/server/devops/router/db.go b/server/devops/router/db.go index ca035431..ef46befa 100644 --- a/server/devops/router/db.go +++ b/server/devops/router/db.go @@ -29,7 +29,7 @@ func InitDbRouter(router *gin.RouterGroup) { }) deleteDb := ctx.NewLogInfo("删除数据库信息") - db.DELETE(":id", func(c *gin.Context) { + db.DELETE(":dbId", func(c *gin.Context) { ctx.NewReqCtxWithGin(c). WithLog(deleteDb). Handle(d.DeleteDb) @@ -65,10 +65,13 @@ func InitDbRouter(router *gin.RouterGroup) { db.GET(":dbId/c-metadata", func(c *gin.Context) { ctx.NewReqCtxWithGin(c).Handle(d.ColumnMA) }) + db.GET(":dbId/hint-tables", func(c *gin.Context) { ctx.NewReqCtxWithGin(c).Handle(d.HintTables) }) + /** db sql相关接口 */ + db.POST(":dbId/sql", func(c *gin.Context) { rc := ctx.NewReqCtxWithGin(c) rc.Handle(d.SaveSql) @@ -77,5 +80,13 @@ func InitDbRouter(router *gin.RouterGroup) { db.GET(":dbId/sql", func(c *gin.Context) { ctx.NewReqCtxWithGin(c).Handle(d.GetSql) }) + + db.DELETE(":dbId/sql", func(c *gin.Context) { + ctx.NewReqCtxWithGin(c).Handle(d.DeleteSql) + }) + + db.GET(":dbId/sql-names", func(c *gin.Context) { + ctx.NewReqCtxWithGin(c).Handle(d.GetSqlNames) + }) } } diff --git a/server/mayfly-go.sql b/server/mayfly-go.sql index fc261a2b..33b57e20 100644 --- a/server/mayfly-go.sql +++ b/server/mayfly-go.sql @@ -58,6 +58,7 @@ DROP TABLE IF EXISTS `t_db_sql`; CREATE TABLE `t_db_sql` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `db_id` bigint(20) NOT NULL COMMENT '数据库id', + `name` varchar(60) COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'sql模板名', `sql` text COLLATE utf8mb4_bin, `type` tinyint(8) NOT NULL, `creator_id` bigint(20) NOT NULL, From 8014d0e4a570b25573b4e317ac96975bbfbe865f Mon Sep 17 00:00:00 2001 From: zhengdahan <10169919+zhengdahan@user.noreply.gitee.com> Date: Tue, 21 Dec 2021 03:06:29 +0000 Subject: [PATCH 2/5] =?UTF-8?q?!1=20=E8=B0=83=E6=95=B4=E9=83=A8=E5=88=86?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E6=A0=B7=E5=BC=8F=20*=20fix:=20=E8=BF=98?= =?UTF-8?q?=E5=8E=9F=E8=BF=87=E6=B8=A1=E5=8A=A8=E7=94=BB=20*=20style:=20?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E9=83=A8=E5=88=86=E5=88=97=E8=A1=A8=E6=A0=B7?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mayfly_go_web/src/views/ops/db/DbList.vue | 153 +- .../src/views/ops/machine/MachineList.vue | 129 +- .../src/views/ops/project/ProjectList.vue | 133 +- .../src/views/ops/redis/DataOperation.vue | 35 +- .../src/views/ops/redis/RedisList.vue | 73 +- .../src/views/system/account/AccountList.vue | 143 +- .../src/views/system/role/RoleList.vue | 89 +- mayfly_go_web/yarn.lock | 1731 +++++++++++++++++ 8 files changed, 2111 insertions(+), 375 deletions(-) create mode 100644 mayfly_go_web/yarn.lock diff --git a/mayfly_go_web/src/views/ops/db/DbList.vue b/mayfly_go_web/src/views/ops/db/DbList.vue index 831b6a7f..17d75652 100644 --- a/mayfly_go_web/src/views/ops/db/DbList.vue +++ b/mayfly_go_web/src/views/ops/db/DbList.vue @@ -1,90 +1,77 @@