Merge branch '3.7.0'
This commit is contained in:
commit
e93f069389
2
.gitignore
vendored
2
.gitignore
vendored
@ -267,3 +267,5 @@ __pycache__/
|
||||
/ZR.Admin.WebApi/wwwroot/export
|
||||
/ZR.Vue/src/views/business/Gendemo.vue
|
||||
/ZR.Admin.WebApi/Properties/launchSettings.json
|
||||
/ZR.Admin.WebApi/ZRAdmin.xml
|
||||
/ZR.Admin.WebApi/DataProtection
|
||||
|
||||
@ -37,7 +37,7 @@ namespace ZR.Admin.WebApi.Controllers
|
||||
/// 心跳
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpGet, Route("health/index")]
|
||||
[HttpGet]
|
||||
public IActionResult Health()
|
||||
{
|
||||
return SUCCESS(true);
|
||||
|
||||
@ -16,7 +16,7 @@ using System;
|
||||
namespace ZR.Admin.WebApi.Controllers
|
||||
{
|
||||
/// <summary>
|
||||
/// T4代码自动生成
|
||||
/// 文章管理
|
||||
/// </summary>
|
||||
[Verify]
|
||||
[Route("article")]
|
||||
|
||||
@ -143,17 +143,19 @@ namespace ZR.Admin.WebApi.Controllers.System
|
||||
string uuid = Guid.NewGuid().ToString().Replace("-", "");
|
||||
|
||||
SysConfig sysConfig = sysConfigService.GetSysConfigByKey("sys.account.captchaOnOff");
|
||||
var captchaOff = sysConfig?.ConfigValue ?? "0";
|
||||
|
||||
var code = SecurityCodeHelper.GetRandomEnDigitalText(4);
|
||||
byte[] imgByte;
|
||||
if (sysConfig.ConfigValue == "1")
|
||||
if (captchaOff == "1")
|
||||
{
|
||||
imgByte = SecurityCodeHelper.GetGifEnDigitalCodeByte(code);//动态gif数字字母
|
||||
}
|
||||
else if (sysConfig.ConfigValue == "2")
|
||||
else if (captchaOff == "2")
|
||||
{
|
||||
imgByte = SecurityCodeHelper.GetGifBubbleCodeByte(code);//动态gif泡泡
|
||||
}
|
||||
else if (sysConfig.ConfigValue == "3")
|
||||
else if (captchaOff == "3")
|
||||
{
|
||||
imgByte = SecurityCodeHelper.GetBubbleCodeByte(code);//泡泡
|
||||
}
|
||||
|
||||
@ -1,16 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<key id="b6498f45-218a-4853-a182-0e86942ab496" version="1">
|
||||
<creationDate>2021-08-02T06:58:41.3050198Z</creationDate>
|
||||
<activationDate>2021-08-02T06:58:41.2698484Z</activationDate>
|
||||
<expirationDate>2021-10-31T06:58:41.2698484Z</expirationDate>
|
||||
<descriptor deserializerType="Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.ConfigurationModel.AuthenticatedEncryptorDescriptorDeserializer, Microsoft.AspNetCore.DataProtection, Version=5.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60">
|
||||
<descriptor>
|
||||
<encryption algorithm="AES_256_CBC" />
|
||||
<validation algorithm="HMACSHA256" />
|
||||
<masterKey p4:requiresEncryption="true" xmlns:p4="http://schemas.asp.net/2015/03/dataProtection">
|
||||
<!-- Warning: the key below is in an unencrypted form. -->
|
||||
<value>gmFBOJQxBXoKTqyvLeEnS6IDsf61vG/s0krHG1MfcZwQlu/D2XUaCms+xzpFc2c2JGdaJh5LiLIyJuoRR20Mug==</value>
|
||||
</masterKey>
|
||||
</descriptor>
|
||||
</descriptor>
|
||||
</key>
|
||||
@ -27,11 +27,16 @@ namespace ZR.Admin.WebApi.Extensions
|
||||
Version = "v1",
|
||||
Description = "",
|
||||
});
|
||||
//if (CurrentEnvironment.IsDevelopment())
|
||||
//{
|
||||
try
|
||||
{
|
||||
//添加文档注释
|
||||
c.IncludeXmlComments(Path.Combine(hostEnvironment.ContentRootPath, "ZRAdmin.xml"), true);
|
||||
//}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine("swagger 文档加载失败" + ex.Message);
|
||||
}
|
||||
|
||||
//参考文章:http://www.zyiz.net/tech/detail-134965.html
|
||||
//需要安装包Swashbuckle.AspNetCore.Filters
|
||||
// 开启权限小锁 需要在对应的Action上添加[Authorize]才能看到
|
||||
|
||||
@ -32,7 +32,7 @@ namespace ZR.Admin.WebApi
|
||||
Configuration = configuration;
|
||||
CurrentEnvironment = hostEnvironment;
|
||||
}
|
||||
|
||||
private NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
|
||||
private IWebHostEnvironment CurrentEnvironment { get; }
|
||||
public IConfiguration Configuration { get; }
|
||||
public void ConfigureServices(IServiceCollection services)
|
||||
@ -167,13 +167,14 @@ namespace ZR.Admin.WebApi
|
||||
});
|
||||
|
||||
//调式代码 用来打印SQL
|
||||
DbScoped.SugarScope.GetConnection("0").Aop.OnLogExecuting = (sql, pars) =>
|
||||
DbScoped.SugarScope.GetConnection(0).Aop.OnLogExecuting = (sql, pars) =>
|
||||
{
|
||||
Console.WriteLine("【SQL语句】" + sql.ToLower() + "\r\n"
|
||||
+ DbScoped.SugarScope.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value)));
|
||||
var param = DbScoped.SugarScope.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value));
|
||||
//Console.WriteLine("【SQL语句】" + sql.ToLower() + "\r\n" + param);
|
||||
logger.Info($"Sql语句:{sql},{param}");
|
||||
};
|
||||
//出错打印日志
|
||||
DbScoped.SugarScope.GetConnection("0").Aop.OnError = (e) =>
|
||||
DbScoped.SugarScope.GetConnection(0).Aop.OnError = (e) =>
|
||||
{
|
||||
Console.WriteLine($"[执行Sql出错]{e.Message},SQL={e.Sql}");
|
||||
Console.WriteLine();
|
||||
@ -182,14 +183,14 @@ namespace ZR.Admin.WebApi
|
||||
//调式代码 用来打印SQL
|
||||
DbScoped.SugarScope.GetConnection(1).Aop.OnLogExecuting = (sql, pars) =>
|
||||
{
|
||||
Console.WriteLine("【SQL语句Bus】" + sql.ToLower() + "\r\n"
|
||||
+ DbScoped.SugarScope.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value)));
|
||||
var param = DbScoped.SugarScope.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value));
|
||||
//Console.WriteLine("【SQL语句Bus】" + sql.ToLower() + "\r\n" + param);
|
||||
logger.Info($"Sql语句:{sql}, {param}");
|
||||
};
|
||||
//Bus Db错误日志
|
||||
DbScoped.SugarScope.GetConnection(1).Aop.OnError = (e) =>
|
||||
{
|
||||
Console.WriteLine($"[执行Sql出错Bus]{e.Message},SQL={e.Sql}");
|
||||
Console.WriteLine();
|
||||
logger.Error($"执行Sql语句失败:{e.Sql},原因:{e.Message}");
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@ -60,6 +60,9 @@
|
||||
<None Update="ip2region.db">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="ZRAdmin.xml">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@ -15,7 +15,7 @@
|
||||
"urls": "http://localhost:8888", //项目启动url
|
||||
"sysConfig": {
|
||||
"DBCommandTimeout": 10,
|
||||
"cors": "http://localhost:8887" //跨域地址,多个用","隔开
|
||||
"cors": "http://localhost:8887" //跨域地址(前端启动项目),多个用","隔开
|
||||
},
|
||||
"JwtSettings": {
|
||||
"Issuer": "https://localhost:8888",
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
@echo off
|
||||
|
||||
docker build -t ZRAdmin:latest -f ./Dockerfile .
|
||||
docker build -t ZRAdmin.NET:latest -f ./Dockerfile .
|
||||
|
||||
echo "==============查看镜像==========="
|
||||
docker images
|
||||
|
||||
@ -52,7 +52,7 @@ namespace ${options.ApiControllerNamespace}.Controllers
|
||||
|
||||
//搜索条件查询语法参考Sqlsugar
|
||||
${QueryCondition}
|
||||
$if(genTable.SortField != "")
|
||||
$if(genTable.SortField != "" && genTable.SortField != null)
|
||||
var response = _${replaceDto.ModelTypeName}Service.GetPages(predicate.ToExpression(), parm, x => x.${genTable.SortField}, "${genTable.SortType}");
|
||||
$else
|
||||
var response = _${replaceDto.ModelTypeName}Service.GetPages(predicate.ToExpression(), parm);
|
||||
@ -160,25 +160,23 @@ ${end}
|
||||
string sFileName = ExportExcel(list, "${replaceDto.ModelTypeName}", "${genTable.FunctionName}");
|
||||
return SUCCESS(new { path = "/export/" + sFileName, fileName = sFileName });
|
||||
}
|
||||
$if(genTable.SortField != "" && genTable.SortField != null)
|
||||
////// <summary>
|
||||
////// 代码自动生成(不用可删除) 保存排序
|
||||
////// </summary>
|
||||
////// <param name="id"></param>
|
||||
////// <param name="orderNum"></param>
|
||||
////// <returns></returns>
|
||||
/////[ActionPermissionFilter(Permission = "${replaceDto.PermissionPrefix}:update")]
|
||||
//////[HttpGet("ChangeSort")]
|
||||
/////[Log(Title = "保存排序", BusinessType = BusinessType.UPDATE)]
|
||||
//public IActionResult ChangeSort(int id = 0, int orderNum = 0)
|
||||
//{
|
||||
// if (id <= 0) { return ToResponse(ApiResult.Error(101, "请求参数错误")); }
|
||||
// bool result = _${replaceDto.ModelTypeName}Service.Update(w => w.${replaceDto.PKName} == id, it => new ${replaceDto.ModelTypeName}() { ${genTable.SortField} = orderNum });;
|
||||
|
||||
$if(genTable.SortField != "")
|
||||
/// <summary>
|
||||
/// 保存排序
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <param name="orderNum"></param>
|
||||
/// <returns></returns>
|
||||
[ActionPermissionFilter(Permission = "${replaceDto.PermissionPrefix}:update")]
|
||||
[HttpGet("ChangeSort")]
|
||||
[Log(Title = "保存排序", BusinessType = BusinessType.UPDATE)]
|
||||
public IActionResult ChangeSort(int id = 0, int orderNum = 0)
|
||||
{
|
||||
if (id <= 0) { return ToResponse(ApiResult.Error(101, "请求参数错误")); }
|
||||
|
||||
bool result = _${replaceDto.ModelTypeName}Service.Update(w => w.${replaceDto.PKName} == id, it => new ${replaceDto.ModelTypeName}() { ${genTable.SortField} = orderNum });;
|
||||
|
||||
return SUCCESS(result);
|
||||
}
|
||||
// return SUCCESS(result);
|
||||
//}
|
||||
$end
|
||||
}
|
||||
}
|
||||
@ -23,12 +23,12 @@ ${end}
|
||||
public class ${replaceDto.ModelTypeName}QueryDto : PagerInfo
|
||||
{
|
||||
$foreach(item in genTable.Columns)
|
||||
$if(item.IsQuery)
|
||||
$if(item.IsQuery && item.htmlType == "datetime")
|
||||
public DateTime? Begin$item.CsharpField { get; set; }
|
||||
public DateTime? End$item.CsharpField { get; set; }
|
||||
$elseif(item.IsQuery)
|
||||
public $item.CsharpType $item.CsharpField { get; set; }
|
||||
$end
|
||||
${end}
|
||||
|
||||
public DateTime? BeginTime { get; set; }
|
||||
public DateTime? EndTime { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@ -20,7 +20,10 @@ ${vueQueryFormHtml}
|
||||
<el-col :span="1.5">
|
||||
<el-button type="danger" :disabled="multiple" v-hasPermi="['${replaceDto.PermissionPrefix}:delete']" plain icon="el-icon-delete" size="mini" @click="handleDelete">删除</el-button>
|
||||
</el-col>
|
||||
$if(genTable.SortField != "")
|
||||
<el-col :span="1.5">
|
||||
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" v-hasPermi="['${replaceDto.PermissionPrefix}:export']">导出</el-button>
|
||||
</el-col>
|
||||
$if(genTable.SortField != "" && 1 == 2)
|
||||
<el-col :span="1.5">
|
||||
<el-button type="info" plain icon="el-icon-edit" size="mini" @click="handleShowSort" v-hasPermi="['${replaceDto.PermissionPrefix}:update']">修改排序</el-button>
|
||||
</el-col>
|
||||
@ -30,7 +33,7 @@ $end
|
||||
|
||||
<!-- 数据区域 -->
|
||||
<el-table :data="dataList" ref="table" border @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="50" />
|
||||
<el-table-column type="selection" width="50" align="center"/>
|
||||
${VueViewListContent}
|
||||
<el-table-column label="操作" align="center" width="200">
|
||||
<template slot-scope="scope">
|
||||
@ -43,16 +46,16 @@ ${VueViewListContent}
|
||||
</el-table>
|
||||
<pagination class="mt10" background :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
|
||||
|
||||
<!-- 添加或修改菜单对话框 -->
|
||||
<!-- 添加或修改${genTable.functionName}对话框 -->
|
||||
<el-dialog :title="title" :lock-scroll="false" :visible.sync="open" >
|
||||
<el-form ref="form" :model="form" :rules="rules" :label-width="formLabelWidth">
|
||||
<el-row>
|
||||
${VueViewFormContent}
|
||||
${VueViewFormContent}
|
||||
</el-row>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer" v-if="btnSubmitVisible">
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
@ -65,7 +68,8 @@ import {
|
||||
del${genTable.BusinessName},
|
||||
update${genTable.BusinessName},
|
||||
get${genTable.BusinessName},
|
||||
$if(genTable.SortField != "")
|
||||
export${genTable.BusinessName},
|
||||
$if(genTable.SortField != "" && genTable.SortField != null)
|
||||
changeSort
|
||||
$end
|
||||
} from '@/api/${genTable.ModuleName}/${lowerBusinessName}.js';
|
||||
@ -100,9 +104,13 @@ $foreach(item in genTable.Columns)
|
||||
$if((item.HtmlType == "radio" || item.HtmlType == "select"))
|
||||
// ${item.ColumnComment}选项列表
|
||||
${item.ColumnName}Options: [],
|
||||
$elseif(item.HtmlType == "datetime" && item.IsQuery == true)
|
||||
//${item.ColumnComment}时间范围
|
||||
dateRange${item.CsharpField}: [],
|
||||
$end
|
||||
$end
|
||||
$if(genTable.SortField != "")
|
||||
|
||||
$if(genTable.SortField != "" && genTable.SortField != null)
|
||||
// 是否显示编辑排序
|
||||
showEditSort: false,
|
||||
$end
|
||||
@ -118,7 +126,7 @@ ${VueViewEditFormRuleContent}
|
||||
},
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
created() {
|
||||
// 列表数据查询
|
||||
this.getList();
|
||||
|
||||
@ -133,8 +141,14 @@ $end
|
||||
methods: {
|
||||
// 查询数据
|
||||
getList() {
|
||||
$foreach(item in genTable.Columns)
|
||||
$if(item.HtmlType == "datetime" && item.IsQuery == true)
|
||||
this.queryParams["begin${item.CsharpField}"] = this.addDateRange2(this.dateRange${item.CsharpField}, 0);
|
||||
this.queryParams["end${item.CsharpField}"] = this.addDateRange2(this.dateRange${item.CsharpField}, 1);
|
||||
$end
|
||||
$end
|
||||
console.log(JSON.stringify(this.queryParams));
|
||||
list${genTable.BusinessName}(this.addDateRange(this.queryParams, this.timeRange)).then(res => {
|
||||
list${genTable.BusinessName}(this.queryParams).then(res => {
|
||||
if (res.code == 200) {
|
||||
this.dataList = res.data.result;
|
||||
this.total = res.data.totalNum;
|
||||
@ -160,6 +174,12 @@ $end
|
||||
/** 重置查询操作 */
|
||||
resetQuery() {
|
||||
this.timeRange = [];
|
||||
$foreach(item in genTable.Columns)
|
||||
$if(item.HtmlType == "datetime" && item.IsQuery == true)
|
||||
//${item.ColumnComment}时间范围
|
||||
this.dateRange${item.CsharpField}= [];
|
||||
$end
|
||||
$end
|
||||
this.resetForm("queryForm");
|
||||
this.queryParams = {
|
||||
pageNum: 1,
|
||||
@ -204,7 +224,7 @@ $end
|
||||
}
|
||||
});
|
||||
},
|
||||
$if(genTable.SortField != "")
|
||||
$if(genTable.SortField != "" && genTable.SortField != null)
|
||||
// 显示编辑排序
|
||||
handleShowSort() {
|
||||
this.showEditSort = !this.showEditSort;
|
||||
@ -223,9 +243,8 @@ $end
|
||||
$if(replaceDto.UploadFile == 1)
|
||||
//图片上传成功方法
|
||||
handleUploadSuccess(res, columnName) {
|
||||
console.log(columnName, res)
|
||||
this.form[columnName] = res.data;
|
||||
console.log(JSON.stringify(this.form))
|
||||
console.log(JSON.stringify(this.form), JSON.stringify(res))
|
||||
},
|
||||
$end
|
||||
$foreach(item in genTable.Columns)
|
||||
@ -266,6 +285,21 @@ $end
|
||||
}
|
||||
});
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
const queryParams = this.queryParams;
|
||||
this.${confirm}confirm("是否确认导出所有${genTable.functionName}数据项?", "警告", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning",
|
||||
})
|
||||
.then(function () {
|
||||
return export${genTable.BusinessName}(queryParams);
|
||||
})
|
||||
.then((response) => {
|
||||
this.download(response.data.path);
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
@ -57,6 +57,7 @@ export function del${genTable.BusinessName}(pid) {
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
// 导出${genTable.functionName}
|
||||
export function export${replaceDto.ModelTypeName}(query) {
|
||||
return request({
|
||||
@ -66,7 +67,7 @@ export function export${replaceDto.ModelTypeName}(query) {
|
||||
})
|
||||
}
|
||||
|
||||
$if(genTable.SortField != "")
|
||||
$if(genTable.SortField != "" && genTable.SortField != null)
|
||||
//排序
|
||||
export function changeSort(data) {
|
||||
return request({
|
||||
@ -75,5 +76,4 @@ export function changeSort(data) {
|
||||
params: data
|
||||
})
|
||||
}
|
||||
|
||||
$end
|
||||
@ -34,8 +34,8 @@ namespace ZR.CodeGenerator
|
||||
//时间类型
|
||||
if (tbColumn.CsharpType == GenConstants.TYPE_DATE)
|
||||
{
|
||||
replaceDto.QueryCondition += $" predicate = predicate.AndIF(parm.BeginTime != null, it => it.{tbColumn.CsharpField} >= parm.BeginTime);\n";
|
||||
replaceDto.QueryCondition += $" predicate = predicate.AndIF(parm.EndTime != null, it => it.{tbColumn.CsharpField} <= parm.EndTime);\n";
|
||||
replaceDto.QueryCondition += $" predicate = predicate.AndIF(parm.Begin{tbColumn.CsharpField} != null, it => it.{tbColumn.CsharpField} >= parm.Begin{tbColumn.CsharpField});\n";
|
||||
replaceDto.QueryCondition += $" predicate = predicate.AndIF(parm.End{tbColumn.CsharpField} != null, it => it.{tbColumn.CsharpField} <= parm.End{tbColumn.CsharpField});\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -72,21 +72,22 @@ namespace ZR.CodeGenerator
|
||||
string columnName = dbFieldInfo.ColumnName;
|
||||
string labelName = CodeGeneratorTool.GetLabelName(dbFieldInfo.ColumnComment, columnName);
|
||||
string labelDisabled = dbFieldInfo.IsPk ? ":disabled=\"true\"" : "";
|
||||
string placeHolder = dbFieldInfo.IsIncrement ? "" : $"请输入{labelName}";
|
||||
StringBuilder sb = new StringBuilder();
|
||||
string value = CodeGeneratorTool.IsNumber(dbFieldInfo.CsharpType) ? "parseInt(item.dictValue)" : "item.dictValue";
|
||||
|
||||
if (GenConstants.inputDtoNoField.Any(f => f.ToLower().Contains(dbFieldInfo.CsharpField.ToLower())))
|
||||
{
|
||||
return sb.ToString();
|
||||
}
|
||||
if (!dbFieldInfo.IsInsert || !dbFieldInfo.IsEdit)
|
||||
if (!dbFieldInfo.IsInsert && !dbFieldInfo.IsEdit && !dbFieldInfo.IsPk)
|
||||
{
|
||||
return sb.ToString();
|
||||
}
|
||||
if (dbFieldInfo.HtmlType == GenConstants.HTML_INPUT_NUMBER)
|
||||
{
|
||||
sb.AppendLine(" <el-col :span=\"12\">");
|
||||
sb.AppendLine($" <el-form-item label=\"{labelName}\" :label-width=\"labelWidth\" prop=\"{CodeGeneratorTool.FirstLowerCase(columnName)}\">");
|
||||
sb.AppendLine($" <el-input-number v-model.number=\"form.{CodeGeneratorTool.FirstLowerCase(columnName)}\" placeholder=\"{placeHolder}\" {labelDisabled}/>");
|
||||
sb.AppendLine($" <el-form-item label=\"{labelName}\" :label-width=\"labelWidth\" prop=\"{columnName}\">");
|
||||
sb.AppendLine($" <el-input-number v-model.number=\"form.{columnName}\" placeholder=\"请输入{labelName}\" {labelDisabled}/>");
|
||||
sb.AppendLine(" </el-form-item>");
|
||||
sb.AppendLine(" </el-col>");
|
||||
}
|
||||
@ -104,18 +105,12 @@ namespace ZR.CodeGenerator
|
||||
//图片
|
||||
sb.AppendLine(" <el-col :span=\"24\">");
|
||||
sb.AppendLine($" <el-form-item label=\"{labelName}\" :label-width=\"labelWidth\" prop=\"{columnName}\">");
|
||||
//sb.AppendLine($" <el-upload class=\"avatar-uploader\" name=\"file\" :action=\"uploadUrl\" :show-file-list=\"false\" :on-success=\"handleUpload{dbFieldInfo.CsharpField}Success\" :before-upload=\"beforeFileUpload\">");
|
||||
//sb.AppendLine($" <el-image v-if=\"form.{columnName}\" :src=\"form.{columnName}\" class=\"icon\"/>");
|
||||
//sb.AppendLine(" <i v-else class=\"el-icon-plus uploader-icon\"></i>");
|
||||
//sb.AppendLine(" </el-upload>");
|
||||
//sb.AppendLine($" <el-input v-model=\"form.{columnName}\" placeholder=\"请上传文件或手动输入文件地址\"></el-input>");
|
||||
sb.AppendLine($@" <UploadImage :icon=""form.{columnName}"" column='{columnName}' :key=""form.{columnName}"" @handleUploadSuccess=""handleUploadSuccess"" />");
|
||||
sb.AppendLine(" </el-form-item>");
|
||||
sb.AppendLine(" </el-col>");
|
||||
}
|
||||
else if (dbFieldInfo.HtmlType == GenConstants.HTML_RADIO && !string.IsNullOrEmpty(dbFieldInfo.DictType))
|
||||
{
|
||||
string value = CodeGeneratorTool.IsNumber(dbFieldInfo.CsharpType) ? "parseInt(item.dictValue)" : "item.dictValue";
|
||||
sb.AppendLine(" <el-col :span=\"12\">");
|
||||
sb.AppendLine($" <el-form-item label=\"{labelName}\" :label-width=\"labelWidth\" prop=\"{columnName}\">");
|
||||
sb.AppendLine($" <el-radio-group v-model=\"form.{columnName}\">");
|
||||
@ -129,8 +124,7 @@ namespace ZR.CodeGenerator
|
||||
sb.AppendLine(" <el-col :span=\"12\">");
|
||||
sb.AppendLine($" <el-form-item label=\"{labelName}\" :label-width=\"labelWidth\" prop=\"{columnName}\">");
|
||||
sb.AppendLine($" <el-radio-group v-model=\"form.{columnName}\">");
|
||||
sb.AppendLine(" <el-radio :key=\"1\" :label=\"1\">是</el-radio>");
|
||||
sb.AppendLine(" <el-radio :key=\"0\" :label=\"0\">否</el-radio>");
|
||||
sb.AppendLine(" <el-radio :label=\"1\">请选择字典生成</el-radio>");
|
||||
sb.AppendLine(" </el-radio-group>");
|
||||
sb.AppendLine(" </el-form-item>");
|
||||
sb.AppendLine(" </el-col>");
|
||||
@ -146,28 +140,37 @@ namespace ZR.CodeGenerator
|
||||
else if (dbFieldInfo.HtmlType == GenConstants.HTML_EDITOR)
|
||||
{
|
||||
sb.AppendLine(" <el-col :span=\"24\">");
|
||||
sb.AppendLine($" <el-form-item label=\"{ labelName}\" :label-width=\"labelWidth\" prop=\"{columnName}\">");
|
||||
sb.AppendLine($" <el-form-item label=\"{labelName}\" :label-width=\"labelWidth\" prop=\"{columnName}\">");
|
||||
sb.AppendLine($" <editor v-model=\"form.{columnName}\" :min-height=\"200\" />");
|
||||
sb.AppendLine(" </el-form-item>");
|
||||
sb.AppendLine(" </el-col>");
|
||||
}
|
||||
else if (dbFieldInfo.HtmlType == GenConstants.HTML_SELECT && !string.IsNullOrEmpty(dbFieldInfo.DictType))
|
||||
{
|
||||
string value = CodeGeneratorTool.IsNumber(dbFieldInfo.CsharpType) ? "parseInt(item.dictValue)" : "item.dictValue";
|
||||
sb.AppendLine(" <el-col :span=\"12\">");
|
||||
sb.AppendLine($" <el-form-item label=\"{ labelName}\" :label-width=\"labelWidth\" prop=\"{columnName}\">");
|
||||
sb.AppendLine($" <el-select v-model=\"form.{columnName}\">");
|
||||
sb.AppendLine($" <el-form-item label=\"{labelName}\" :label-width=\"labelWidth\" prop=\"{columnName}\">");
|
||||
sb.AppendLine($" <el-select v-model=\"form.{columnName}\" placeholder=\"请选择{labelName}\"> ");
|
||||
sb.AppendLine($" <el-option v-for=\"item in {columnName}Options\" :key=\"item.dictValue\" :label=\"item.dictLabel\" :value=\"{value}\"></el-option>");
|
||||
sb.AppendLine(" </el-select>");
|
||||
sb.AppendLine(" </el-form-item>");
|
||||
sb.AppendLine(" </el-col>");
|
||||
}
|
||||
else if (dbFieldInfo.HtmlType == GenConstants.HTML_SELECT && string.IsNullOrEmpty(dbFieldInfo.DictType))
|
||||
{
|
||||
sb.AppendLine(" <el-col :span=\"12\">");
|
||||
sb.AppendLine($" <el-form-item label=\"{labelName}\" :label-width=\"labelWidth\" prop=\"{columnName}\">");
|
||||
sb.AppendLine($" <el-select v-model=\"form.{columnName}\">");
|
||||
sb.AppendLine($" <el-option label=\"请选择字典生成\"></el-option>");
|
||||
sb.AppendLine(" </el-select>");
|
||||
sb.AppendLine(" </el-form-item>");
|
||||
sb.AppendLine(" </el-col>");
|
||||
}
|
||||
else
|
||||
{
|
||||
string inputNumTxt = CodeGeneratorTool.IsNumber(dbFieldInfo.CsharpType) ? ".number" : "";
|
||||
sb.AppendLine(" <el-col :span=\"12\">");
|
||||
sb.AppendLine($" <el-form-item label=\"{labelName}\" :label-width=\"labelWidth\" prop=\"{CodeGeneratorTool.FirstLowerCase(columnName)}\">");
|
||||
sb.AppendLine($" <el-input v-model{inputNumTxt}=\"form.{CodeGeneratorTool.FirstLowerCase(columnName)}\" placeholder=\"{placeHolder}\" {labelDisabled}/>");
|
||||
sb.AppendLine($" <el-form-item label=\"{labelName}\" :label-width=\"labelWidth\" prop=\"{columnName}\">");
|
||||
sb.AppendLine($" <el-input v-model{inputNumTxt}=\"form.{columnName}\" placeholder=\"请输入{labelName}\" {labelDisabled}/>");
|
||||
sb.AppendLine(" </el-form-item>");
|
||||
sb.AppendLine(" </el-col>");
|
||||
}
|
||||
@ -187,16 +190,25 @@ namespace ZR.CodeGenerator
|
||||
if (!dbFieldInfo.IsQuery || dbFieldInfo.HtmlType == GenConstants.HTML_FILE_UPLOAD) return sb.ToString();
|
||||
if (dbFieldInfo.HtmlType == GenConstants.HTML_DATETIME)
|
||||
{
|
||||
sb.AppendLine(" <el-form-item label=\"时间\">");
|
||||
sb.AppendLine(" <el-date-picker v-model=\"timeRange\" size=\"small\" value-format=\"yyyy-MM-dd\" type=\"daterange\" range-separator=\"-\" start-placeholder=\"开始日期\"");
|
||||
sb.AppendLine(" end-placeholder=\"结束日期\"></el-date-picker>");
|
||||
sb.AppendLine($" <el-form-item label=\"{labelName}\">");
|
||||
sb.AppendLine($" <el-date-picker v-model=\"dateRange{dbFieldInfo.CsharpField}\" size=\"small\" value-format=\"yyyy-MM-dd\" type=\"daterange\" range-separator=\"-\" start-placeholder=\"开始日期\"");
|
||||
sb.AppendLine($" end-placeholder=\"结束日期\" placeholder=\"请选择{dbFieldInfo.ColumnComment}\" ></el-date-picker>");
|
||||
sb.AppendLine(" </el-form-item>");
|
||||
}
|
||||
else if (dbFieldInfo.HtmlType == GenConstants.HTML_SELECT && !string.IsNullOrEmpty(dbFieldInfo.DictType))
|
||||
else if ((dbFieldInfo.HtmlType == GenConstants.HTML_SELECT || dbFieldInfo.HtmlType == GenConstants.HTML_RADIO) && !string.IsNullOrEmpty(dbFieldInfo.DictType))
|
||||
{
|
||||
//string value = CodeGeneratorTool.IsNumber(dbFieldInfo.CsharpType) ? "parseInt(item.dictValue)" : "item.dictValue";
|
||||
sb.AppendLine($" <el-form-item label=\"{ labelName}\" :label-width=\"labelWidth\" prop=\"{dbFieldInfo.ColumnName}\">");
|
||||
sb.AppendLine($" <el-select v-model=\"queryParams.{dbFieldInfo.ColumnName}\">");
|
||||
sb.AppendLine($" <el-select v-model=\"queryParams.{dbFieldInfo.ColumnName}\"> placeholder=\"请选择{dbFieldInfo.ColumnComment}\" size=\"small\"");
|
||||
sb.AppendLine($" <el-option v-for=\"item in {dbFieldInfo.ColumnName}Options\" :key=\"item.dictValue\" :label=\"item.dictLabel\" :value=\"item.dictValue\"></el-option>");
|
||||
sb.AppendLine(" </el-select>");
|
||||
sb.AppendLine(" </el-form-item>");
|
||||
}
|
||||
else if (dbFieldInfo.HtmlType == GenConstants.HTML_SELECT)
|
||||
{
|
||||
//string value = CodeGeneratorTool.IsNumber(dbFieldInfo.CsharpType) ? "parseInt(item.dictValue)" : "item.dictValue";
|
||||
sb.AppendLine($" <el-form-item label=\"{ labelName}\" :label-width=\"labelWidth\" prop=\"{dbFieldInfo.ColumnName}\">");
|
||||
sb.AppendLine($" <el-select v-model=\"queryParams.{dbFieldInfo.ColumnName}\" placeholder=\"请选择{dbFieldInfo.ColumnComment}\" size=\"small\">");
|
||||
sb.AppendLine($" <el-option v-for=\"item in {dbFieldInfo.ColumnName}Options\" :key=\"item.dictValue\" :label=\"item.dictLabel\" :value=\"item.dictValue\"></el-option>");
|
||||
sb.AppendLine(" </el-select>");
|
||||
sb.AppendLine(" </el-form-item>");
|
||||
@ -205,7 +217,7 @@ namespace ZR.CodeGenerator
|
||||
{
|
||||
string inputNumTxt = CodeGeneratorTool.IsNumber(dbFieldInfo.CsharpType) ? ".number" : "";
|
||||
sb.AppendLine($" <el-form-item label=\"{ labelName}\" :label-width=\"labelWidth\">");
|
||||
sb.AppendLine($" <el-input v-model{inputNumTxt}=\"queryParams.{CodeGeneratorTool.FirstLowerCase(dbFieldInfo.CsharpField)}\" />");
|
||||
sb.AppendLine($" <el-input v-model{inputNumTxt}=\"queryParams.{dbFieldInfo.ColumnName}\" placeholder=\"请输入{dbFieldInfo.ColumnComment}\" size=\"small\"/>");
|
||||
sb.AppendLine(" </el-form-item>");
|
||||
}
|
||||
|
||||
@ -225,11 +237,11 @@ namespace ZR.CodeGenerator
|
||||
string showToolTip = dbFieldInfo.CsharpType == "string" ? ":show-overflow-tooltip=\"true\"" : "";
|
||||
string formatter = !string.IsNullOrEmpty(dbFieldInfo.DictType) ? $" :formatter=\"{columnName}Format\"" : "";
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
var sortField = genTable?.SortField ?? "";
|
||||
//有排序字段
|
||||
if (!string.IsNullOrEmpty(genTable?.SortField.ToString()) && genTable?.SortField.ToString() == dbFieldInfo.CsharpField)
|
||||
if (!string.IsNullOrEmpty(sortField.ToString()) && sortField.ToString() == dbFieldInfo.CsharpField && !dbFieldInfo.IsPk && CodeGeneratorTool.IsNumber(dbFieldInfo.CsharpType))
|
||||
{
|
||||
sb.AppendLine($@" <el-table-column prop=""{columnName}"" label=""排序"" width=""90"" sortable align=""center"">");
|
||||
sb.AppendLine($@" <el-table-column prop=""{columnName}"" label=""{label}"" width=""90"" sortable align=""center"">");
|
||||
sb.AppendLine(@" <template slot-scope=""scope"">");
|
||||
sb.AppendLine($@" <el-input size=""mini"" style=""width:50px"" controls-position=""no"" v-model.number=""scope.row.{columnName}"" @blur=""handleChangeSort(scope.row, scope.row.{columnName})"" v-if=""showEditSort"" />");
|
||||
sb.AppendLine($" <span v-else>{{{{scope.row.{columnName}}}}}</span>");
|
||||
@ -238,7 +250,7 @@ namespace ZR.CodeGenerator
|
||||
}
|
||||
else if (dbFieldInfo.IsList && dbFieldInfo.HtmlType.Equals(GenConstants.HTML_IMAGE_UPLOAD))
|
||||
{
|
||||
sb.AppendLine($" <el-table-column prop=\"{columnName}\" label=\"图片\">");
|
||||
sb.AppendLine($" <el-table-column prop=\"{columnName}\" label=\"{label}\">");
|
||||
sb.AppendLine(" <template slot-scope=\"scope\">");
|
||||
sb.AppendLine($" <el-image class=\"table-td-thumb\" :src=\"scope.row.{columnName}\" :preview-src-list=\"[scope.row.{columnName}]\"></el-image>");
|
||||
sb.AppendLine(" </template>");
|
||||
|
||||
@ -46,7 +46,7 @@ namespace ZR.CodeGenerator
|
||||
/// <param name="dto"></param>
|
||||
public static void GenerateSingle(GenerateDto dto)
|
||||
{
|
||||
string PKName = "id";
|
||||
string PKName = "Id";
|
||||
string PKType = "int";
|
||||
ReplaceDto replaceDto = new();
|
||||
replaceDto.ModelTypeName = dto.GenTable.ClassName;//表名对应C# 实体类名
|
||||
@ -278,10 +278,11 @@ namespace ZR.CodeGenerator
|
||||
/// <returns>业务名</returns>
|
||||
public static string GetBusinessName(string tableName)
|
||||
{
|
||||
int lastIndex = tableName.LastIndexOf("_");
|
||||
int lastIndex = tableName.IndexOf("_");//_前缀长度
|
||||
int nameLength = tableName.Length;
|
||||
string businessName = tableName[(nameLength - lastIndex + 1)..];
|
||||
return businessName.ToLower();
|
||||
int subLength = (nameLength - lastIndex) - 1;
|
||||
string businessName = tableName[(lastIndex + 1)..];
|
||||
return businessName.Replace("_", "").ToLower();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -396,7 +397,11 @@ namespace ZR.CodeGenerator
|
||||
{
|
||||
genTableColumn.IsList = true;
|
||||
}
|
||||
|
||||
//时间类型初始化between范围查询
|
||||
if (genTableColumn.CsharpType == GenConstants.TYPE_DATE)
|
||||
{
|
||||
genTableColumn.QueryType = "BETWEEN";
|
||||
}
|
||||
genTableColumns.Add(genTableColumn);
|
||||
}
|
||||
return genTableColumns;
|
||||
@ -420,6 +425,7 @@ namespace ZR.CodeGenerator
|
||||
options.OutMode = OutMode.Auto;
|
||||
//options.DisableeLogogram = true;//禁用简写
|
||||
options.Data.Set("refs", "$");//特殊标签替换
|
||||
options.Data.Set("confirm", "$");//特殊标签替换
|
||||
options.Data.Set("replaceDto", replaceDto);
|
||||
options.Data.Set("options", dto.GenOptions);
|
||||
options.Data.Set("genTable", dto.GenTable);
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
ENV = 'development'
|
||||
|
||||
# ZR管理系统/开发环境
|
||||
VUE_APP_BASE_API = 'http://localhost:8888/'
|
||||
VUE_APP_BASE_API = '/dev-api'
|
||||
|
||||
# 路由前缀
|
||||
VUE_APP_ROUTER_PREFIX = '/'
|
||||
|
||||
8
ZR.Vue/.env.staging
Normal file
8
ZR.Vue/.env.staging
Normal file
@ -0,0 +1,8 @@
|
||||
# 测试环境配置
|
||||
ENV = 'staging'
|
||||
|
||||
# ZR管理系统/生产环境
|
||||
VUE_APP_BASE_API = '/stage-api'
|
||||
|
||||
# 路由前缀
|
||||
VUE_APP_ROUTER_PREFIX = '/'
|
||||
@ -16,7 +16,7 @@ import './assets/icons' // icon
|
||||
import './permission' // permission control
|
||||
import { getDicts } from "@/api/system/dict/data";
|
||||
import { getConfigKey } from "@/api/system/config";
|
||||
import { parseTime, resetForm, addDateRange, selectDictLabel, selectDictLabels, download, handleTree } from "@/utils/ruoyi";
|
||||
import { parseTime, resetForm, addDateRange, addDateRange2, selectDictLabel, selectDictLabels, download, handleTree } from "@/utils/ruoyi";
|
||||
//分页组件
|
||||
import Pagination from "@/components/Pagination";
|
||||
//自定义表格工具扩展
|
||||
@ -36,6 +36,7 @@ Vue.prototype.getConfigKey = getConfigKey
|
||||
Vue.prototype.parseTime = parseTime
|
||||
Vue.prototype.resetForm = resetForm
|
||||
Vue.prototype.addDateRange = addDateRange
|
||||
Vue.prototype.addDateRange2 = addDateRange2
|
||||
Vue.prototype.selectDictLabel = selectDictLabel
|
||||
Vue.prototype.selectDictLabels = selectDictLabels
|
||||
Vue.prototype.download = download
|
||||
|
||||
@ -65,6 +65,17 @@ export function addDateRange(params, dateRange) {
|
||||
return search;
|
||||
}
|
||||
|
||||
export function addDateRange2(dateRange, index) {
|
||||
console.log(dateRange);
|
||||
var time = "";
|
||||
if (null != dateRange && '' != dateRange) {
|
||||
if (dateRange.length <= 2) {
|
||||
time = dateRange[index];
|
||||
}
|
||||
}
|
||||
return time;
|
||||
}
|
||||
|
||||
// 回显数据字典
|
||||
export function selectDictLabel(datas, value) {
|
||||
var actions = [];
|
||||
|
||||
@ -53,8 +53,7 @@
|
||||
</el-table-column>
|
||||
<el-table-column label="查询" min-width="5%">
|
||||
<template slot-scope="scope">
|
||||
<el-checkbox v-model="scope.row.isQuery"
|
||||
:disabled="scope.row.htmlType == 'imageUpload' || scope.row.htmlType == 'fileUpload'">
|
||||
<el-checkbox v-model="scope.row.isQuery" :disabled="scope.row.htmlType == 'imageUpload' || scope.row.htmlType == 'fileUpload'">
|
||||
</el-checkbox>
|
||||
</template>
|
||||
</el-table-column>
|
||||
@ -90,7 +89,7 @@
|
||||
</el-table-column>
|
||||
<el-table-column label="字典类型" min-width="12%">
|
||||
<template slot-scope="scope">
|
||||
<el-select v-model="scope.row.dictType" clearable filterable placeholder="请选择">
|
||||
<el-select v-model="scope.row.dictType" clearable filterable placeholder="请选择" :disabled="scope.row.htmlType == 'datetime'">
|
||||
<el-option v-for="dict in dictOptions" :key="dict.dictType" :label="dict.dictName" :value="dict.dictType">
|
||||
<span style="float: left">{{ dict.dictName }}</span>
|
||||
<span style="float: right; color: #8492a6; font-size: 13px">{{ dict.dictType }}</span>
|
||||
@ -101,7 +100,7 @@
|
||||
</el-table>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="生成信息" name="genInfo">
|
||||
<gen-info-form ref="genInfo" :info="info" :tables="tables" :menus="menus" :columns="cloumns"/>
|
||||
<gen-info-form ref="genInfo" :info="info" :tables="tables" :menus="menus" :columns="cloumns" />
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
<el-form label-width="100px">
|
||||
|
||||
@ -75,7 +75,7 @@
|
||||
<el-col :span="12">
|
||||
<el-form-item>
|
||||
<span slot="label">
|
||||
排序字段
|
||||
查询排序字段
|
||||
</span>
|
||||
|
||||
<el-select v-model="info.sortField" placeholder="请选择字段" class="mr10" clearable="">
|
||||
|
||||
@ -34,11 +34,11 @@ module.exports = {
|
||||
open: true,
|
||||
proxy: {
|
||||
// detail: https://cli.vuejs.org/config/#devserver-proxy
|
||||
'/api': {
|
||||
target: process.env.VUE_APP_BASE_API,
|
||||
[process.env.VUE_APP_BASE_API]: {
|
||||
target: 'http://localhost:8888/',// 后端接口地址
|
||||
changeOrigin: true,
|
||||
pathRewrite: {
|
||||
'^/api': ''//需要rewrite的
|
||||
['^' + process.env.VUE_APP_BASE_API]: ''//需要rewrite的
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user