diff --git a/mayfly_go_web/package.json b/mayfly_go_web/package.json index c4da2988..5eb1ba9b 100644 --- a/mayfly_go_web/package.json +++ b/mayfly_go_web/package.json @@ -25,7 +25,6 @@ "sql-formatter": "^2.3.3", "vue": "^3.0.5", "vue-router": "^4.0.2", - "vue3-json-editor": "^1.1.3", "vuex": "^4.0.0-rc.2", "xterm": "^4.9.0", "xterm-addon-fit": "^0.4.0" diff --git a/mayfly_go_web/src/views/ops/db/SqlExec.vue b/mayfly_go_web/src/views/ops/db/SqlExec.vue index 12e31760..d608d4a4 100644 --- a/mayfly_go_web/src/views/ops/db/SqlExec.vue +++ b/mayfly_go_web/src/views/ops/db/SqlExec.vue @@ -29,11 +29,8 @@ 格式化 --> - 保存 - - -
- sql脚本执行 + sql脚本执行
+ +
+ + + {{ item }} + + + + 保存 + 删除 +
350) { + if (flexWidth > 500) { // 设置最大宽度 - flexWidth = 350; + flexWidth = 500; } return flexWidth + 'px'; }; @@ -341,13 +360,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('保存成功'); - }; - /** * 更改数据库事件 */ @@ -373,13 +385,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 = ''; @@ -466,6 +537,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/mayfly_go_web/yarn.lock b/mayfly_go_web/yarn.lock index 27e8cad3..671c17d9 100644 --- a/mayfly_go_web/yarn.lock +++ b/mayfly_go_web/yarn.lock @@ -107,11 +107,14 @@ resolved "https://registry.npmmirror.com/@types/json-schema/download/@types/json-schema-7.0.9.tgz?cache=0&sync_timestamp=1637266073261&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Fjson-schema%2Fdownload%2F%40types%2Fjson-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" integrity sha1-l+3JA36gw4WFMgsolk3eOznkZg0= +<<<<<<< HEAD "@types/lodash@^4.14.178": version "4.14.178" resolved "https://registry.npmmirror.com/@types/lodash/download/@types/lodash-4.14.178.tgz#341f6d2247db528d4a13ddbb374bcdc80406f4f8" integrity sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw== +======= +>>>>>>> master "@types/node@^15.6.0": version "15.14.9" resolved "https://registry.npmmirror.com/@types/node/download/@types/node-15.14.9.tgz#bc43c990c3c9be7281868bbc7b8fdd6e2b57adfa" 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 ebf6eece..0b0c4824 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,