From d8d3cbbbaf8675653d5b1cd752e14a9a946759aa Mon Sep 17 00:00:00 2001 From: pixel <303176530@qq.com> Date: Sun, 7 Jun 2020 14:56:37 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=87=AA=E5=8A=A8=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E6=90=9C=E7=B4=A2=E5=8A=9F=E8=83=BD=20=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E6=90=9C=E7=B4=A2=E6=9D=A1=E4=BB=B6=20=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E6=95=B0=E6=8D=AE=E5=BA=93=E6=B3=A8=E9=87=8A=20?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=8F=92=E4=BB=B6=E5=8A=9F=E8=83=BD=EF=BC=88?= =?UTF-8?q?0.0.1=E7=89=88=20=E8=AF=B7=E5=8B=BF=E7=94=A8=E4=BA=8E=E7=94=9F?= =?UTF-8?q?=E4=BA=A7=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/api/v1/sys_auto_code.go | 10 ++--- server/core/server.go | 3 ++ server/model/exa_customer.go | 10 ++--- server/model/exa_file_upload_download.go | 8 ++-- server/model/sys_api.go | 8 ++-- server/model/sys_authority.go | 6 +-- server/model/sys_authority_menu.go | 4 +- server/model/sys_auto_code.go | 5 ++- server/model/sys_base_menu.go | 22 +++++----- server/model/sys_jwt_blacklist.go | 2 +- server/model/sys_user.go | 14 +++---- server/model/sys_workflow.go | 20 ++++----- server/model/sys_workflow_process.go | 12 +++--- server/resource/template/fe/table.vue.tpl | 19 ++++++++- server/resource/template/te/api.go.tpl | 4 +- server/resource/template/te/model.go.tpl | 3 +- server/resource/template/te/request.go.tpl | 8 ++++ server/resource/template/te/service.go.tpl | 33 +++++++++++++-- .../autoCode/component/fieldDialog.vue | 41 +++++++++++++++++++ web/src/view/systemTools/autoCode/index.vue | 24 ++++++++++- 20 files changed, 187 insertions(+), 69 deletions(-) create mode 100644 server/resource/template/te/request.go.tpl diff --git a/server/api/v1/sys_auto_code.go b/server/api/v1/sys_auto_code.go index 47692795..93fadf75 100644 --- a/server/api/v1/sys_auto_code.go +++ b/server/api/v1/sys_auto_code.go @@ -37,31 +37,31 @@ func CreateTemp(c *gin.Context) { apiList := [5]model.SysApi{ { Path: "/" + a.Abbreviation + "/" + "create" + a.StructName, - Description: "新增" + a.StructName, + Description: "新增" + a.Description, ApiGroup: a.Abbreviation, Method: "POST", }, { Path: "/" + a.Abbreviation + "/" + "delete" + a.StructName, - Description: "删除" + a.StructName, + Description: "删除" + a.Description, ApiGroup: a.Abbreviation, Method: "DELETE", }, { Path: "/" + a.Abbreviation + "/" + "update" + a.StructName, - Description: "更新" + a.StructName, + Description: "更新" + a.Description, ApiGroup: a.Abbreviation, Method: "PUT", }, { Path: "/" + a.Abbreviation + "/" + "find" + a.StructName, - Description: "根据ID获取" + a.StructName, + Description: "根据ID获取" + a.Description, ApiGroup: a.Abbreviation, Method: "GET", }, { Path: "/" + a.Abbreviation + "/" + "get" + a.StructName + "List", - Description: "获取" + a.StructName + "列表", + Description: "获取" + a.Description + "列表", ApiGroup: a.Abbreviation, Method: "GET", }, diff --git a/server/core/server.go b/server/core/server.go index 61dbcac1..35adb3db 100644 --- a/server/core/server.go +++ b/server/core/server.go @@ -16,10 +16,13 @@ func RunWindowsServer() { } Router := initialize.Routers() Router.Static("/form-generator", "./resource/page") + + // 插件安装 暂时只是后台功能 添加model 添加路由 添加对数据库的操作 详细插件测试模板可看https://github.com/piexlmax/gvaplug 此处不建议投入生产 err := initialize.InstallPlug(global.GVA_DB, Router, gvaplug.GvaPlug{}) if err != nil { panic(fmt.Sprintf("插件安装失败: %v", err)) } + // end 插件描述 address := fmt.Sprintf(":%d", global.GVA_CONFIG.System.Addr) s := &http.Server{ diff --git a/server/model/exa_customer.go b/server/model/exa_customer.go index 9cb96b1f..fb601bd8 100644 --- a/server/model/exa_customer.go +++ b/server/model/exa_customer.go @@ -6,9 +6,9 @@ import ( type ExaCustomer struct { gorm.Model - CustomerName string `json:"customerName" form:"customerName"` - CustomerPhoneData string `json:"customerPhoneData" form:"customerPhoneData"` - SysUserID uint `json:"sysUserId" form:"sysUserId"` - SysUserAuthorityID string `json:"sysUserAuthorityID" form:"sysUserAuthorityID"` - SysUser SysUser `json:"sysUser" form:"sysUser"` + CustomerName string `json:"customerName" form:"customerName" gorm:"comment:'客户名'"` + CustomerPhoneData string `json:"customerPhoneData" form:"customerPhoneData" gorm:"comment:'客户手机号'"` + SysUserID uint `json:"sysUserId" form:"sysUserId" gorm:"comment:'管理ID'"` + SysUserAuthorityID string `json:"sysUserAuthorityID" form:"sysUserAuthorityID" gorm:"comment:'管理角色ID'"` + SysUser SysUser `json:"sysUser" form:"sysUser" gorm:"comment:'管理详情'"` } diff --git a/server/model/exa_file_upload_download.go b/server/model/exa_file_upload_download.go index 1b0557b4..de4abf7c 100644 --- a/server/model/exa_file_upload_download.go +++ b/server/model/exa_file_upload_download.go @@ -6,8 +6,8 @@ import ( type ExaFileUploadAndDownload struct { gorm.Model - Name string `json:"name"` - Url string `json:"url"` - Tag string `json:"tag"` - Key string `json:"key"` + Name string `json:"name" gorm:"comment:'文件名'"` + Url string `json:"url" gorm:"comment:'文件地址'"` + Tag string `json:"tag" gorm:"comment:'文件标签'"` + Key string `json:"key" gorm:"comment:'编号'"` } diff --git a/server/model/sys_api.go b/server/model/sys_api.go index 0a1457d0..fd0546dc 100644 --- a/server/model/sys_api.go +++ b/server/model/sys_api.go @@ -6,8 +6,8 @@ import ( type SysApi struct { gorm.Model - Path string `json:"path"` - Description string `json:"description"` - ApiGroup string `json:"apiGroup"` - Method string `json:"method" gorm:"default:'POST'"` + Path string `json:"path" gorm:"comment:'api路径'"` + Description string `json:"description" gorm:"comment:'api中文描述'"` + ApiGroup string `json:"apiGroup" gorm:"comment:'api组'"` + Method string `json:"method" gorm:"default:'POST'" gorm:"comment:'方法'"` } diff --git a/server/model/sys_authority.go b/server/model/sys_authority.go index cdc2391d..6e55b07e 100644 --- a/server/model/sys_authority.go +++ b/server/model/sys_authority.go @@ -8,9 +8,9 @@ type SysAuthority struct { CreatedAt time.Time UpdatedAt time.Time DeletedAt *time.Time `sql:"index"` - AuthorityId string `json:"authorityId" gorm:"not null;unique;primary_key"` - AuthorityName string `json:"authorityName"` - ParentId string `json:"parentId"` + AuthorityId string `json:"authorityId" gorm:"not null;unique;primary_key" gorm:"comment:'角色ID'"` + AuthorityName string `json:"authorityName" gorm:"comment:'角色名'"` + ParentId string `json:"parentId" gorm:"comment:'父角色ID'"` DataAuthorityId []SysAuthority `json:"dataAuthorityId" gorm:"many2many:sys_data_authority_id;association_jointable_foreignkey:data_authority_id"` Children []SysAuthority `json:"children"` SysBaseMenus []SysBaseMenu `json:"menus" gorm:"many2many:sys_authority_menus;"` diff --git a/server/model/sys_authority_menu.go b/server/model/sys_authority_menu.go index b325a2ad..461d1e61 100644 --- a/server/model/sys_authority_menu.go +++ b/server/model/sys_authority_menu.go @@ -2,7 +2,7 @@ package model type SysMenu struct { SysBaseMenu - MenuId string `json:"menuId"` - AuthorityId string `json:"-"` + MenuId string `json:"menuId" gorm:"comment:'菜单ID'"` + AuthorityId string `json:"-" gorm:"comment:'角色ID'"` Children []SysMenu `json:"children"` } diff --git a/server/model/sys_auto_code.go b/server/model/sys_auto_code.go index 9023f31d..e48816d4 100644 --- a/server/model/sys_auto_code.go +++ b/server/model/sys_auto_code.go @@ -5,6 +5,7 @@ type AutoCodeStruct struct { StructName string `json:"structName"` PackageName string `json:"packageName"` Abbreviation string `json:"abbreviation"` + Description string `json:"description"` AutoCreateApiToSql bool `json:"autoCreateApiToSql"` Fields []Field `json:"fields"` } @@ -14,5 +15,7 @@ type Field struct { FieldDesc string `json:"fieldDesc"` FieldType string `json:"fieldType"` FieldJson string `json:"fieldJson"` + Comment string `json:"comment"` ColumnName string `json:"columnName"` -} + FieldSearchType string `json:"fieldSearchType"` +} \ No newline at end of file diff --git a/server/model/sys_base_menu.go b/server/model/sys_base_menu.go index 81c71173..00ad3ae2 100644 --- a/server/model/sys_base_menu.go +++ b/server/model/sys_base_menu.go @@ -7,20 +7,20 @@ import ( type SysBaseMenu struct { gorm.Model MenuLevel uint `json:"-"` - ParentId string `json:"parentId"` - Path string `json:"path"` - Name string `json:"name"` - Hidden bool `json:"hidden"` - Component string `json:"component"` - Sort int `json:"sort"` - Meta `json:"meta"` + ParentId string `json:"parentId" gorm:"comment:'父菜单ID'"` + Path string `json:"path" gorm:"comment:'路由path'"` + Name string `json:"name" gorm:"comment:'路由name'"` + Hidden bool `json:"hidden" gorm:"comment:'是否在列表隐藏'"` + Component string `json:"component" gorm:"comment:'对应前端文件路径'"` + Sort int `json:"sort" gorm:"comment:'排序标记'"` + Meta `json:"meta" gorm:"comment:'附加属性'"` SysAuthoritys []SysAuthority `json:"authoritys" gorm:"many2many:sys_authority_menus;"` Children []SysBaseMenu `json:"children"` } type Meta struct { - KeepAlive bool `json:"keepAlive"` - DefaultMenu bool `json:"defaultMenu"` - Title string `json:"title"` - Icon string `json:"icon"` + KeepAlive bool `json:"keepAlive" gorm:"comment:'是否缓存'"` + DefaultMenu bool `json:"defaultMenu" gorm:"comment:'是否是基础路由(开发中)'"` + Title string `json:"title" gorm:"comment:'菜单名'"` + Icon string `json:"icon" gorm:"comment:'菜单图标'"` } diff --git a/server/model/sys_jwt_blacklist.go b/server/model/sys_jwt_blacklist.go index fa7b93e3..6752225e 100644 --- a/server/model/sys_jwt_blacklist.go +++ b/server/model/sys_jwt_blacklist.go @@ -6,5 +6,5 @@ import ( type JwtBlacklist struct { gorm.Model - Jwt string `gorm:"type:text"` + Jwt string `gorm:"type:text;comment:'jwt'"` } diff --git a/server/model/sys_user.go b/server/model/sys_user.go index e6744399..23049be4 100644 --- a/server/model/sys_user.go +++ b/server/model/sys_user.go @@ -7,12 +7,12 @@ import ( type SysUser struct { gorm.Model - UUID uuid.UUID `json:"uuid"` - Username string `json:"userName"` - Password string `json:"-"` - NickName string `json:"nickName" gorm:"default:'系统用户'"` - HeaderImg string `json:"headerImg" gorm:"default:'http://qmplusimg.henrongyi.top/head.png'"` - Authority SysAuthority `json:"authority" gorm:"ForeignKey:AuthorityId;AssociationForeignKey:AuthorityId"` - AuthorityId string `json:"authorityId" gorm:"default:888"` + UUID uuid.UUID `json:"uuid" gorm:"comment:'用户UUID'"` + Username string `json:"userName" gorm:"comment:'用户登录名'"` + Password string `json:"-" gorm:"comment:'用户登录密码'"` + NickName string `json:"nickName" gorm:"default:'系统用户';comment:'用户昵称'" ` + HeaderImg string `json:"headerImg" gorm:"default:'http://qmplusimg.henrongyi.top/head.png';comment:'用户头像'"` + Authority SysAuthority `json:"authority" gorm:"ForeignKey:AuthorityId;AssociationForeignKey:AuthorityId;comment:'用户角色'"` + AuthorityId string `json:"authorityId" gorm:"default:888;comment:'用户角色ID'"` } diff --git a/server/model/sys_workflow.go b/server/model/sys_workflow.go index f711f2e6..babce431 100644 --- a/server/model/sys_workflow.go +++ b/server/model/sys_workflow.go @@ -7,19 +7,19 @@ import ( // 工作流属性表 type SysWorkflow struct { gorm.Model - WorkflowNickName string `json:"workflowNickName"` // 工作流名称 - WorkflowName string `json:"workflowName"` // 工作流英文id - WorkflowDescription string `json:"workflowDescription"` // 工作流描述 - WorkflowStepInfo []SysWorkflowStepInfo `json:"workflowStep"` // 工作流步骤 + WorkflowNickName string `json:"workflowNickName" gorm:"comment:'工作流中文名称'"` // 工作流名称 + WorkflowName string `json:"workflowName" gorm:"comment:'工作流英文名称'"` // 工作流英文id + WorkflowDescription string `json:"workflowDescription" gorm:"comment:'工作流描述'"` // 工作流描述 + WorkflowStepInfo []SysWorkflowStepInfo `json:"workflowStep" gorm:"comment:'工作流步骤'"` // 工作流步骤 } // 工作流状态表 type SysWorkflowStepInfo struct { gorm.Model - SysWorkflowID uint `json:"workflowID"` // 所属工作流ID - IsStrat bool `json:"isStrat"` // 是否是开始流节点 - StepName string `json:"stepName"` // 工作流名称 - StepNo float64 `json:"stepNo"` // 步骤id (第几步) - StepAuthorityID string `json:"stepAuthorityID"` // 操作者级别id - IsEnd bool `json:"isEnd"` // 是否是完结流节点 + SysWorkflowID uint `json:"workflowID" gorm:"comment:'所属工作流ID'"` // 所属工作流ID + IsStrat bool `json:"isStrat" gorm:"comment:'是否是开始流节点'"` // 是否是开始流节点 + StepName string `json:"stepName" gorm:"comment:'工作流节点名称'"` // 工作流名称 + StepNo float64 `json:"stepNo" gorm:"comment:'步骤id (第几步)'"` // 步骤id (第几步) + StepAuthorityID string `json:"stepAuthorityID" gorm:"comment:'操作者级别id'"` // 操作者级别id + IsEnd bool `json:"isEnd" gorm:"comment:'是否是完结流节点'"` // 是否是完结流节点 } diff --git a/server/model/sys_workflow_process.go b/server/model/sys_workflow_process.go index 74f5900b..8a930f47 100644 --- a/server/model/sys_workflow_process.go +++ b/server/model/sys_workflow_process.go @@ -5,10 +5,10 @@ import "github.com/jinzhu/gorm" // 工作流流转表 type SysWorkFlowProcess struct { gorm.Model - ApplicationID uint // 当前工作流所属申请的ID - CurrentNode string // 当前进度节点 - HistoricalNode string // 上一个进度节点 - CurrentUser string // 当前进度操作人 - HistoricalUser string // 上一个进度的操作人 - State bool // 状态 是否是正在进行的状态 + ApplicationID uint `json:"applicationID" gorm:"comment:'当前工作流所属申请的ID'"`// 当前工作流所属申请的ID + CurrentNode string `json:"currentNode" gorm:"comment:'当前进度节点'"`// 当前进度节点 + HistoricalNode string `json:"historicalNode" gorm:"comment:'上一个进度节点'"`// 上一个进度节点 + CurrentUser string `json:"currentUser" gorm:"comment:'当前进度操作人'"`// 当前进度操作人 + HistoricalUser string `json:"historicalUser" gorm:"comment:'上一个进度的操作人'"`// 上一个进度的操作人 + State bool `json:"state" gorm:"comment:'状态 是否是正在进行的状态'"`// 状态 是否是正在进行的状态 } diff --git a/server/resource/template/fe/table.vue.tpl b/server/resource/template/fe/table.vue.tpl index 9d6f5c27..e1332ab1 100644 --- a/server/resource/template/fe/table.vue.tpl +++ b/server/resource/template/fe/table.vue.tpl @@ -2,9 +2,18 @@
- 此处请使用表单生成器生成form填充 表单默认绑定 formData 如手动修改过请自行修改key + {{- range .Fields}} + {{- if .FieldSearchType}} + + + + {{ end }} + {{ end }} + + 查询 + - 新增 + 新增api
@@ -95,6 +104,12 @@ export default { } }, methods: { + //条件搜索前端看此方法 + onSubmit() { + this.page = 1 + this.pageSize = 10 + this.getTableData() + }, async update{{.StructName}}(row) { const res = await find{{.StructName}}({ ID: row.ID }); this.type = "update"; diff --git a/server/resource/template/te/api.go.tpl b/server/resource/template/te/api.go.tpl index 75575b32..1ff29899 100644 --- a/server/resource/template/te/api.go.tpl +++ b/server/resource/template/te/api.go.tpl @@ -91,11 +91,11 @@ func Find{{.StructName}}(c *gin.Context) { // @Security ApiKeyAuth // @accept application/json // @Produce application/json -// @Param data body request.PageInfo true "分页获取{{.StructName}}列表" +// @Param data body request.{{.StructName}}Search true "分页获取{{.StructName}}列表" // @Success 200 {string} string "{"success":true,"data":{},"msg":"获取成功"}" // @Router /{{.Abbreviation}}/get{{.StructName}}List [get] func Get{{.StructName}}List(c *gin.Context) { - var pageInfo request.PageInfo + var pageInfo request.{{.StructName}}Search _ = c.ShouldBindQuery(&pageInfo) err, list, total := service.Get{{.StructName}}InfoList(pageInfo) if err != nil { diff --git a/server/resource/template/te/model.go.tpl b/server/resource/template/te/model.go.tpl index b4420f90..873d5787 100644 --- a/server/resource/template/te/model.go.tpl +++ b/server/resource/template/te/model.go.tpl @@ -5,7 +5,8 @@ import ( "github.com/jinzhu/gorm" ) +// 如果含有time.Time 请自行import time包 type {{.StructName}} struct { gorm.Model {{range .Fields}} - {{.FieldName}} {{.FieldType}} `json:"{{.FieldJson}}" form:"{{.FieldJson}}" {{if .ColumnName}} gorm:"column:{{.ColumnName}}"{{end}}`{{ end }} + {{.FieldName}} {{.FieldType}} `json:"{{.FieldJson}}" form:"{{.FieldJson}}" gorm:"column:{{.ColumnName}};comment:'{{.Comment}}'"`{{ end }} } diff --git a/server/resource/template/te/request.go.tpl b/server/resource/template/te/request.go.tpl new file mode 100644 index 00000000..68cc026d --- /dev/null +++ b/server/resource/template/te/request.go.tpl @@ -0,0 +1,8 @@ +package request + +import "gin-vue-admin/model" + +type {{.StructName}}Search struct{ + model.{{.StructName}} + PageInfo +} \ No newline at end of file diff --git a/server/resource/template/te/service.go.tpl b/server/resource/template/te/service.go.tpl index c683ed95..5ba589c3 100644 --- a/server/resource/template/te/service.go.tpl +++ b/server/resource/template/te/service.go.tpl @@ -57,12 +57,39 @@ func Get{{.StructName}}(id uint) (err error, {{.Abbreviation}} model.{{.StructNa // @param info PageInfo // @return error -func Get{{.StructName}}InfoList(info request.PageInfo) (err error, list interface{}, total int) { +func Get{{.StructName}}InfoList(info request.{{.StructName}}Search) (err error, list interface{}, total int) { limit := info.PageSize offset := info.PageSize * (info.Page - 1) + // 创建db db := global.GVA_DB - var {{.Abbreviation}}s []model.{{.StructName}} + var {{.Abbreviation}}s []model.{{.StructName}} + // 如果有条件搜索 下方会自动创建搜索语句 + {{- range .Fields}} + {{- if .FieldSearchType}} + {{- if eq .FieldType "string" }} + if info.{{.FieldName}} != "" { + db = db.Where("{{.ColumnName}} {{.FieldSearchType}} ?",{{if eq .FieldSearchType "LIKE"}}"%"+ {{ end }}info.{{.FieldName}}{{if eq .FieldSearchType "LIKE"}}+"%"{{ end }}) + } + {{- else if eq .FieldType "bool" }} + if info.{{.FieldName}} != 0 { + db = db.Where("{{.ColumnName}} {{.FieldSearchType}} ?",{{if eq .FieldSearchType "LIKE"}}"%"+{{ end }}info.{{.FieldName}}{{if eq .FieldSearchType "LIKE"}}+"%"{{ end }}) + } + {{- else if eq .FieldType "int" }} + if info.{{.FieldName}} != 0 { + db = db.Where("{{.ColumnName}} {{.FieldSearchType}} ?",{{if eq .FieldSearchType "LIKE"}}"%"+{{ end }}info.{{.FieldName}}{{if eq .FieldSearchType "LIKE"}}+"%"{{ end }}) + } + {{- else if eq .FieldType "float64" }} + if info.{{.FieldName}} != 0 { + db = db.Where("{{.ColumnName}} {{.FieldSearchType}} ?",{{if eq .FieldSearchType "LIKE"}}"%"+{{ end }}info.{{.FieldName}}{{if eq .FieldSearchType "LIKE"}}+"%"{{ end }}) + } + {{- else if eq .FieldType "time.Time" }} + if !info.{{.FieldName}}.IsZero() { + db = db.Where("{{.ColumnName}} {{.FieldSearchType}} ?",{{if eq .FieldSearchType "LIKE"}}"%"+{{ end }}info.{{.FieldName}}{{if eq .FieldSearchType "LIKE"}}+"%"{{ end }}) + } + {{- end }} + {{- end }} + {{- end }} err = db.Find(&{{.Abbreviation}}s).Count(&total).Error err = db.Limit(limit).Offset(offset).Find(&{{.Abbreviation}}s).Error return err, {{.Abbreviation}}s, total -} +} \ No newline at end of file diff --git a/web/src/view/systemTools/autoCode/component/fieldDialog.vue b/web/src/view/systemTools/autoCode/component/fieldDialog.vue index 2382d45a..da2936f7 100644 --- a/web/src/view/systemTools/autoCode/component/fieldDialog.vue +++ b/web/src/view/systemTools/autoCode/component/fieldDialog.vue @@ -1,5 +1,6 @@ @@ -50,6 +68,28 @@ export default { data(){ return{ visible:false, + typeSearchOptions:[ + { + label:"=", + value:"=" + }, + { + label:"<>", + value:"<>" + }, + { + label:">", + value:">" + }, + { + label:"<", + value:"<" + }, + { + label:"LIKE", + value:"LIKE" + }, + ], typeOptions:[ { label:"字符串", @@ -76,6 +116,7 @@ export default { fieldName:[ { required: true, message: '请输入field英文名', trigger: 'blur' }], fieldDesc:[ { required: true, message: '请输入field中文名', trigger: 'blur' }], fieldJson:[ { required: true, message: '请输入field格式化json', trigger: 'blur' }], + columnName:[{ required: true, message: '请输入数据库字段', trigger: 'blur' }], fieldType:[ { required: true, message: '请选择field数据类型', trigger: 'blur' }] } diff --git a/web/src/view/systemTools/autoCode/index.vue b/web/src/view/systemTools/autoCode/index.vue index 07cfe301..a6be80ce 100644 --- a/web/src/view/systemTools/autoCode/index.vue +++ b/web/src/view/systemTools/autoCode/index.vue @@ -8,11 +8,14 @@ + + + - - 自动创建api + + @@ -30,6 +33,12 @@ + + + + + +