文件结构调整,支持插件自动化 (#1824)

* Update index.vue

多个详情页之间切换tab,页面没有重新渲染

* feature:新增同步API功能

* feature: 同步表数据

* feature:新增同步API功能

* feature: 增加V2插件注册

* feature:给Enter的依赖结构增加单独的New 方便引用

* feature: 调整关联属性的选择模式

* feature: 增加component组件和name的映射插件,防止keepalive的懒加载失效。

* update: PluginInitializeRouter  && 修复TypePluginInitializeMenu ast 类型错误

* update: 测试文件的astType 类型错误

* feature: 文件变更自动同步componentName.json。

* feature: 文件变更自动同步componentName.json。

* feat: UI美化

* feat: 自动化页面顺序调整

* feature:修改404页面

* update: PluginInitializeMenu

* update: Plugin template

* fixed systemApi 重复声明

* api.vue:update:修改API分组为下拉列表

* update: import添加注释

* update: plugin_enter_test.go 增加测试用例

* update: ast 预览文件路径

* update: config Autocode 新增Module字段以及如果为空的情况下自动获取运行目录下的go.mod文件

* update: auto_code_package.go 完善调用ast工具类的封装使用

* update: auto_code_template.go Create方法和修正SysAutoCodeHistory

* feat:调整自动化package为模板,增加初始化配置信息,调整页面信息。

* update: ast PreviewPath MkdirAll

* update: ast type错误, PluginEnter and PackageModuleEnter add TemplatePath模版路径

* update: autoCodePackage and autoCodeTemplate bug修正

* update: PackageInitializeRouter 传入两个路由组

* update: PackageModuleEnter 处理空变量时与type冲突注入

* update: Package 模版更新

* update: utils/ast 优化统一

* update: 注入内容修复错误

* fix: 修复注释错误

* update: plugin 模版 完成

* feature: 文件watch功能只在development下开启

* update: viper.go.template 因为viper不区分配置的key的大小写所以用package

* update: ast 测试代码规范化

* update: package 删除api和router多余导包

* update: plugin template

* update: auto_code_package 问题修复

* update: ast 测试插件的预览功能

* update: gorm_biz 更新注册方式

* update: go.mod tidy

* remove: plugin template gen main.go.template

* update: ast 重构, 分离读取和写入步骤支持

* update: AutoCodePackageApi 传入参数错误修复

* rename: sys_autocode_history.go => sys_auto_code_history.go

* update: 预览无需落盘, 创建落盘,抽离公共参数

* update: api.go.tpl 导包位置fmt 和package js位置存放错误

* update: 测试用例修复 and PackageInitializeGorm 重构

* update: ast 新增相对路径, 代码生成器历史回滚功能

* update: ast 工具类回滚失败修复以及测试文件

* update: 代码生成器历史 回滚问题修复

* update: 代码生成器模版忽略.DS_Store

* featute: 自动化GORM结构的注入和剔除

* feature: 插件模板调整

* feature: 增加公告插件示例,调整代码模板。

* feature: 自动注册插件V2。

---------

Co-authored-by: zayn <972858472@qq.com>
Co-authored-by: SliverHorn <sliver_horn@qq.com>
Co-authored-by: krank <emosick@qq.com>
Co-authored-by: cjk <wlicjk@126.com>
Co-authored-by: piexlMax(奇淼 <qimiaojiangjizhao@gmail.com>
Co-authored-by: maxwell <zhong.maxwell@gmail.com>
This commit is contained in:
PiexlMax(奇淼
2024-07-21 11:33:25 +08:00
committed by GitHub
parent 6b3a9024d3
commit 6e4dc10c49
193 changed files with 9410 additions and 2904 deletions

View File

@@ -5,6 +5,7 @@
title="此功能为开发环境使用,不建议发布到生产,具体使用效果请点我观看。"
/>
<div class="gva-search-box">
<div class="text-lg mb-2 text-gray-600">使用AI创建</div>
<div class="relative">
<el-input v-model="prompt" type="textarea" :rows="5" :maxlength="100" :placeholder="`【Beta】试试描述你的表让AI帮你完成。\n目前正在测试阶段遇到问题请及时反馈。\n此功能需要到插件市场个人中心获取自己的AI-Path把AI-Path填入config.yaml下的autocode-->ai-path重启项目即可使用。`" resize="none" />
<div class="flex absolute right-2 bottom-2">
@@ -31,29 +32,19 @@
</div>
<!-- 从数据库直接获取字段 -->
<div class="gva-search-box">
<el-collapse
v-model="activeNames"
class="mb-3"
<div class="text-lg mb-2 text-gray-600">从数据库创建</div>
<el-form
ref="getTableForm"
:inline="true"
:model="dbform"
label-width="120px"
>
<el-collapse-item name="1">
<template #title>
<div class="text-xl pl-4 flex items-center">
点这里从现有数据库创建代码
<el-icon>
<pointer />
</el-icon>
</div>
</template>
<el-form
ref="getTableForm"
style="margin-top:24px"
:inline="true"
:model="dbform"
label-width="120px"
>
<el-row class="w-full">
<el-col :span="6">
<el-form-item
label="业务库"
prop="selectDBtype"
class="w-full"
>
<template #label>
<el-tooltip
@@ -69,6 +60,7 @@
clearable
placeholder="选择业务库"
@change="getDbFunc"
class="w-full"
>
<el-option
v-for="item in dbList"
@@ -84,15 +76,19 @@
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item
label="数据库名"
prop="structName"
class="w-full"
>
<el-select
v-model="dbform.dbName"
clearable
filterable
placeholder="请选择数据库"
class="w-full"
@change="getTableFunc"
>
<el-option
@@ -103,13 +99,17 @@
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item
label="表名"
prop="structName"
class="w-full"
>
<el-select
v-model="dbform.tableName"
:disabled="!dbform.dbName"
class="w-full"
filterable
placeholder="请选择表"
>
@@ -121,20 +121,27 @@
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button
type="primary"
@click="getColumnFunc"
>
使用此表创建
</el-button>
</el-col>
<el-col :span="6">
<el-form-item
class="w-full"
>
<div class="flex justify-end w-full">
<el-button
type="primary"
@click="getColumnFunc"
>
使用此表
</el-button>
</div>
</el-form-item>
</el-form>
</el-collapse-item>
</el-collapse>
</el-col>
</el-row>
</el-form>
</div>
<div class="gva-search-box">
<!-- 初始版本自动化代码工具 -->
<div class="text-lg mb-2 text-gray-600">自动化结构</div>
<el-form
ref="autoCodeForm"
:rules="rules"
@@ -142,191 +149,230 @@
label-width="120px"
:inline="true"
>
<el-form-item
label="Struct名称"
prop="structName"
>
<el-input
v-model="form.structName"
placeholder="首字母自动转换大写"
/>
</el-form-item>
<el-form-item
label="TableName"
prop="tableName"
>
<el-input
v-model="form.tableName"
placeholder="指定表名(非必填)"
/>
</el-form-item>
<el-form-item
prop="abbreviation"
>
<template #label>
<el-tooltip
content="简称会作为入参对象名和路由group"
placement="bottom"
effect="light"
<el-row class="w-full">
<el-col :span="6">
<el-form-item
label="结构名称"
prop="structName"
class="w-full"
>
<div> Struct简称 <el-icon><QuestionFilled /></el-icon> </div>
</el-tooltip>
</template>
<el-input
v-model="form.abbreviation"
placeholder="请输入Struct简称"
/>
</el-form-item>
<el-form-item
label="Struct中文名称"
prop="description"
>
<el-input
v-model="form.description"
placeholder="中文描述作为自动api描述"
/>
</el-form-item>
<el-form-item
prop="packageName"
>
<template #label>
<el-tooltip
content="生成文件的默认名称(建议为驼峰格式,首字母小写,如sysXxxXxxx)"
placement="bottom"
effect="light"
<el-input
v-model="form.structName"
placeholder="首字母自动转换大写"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item
label="TableName"
class="w-full"
>
<div> 文件名称 <el-icon><QuestionFilled /></el-icon> </div>
</el-tooltip>
</template>
<el-input
v-model="form.packageName"
placeholder="请输入文件名称"
@blur="toLowerCaseFunc(form,'packageName')"
/>
</el-form-item>
<el-form-item
label="Package"
prop="package"
>
<el-select
v-model="form.package"
>
<el-option
v-for="item in pkgs"
:key="item.ID"
:value="item.packageName"
:label="item.packageName"
/>
</el-select>
<el-icon
class="cursor-pointer ml-2 text-gray-600"
@click="getPkgs"
>
<refresh />
</el-icon>
<el-icon
class="cursor-pointer ml-2 text-gray-600"
@click="goPkgs"
>
<document-add />
</el-icon>
</el-form-item>
<el-form-item
label="业务库"
prop="businessDB"
>
<template #label>
<el-tooltip
content="注需要提前到db-list自行配置多数据库此项为空则会使用gva本库创建自动化代码(global.GVA_DB),填写后则会创建指定库的代码(global.MustGetGlobalDBByDBName(dbname))"
placement="bottom"
effect="light"
<template #label>
<el-tooltip
content="简称会作为入参对象名和路由group"
placement="bottom"
effect="light"
>
<div> 结构简称 <el-icon><QuestionFilled /></el-icon> </div>
</el-tooltip>
</template>
<el-input
v-model="form.abbreviation"
placeholder="请输入Struct简称"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item
label="中文名称"
prop="description"
class="w-full"
>
<div> 业务库 <el-icon><QuestionFilled /></el-icon> </div>
</el-tooltip>
</template>
<el-select
v-model="form.businessDB"
placeholder="选择业务库"
>
<el-option
v-for="item in dbList"
:key="item.aliasName"
:value="item.aliasName"
:label="item.aliasName"
:disabled="item.disable"
<el-input
v-model="form.description"
placeholder="中文描述作为自动api描述"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item
label="表名"
prop="tableName"
class="w-full"
>
<div>
<span>{{ item.aliasName }}</span>
<span style="float:right;color:#8492a6;font-size:13px">{{ item.dbName }}</span>
</div>
</el-option>
</el-select>
</el-form-item>
<div>
<el-form-item>
<template #label>
<el-tooltip
content="注会自动在结构体global.Model其中包含主键和软删除相关操作配置"
placement="bottom"
effect="light"
<el-input
v-model="form.tableName"
placeholder="指定表名(非必填)"
/>
</el-form-item>
</el-col>
</el-row>
<el-row class="w-full">
<el-col :span="6">
<el-form-item
prop="packageName"
class="w-full"
>
<template #label>
<el-tooltip
content="生成文件的默认名称(建议为驼峰格式,首字母小写,如sysXxxXxxx)"
placement="bottom"
effect="light"
>
<div> 文件名称 <el-icon><QuestionFilled /></el-icon> </div>
</el-tooltip>
</template>
<el-input
v-model="form.packageName"
placeholder="请输入文件名称"
@blur="toLowerCaseFunc(form,'packageName')"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item
label="选择模板"
prop="package"
class="w-full relative"
>
<el-select
v-model="form.package"
class="w-full pr-12"
>
<div> 使用GVA结构 <el-icon><QuestionFilled /></el-icon> </div>
</el-tooltip>
</template>
<el-checkbox
v-model="form.gvaModel"
@change="useGva"
/>
</el-form-item>
<el-form-item>
<template #label>
<el-tooltip
content="注:会自动在结构体添加 created_by updated_by deleted_by方便用户进行资源权限控制"
placement="bottom"
effect="light"
<el-option
v-for="item in pkgs"
:key="item.ID"
:value="item.packageName"
:label="item.packageName"
/>
</el-select>
<span class="absolute right-0">
<el-icon
class="cursor-pointer ml-2 text-gray-600"
@click="getPkgs"
>
<refresh />
</el-icon>
<el-icon
class="cursor-pointer ml-2 text-gray-600"
@click="goPkgs"
>
<document-add />
</el-icon>
</span>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item
label="业务库"
prop="businessDB"
class="w-full"
>
<template #label>
<el-tooltip
content="注需要提前到db-list自行配置多数据库此项为空则会使用gva本库创建自动化代码(global.GVA_DB),填写后则会创建指定库的代码(global.MustGetGlobalDBByDBName(dbname))"
placement="bottom"
effect="light"
>
<div> 业务库 <el-icon><QuestionFilled /></el-icon> </div>
</el-tooltip>
</template>
<el-select
v-model="form.businessDB"
placeholder="选择业务库"
class="w-full"
>
<div> 创建资源标识 <el-icon><QuestionFilled /></el-icon> </div>
</el-tooltip>
</template>
<el-checkbox v-model="form.autoCreateResource" />
</el-form-item>
<el-form-item>
<template #label>
<el-tooltip
content="注把自动生成的API注册进数据库"
placement="bottom"
effect="light"
>
<div> 自动创建API <el-icon><QuestionFilled /></el-icon> </div>
</el-tooltip>
</template>
<el-checkbox v-model="form.autoCreateApiToSql" />
</el-form-item>
<el-form-item>
<template #label>
<el-tooltip
content="注:把自动生成的菜单注册进数据库"
placement="bottom"
effect="light"
>
<div> 自动创建菜单 <el-icon><QuestionFilled /></el-icon></div>
</el-tooltip>
</template>
<el-checkbox v-model="form.autoCreateMenuToSql" />
</el-form-item>
<el-form-item>
<template #label>
<el-tooltip
content="注:自动同步数据库表结构,如果不需要可以选择关闭。"
placement="bottom"
effect="light"
>
<div> 同步表结构 <el-icon><QuestionFilled /></el-icon></div>
</el-tooltip>
</template>
<el-checkbox v-model="form.autoMigrate" />
</el-form-item>
</div>
<el-option
v-for="item in dbList"
:key="item.aliasName"
:value="item.aliasName"
:label="item.aliasName"
:disabled="item.disable"
>
<div>
<span>{{ item.aliasName }}</span>
<span style="float:right;color:#8492a6;font-size:13px">{{ item.dbName }}</span>
</div>
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="3">
<el-form-item>
<template #label>
<el-tooltip
content="会自动在结构体global.Model其中包含主键和软删除相关操作配置"
placement="bottom"
effect="light"
>
<div> 使用GVA结构 <el-icon><QuestionFilled /></el-icon> </div>
</el-tooltip>
</template>
<el-checkbox
v-model="form.gvaModel"
@change="useGva"
/>
</el-form-item>
</el-col>
<el-col :span="3">
<el-form-item>
<template #label>
<el-tooltip
content="注把自动生成的API注册进数据库"
placement="bottom"
effect="light"
>
<div> 自动创建API <el-icon><QuestionFilled /></el-icon> </div>
</el-tooltip>
</template>
<el-checkbox v-model="form.autoCreateApiToSql" />
</el-form-item>
</el-col>
<el-col :span="3">
<el-form-item>
<template #label>
<el-tooltip
content="注:把自动生成的菜单注册进数据库"
placement="bottom"
effect="light"
>
<div> 自动创建菜单 <el-icon><QuestionFilled /></el-icon></div>
</el-tooltip>
</template>
<el-checkbox v-model="form.autoCreateMenuToSql" />
</el-form-item>
</el-col>
<el-col :span="3">
<el-form-item>
<template #label>
<el-tooltip
content="注:自动同步数据库表结构,如果不需要可以选择关闭。"
placement="bottom"
effect="light"
>
<div> 同步表结构 <el-icon><QuestionFilled /></el-icon></div>
</el-tooltip>
</template>
<el-checkbox v-model="form.autoMigrate" />
</el-form-item>
</el-col>
<el-col :span="3">
<el-form-item>
<template #label>
<el-tooltip
content="注:会自动在结构体添加 created_by updated_by deleted_by方便用户进行资源权限控制"
placement="bottom"
effect="light"
>
<div> 创建资源标识 <el-icon><QuestionFilled /></el-icon> </div>
</el-tooltip>
</template>
<el-checkbox v-model="form.autoCreateResource" />
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<!-- 组件列表 -->