Procházet zdrojové kódy

增加自动化代码回滚功能

pixel před 3 roky
rodič
revize
dc01f68671

+ 1 - 1
server/initialize/gorm.go

@@ -48,7 +48,7 @@ func MysqlTables(db *gorm.DB) {
 		model.ExaSimpleUploader{},
 		model.ExaCustomer{},
 		model.SysOperationRecord{},
-
+		model.SysAutoCodeHistory{},
 		// Code generated by gin-vue-admin Begin; DO NOT EDIT.
 		// Code generated by gin-vue-admin End; DO NOT EDIT.
 	)

+ 1 - 1
server/model/sys_autocode_history.go

@@ -6,7 +6,7 @@ import "gin-vue-admin/global"
 
 type SysAutoCodeHistory struct {
 	global.GVA_MODEL
-	TableName     string `json:"tableName,omitempty"`
+	TableName     string `json:"tableName"`
 	RequestMeta   string `gorm:"type:text" json:"requestMeta,omitempty"`   // 前端传入的结构化信息
 	AutoCodePath  string `gorm:"type:text" json:"autoCodePath,omitempty"`  // 其他meta信息 path;path
 	InjectionMeta string `gorm:"type:text" json:"injectionMeta,omitempty"` // 注入的内容 RouterPath@functionName@RouterString;

+ 1 - 1
server/service/sys_autocode_history.go

@@ -76,6 +76,6 @@ func GetSysHistoryPage(info request.PageInfo) (err error, list interface{}, tota
 	db := global.GVA_DB
 	var fileLists []model.SysAutoCodeHistory
 	err = db.Find(&fileLists).Count(&total).Error
-	err = db.Limit(limit).Offset(offset).Order("updated_at desc").Select("id,created_at,updated_at,struct_name,struct_cn_name,flag").Find(&fileLists).Error
+	err = db.Limit(limit).Offset(offset).Order("updated_at desc").Select("id,created_at,updated_at,struct_name,struct_cn_name,flag,table_name").Find(&fileLists).Error
 	return err, fileLists, total
 }

+ 1 - 0
server/source/authorities_menus.go

@@ -40,6 +40,7 @@ var authorityMenus = []AuthorityMenus{
 	{"888", 22},
 	{"888", 23},
 	{"888", 24},
+	{"888", 25},
 	{"8881", 1},
 	{"8881", 2},
 	{"8881", 8},

+ 1 - 0
server/source/menu.go

@@ -38,6 +38,7 @@ var menus = []model.SysBaseMenu{
 	{GVA_MODEL: global.GVA_MODEL{ID: 22, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, ParentId: "0", Path: "https://www.gin-vue-admin.com", Name: "https://www.gin-vue-admin.com", Hidden: false, Component: "/", Sort: 0, Meta: model.Meta{Title: "官方网站", Icon: "s-home"}},
 	{GVA_MODEL: global.GVA_MODEL{ID: 23, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, ParentId: "0", Path: "state", Name: "state", Hidden: false, Component: "view/system/state.vue", Sort: 6, Meta: model.Meta{Title: "服务器状态", Icon: "cloudy"}},
 	{GVA_MODEL: global.GVA_MODEL{ID: 24, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, ParentId: "14", Path: "autoCodeAdmin", Name: "autoCodeAdmin", Hidden: false, Component: "view/systemTools/autoCodeAdmin/index.vue", Sort: 1, Meta: model.Meta{Title: "自动化代码管理", Icon: "s-finance"}},
+	{GVA_MODEL: global.GVA_MODEL{ID: 25, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, ParentId: "14", Path: "autoCodeEdit/:id", Name: "autoCodeEdit", Hidden: true, Component: "view/systemTools/autoCodeAdmin/index.vue", Sort: 0, Meta: model.Meta{Title: "自动化代码(复用)", Icon: "s-finance"}},
 }
 
 //@author: [SliverHorn](https://github.com/SliverHorn)

+ 16 - 0
web/src/api/autoCode.js

@@ -68,3 +68,19 @@ export const getSysHistory = (data) => {
     data
   })
 }
+
+export const rollback = (data) => {
+  return service({
+    url: '/autoCode/rollback',
+    method: 'post',
+    data
+  })
+}
+
+export const getMeta = (data) => {
+  return service({
+    url: '/autoCode/getMeta',
+    method: 'post',
+    data
+  })
+}

+ 11 - 1
web/src/view/systemTools/autoCode/index.vue

@@ -165,7 +165,7 @@ const fieldTemplate = {
 import FieldDialog from '@/view/systemTools/autoCode/component/fieldDialog.vue'
 import PreviewCodeDialg from '@/view/systemTools/autoCode/component/previewCodeDialg.vue'
 import { toUpperCase, toHump, toSQLLine } from '@/utils/stringFun'
-import { createTemp, getDB, getTable, getColumn, preview } from '@/api/autoCode'
+import { createTemp, getDB, getTable, getColumn, preview, getMeta } from '@/api/autoCode'
 import { getDict } from '@/utils/dictionary'
 
 export default {
@@ -223,6 +223,10 @@ export default {
   created() {
     this.getDb()
     this.setFdMap()
+    const id = this.$route.params.id
+    if (id) {
+      this.getAutoCodeJson(id)
+    }
   },
   methods: {
     editAndAddField(item) {
@@ -395,6 +399,12 @@ export default {
           this.fdMap[item.label] = fdtype
         })
       })
+    },
+    async getAutoCodeJson(id) {
+      const res = await getMeta({ id: Number(id) })
+      if (res.code === 0) {
+        this.form = JSON.parse(res.data.meta)
+      }
     }
   }
 }

+ 55 - 7
web/src/view/systemTools/autoCodeAdmin/index.vue

@@ -6,10 +6,10 @@
           <el-input v-model="searchInfo.tableName" placeholder="表名" />
         </el-form-item>
         <el-form-item label="结构体名称">
-          <el-input v-model="searchInfo.tableName" placeholder="结构体名称" />
+          <el-input v-model="searchInfo.structName" placeholder="结构体名称" />
         </el-form-item>
         <el-form-item>
-          <el-button size="mini" type="primary" icon="el-icon-plus" @click="goAutoCode">新增</el-button>
+          <el-button size="mini" type="primary" icon="el-icon-plus" @click="goAutoCode(null)">新增</el-button>
         </el-form-item>
       </el-form>
     </div>
@@ -22,9 +22,38 @@
       <el-table-column label="日期" width="180">
         <template slot-scope="scope">{{ scope.row.CreatedAt|formatDate }}</template>
       </el-table-column>
-      <el-table-column label="结构体名" min-width="150" prop="tableName" />
+      <el-table-column label="结构体名" min-width="150" prop="structName" />
+      <el-table-column label="结构体描述" min-width="150" prop="structCNName" />
       <el-table-column label="表名称" min-width="150" prop="tableName" />
-
+      <el-table-column label="回滚标记" min-width="150" prop="flag">
+        <template slot-scope="scope">
+          <el-tag
+            v-if="scope.row.flag"
+            type="danger"
+            size="mini"
+            effect="dark"
+          >
+            已回滚
+          </el-tag>
+          <el-tag
+            v-else
+            size="mini"
+            type="success"
+            effect="dark"
+          >
+            未回滚
+          </el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column label="操作" min-width="180">
+        <template slot-scope="scope">
+          <div>
+            <el-button size="mini" type="primary" @click="rollback(scope.row)">回滚</el-button>
+            <el-button size="mini" type="success" @click="goAutoCode(scope.row)">复用</el-button>
+            <el-button size="mini" type="warning" @click="deleteRow(scope.row)">删除</el-button>
+          </div>
+        </template>
+      </el-table-column>
     </el-table>
     <el-pagination
       :current-page="page"
@@ -42,7 +71,7 @@
 
 <script>
 // 获取列表内容封装在mixins内部  getTableData方法 初始化已封装完成 条件搜索时候 请把条件安好后台定制的结构体字段 放到 this.searchInfo 中即可实现条件搜索
-import { getSysHistory } from '@/api/autoCode.js'
+import { getSysHistory, rollback } from '@/api/autoCode.js'
 import { formatTimeToStr } from '@/utils/date'
 import infoList from '@/mixins/infoList'
 
@@ -75,8 +104,27 @@ export default {
     this.getTableData()
   },
   methods: {
-    goAutoCode() {
-      this.$router.push({ name: 'autoCode' })
+    async rollback(row) {
+      this.$confirm('此操作将删除自动创建的文件和api, 是否继续?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(async() => {
+        const res = await rollback({ id: Number(row.ID) })
+        if (res.code === 0) {
+          this.$message.success('回滚成功')
+          this.getTableData()
+        }
+      })
+    },
+    goAutoCode(row) {
+      if (row) {
+        this.$router.push({ name: 'autoCodeEdit', params: {
+          id: row.ID
+        }})
+      } else {
+        this.$router.push({ name: 'autoCode' })
+      }
     }
   }
 }