代码生成增加service、Repository、Controller层
This commit is contained in:
parent
2d72257945
commit
8478df3a11
@ -37,7 +37,6 @@ namespace ZR.Admin.WebApi.Controllers
|
||||
/// <returns></returns>
|
||||
[HttpGet("GetListDataBase")]
|
||||
//[YuebonAuthorize("GetListDataBase")]
|
||||
//[NoPermissionRequired]
|
||||
public IActionResult GetListDataBase()
|
||||
{
|
||||
return SUCCESS(_CodeGeneraterService.GetAllDataBases());
|
||||
@ -53,12 +52,8 @@ namespace ZR.Admin.WebApi.Controllers
|
||||
[HttpGet("FindListTable")]
|
||||
public IActionResult FindListTable(string dbName, string tableName, PagerInfo pager)
|
||||
{
|
||||
if (string.IsNullOrEmpty(dbName))
|
||||
{
|
||||
dbName = "ZrAdmin";
|
||||
}
|
||||
List<SqlSugar.DbTableInfo> list = _CodeGeneraterService.GetAllTables(dbName, tableName, pager);
|
||||
var vm = new VMPageResult<SqlSugar.DbTableInfo>(list, pager);
|
||||
List<DbTableInfo> list = _CodeGeneraterService.GetAllTables(dbName, tableName, pager);
|
||||
var vm = new VMPageResult<DbTableInfo>(list, pager);
|
||||
|
||||
return SUCCESS(vm);
|
||||
}
|
||||
@ -81,7 +76,7 @@ namespace ZR.Admin.WebApi.Controllers
|
||||
}
|
||||
if (string.IsNullOrEmpty(baseSpace))
|
||||
{
|
||||
//baseSpace = "Zr";
|
||||
baseSpace = "ZR.Admin";
|
||||
}
|
||||
DbTableInfo dbTableInfo = new() { Name = tables };
|
||||
CodeGeneratorTool.Generate(dbName, baseSpace, dbTableInfo, replaceTableNameStr, true);
|
||||
|
||||
@ -10,13 +10,13 @@ namespace ZR.Admin.WebApi.Extensions
|
||||
{
|
||||
var types = source.GetType();
|
||||
|
||||
var worker = new IdWorker(1, 1);
|
||||
if (types.GetProperty("ID") != null)
|
||||
{
|
||||
long id = worker.NextId();
|
||||
//var worker = new IdWorker(1, 1);
|
||||
//if (types.GetProperty("ID") != null)
|
||||
//{
|
||||
// long id = worker.NextId();
|
||||
|
||||
types.GetProperty("ID").SetValue(source, id.ToString(), null);
|
||||
}
|
||||
// types.GetProperty("ID").SetValue(source, id.ToString(), null);
|
||||
//}
|
||||
|
||||
if (types.GetProperty("CreateTime") != null)
|
||||
{
|
||||
|
||||
124
ZR.Admin.WebApi/Template/ControllersTemplate.txt
Normal file
124
ZR.Admin.WebApi/Template/ControllersTemplate.txt
Normal file
@ -0,0 +1,124 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using ZR.Admin.WebApi.Filters;
|
||||
using ZR.Admin.WebApi.Controllers;
|
||||
using ZR.Service;
|
||||
using SqlSugar;
|
||||
using Infrastructure;
|
||||
using Infrastructure.Attribute;
|
||||
using Infrastructure.Enums;
|
||||
using Infrastructure.Model;
|
||||
using Mapster;
|
||||
using ZR.Admin.WebApi.Extensions;
|
||||
using ZR.Model;
|
||||
|
||||
namespace ZRAdmin.Controllers
|
||||
{
|
||||
/// <summary>
|
||||
/// T4代码自动生成
|
||||
/// </summary>
|
||||
|
||||
[Verify]
|
||||
[Route("bus/<#=ModelName#>")]
|
||||
public class <#=ControllerName#>Controller: BaseController
|
||||
{
|
||||
/// <summary>
|
||||
/// <#=FileName#>接口
|
||||
/// </summary>
|
||||
private readonly I<#=ServiceName#> _<#=ServiceName#>;
|
||||
|
||||
public <#=ControllerName#>Controller(I<#=ServiceName#> <#=ServiceName#>)
|
||||
{
|
||||
_<#=ServiceName#> = <#=ServiceName#>;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查询<#=FileName#>列表
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpGet("list")]
|
||||
[ActionPermissionFilter(Permission = "<#=ModelName#>:list")]
|
||||
public IActionResult Query([FromQuery] <#=ModelName#>QueryDto parm)
|
||||
{
|
||||
//开始拼装查询条件
|
||||
var predicate = Expressionable.Create<<#=ModelName#>>();
|
||||
|
||||
//TODO 搜索条件
|
||||
//predicate = predicate.And(m => m.Name.Contains(parm.Name));
|
||||
|
||||
var response = _<#=ServiceName#>.GetPages(predicate.ToExpression(), parm);
|
||||
|
||||
return SUCCESS(response);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查询<#=FileName#>详情
|
||||
/// </summary>
|
||||
/// <param name="{primaryKey}"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("{{primaryKey}}")]
|
||||
public IActionResult Get(int {primaryKey})
|
||||
{
|
||||
var response = _<#=ServiceName#>.GetId({primaryKey});
|
||||
|
||||
return SUCCESS(response);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 添加<#=FileName#>
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
[ActionPermissionFilter(Permission = "<#=ModelName#>:add")]
|
||||
[Log(Title = "<#=FileName#>添加", BusinessType = BusinessType.INSERT)]
|
||||
public IActionResult Create([FromBody] <#=ModelName#>Dto parm)
|
||||
{
|
||||
if (parm == null)
|
||||
{
|
||||
throw new CustomException("请求参数错误");
|
||||
}
|
||||
//从 Dto 映射到 实体
|
||||
var addModel = parm.Adapt<<#=ModelName#>>().ToCreate();
|
||||
//addModel.CreateID = User.Identity.Name;
|
||||
|
||||
return SUCCESS(_<#=ServiceName#>.Add(addModel));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更新<#=FileName#>
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPut("edit")]
|
||||
[ActionPermissionFilter(Permission = "<#=ModelName#>:update")]
|
||||
[Log(Title = "<#=FileName#>修改", BusinessType = BusinessType.UPDATE)]
|
||||
public IActionResult Update([FromBody] <#=ModelName#>Dto parm)
|
||||
{
|
||||
//从 Dto 映射到 实体
|
||||
var addModel = parm.Adapt<<#=ModelName#>>().ToCreate();
|
||||
//addModel.CreateID = User.Identity.Name;
|
||||
//TODO 字段映射
|
||||
var response = _<#=ServiceName#>.Update(addModel);
|
||||
|
||||
return SUCCESS(response);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 删除<#=FileName#>
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpDelete("{{primaryKey}}")]
|
||||
[ActionPermissionFilter(Permission = "<#=ModelName#>:delete")]
|
||||
[Log(Title = "<#=FileName#>删除", BusinessType = BusinessType.DELETE)]
|
||||
public IActionResult Delete(int {primaryKey} = 0)
|
||||
{
|
||||
if ({primaryKey} <= 0) { return OutputJson(ApiResult.Error($"删除失败Id 不能为空")); }
|
||||
|
||||
// 删除<#=FileName#>
|
||||
var response = _<#=ServiceName#>.Delete({primaryKey});
|
||||
|
||||
return SUCCESS(response);
|
||||
}
|
||||
}
|
||||
}
|
||||
13
ZR.Admin.WebApi/Template/IServiceTemplate.txt
Normal file
13
ZR.Admin.WebApi/Template/IServiceTemplate.txt
Normal file
@ -0,0 +1,13 @@
|
||||
using System;
|
||||
using ZR.Model.System;
|
||||
using ZR.Model;
|
||||
|
||||
namespace {IServicsNamespace}
|
||||
{
|
||||
/// <summary>
|
||||
/// 定义{TableNameDesc}服务接口
|
||||
/// </summary>
|
||||
public interface I{ModelTypeName}Service: IBaseService<{ModelTypeName}>
|
||||
{
|
||||
}
|
||||
}
|
||||
24
ZR.Admin.WebApi/Template/RepositoryTemplate.txt
Normal file
24
ZR.Admin.WebApi/Template/RepositoryTemplate.txt
Normal file
@ -0,0 +1,24 @@
|
||||
using System;
|
||||
using Infrastructure.Attribute;
|
||||
using {RepositoriesNamespace}.System;
|
||||
using {ModelsNamespace};
|
||||
|
||||
namespace {RepositoriesNamespace}
|
||||
{
|
||||
/// <summary>
|
||||
/// {TableNameDesc}仓储接口的实现
|
||||
/// </summary>
|
||||
[AppService(ServiceLifetime = LifeTime.Transient)]
|
||||
public class {ModelTypeName}Repository : BaseRepository
|
||||
{
|
||||
public {ModelTypeName}Repository()
|
||||
{
|
||||
}
|
||||
|
||||
#region 业务逻辑代码
|
||||
|
||||
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
28
ZR.Admin.WebApi/Template/ServiceTemplate.txt
Normal file
28
ZR.Admin.WebApi/Template/ServiceTemplate.txt
Normal file
@ -0,0 +1,28 @@
|
||||
using Infrastructure;
|
||||
using Infrastructure.Attribute;
|
||||
using Infrastructure.Extensions;
|
||||
using SqlSugar;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using ZR.Common;
|
||||
using ZR.Model;
|
||||
using ZR.Repository;
|
||||
using ZR.Service.IService;
|
||||
|
||||
namespace {ServicesNamespace}
|
||||
{
|
||||
/// <summary>
|
||||
/// {TableNameDesc}服务接口实现
|
||||
/// </summary>
|
||||
[AppService(ServiceType = typeof(I{ModelTypeName}Service), ServiceLifetime = LifeTime.Transient)]
|
||||
public class {ModelTypeName}Service: BaseService<{ModelTypeName}>, I{ModelTypeName}Service
|
||||
{
|
||||
private readonly {ModelTypeName}Repository _repository;
|
||||
public {ModelTypeName}Service({ModelTypeName}Repository repository)
|
||||
{
|
||||
_repository = repository;
|
||||
}
|
||||
}
|
||||
}
|
||||
85
ZR.Admin.WebApi/Template/VueJsTemplate.txt
Normal file
85
ZR.Admin.WebApi/Template/VueJsTemplate.txt
Normal file
@ -0,0 +1,85 @@
|
||||
import http from '@/utils/request'
|
||||
import defaultSettings from '@/settings'
|
||||
|
||||
/**
|
||||
* {ModelTypeDesc}分页查询
|
||||
* @param {查询条件} data
|
||||
*/
|
||||
export function get{ModelTypeName}ListWithPager(data) {
|
||||
return http.request({
|
||||
url: '{ModelTypeName}/FindWithPagerAsync',
|
||||
method: 'post',
|
||||
data: data,
|
||||
baseURL: defaultSettings.api{fileClassName}Url // 直接通过覆盖的方式
|
||||
})
|
||||
}/**
|
||||
* 获取所有可用的{ModelTypeDesc}
|
||||
*/
|
||||
export function getAll{ModelTypeName}List() {
|
||||
return http.request({
|
||||
url: '{ModelTypeName}/GetAllEnable',
|
||||
method: 'get',
|
||||
baseURL: defaultSettings.api{fileClassName}Url // 直接通过覆盖的方式
|
||||
})
|
||||
}
|
||||
/**
|
||||
* 新增或修改保存{ModelTypeDesc}
|
||||
* @param data
|
||||
*/
|
||||
export function save{ModelTypeName}(data, url) {
|
||||
return http.request({
|
||||
url: url,
|
||||
method: 'post',
|
||||
data: data,
|
||||
baseURL: defaultSettings.api{fileClassName}Url // 直接通过覆盖的方式
|
||||
})
|
||||
}
|
||||
/**
|
||||
* 获取{ModelTypeDesc}详情
|
||||
* @param {Id} {ModelTypeDesc}Id
|
||||
*/
|
||||
export function get{ModelTypeName}Detail(id) {
|
||||
return http({
|
||||
url: '{ModelTypeName}/GetById',
|
||||
method: 'get',
|
||||
params: { id: id },
|
||||
baseURL: defaultSettings.api{fileClassName}Url // 直接通过覆盖的方式
|
||||
})
|
||||
}
|
||||
/**
|
||||
* 批量设置启用状态
|
||||
* @param {id集合} ids
|
||||
*/
|
||||
export function set{ModelTypeName}Enable(data) {
|
||||
return http({
|
||||
url: '{ModelTypeName}/SetEnabledMarktBatchAsync',
|
||||
method: 'post',
|
||||
data: data,
|
||||
baseURL: defaultSettings.api{fileClassName}Url // 直接通过覆盖的方式
|
||||
})
|
||||
}
|
||||
/**
|
||||
* 批量软删除
|
||||
* @param {id集合} ids
|
||||
*/
|
||||
export function deleteSoft{ModelTypeName}(data) {
|
||||
return http({
|
||||
url: '{ModelTypeName}/DeleteSoftBatchAsync',
|
||||
method: 'post',
|
||||
data: data,
|
||||
baseURL: defaultSettings.api{fileClassName}Url // 直接通过覆盖的方式
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除
|
||||
* @param {id集合} ids
|
||||
*/
|
||||
export function delete{ModelTypeName}(data) {
|
||||
return http({
|
||||
url: '{ModelTypeName}/DeleteBatchAsync',
|
||||
method: 'delete',
|
||||
data: data,
|
||||
baseURL: defaultSettings.api{fileClassName}Url // 直接通过覆盖的方式
|
||||
})
|
||||
}
|
||||
249
ZR.Admin.WebApi/Template/VueTemplate.txt
Normal file
249
ZR.Admin.WebApi/Template/VueTemplate.txt
Normal file
@ -0,0 +1,249 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-row :gutter="24">
|
||||
<!-- :model属性用于表单验证使用 比如下面的el-form-item 的 prop属性用于对表单值进行验证操作 -->
|
||||
<el-form :model="queryParams" label-position="left" inline ref="queryForm" :label-width="labelWidth" v-show="showSearch" @submit.native.prevent>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="文本文字">
|
||||
<el-input v-model="queryParams.xxx" placeholder="" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="数字">
|
||||
<el-input v-model.number="queryParams.xxx" placeholder="" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="下拉框">
|
||||
<el-select v-model="queryParams.xxx" placeholder="">
|
||||
<el-option v-for="dict in statusOptions" :key="dict.dictValue" :label="dict.dictLabel" :value="dict.dictValue" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="时间范围">
|
||||
<el-date-picker size="small" style="width: 240px" v-model="timeRange" value-format="yyyy-MM-dd" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24" style="text-align:center;">
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-col>
|
||||
</el-form>
|
||||
</el-row>
|
||||
|
||||
<!-- 工具区域 -->
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" v-hasPermi="['{ModelTypeName}:add']" plain icon="el-icon-plus" size="mini" @click="handleAdd">新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="success" v-hasPermi="['{ModelTypeName}:update']" plain icon="el-icon-edit" size="mini" @click="handleUpdate">修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="danger" v-hasPermi="['{ModelTypeName}:delete']" plain icon="el-icon-delete" size="mini" @click="handleDelete">删除</el-button>
|
||||
</el-col>
|
||||
<!-- <el-col :span="1.5">
|
||||
<el-button type="info" plain icon="el-icon-upload2" size="mini" @click="handleImport">导入</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport">导出</el-button>
|
||||
</el-col> -->
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<!-- 数据区域 -->
|
||||
<el-table :data="dataList" ref="table" border @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="50" />
|
||||
{VueViewListContent}
|
||||
<el-table-column label="操作" align="center" width="200">
|
||||
<template slot-scope="scope">
|
||||
<el-button size="mini" type="text" icon="el-icon-view" @click="handleView(scope.row)">详情</el-button>
|
||||
<el-button size="mini" v-hasPermi="['{ModelTypeName}:update']" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)">编辑</el-button>
|
||||
<el-popconfirm title="确定删除吗?" @onConfirm="handleDelete(scope.row)" style="margin-left:10px">
|
||||
<el-button slot="reference" v-hasPermi="['{ModelTypeName}:del']" size="mini" type="text" icon="el-icon-delete">删除</el-button>
|
||||
</el-popconfirm>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<pagination :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
|
||||
|
||||
<!-- 添加或修改菜单对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
{VueViewFromContent}
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer" v-if="btnSubmitVisible">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
// import { list{ModelTypeName},Add{ModelTypeName},Del{ModelTypeName},Edit{ModelTypeName} } from '@/api/{ModelTypeName}.js'
|
||||
|
||||
export default {
|
||||
name: '{ModelTypeName}',
|
||||
data() {
|
||||
return {
|
||||
labelWidth: "70px",
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 查询参数
|
||||
queryParams: {},
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 时间范围数组
|
||||
timeRange: [],
|
||||
// xxx下拉框
|
||||
statusOptions: [],
|
||||
// 数据列表
|
||||
dataList: [],
|
||||
// 总记录数
|
||||
total: 0,
|
||||
// 提交按钮是否显示
|
||||
btnSubmitVisible: true,
|
||||
// 表单校验
|
||||
rules: {
|
||||
name: [{ required: true, message: "名称不能为空", trigger: "blur" }],
|
||||
userId: [
|
||||
{
|
||||
type: "number",
|
||||
required: true,
|
||||
message: "id不能为空,且不能为非数字",
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
},
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
// 列表数据查询
|
||||
this.getList();
|
||||
// 下拉框绑定
|
||||
// this.getDicts("sys_normal_disable").then((response) => {
|
||||
// this.statusOptions = response.data;
|
||||
// });
|
||||
},
|
||||
methods: {
|
||||
// 查询数据
|
||||
getList() {
|
||||
console.log(JSON.stringify(this.queryParams));
|
||||
list{ModelTypeName}(this.addDateRange(this.queryParams, this.timeRange)).then(res => {
|
||||
if (res.code == 200) {
|
||||
this.dataList = res.data.result;
|
||||
this.total = res.data.totalCount;
|
||||
}
|
||||
})
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false;
|
||||
this.reset();
|
||||
},
|
||||
// 重置数据表单
|
||||
reset() {
|
||||
this.form = {
|
||||
{VueViewEditFromContent}
|
||||
//需个性化处理内容
|
||||
};
|
||||
this.resetForm("form");
|
||||
},
|
||||
/** 重置查询操作 */
|
||||
resetQuery() {
|
||||
this.timeRange = [];
|
||||
this.resetForm("queryForm");
|
||||
this.queryParams = {
|
||||
pageNum: 1,
|
||||
//TODO 重置字段
|
||||
};
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map((item) => item.{primaryKey});
|
||||
this.multiple = !selection.length;
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.getList();
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset();
|
||||
this.open = true;
|
||||
this.title = "添加";
|
||||
|
||||
//TODO 业务代码
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
del{ModelTypeName}().then((res) => {
|
||||
this.msgSuccess("删除成功");
|
||||
this.handleQuery();
|
||||
});
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset();
|
||||
this.open = true;
|
||||
this.title = "编辑";
|
||||
//TODO 业务代码
|
||||
console.log(JSON.stringify(row));
|
||||
|
||||
// TODO 给表单赋值
|
||||
this.form = {
|
||||
content: row.content,
|
||||
userId: row.userId,
|
||||
name: row.name,
|
||||
sortId: row.sortId,
|
||||
};
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm: function () {
|
||||
this.$refs["form"].validate((valid) => {
|
||||
if (valid) {
|
||||
console.log(JSON.stringify(this.form));
|
||||
// TODO 记得改成表的主键
|
||||
if (this.form.{primaryKey} != undefined) {
|
||||
//TODO 编辑业务代码
|
||||
} else {
|
||||
//TODO 新增业务代码
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
// 详情
|
||||
handleView(row) {
|
||||
this.open = true;
|
||||
this.title = "详情";
|
||||
// TODO 给表单赋值
|
||||
this.form = {
|
||||
content: row.content,
|
||||
userId: row.userId,
|
||||
name: row.name,
|
||||
sortId: row.sortId,
|
||||
};
|
||||
},
|
||||
handleImport() {},
|
||||
handleExport() {},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style scoped>
|
||||
.table-td-thumb {
|
||||
width: 80px;
|
||||
}
|
||||
</style>
|
||||
@ -57,12 +57,30 @@
|
||||
<Generator>TextTemplatingFileGenerator</Generator>
|
||||
<LastGenOutput>Controller.cs</LastGenOutput>
|
||||
</None>
|
||||
<None Update="Template\ControllersTemplate.txt">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="Template\InputDtoTemplate.txt">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="Template\IServiceTemplate.txt">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="Template\ModelTemplate.txt">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="Template\RepositoryTemplate.txt">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="Template\ServiceTemplate.txt">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="Template\VueJsTemplate.txt">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="Template\VueTemplate.txt">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
@ -70,6 +88,16 @@
|
||||
<Folder Include="wwwroot\" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Resource Include="Template\RepositoryTemplate.txt" />
|
||||
<Resource Include="Template\ServiceTemplate.txt">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Resource>
|
||||
<Resource Include="Template\VueJsTemplate.txt">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Resource>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Service Include="{508349b6-6b84-4df5-91f0-309beebad82d}" />
|
||||
</ItemGroup>
|
||||
|
||||
@ -7,7 +7,8 @@
|
||||
}
|
||||
},
|
||||
"ConnectionStrings": {
|
||||
"Conn_Admin": "server=127.0.0.1;database=admin;user=zr;pwd=abc"
|
||||
"Conn_Admin": "server=127.0.0.1,1433;database=admin;user=admin;pwd=abc",
|
||||
"ConnDynamic": "server=127.0.0.1,1433;uid=dev_test;Password=%54Gz@cn;database={database}"
|
||||
},
|
||||
"urls": "http://localhost:8888",
|
||||
"sysConfig": {
|
||||
|
||||
@ -43,9 +43,9 @@ namespace ZR.CodeGenerator
|
||||
_option.ModelsNamespace = baseNamespace + "ZR.Model";
|
||||
//_option.IRepositoriesNamespace = baseNamespace + ".IRepositorie";
|
||||
_option.RepositoriesNamespace = baseNamespace + "ZR.Repository";
|
||||
//_option.IServicsNamespace = baseNamespace + ".IService";
|
||||
_option.IServicsNamespace = baseNamespace + "ZR.Service";
|
||||
_option.ServicesNamespace = baseNamespace + "ZR.Service";
|
||||
_option.ApiControllerNamespace = baseNamespace + "Api";
|
||||
_option.ApiControllerNamespace = baseNamespace + "ZR.Admin.WebApi";
|
||||
_option.ReplaceTableNameStr = replaceTableNameStr;
|
||||
//_option.TableList = listTable;
|
||||
|
||||
@ -88,6 +88,7 @@ namespace ZR.CodeGenerator
|
||||
var modelsNamespace = _option.ModelsNamespace;
|
||||
var modelTypeName = GetModelName(tableInfo.Name); ;//表名
|
||||
var modelTypeDesc = tableInfo.Description;//表描述
|
||||
var primaryKey = "id";//主键
|
||||
|
||||
string keyTypeName = "string";//主键数据类型
|
||||
string modelcontent = "";//数据库模型字段
|
||||
@ -111,6 +112,7 @@ namespace ZR.CodeGenerator
|
||||
modelcontent += " /// </summary>\n";
|
||||
if (dbFieldInfo.IsIdentity || dbFieldInfo.IsPrimarykey)
|
||||
{
|
||||
primaryKey = columnName;
|
||||
modelcontent += $" [SqlSugar.SugarColumn(IsPrimaryKey = {dbFieldInfo.IsPrimarykey.ToString().ToLower()}, IsIdentity = {dbFieldInfo.IsIdentity.ToString().ToLower()})]\n";
|
||||
}
|
||||
modelcontent += $" public {TableMappingHelper.GetPropertyDatatype(dbFieldInfo.DataType)} {columnName} {{ get; set; }}\n\r";
|
||||
@ -121,39 +123,43 @@ namespace ZR.CodeGenerator
|
||||
//}
|
||||
//outputDtocontent += string.Format(" public {0} {1}", dbFieldInfo.DataType, columnName);
|
||||
//outputDtocontent += " { get; set; }\n\r";
|
||||
//if (dbFieldInfo.DataType == "bool" || dbFieldInfo.DataType == "tinyint")
|
||||
//{
|
||||
if (dbFieldInfo.DataType == "bool" || dbFieldInfo.DataType == "tinyint")
|
||||
{
|
||||
|
||||
// vueViewListContent += string.Format(" <el-table-column prop=\"{0}\" label=\"{1}\" sortable=\"custom\" width=\"120\" >\n", columnName, dbFieldInfo.ColumnDescription);
|
||||
// vueViewListContent += " <template slot-scope=\"scope\">\n";
|
||||
// vueViewListContent += string.Format(" <el-tag :type=\"scope.row.{0} === true ? 'success' : 'info'\" disable-transitions >", columnName);
|
||||
// vueViewListContent += "{{ ";
|
||||
// vueViewListContent += string.Format("scope.row.{0}===true?'启用':'禁用' ", columnName);
|
||||
// vueViewListContent += "}}</el-tag>\n";
|
||||
// vueViewListContent += " </template>\n";
|
||||
// vueViewListContent += " </el-table-column>\n";
|
||||
vueViewListContent += string.Format(" <el-table-column prop=\"{0}\" label=\"{1}\" sortable=\"custom\" width=\"120\" >\n", columnName, dbFieldInfo.ColumnDescription);
|
||||
vueViewListContent += " <template slot-scope=\"scope\">\n";
|
||||
vueViewListContent += string.Format(" <el-tag :type=\"scope.row.{0} === true ? 'success' : 'info'\" disable-transitions >", columnName);
|
||||
vueViewListContent += "{{ ";
|
||||
vueViewListContent += string.Format("scope.row.{0}===true?'启用':'禁用' ", columnName);
|
||||
vueViewListContent += "}}</el-tag>\n";
|
||||
vueViewListContent += " </template>\n";
|
||||
vueViewListContent += " </el-table-column>\n";
|
||||
|
||||
// vueViewFromContent += string.Format(" <el-form-item label=\"{0}\" :label-width=\"formLabelWidth\" prop=\"{1}\">", dbFieldInfo.ColumnDescription, columnName);
|
||||
// vueViewFromContent += string.Format(" <el-radio-group v-model=\"editFrom.{0}\">\n", columnName);
|
||||
// vueViewFromContent += " <el-radio label=\"true\">是</el-radio>\n";
|
||||
// vueViewFromContent += " <el-radio label=\"false\">否</el-radio>\n";
|
||||
// vueViewFromContent += " </el-radio-group>\n";
|
||||
// vueViewFromContent += " </el-form-item>\n";
|
||||
vueViewFromContent += string.Format(" <el-form-item label=\"{0}\" :label-width=\"labelWidth\" prop=\"{1}\">", dbFieldInfo.ColumnDescription, columnName);
|
||||
vueViewFromContent += string.Format(" <el-radio-group v-model=\"editFrom.{0}\">\n", columnName);
|
||||
vueViewFromContent += " <el-radio label=\"true\">是</el-radio>\n";
|
||||
vueViewFromContent += " <el-radio label=\"false\">否</el-radio>\n";
|
||||
vueViewFromContent += " </el-radio-group>\n";
|
||||
vueViewFromContent += " </el-form-item>\n";
|
||||
|
||||
// vueViewEditFromContent += string.Format(" {0}: 'true',\n", columnName);
|
||||
// vueViewEditFromBindContent += string.Format(" this.editFrom.{0} = res.ResData.{0}+''\n", columnName);
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// vueViewListContent += string.Format(" <el-table-column prop=\"{0}\" label=\"{1}\" sortable=\"custom\" width=\"120\" />\n", columnName, dbFieldInfo.ColumnDescription);
|
||||
vueViewEditFromContent += string.Format(" {0}: 'true',\n", columnName);
|
||||
vueViewEditFromBindContent += string.Format(" this.editFrom.{0} = res.data.{0}+''\n", columnName);
|
||||
}
|
||||
else
|
||||
{
|
||||
//table-column
|
||||
vueViewListContent += $" <el-table-column prop=\"{FirstLowerCase(columnName)}\" label=\"{GetLabelName(dbFieldInfo.ColumnDescription, columnName)}\" />\n";
|
||||
|
||||
// vueViewFromContent += string.Format(" <el-form-item label=\"{0}\" :label-width=\"formLabelWidth\" prop=\"{1}\">\n", dbFieldInfo.ColumnDescription, columnName);
|
||||
// vueViewFromContent += string.Format(" <el-input v-model=\"editFrom.{0}\" placeholder=\"请输入{1}\" autocomplete=\"off\" clearable />\n", columnName, dbFieldInfo.ColumnDescription);
|
||||
// vueViewFromContent += " </el-form-item>\n";
|
||||
// vueViewEditFromContent += string.Format(" {0}: '',\n", columnName);
|
||||
// vueViewEditFromBindContent += string.Format(" this.editFrom.{0} = res.ResData.{0}\n", columnName);
|
||||
//}
|
||||
//form-item
|
||||
vueViewFromContent += $" <el-form-item label=\"{ GetLabelName(dbFieldInfo.ColumnDescription, columnName)}\" :label-width=\"labelWidth\" prop=\"{FirstLowerCase(columnName)}\">\n";
|
||||
vueViewFromContent += $" <el-input v-model=\"form.{FirstLowerCase(columnName)}\" placeholder=\"请输入{GetLabelName(dbFieldInfo.ColumnDescription, columnName)}\" clearable />\n";
|
||||
vueViewFromContent += " </el-form-item>\n";
|
||||
vueViewEditFromContent += string.Format(" {0}: '',\n", columnName);
|
||||
vueViewEditFromBindContent += string.Format(" this.editFrom.{0} = res.ResData.{0}\n", columnName);
|
||||
}
|
||||
//vueViewSaveBindContent += string.Format(" '{0}':this.editFrom.{0},\n", columnName);
|
||||
|
||||
//Rule 规则验证
|
||||
//if (!dbFieldInfo.IsNullable)
|
||||
//{
|
||||
// vueViewEditFromRuleContent += string.Format(" {0}: [\n", columnName);
|
||||
@ -169,23 +175,20 @@ namespace ZR.CodeGenerator
|
||||
InputDtocontent += " /// <summary>\n";
|
||||
InputDtocontent += string.Format(" /// 设置或获取{0}\n", dbFieldInfo.ColumnDescription);
|
||||
InputDtocontent += " /// </summary>\n";
|
||||
//if (dbFieldInfo.FieldType == "string")
|
||||
//{
|
||||
// InputDtocontent += string.Format(" [MaxLength({0})]\n", dbFieldInfo.FieldMaxLength);
|
||||
//}
|
||||
InputDtocontent += $" public {TableMappingHelper.GetPropertyDatatype(dbFieldInfo.DataType)} {columnName} {{ get; set; }}\n\r";
|
||||
//}
|
||||
//
|
||||
}
|
||||
GenerateModels(modelsNamespace, modelTypeName, tableInfo.Name, modelcontent, modelTypeDesc, keyTypeName, ifExsitedCovered);
|
||||
GenerateInputDto(modelsNamespace, modelTypeName, modelTypeDesc, InputDtocontent, keyTypeName, ifExsitedCovered);
|
||||
//GenerateIRepository(modelTypeName, modelTypeDesc, keyTypeName, ifExsitedCovered);
|
||||
//GenerateRepository(modelTypeName, modelTypeDesc, tableInfo.TableName, keyTypeName, ifExsitedCovered);
|
||||
//GenerateModels(modelsNamespace, modelTypeName, tableInfo.Name, modelcontent, modelTypeDesc, keyTypeName, ifExsitedCovered);
|
||||
//GenerateInputDto(modelsNamespace, modelTypeName, modelTypeDesc, InputDtocontent, keyTypeName, ifExsitedCovered);
|
||||
//GenerateRepository(modelTypeName, modelTypeDesc, tableInfo.Name, keyTypeName, ifExsitedCovered);
|
||||
//GenerateIService(modelsNamespace, modelTypeName, modelTypeDesc, keyTypeName, ifExsitedCovered);
|
||||
//GenerateService(modelsNamespace, modelTypeName, modelTypeDesc, keyTypeName, ifExsitedCovered);
|
||||
//GenerateControllers(modelTypeName, primaryKey, modelTypeDesc, keyTypeName, ifExsitedCovered);
|
||||
|
||||
//GenerateIRepository(modelTypeName, modelTypeDesc, keyTypeName, ifExsitedCovered);
|
||||
//GenerateOutputDto(modelTypeName, modelTypeDesc, outputDtocontent, ifExsitedCovered);
|
||||
//GenerateControllers(modelTypeName, modelTypeDesc, keyTypeName, ifExsitedCovered);
|
||||
//GenerateVueViews(modelTypeName, modelTypeDesc, vueViewListContent, vueViewFromContent, vueViewEditFromContent, vueViewEditFromBindContent, vueViewSaveBindContent, vueViewEditFromRuleContent, ifExsitedCovered);
|
||||
GenerateVueViews(modelTypeName, primaryKey, modelTypeDesc, vueViewListContent, vueViewFromContent, vueViewEditFromContent, vueViewEditFromBindContent, vueViewSaveBindContent, vueViewEditFromRuleContent, ifExsitedCovered);
|
||||
}
|
||||
|
||||
|
||||
@ -261,6 +264,210 @@ namespace ZR.CodeGenerator
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 生成Repository
|
||||
|
||||
/// <summary>
|
||||
/// 生成Repository层代码文件
|
||||
/// </summary>
|
||||
/// <param name="modelTypeName"></param>
|
||||
/// <param name="modelTypeDesc"></param>
|
||||
/// <param name="tableName">表名</param>
|
||||
/// <param name="keyTypeName"></param>
|
||||
/// <param name="ifExsitedCovered">如果目标文件存在,是否覆盖。默认为false</param>
|
||||
private static void GenerateRepository(string modelTypeName, string modelTypeDesc, string tableName, string keyTypeName, bool ifExsitedCovered = false)
|
||||
{
|
||||
//var path = AppDomain.CurrentDomain.BaseDirectory;
|
||||
var parentPath = "..";// path.Substring(0, path.LastIndexOf("\\"));
|
||||
var repositoryPath = parentPath + "\\" + _option.BaseNamespace + "\\" + _option.RepositoriesNamespace;
|
||||
if (!Directory.Exists(repositoryPath))
|
||||
{
|
||||
//repositoryPath = parentPath + "\\" + _option.BaseNamespace + "\\Repositories";
|
||||
Directory.CreateDirectory(repositoryPath);
|
||||
}
|
||||
var fullPath = repositoryPath + "\\" + modelTypeName + "Repository.cs";
|
||||
if (File.Exists(fullPath) && !ifExsitedCovered)
|
||||
return;
|
||||
var content = ReadTemplate("RepositoryTemplate.txt");
|
||||
content = content.Replace("{ModelsNamespace}", _option.ModelsNamespace)
|
||||
.Replace("{IRepositoriesNamespace}", _option.IRepositoriesNamespace)
|
||||
.Replace("{RepositoriesNamespace}", _option.RepositoriesNamespace)
|
||||
.Replace("{ModelTypeName}", modelTypeName)
|
||||
.Replace("{TableNameDesc}", modelTypeDesc)
|
||||
.Replace("{TableName}", tableName)
|
||||
.Replace("{KeyTypeName}", keyTypeName);
|
||||
WriteAndSave(fullPath, content);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region 生成Service
|
||||
/// <summary>
|
||||
/// 生成IService文件
|
||||
/// </summary>
|
||||
/// <param name="modelsNamespace"></param>
|
||||
/// <param name="modelTypeName"></param>
|
||||
/// <param name="modelTypeDesc"></param>
|
||||
/// <param name="keyTypeName"></param>
|
||||
/// <param name="ifExsitedCovered">如果目标文件存在,是否覆盖。默认为false</param>
|
||||
private static void GenerateIService(string modelsNamespace, string modelTypeName, string modelTypeDesc, string keyTypeName, bool ifExsitedCovered = false)
|
||||
{
|
||||
//var path = AppDomain.CurrentDomain.BaseDirectory;
|
||||
//path = path.Substring(0, path.IndexOf("\\bin"));
|
||||
var parentPath = "..";// path.Substring(0, path.LastIndexOf("\\"));
|
||||
var iServicesPath = parentPath + "\\" + _option.BaseNamespace + "\\" + _option.IServicsNamespace;
|
||||
if (!Directory.Exists(iServicesPath))
|
||||
{
|
||||
iServicesPath = parentPath + "\\" + _option.BaseNamespace + "\\IBusService";
|
||||
Directory.CreateDirectory(iServicesPath);
|
||||
}
|
||||
var fullPath = $"{iServicesPath}\\Business\\IService\\I{modelTypeName}Service.cs";
|
||||
if (File.Exists(fullPath) && !ifExsitedCovered)
|
||||
return;
|
||||
var content = ReadTemplate("IServiceTemplate.txt");
|
||||
content = content.Replace("{ModelsNamespace}", modelsNamespace)
|
||||
.Replace("{DtosNamespace}", _option.DtosNamespace)
|
||||
.Replace("{TableNameDesc}", modelTypeDesc)
|
||||
.Replace("{IServicsNamespace}", _option.IServicsNamespace)
|
||||
.Replace("{ModelTypeName}", modelTypeName)
|
||||
.Replace("{KeyTypeName}", keyTypeName);
|
||||
WriteAndSave(fullPath, content);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 生成Service文件
|
||||
/// </summary>
|
||||
/// <param name="modelsNamespace"></param>
|
||||
/// <param name="modelTypeName"></param>
|
||||
/// <param name="modelTypeDesc"></param>
|
||||
/// <param name="keyTypeName"></param>
|
||||
/// <param name="ifExsitedCovered">如果目标文件存在,是否覆盖。默认为false</param>
|
||||
private static void GenerateService(string modelsNamespace, string modelTypeName, string modelTypeDesc, string keyTypeName, bool ifExsitedCovered = false)
|
||||
{
|
||||
//var path = AppDomain.CurrentDomain.BaseDirectory;
|
||||
//path = path.Substring(0, path.IndexOf("\\bin"));
|
||||
var parentPath = "..";// path.Substring(0, path.LastIndexOf("\\"));
|
||||
var servicesPath = parentPath + "\\" + _option.BaseNamespace + "\\" + _option.ServicesNamespace;
|
||||
if (!Directory.Exists(servicesPath))
|
||||
{
|
||||
servicesPath = parentPath + "\\" + _option.BaseNamespace + "\\Business";
|
||||
Directory.CreateDirectory(servicesPath);
|
||||
}
|
||||
var fullPath = servicesPath + "\\Business\\" + modelTypeName + "Service.cs";
|
||||
Console.WriteLine(fullPath);
|
||||
if (File.Exists(fullPath) && !ifExsitedCovered)
|
||||
return;
|
||||
var content = ReadTemplate("ServiceTemplate.txt");
|
||||
content = content
|
||||
.Replace("{IRepositoriesNamespace}", _option.IRepositoriesNamespace)
|
||||
.Replace("{DtosNamespace}", _option.DtosNamespace)
|
||||
.Replace("{IServicsNamespace}", _option.IServicsNamespace)
|
||||
.Replace("{TableNameDesc}", modelTypeDesc)
|
||||
.Replace("{ModelsNamespace}", modelsNamespace)
|
||||
.Replace("{ServicesNamespace}", _option.ServicesNamespace)
|
||||
.Replace("{ModelTypeName}", modelTypeName)
|
||||
.Replace("{KeyTypeName}", keyTypeName);
|
||||
WriteAndSave(fullPath, content);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region 生成Controller
|
||||
/// <summary>
|
||||
/// 生成控制器ApiControllers文件
|
||||
/// </summary>
|
||||
/// <param name="modelTypeName">实体类型名称</param>
|
||||
/// <param name="primaryKey">主键</param>
|
||||
/// <param name="modelTypeDesc">实体描述</param>
|
||||
/// <param name="keyTypeName"></param>
|
||||
/// <param name="ifExsitedCovered">如果目标文件存在,是否覆盖。默认为false</param>
|
||||
private static void GenerateControllers(string modelTypeName, string primaryKey, string modelTypeDesc, string keyTypeName, bool ifExsitedCovered = false)
|
||||
{
|
||||
//var servicesNamespace = _option.DtosNamespace;
|
||||
//var fileClassName = _option.BaseNamespace.Substring(_option.BaseNamespace.IndexOf('.') + 1);
|
||||
//var path = AppDomain.CurrentDomain.BaseDirectory;
|
||||
//path = path.Substring(0, path.IndexOf("\\bin"));
|
||||
var parentPath = "..";//path.Substring(0, path.LastIndexOf("\\"));
|
||||
var servicesPath = parentPath + "\\" + _option.BaseNamespace + "\\" + _option.ApiControllerNamespace;
|
||||
if (!Directory.Exists(servicesPath))
|
||||
{
|
||||
servicesPath = parentPath + "\\" + _option.BaseNamespace + "\\Controllers\\";
|
||||
Directory.CreateDirectory(servicesPath);
|
||||
}
|
||||
var fullPath = servicesPath + "\\Controllers\\business\\" + modelTypeName + "Controller.cs";
|
||||
Console.WriteLine(fullPath);
|
||||
if (File.Exists(fullPath) && !ifExsitedCovered)
|
||||
return;
|
||||
var content = ReadTemplate("ControllersTemplate.txt");
|
||||
content = content
|
||||
//.Replace("{DtosNamespace}", _option.DtosNamespace)
|
||||
.Replace("<#=ControllerName#>", modelTypeName)
|
||||
//.Replace("{ModelsNamespace}", _option.ModelsNamespace)
|
||||
.Replace("<#=FileName#>", modelTypeDesc)
|
||||
.Replace("<#=ServiceName#>", modelTypeName + "Service")
|
||||
.Replace("<#=ModelName#>", modelTypeName)
|
||||
.Replace("{primaryKey}", primaryKey)
|
||||
.Replace("{KeyTypeName}", keyTypeName);
|
||||
WriteAndSave(fullPath, content);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 生成Vue页面
|
||||
/// <summary>
|
||||
/// 生成Vue页面
|
||||
/// </summary>
|
||||
/// <param name="modelTypeName">类名</param>
|
||||
/// <param name="modelTypeDesc">表/类描述</param>
|
||||
/// <param name="vueViewListContent"></param>
|
||||
/// <param name="vueViewFromContent"></param>
|
||||
/// <param name="vueViewEditFromContent"></param>
|
||||
/// <param name="vueViewEditFromBindContent"></param>
|
||||
/// <param name="vueViewSaveBindContent"></param>
|
||||
/// <param name="vueViewEditFromRuleContent"></param>
|
||||
/// <param name="ifExsitedCovered">如果目标文件存在,是否覆盖。默认为false</param>
|
||||
private static void GenerateVueViews(string modelTypeName, string primaryKey, string modelTypeDesc, string vueViewListContent, string vueViewFromContent, string vueViewEditFromContent, string vueViewEditFromBindContent, string vueViewSaveBindContent, string vueViewEditFromRuleContent, bool ifExsitedCovered = false)
|
||||
{
|
||||
var servicesNamespace = _option.DtosNamespace;
|
||||
var fileClassName = _option.BaseNamespace.Substring(_option.BaseNamespace.IndexOf('.') + 1);
|
||||
var path = AppDomain.CurrentDomain.BaseDirectory;
|
||||
//path = path.Substring(0, path.IndexOf("\\bin"));
|
||||
var parentPath = path.Substring(0, path.LastIndexOf("\\"));
|
||||
var servicesPath = parentPath + "\\" + _option.BaseNamespace + "\\" + servicesNamespace;
|
||||
if (!Directory.Exists(servicesPath))
|
||||
{
|
||||
servicesPath = parentPath + "\\" + _option.BaseNamespace + "\\vue\\" + modelTypeName.ToLower();
|
||||
Directory.CreateDirectory(servicesPath);
|
||||
}
|
||||
var fullPath = servicesPath + "\\" + "index.vue";
|
||||
if (File.Exists(fullPath) && !ifExsitedCovered)
|
||||
return;
|
||||
var content = ReadTemplate("VueTemplate.txt");
|
||||
content = content
|
||||
.Replace("{BaseNamespace}", fileClassName.ToLower())
|
||||
.Replace("{fileClassName}", modelTypeName.ToLower())
|
||||
.Replace("{ModelTypeNameToLower}", modelTypeName.ToLower())
|
||||
.Replace("{VueViewListContent}", vueViewListContent)
|
||||
.Replace("{VueViewFromContent}", vueViewFromContent)
|
||||
.Replace("{ModelTypeName}", modelTypeName)
|
||||
.Replace("{VueViewEditFromContent}", vueViewEditFromContent)
|
||||
.Replace("{VueViewEditFromBindContent}", vueViewEditFromBindContent)
|
||||
.Replace("{VueViewSaveBindContent}", vueViewSaveBindContent)
|
||||
.Replace("{primaryKey}", primaryKey)
|
||||
.Replace("{VueViewEditFromRuleContent}", vueViewEditFromRuleContent);
|
||||
WriteAndSave(fullPath, content);
|
||||
|
||||
fullPath = servicesPath + "\\" + modelTypeName.ToLower() + ".js";
|
||||
if (File.Exists(fullPath) && !ifExsitedCovered)
|
||||
return;
|
||||
content = ReadTemplate("VueJsTemplate.txt");
|
||||
content = content
|
||||
.Replace("{ModelTypeName}", modelTypeName)
|
||||
.Replace("{ModelTypeDesc}", modelTypeDesc)
|
||||
.Replace("{fileClassName}", fileClassName);
|
||||
WriteAndSave(fullPath, content);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region 帮助方法
|
||||
|
||||
private static string GetModelName(string modelTypeName)
|
||||
@ -273,7 +480,19 @@ namespace ZR.CodeGenerator
|
||||
modelTypeName = modelTypeName.Substring(0, 1).ToUpper() + modelTypeName.Substring(1);
|
||||
return modelTypeName;
|
||||
}
|
||||
|
||||
private static string FirstLowerCase(string str)
|
||||
{
|
||||
if (string.IsNullOrEmpty(str))
|
||||
{
|
||||
return str;
|
||||
}
|
||||
str = str.Substring(0, 1).ToLower() + str.Substring(1);
|
||||
return str;
|
||||
}
|
||||
private static string GetLabelName(string columnDescription, string columnName)
|
||||
{
|
||||
return string.IsNullOrEmpty(columnDescription) ? columnName : columnDescription;
|
||||
}
|
||||
/// <summary>
|
||||
/// 从代码模板中读取内容
|
||||
/// </summary>
|
||||
@ -308,6 +527,8 @@ namespace ZR.CodeGenerator
|
||||
/// <param name="fileName"></param>
|
||||
/// <param name="content"></param>
|
||||
private static void WriteAndSave(string fileName, string content)
|
||||
{
|
||||
try
|
||||
{
|
||||
//实例化一个文件流--->与写入文件相关联
|
||||
using var fs = new FileStream(fileName, FileMode.Create, FileAccess.Write);
|
||||
@ -321,6 +542,11 @@ namespace ZR.CodeGenerator
|
||||
sw.Close();
|
||||
fs.Close();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine("写入文件出错了:" + ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
@ -10,13 +10,23 @@ namespace ZR.CodeGenerator
|
||||
{
|
||||
public class DbProvider
|
||||
{
|
||||
protected static SqlSugarScope CodeDb;
|
||||
|
||||
public SqlSugarClient GetSugarDbContext(string dbName)
|
||||
/// <summary>
|
||||
/// 获取动态连接字符串
|
||||
/// </summary>
|
||||
/// <param name="dbName">数据库名</param>
|
||||
/// <returns></returns>
|
||||
public SqlSugarScope GetSugarDbContext(string dbName = "")
|
||||
{
|
||||
string connStr = ConfigUtils.Instance.GetConnectionStrings(OptionsSetting.Conn).Replace("{DbName}", dbName);
|
||||
string connStr = ConfigUtils.Instance.GetConnectionStrings(OptionsSetting.Conn).Replace("{database}", dbName);
|
||||
int dbType = ConfigUtils.Instance.GetAppConfig(OptionsSetting.CodeGenDbType, 0);
|
||||
|
||||
return new SqlSugarClient(new List<ConnectionConfig>()
|
||||
if (string.IsNullOrEmpty(dbName))
|
||||
{
|
||||
connStr = ConfigUtils.Instance.GetConnectionStrings(OptionsSetting.ConnAdmin);
|
||||
dbType = ConfigUtils.Instance.GetAppConfig(OptionsSetting.DbType, 0);
|
||||
}
|
||||
var db = new SqlSugarScope(new List<ConnectionConfig>()
|
||||
{
|
||||
new ConnectionConfig(){
|
||||
ConnectionString = connStr,
|
||||
@ -25,6 +35,9 @@ namespace ZR.CodeGenerator
|
||||
InitKeyType = InitKeyType.Attribute,//从特性读取主键和自增列信息
|
||||
},
|
||||
});
|
||||
|
||||
CodeDb = db;
|
||||
return db;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,16 +1,12 @@
|
||||
using Infrastructure;
|
||||
using SqlSugar;
|
||||
using System;
|
||||
using SqlSugar;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using ZR.Model;
|
||||
using ZR.Model.CodeGenerator;
|
||||
|
||||
namespace ZR.CodeGenerator.Service
|
||||
{
|
||||
public class CodeGeneraterService: DbProvider
|
||||
public class CodeGeneraterService : DbProvider
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取所有数据库名
|
||||
@ -18,21 +14,15 @@ namespace ZR.CodeGenerator.Service
|
||||
/// <returns></returns>
|
||||
public List<DataBaseInfo> GetAllDataBases()
|
||||
{
|
||||
var dbType = ConfigUtils.Instance.GetConfig("CodeGenDbType");
|
||||
List<DataBaseInfo> list = new List<DataBaseInfo>();
|
||||
if (dbType == "1")
|
||||
{
|
||||
var db = GetSugarDbContext("ZrAdmin");
|
||||
var templist = db.DbMaintenance.GetDataBaseList(db);
|
||||
List<DataBaseInfo> list = new();
|
||||
|
||||
var db = GetSugarDbContext();
|
||||
var templist = db.DbMaintenance.GetDataBaseList(db.ScopedContext);
|
||||
templist.ForEach(item =>
|
||||
{
|
||||
list.Add(new DataBaseInfo() { DbName = item });
|
||||
});
|
||||
}
|
||||
else if (dbType == "0")
|
||||
{
|
||||
// list = mssqlExtractor.GetAllDataBases();
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
@ -43,7 +33,7 @@ namespace ZR.CodeGenerator.Service
|
||||
/// <param name="tableName"></param>
|
||||
/// <param name="pager"></param>
|
||||
/// <returns></returns>
|
||||
public List<SqlSugar.DbTableInfo> GetAllTables(string dbName, string tableName, PagerInfo pager)
|
||||
public List<DbTableInfo> GetAllTables(string dbName, string tableName, PagerInfo pager)
|
||||
{
|
||||
var tableList = GetSugarDbContext(dbName).DbMaintenance.GetTableInfoList(true);
|
||||
if (!string.IsNullOrEmpty(tableName))
|
||||
|
||||
@ -1,75 +0,0 @@
|
||||
using Infrastructure.Attribute;
|
||||
using SqlSugar;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using ZR.Model;
|
||||
using ZR.Model.CodeGenerator;
|
||||
|
||||
namespace ZR.Repository.System
|
||||
{
|
||||
[AppService(ServiceLifetime = LifeTime.Transient)]
|
||||
public class CodeGeneratorRepository : BaseRepository
|
||||
{
|
||||
///// <summary>
|
||||
///// 获取数据库
|
||||
///// </summary>
|
||||
///// <returns></returns>
|
||||
//public List<DataBaseInfo> GetAllDb()
|
||||
//{
|
||||
// //return Db.Ado.SqlQuery<DataBaseInfo>("select name as DbName from master..sysdatabases ");
|
||||
// var list = Db.DbMaintenance.GetDataBaseList(Db);
|
||||
// List<DataBaseInfo> dataBases = new List<DataBaseInfo>();
|
||||
// list.ForEach(item =>
|
||||
// {
|
||||
// dataBases.Add(new DataBaseInfo() { DbName = item });
|
||||
// });
|
||||
// return dataBases;
|
||||
//}
|
||||
|
||||
///// <summary>
|
||||
///// 根据数据库名获取所有的表
|
||||
///// </summary>
|
||||
///// <param name="dbName"></param>
|
||||
///// <param name="pager"></param>
|
||||
///// <param name="tableName"></param>
|
||||
///// <returns></returns>
|
||||
//public List<SqlSugar.DbTableInfo> GetAllTables(string dbName, string tableName, PagerInfo pager)
|
||||
//{
|
||||
// var tableList = GetSugarDbContext(dbName).DbMaintenance.GetTableInfoList(true);
|
||||
// if (!string.IsNullOrEmpty(tableName))
|
||||
// {
|
||||
// tableList = tableList.Where(f => f.Name.Contains(tableName)).ToList();
|
||||
// }
|
||||
// pager.TotalNum = tableList.Count;
|
||||
// return tableList.Skip(pager.PageSize * (pager.PageNum - 1)).Take(pager.PageSize).OrderBy(f => f.Name).ToList();
|
||||
//}
|
||||
|
||||
///// <summary>
|
||||
///// 获取表格列信息
|
||||
///// </summary>
|
||||
///// <param name="dbName"></param>
|
||||
///// <param name="tableName"></param>
|
||||
///// <returns></returns>
|
||||
//public List<SqlSugar.DbColumnInfo> GetColumnInfo(string dbName, string tableName)
|
||||
//{
|
||||
// return GetSugarDbContext(dbName).DbMaintenance.GetColumnInfosByTableName(tableName, true);
|
||||
//}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 获取当前数据库表名
|
||||
/// </summary>
|
||||
/// <param name="tabList"></param>
|
||||
/// <returns></returns>
|
||||
//public List<DbTableInfo> GetAllTables(string[] tabList)
|
||||
//{
|
||||
// string sql = @"SELECT tbs.name as TableName ,ds.value as Description FROM sys.tables tbs
|
||||
// left join sys.extended_properties ds on ds.major_id=tbs.object_id and ds.minor_id=0";
|
||||
|
||||
// return Db.SqlQueryable<DbTableInfo>(sql).WhereIF(tabList.Length > 0, x => tabList.Contains(x.TableName)).ToList();
|
||||
//}
|
||||
}
|
||||
}
|
||||
@ -1,99 +0,0 @@
|
||||
using Infrastructure;
|
||||
using Infrastructure.Attribute;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using ZR.Model;
|
||||
using ZR.Model.CodeGenerator;
|
||||
using ZR.Repository.System;
|
||||
using ZR.Service.IService;
|
||||
|
||||
namespace ZR.Service.System
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
//[AppService(ServiceType = typeof(ICodeGeneratorService), ServiceLifetime = LifeTime.Transient)]
|
||||
public class CodeGeneratorService //: ICodeGeneratorService
|
||||
{
|
||||
//public CodeGeneratorRepository CodeGeneratorRepository;
|
||||
|
||||
//public CodeGeneratorService(CodeGeneratorRepository codeGeneratorRepository)
|
||||
//{
|
||||
// CodeGeneratorRepository = codeGeneratorRepository;
|
||||
//}
|
||||
|
||||
///// <summary>
|
||||
///// 获取表所有列
|
||||
///// </summary>
|
||||
///// <param name="tableName"></param>
|
||||
///// <returns></returns>
|
||||
//public List<DbFieldInfo> GetAllColumns(string tableName)
|
||||
//{
|
||||
// var dbType = ConfigUtils.Instance.GetConfig("CodeGenDbType");
|
||||
// if (tableName == null)
|
||||
// throw new ArgumentException(nameof(tableName));
|
||||
// List<DbFieldInfo> list = new List<DbFieldInfo>();
|
||||
// if (dbType == "1")
|
||||
// {
|
||||
// list = CodeGeneratorRepository.GetAllColumns(tableName);
|
||||
// }
|
||||
// return list;
|
||||
//}
|
||||
|
||||
///// <summary>
|
||||
///// 获取所有数据库名
|
||||
///// </summary>
|
||||
///// <returns></returns>
|
||||
//public List<DataBaseInfo> GetAllDataBases()
|
||||
//{
|
||||
// var dbType = ConfigUtils.Instance.GetConfig("CodeGenDbType");
|
||||
// List<DataBaseInfo> list = new List<DataBaseInfo>();
|
||||
// if (dbType == "1")
|
||||
// {
|
||||
// list = CodeGeneratorRepository.GetAllDb();
|
||||
// }
|
||||
// else if (dbType == "0")
|
||||
// {
|
||||
// // list = mssqlExtractor.GetAllDataBases();
|
||||
// }
|
||||
// return list;
|
||||
//}
|
||||
|
||||
//public List<DbTableInfo> GetAllTables(string tableStrs)
|
||||
//{
|
||||
// string[] tabList = tableStrs.Split(",");
|
||||
|
||||
// return CodeGeneratorRepository.GetAllTables(tabList);
|
||||
//}
|
||||
|
||||
/// <summary>
|
||||
/// 获取列信息
|
||||
/// </summary>
|
||||
/// <param name="dbName"></param>
|
||||
/// <param name="tableName"></param>
|
||||
/// <returns></returns>
|
||||
//public List<SqlSugar.DbColumnInfo> GetColumnInfo(string dbName, string tableName)
|
||||
//{
|
||||
// return CodeGeneratorRepository.GetColumnInfo(dbName, tableName);
|
||||
//}
|
||||
|
||||
//public List<SqlSugar.DbTableInfo> GetTablesWithPage(string tablename, string dbName, PagerInfo pager)
|
||||
//{
|
||||
// var dbType = ConfigUtils.Instance.GetConfig("CodeGenDbType");
|
||||
// List<SqlSugar.DbTableInfo> list = new List<SqlSugar.DbTableInfo>();
|
||||
// if (dbType == "1")
|
||||
// {
|
||||
// list = CodeGeneratorRepository.GetAllTables(dbName, tablename, pager);
|
||||
// }
|
||||
// else if (dbType == "0")
|
||||
// {
|
||||
// //list = mysqlExtractor.GetAllTables(this.dbName, tablename, fieldNameToSort, isDescending, info);
|
||||
// }
|
||||
// return list;
|
||||
//}
|
||||
|
||||
}
|
||||
}
|
||||
@ -9,4 +9,8 @@
|
||||
<ProjectReference Include="..\ZR.Repository\ZR.Repository.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Folder Include="Business\IService\" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@ -32,30 +32,26 @@
|
||||
<el-card>
|
||||
<div class="list-btn-container">
|
||||
<el-form ref="codeform" :inline="true" :rules="rules" :model="codeform" class="demo-form-inline" size="small">
|
||||
<el-form-item label="数据库">
|
||||
<el-tooltip class="item" effect="dark" content="默认为系统访问数据库" placement="top">
|
||||
<el-select v-model="searchform.DbName" clearable placeholder="请选择" @change="handleShowTable">
|
||||
<el-form-item label="数据库" prop="dbName">
|
||||
<el-select v-model="codeform.dbName" clearable placeholder="请选择" @change="handleShowTable">
|
||||
<el-option v-for="item in selectedDataBase" :key="item.Id" :label="item.dbName" :value="item.dbName" />
|
||||
</el-select>
|
||||
</el-tooltip>
|
||||
</el-form-item>
|
||||
<el-form-item label="表名">
|
||||
<el-input v-model="searchform.tableName" clearable placeholder="输入要查询的表名" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="handleSearch()">查询</el-button>
|
||||
</el-form-item>
|
||||
<el-form-item label="项目命名空间:" prop="baseSpace">
|
||||
<!-- <el-form-item label="项目命名空间:" prop="baseSpace">
|
||||
<el-tooltip class="item" effect="dark" content="系统会根据项目命名空间自动生成IService、Service、Models等子命名空间" placement="bottom">
|
||||
<el-input v-model="codeform.baseSpace" clearable placeholder="如Zr" />
|
||||
</el-tooltip>
|
||||
</el-form-item>
|
||||
</el-form-item> -->
|
||||
<el-form-item label="去掉表名前缀:">
|
||||
<el-tooltip class="item" effect="dark" content="表名直接变为类名,去掉表名前缀。多个前缀用“;”隔开和结束" placement="bottom">
|
||||
<el-input v-model="codeform.replaceTableNameStr" clearable width="300" placeholder="多个前缀用“;”隔开" />
|
||||
</el-tooltip>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="handleSearch()">查询</el-button>
|
||||
<!-- <el-button type="primary" icon="iconfont icon-code" @click="handleGenerate()">生成代码</el-button> -->
|
||||
<el-button type="default" icon="el-icon-refresh" size="small" @click="loadTableData()">刷新</el-button>
|
||||
</el-form-item>
|
||||
@ -105,7 +101,7 @@ export default {
|
||||
DbType: "",
|
||||
},
|
||||
searchform: {
|
||||
DbName: "",
|
||||
dbName: "",
|
||||
tableName: "",
|
||||
},
|
||||
codeform: {
|
||||
@ -122,6 +118,9 @@ export default {
|
||||
// trigger: "blur",
|
||||
// },
|
||||
// ],
|
||||
dbName: [
|
||||
{ required: true, message: "请选择数据库名称", trigger: "blur" },
|
||||
],
|
||||
replaceTableNameStr: [
|
||||
{ min: 0, max: 50, message: "长度小于50个字符", trigger: "blur" },
|
||||
],
|
||||
@ -166,15 +165,13 @@ export default {
|
||||
* 加载页面table数据
|
||||
*/
|
||||
loadTableData: function () {
|
||||
if (this.searchform.dataBaseName !== "") {
|
||||
if (this.codeform.dataBaseName !== "") {
|
||||
this.tableloading = true;
|
||||
var seachdata = {
|
||||
pageNum: this.pagination.pageNum,
|
||||
PageSize: this.pagination.pagesize,
|
||||
tableName: this.searchform.tableName,
|
||||
dbName: this.searchform.DbName,
|
||||
// Order: this.sortableData.order,
|
||||
// Sort: this.sortableData.sort,
|
||||
tableName: this.codeform.tableName,
|
||||
dbName: this.codeform.dbName,
|
||||
};
|
||||
codeGetTableList(seachdata).then((res) => {
|
||||
this.tableData = res.data.result;
|
||||
@ -187,9 +184,15 @@ export default {
|
||||
* 点击查询
|
||||
*/
|
||||
handleSearch: function () {
|
||||
this.$refs["codeform"].validate((valid) => {
|
||||
if (valid) {
|
||||
this.tableloading = true;
|
||||
this.pagination.pageNum = 1;
|
||||
this.loadTableData();
|
||||
}else{
|
||||
return false;
|
||||
}
|
||||
});
|
||||
},
|
||||
handleShowTable: function () {
|
||||
this.pagination.pageNum = 1;
|
||||
@ -231,7 +234,7 @@ export default {
|
||||
const pageLoading = Loading.service(loadop);
|
||||
|
||||
var seachdata = {
|
||||
dbName: this.searchform.DbName,
|
||||
dbName: this.codeform.dbName,
|
||||
tables: row.name, // this.currentSelected.toString(),
|
||||
baseSpace: this.codeform.baseSpace,
|
||||
replaceTableNameStr: this.codeform.replaceTableNameStr,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user