Browse Source

代码生成器增加前端table.vue的自动生成

main
QM303176530 5 years ago
parent
commit
3240078f1e
  1. 3
      server/model/sys_auto_code.go
  2. 4
      server/resource/template/fe/api.js.tpl
  3. 155
      server/resource/template/fe/table.vue.tpl
  4. 21
      server/service/sys_auto_code.go

3
server/model/sys_auto_code.go

@ -10,7 +10,8 @@ type AutoCodeStruct struct {
type Field struct {
FieldName string `json:"fieldName"`
FieldDesc string `json:"fieldDesc"`
FieldType string `json:"fieldType"`
FieldJson string `json:"fieldJson"`
ColumnName string `json:"columnName"`
}
}

4
server/resource/template/fe/api.js.tpl

@ -58,7 +58,7 @@ export const create{{.StructName}} = (data) => {
// @Param data body model.{{.StructName}} true "用id查询{{.StructName}}"
// @Success 200 {string} string "{"success":true,"data":{},"msg":"查询成功"}"
// @Router /{{.Abbreviation}}/find{{.StructName}} [get]
export const find{{.StructName}} = (data) => {
export const find{{.StructName}} = (params) => {
return service({
url: "/{{.Abbreviation}}/find{{.StructName}}",
method: 'get',
@ -75,7 +75,7 @@ export const create{{.StructName}} = (data) => {
// @Param data body request.PageInfo true "分页获取{{.StructName}}列表"
// @Success 200 {string} string "{"success":true,"data":{},"msg":"获取成功"}"
// @Router /{{.Abbreviation}}/get{{.StructName}}List [get]
export const get{{.StructName}}List = (data) => {
export const get{{.StructName}}List = (params) => {
return service({
url: "/{{.Abbreviation}}/get{{.StructName}}List",
method: 'get',

155
server/resource/template/fe/table.vue.tpl

@ -0,0 +1,155 @@
<template>
<div>
<div class="search-term">
<el-form :inline="true" :model="searchInfo" class="demo-form-inline">
<!-- 此处可使用表单生成器生成搜索条件 -->
<el-form-item>
<el-button @click="openDialog" type="primary">新增</el-button>
</el-form-item>
</el-form>
</div>
<el-table
:data="tableData"
border
ref="multipleTable"
stripe
style="width: 100%"
tooltip-effect="dark"
>
<el-table-column type="selection" width="55"></el-table-column>
<el-table-column label="日期" width="180">
<template slot-scope="scope">{{ "{{scope.row.CreatedAt|formatDate}}" }}</template>
</el-table-column>
{{range .Fields}}
<el-table-column label="{{.FieldDesc}}" prop="{{.FieldJson}}" width="120"></el-table-column>
{{ end }}
<el-table-column label="按钮组">
<template slot-scope="scope">
<el-button @click="update{{.StructName}}(scope.row)" size="small" type="text">变更</el-button>
<el-popover placement="top" width="160" v-model="scope.row.visible">
<p>确定要删除吗?</p>
<div style="text-align: right; margin: 0">
<el-button size="mini" type="text" @click="scope.row.visible = false">取消</el-button>
<el-button type="primary" size="mini" @click="delete{{.StructName}}(scope.row)">确定</el-button>
</div>
<el-button type="text" size="mini" slot="reference">删除</el-button>
</el-popover>
</template>
</el-table-column>
</el-table>
<el-pagination
:current-page="page"
:page-size="pageSize"
:page-sizes="[10, 30, 50, 100]"
:style="{float:'right',padding:'20px'}"
:total="total"
@current-change="handleCurrentChange"
@size-change="handleSizeChange"
layout="total, sizes, prev, pager, next, jumper"
></el-pagination>
<el-dialog :before-close="closeDialog" :visible.sync="dialogFormVisible" title="弹窗操作">
<!-- 此处请使用表单生成器生成form填充 -->
<div class="dialog-footer" slot="footer">
<el-button @click="closeDialog">取 消</el-button>
<el-button @click="enterDialog" type="primary">确 定</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {
create{{.StructName}}
delete{{.StructName}}
update{{.StructName}}
find{{.StructName}}
get{{.StructName}}List
} from "@/api/{{.StructName}}"; // 此处请自行替换地址
import { formatTimeToStr } from "@/utils/data";
import infoList from "@/components/mixins/infoList";
export default {
name: "{{.StructName}}",
mixins: [infoList],
data() {
return {
listApi: get{{.StructName}}List,
dialogFormVisible: false,
visible: false,
type: "",
form: {
{{range .Fields}}{{.FieldJson}}:null,{{ end }}
}
};
},
filters: {
formatDate: function(time) {
if (time != null && time != "") {
var date = new Date(time);
return formatTimeToStr(date, "yyyy-MM-dd hh:mm:ss");
} else {
return "";
}
}
},
methods: {
async update{{.StructName}}(row) {
const res = await get{{.StructName}}({ ID: row.ID });
this.type = "update";
if (res.code == 0) {
this.form = res.data.re{{.Abbreviation}};
this.dialogFormVisible = true;
}
},
closeDialog() {
this.dialogFormVisible = false;
this.form = {
{{range .Fields}}
{{.FieldJson}}:null,{{ end }}
};
},
async delete{{.StructName}}(row) {
this.visible = false;
const res = await delete{{.StructName}}({ ID: row.ID });
if (res.code == 0) {
this.$message({
type: "success",
message: "删除成功"
});
this.getTableData();
}
},
async enterDialog() {
let res;
switch (this.type) {
case "create":
res = await create{{.StructName}}(this.form);
break;
case "update":
res = await update{{.StructName}}(this.form);
break;
default:
res = await create{{.StructName}}(this.form);
break;
}
if (res.code == 0) {
this.closeDialog();
this.getTableData();
}
},
openDialog() {
this.type = "create";
this.dialogFormVisible = true;
}
},
created() {
this.getTableData();
}
};
</script>
<style>
</style>

21
server/service/sys_auto_code.go

@ -3,8 +3,8 @@ package service
import (
"gin-vue-admin/model"
"gin-vue-admin/utils"
"html/template"
"os"
"text/template"
)
// @title CreateTemp
@ -35,6 +35,10 @@ func CreateTemp(autoCode model.AutoCodeStruct) (err error) {
if err != nil {
return err
}
feTableTmpl, err := template.ParseFiles(basePath + "/fe/table.vue.tpl")
if err != nil {
return err
}
readmeTmpl, err := template.ParseFiles(basePath + "/readme.txt.tpl")
if err != nil {
return err
@ -52,7 +56,8 @@ func CreateTemp(autoCode model.AutoCodeStruct) (err error) {
_fe := "./autoCode/fe/"
_fe_dir := _fe + autoCode.PackageName
_fe_apidir := _fe + autoCode.PackageName + "/api"
err = utils.CreateDir(_autoCode, _te, _dir, _modeldir, _apidir, _routerdir, _servicedir, _fe, _fe_dir, _fe_apidir)
_fe_tabledir := _fe + autoCode.PackageName + "/table"
err = utils.CreateDir(_autoCode, _te, _dir, _modeldir, _apidir, _routerdir, _servicedir, _fe, _fe_dir, _fe_apidir, _fe_tabledir)
if err != nil {
return err
}
@ -76,6 +81,11 @@ func CreateTemp(autoCode model.AutoCodeStruct) (err error) {
if err != nil {
return err
}
fetable, err := os.OpenFile(_fe+autoCode.PackageName+"/table/"+autoCode.PackageName+".vue", os.O_CREATE|os.O_WRONLY, 0755)
if err != nil {
return err
}
readme, err := os.OpenFile(_autoCode+"readme.txt", os.O_CREATE|os.O_WRONLY, 0755)
if err != nil {
return err
@ -102,6 +112,10 @@ func CreateTemp(autoCode model.AutoCodeStruct) (err error) {
if err != nil {
return err
}
err = feTableTmpl.Execute(fetable, autoCode)
if err != nil {
return err
}
err = readmeTmpl.Execute(readme, autoCode)
if err != nil {
return err
@ -112,6 +126,7 @@ func CreateTemp(autoCode model.AutoCodeStruct) (err error) {
_ = router.Close()
_ = service.Close()
_ = feapi.Close()
_ = fetable.Close()
_ = readme.Close()
fileList := []string{
_te + autoCode.PackageName + "/model/" + autoCode.PackageName + ".go",
@ -119,6 +134,8 @@ func CreateTemp(autoCode model.AutoCodeStruct) (err error) {
_te + autoCode.PackageName + "/router/" + autoCode.PackageName + ".go",
_te + autoCode.PackageName + "/service/" + autoCode.PackageName + ".go",
_fe + autoCode.PackageName + "/api/" + autoCode.PackageName + ".js",
_fe + autoCode.PackageName + "/table/" + autoCode.PackageName + ".vue",
_autoCode + "readme.txt",
}
err = utils.ZipFiles("./ginvueadmin.zip", fileList, ".", ".")

Loading…
Cancel
Save