From c56421f9c31a20cd5490d7dc458060339c33389d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9D=88=E3=83=BE=E9=AD=82?= <283591387@qq.com> Date: Tue, 10 May 2022 16:55:54 +0000 Subject: [PATCH 1/9] update README.md. --- README.md | 50 +++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index a3adbd6d..487fefdc 100644 --- a/README.md +++ b/README.md @@ -33,73 +33,73 @@ ## App/H5开发 - http://v2.volcore.xyz/app/guide ## 框架移动端(uniapp)已发布,同样全自动生成代码 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/qrcode.png) -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/m001.png) -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/m002.png) +![Home](/imgs/qrcode.png) +![Home](/imgs/m001.png) +![Home](/imgs/m002.png) ## 框架已支持Vue3版本 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/v3.png) +![Home](/imgs/v3.png) ## 框架已增加低代码设计器 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/fd01.png) -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/fd02.png) +![Home](/imgs/fd01.png) +![Home](/imgs/fd02.png) ## 框架2.0已更新(部分新增功能截图) 增加切换皮肤功能 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/h.png) -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/home_them.png) +![Home](/imgs/h.png) +![Home](/imgs/home_them.png) 增加可复用的后台请求参数校验 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/validator.png) +![Home](/imgs/validator.png) 增加树形菜单与代码生成页面使用 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/x7tree.png) +![Home](/imgs/x7tree.png) 增加文本编辑器直接发布静态页面功能 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/editor.png) +![Home](/imgs/editor.png) 一对一多从表显示(只需要少量代码就可完成成,其他都由代码生成器生成) -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/m1.png) +![Home](/imgs/m1.png) 表合并显示 (只需要几行代码完成代码生成器生成的页面实现扩展) -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/span.png) +![Home](/imgs/span.png) 从图上传图片 (只需要几行代码完成代码生成器生成的页面实现扩展) -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/p1.png) +![Home](/imgs/p1.png) 一对多从表(不限从表数量)扩展 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/multi.png) +![Home](/imgs/multi.png) 图表 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/charts.png) +![Home](/imgs/charts.png) ## 1、只读基础表单 整个只读的基础表单的所有前后端代码,全部由代码生成器生成,代码生成器中几乎不需要配置,并支持并后端业务代码扩展,直接生成代码后,配置菜单权限即可 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/table1.png) +![Home](/imgs/table1.png) ## 2、自动绑定下拉框数据表单 整个自动绑定下拉框数据表单的所有前后端代码,全部由代码生成器生成,并支持并后端业务代码扩展,在代码生成器中只需要指定数据源编号,页面加载时会根据编号自动加载数据源并绑定 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/table2.png) +![Home](/imgs/table2.png) ## 3、启用图片支持、审核表单 整个启用图片支持、审核表单的所有前后端代码,全部由代码生成器生成,并支持并后端业务代码扩展,审核功能需要在菜单配置权限、代码生成器中勾选启用图片支持 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/table3.png) +![Home](/imgs/table3.png) ## 4、高级查询 整个表单的所有前后端代码,全部由代码生成器生成,并支持并后端业务代码扩展,查询字段、类型(下拉框、日期、TextArea等)、所在行与列都由代码生成器完成,不需要写任何代码 - ![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/tablesearch4.png) + ![Home](/imgs/tablesearch4.png) ## 5、主从表新建、编辑 主从表新建、编辑所有前后端代码,全部由代码生成器生成,并支持并后端业务代码扩展,新建、编辑从表配置、字段、类型(下拉框、日期、TextArea等)、所在行与列、字段是否只读、标签显示的长度等都由代码生成器完成,不需要写任何代码 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/editTbale2.png) +![Home](/imgs/editTbale2.png) ## 6、excel导入 excel导入整个页面都由代码生成器生成,导入的字段、字段是否必填,下载模板也由代码生成器上配置(自己根据实际需要决定是否采用此方法),导入时会验证是否为空与数据的合法性,逻辑校验自己实现扩展方法即可 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/importTable1.png) +![Home](/imgs/importTable1.png) ## 7、H5开发 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/h5.jpg) +![Home](/imgs/h5.jpg) ## 8、权限分配 目前只实现了对用户的角色的Action进行权限分配 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/auth.png) +![Home](/imgs/auth.png) ## 9、代码生成器 代码生成器提供了20多种可配置的属性,可灵活配置显示、查询、编辑、导入、导出、主从关系等功能点击看代码生成器文档 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/coder.png) +![Home](/imgs/coder.png) 其他功能。。。。。 -- Gitee From 50ed9bebc70e555e6ccca80003e3f47c8e4b6be7 Mon Sep 17 00:00:00 2001 From: 3ddbz Date: Sat, 14 May 2022 22:27:03 +0800 Subject: [PATCH 2/9] =?UTF-8?q?=E6=AD=A3=E5=88=99=E6=9B=BF=E6=8D=A2=20DBTy?= =?UTF-8?q?peName=20=3D=3D=20DbCurrentType.***=20=E6=9B=BF=E6=8D=A2?= =?UTF-8?q?=E4=B8=BAString.Equals=20nameof?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Services/Core/Partial/Sys_TableInfoService.cs" | 4 ++-- .../Vue.Net/VOL.Core/BaseProvider/ServiceBase.cs" | 4 ++-- .../Vue.Net/VOL.Core/DBManager/DBServerProvider.cs" | 4 ++-- .../Vue.NetCore/Vue.Net/VOL.Core/Dapper/SqlDapper.cs" | 10 +++++----- .../AutofacManager/AutofacContainerModuleExtension.cs" | 4 ++-- .../VOL.Core/Infrastructure/DictionaryHandler.cs" | 2 +- .../Services/System/Partial/Sys_DictionaryService.cs" | 7 ++++--- 7 files changed, 18 insertions(+), 17 deletions(-) diff --git "a/\345\274\200\345\217\221\347\211\210dev/Vue.NetCore/Vue.Net/VOL.Builder/Services/Core/Partial/Sys_TableInfoService.cs" "b/\345\274\200\345\217\221\347\211\210dev/Vue.NetCore/Vue.Net/VOL.Builder/Services/Core/Partial/Sys_TableInfoService.cs" index b84eaf41..60383133 100644 --- "a/\345\274\200\345\217\221\347\211\210dev/Vue.NetCore/Vue.Net/VOL.Builder/Services/Core/Partial/Sys_TableInfoService.cs" +++ "b/\345\274\200\345\217\221\347\211\210dev/Vue.NetCore/Vue.Net/VOL.Builder/Services/Core/Partial/Sys_TableInfoService.cs" @@ -1261,7 +1261,7 @@ DISTINCT tableId = repository.Find(x => x.TableName == tableName, s => s.Table_Id).FirstOrDefault(); if (tableId > 0) return tableId; - bool isMySql = DBType.Name == DbCurrentType.MySql.ToString(); + bool isMySql = DBType.Name.Equals(nameof(DbCurrentType.MySql),StringComparison.OrdinalIgnoreCase); Sys_TableInfo tableInfo = new Sys_TableInfo() { ParentId = parentId, @@ -1738,7 +1738,7 @@ DISTINCT { string tableTrueName = tableInfo.TableTrueName; //2020.06.14 pgsql数据库,设置表名为小写(数据库创建表的时候也要使用小写) - if (DBType.Name == DbCurrentType.PgSql.ToString()) + if (DBType.Name.Equals(nameof(DbCurrentType.PgSql),StringComparison.OrdinalIgnoreCase)) { tableTrueName = tableTrueName.ToLower(); } diff --git "a/\345\274\200\345\217\221\347\211\210dev/Vue.NetCore/Vue.Net/VOL.Core/BaseProvider/ServiceBase.cs" "b/\345\274\200\345\217\221\347\211\210dev/Vue.NetCore/Vue.Net/VOL.Core/BaseProvider/ServiceBase.cs" index 453ad570..282c9198 100644 --- "a/\345\274\200\345\217\221\347\211\210dev/Vue.NetCore/Vue.Net/VOL.Core/BaseProvider/ServiceBase.cs" +++ "b/\345\274\200\345\217\221\347\211\210dev/Vue.NetCore/Vue.Net/VOL.Core/BaseProvider/ServiceBase.cs" @@ -1066,7 +1066,7 @@ namespace VOL.Core.BaseProvider string sql = $"DELETE FROM {entityType.GetEntityTableName() } where {tKey} in ({joinKeys});"; // 2020.08.06增加pgsql删除功能 - if (DBType.Name == DbCurrentType.PgSql.ToString()) + if (DBType.Name.Equals(nameof(DbCurrentType.PgSql),StringComparison.OrdinalIgnoreCase)) { sql = $"DELETE FROM \"public\".\"{entityType.GetEntityTableName() }\" where \"{tKey}\" in ({joinKeys});"; } @@ -1075,7 +1075,7 @@ namespace VOL.Core.BaseProvider Type detailType = GetRealDetailType(); if (detailType != null) { - if (DBType.Name == DbCurrentType.PgSql.ToString()) + if (DBType.Name.Equals(nameof(DbCurrentType.PgSql),StringComparison.OrdinalIgnoreCase)) { sql += $"DELETE FROM \"public\".\"{detailType.GetEntityTableName()}\" where \"{tKey}\" in ({joinKeys});"; } diff --git "a/\345\274\200\345\217\221\347\211\210dev/Vue.NetCore/Vue.Net/VOL.Core/DBManager/DBServerProvider.cs" "b/\345\274\200\345\217\221\347\211\210dev/Vue.NetCore/Vue.Net/VOL.Core/DBManager/DBServerProvider.cs" index 30bfac72..09ced80e 100644 --- "a/\345\274\200\345\217\221\347\211\210dev/Vue.NetCore/Vue.Net/VOL.Core/DBManager/DBServerProvider.cs" +++ "b/\345\274\200\345\217\221\347\211\210dev/Vue.NetCore/Vue.Net/VOL.Core/DBManager/DBServerProvider.cs" @@ -64,11 +64,11 @@ namespace VOL.Core.DBManager { connString = ConnectionPool[DefaultConnName]; } - if (DBType.Name == DbCurrentType.MySql.ToString()) + if (DBType.Name.Equals(nameof(DbCurrentType.MySql),StringComparison.OrdinalIgnoreCase)) { return new MySql.Data.MySqlClient.MySqlConnection(connString); } - if (DBType.Name == DbCurrentType.PgSql.ToString()) + if (DBType.Name.Equals(nameof(DbCurrentType.PgSql),StringComparison.OrdinalIgnoreCase)) { return new NpgsqlConnection(connString); } diff --git "a/\345\274\200\345\217\221\347\211\210dev/Vue.NetCore/Vue.Net/VOL.Core/Dapper/SqlDapper.cs" "b/\345\274\200\345\217\221\347\211\210dev/Vue.NetCore/Vue.Net/VOL.Core/Dapper/SqlDapper.cs" index 1de67cae..fbe7eacf 100644 --- "a/\345\274\200\345\217\221\347\211\210dev/Vue.NetCore/Vue.Net/VOL.Core/Dapper/SqlDapper.cs" +++ "b/\345\274\200\345\217\221\347\211\210dev/Vue.NetCore/Vue.Net/VOL.Core/Dapper/SqlDapper.cs" @@ -580,13 +580,13 @@ namespace VOL.Core.Dapper columns = properties.Select(x => x.Name).ToArray(); } string sql = null; - if (DBType.Name == DbCurrentType.MySql.ToString()) + if (DBType.Name.Equals(nameof(DbCurrentType.MySql),StringComparison.OrdinalIgnoreCase)) { //mysql批量写入待优化 sql = $"insert into {entityType.GetEntityTableName()}({string.Join(",", columns)})" + $"values(@{string.Join(",@", columns)});"; } - else if (DBType.Name == DbCurrentType.PgSql.ToString()) + else if (DBType.Name.Equals(nameof(DbCurrentType.PgSql),StringComparison.OrdinalIgnoreCase)) { //todo pgsql批量写入 待检查是否正确 sql = $"insert into {entityType.GetEntityTableName()}({"\"" + string.Join("\",\"", columns) + "\""})" + @@ -603,7 +603,7 @@ namespace VOL.Core.Dapper return Execute((conn, dbTransaction) => { //todo pgsql待实现 - return conn.Execute(sql, (DBType.Name == DbCurrentType.MySql.ToString() || DBType.Name == DbCurrentType.PgSql.ToString()) ? entities.ToList() : null, dbTransaction); + return conn.Execute(sql, (DBType.Name.Equals(nameof(DbCurrentType.MySql),StringComparison.OrdinalIgnoreCase) || DBType.Name.Equals(nameof(DbCurrentType.PgSql),StringComparison.OrdinalIgnoreCase)) ? entities.ToList() : null, dbTransaction); }, beginTransaction); } @@ -645,7 +645,7 @@ namespace VOL.Core.Dapper properties = properties.Where(x => updateFileds.GetExpressionToArray().Contains(x.Name)); } - if (DBType.Name == DbCurrentType.MySql.ToString()) + if (DBType.Name.Equals(nameof(DbCurrentType.MySql),StringComparison.OrdinalIgnoreCase)) { List paramsList = new List(); foreach (var item in properties) @@ -681,7 +681,7 @@ namespace VOL.Core.Dapper : $"'{string.Join("','", keys)}'"; string sql; // 2020.08.06增加pgsql删除功能 - if (DBType.Name == DbCurrentType.PgSql.ToString()) + if (DBType.Name.Equals(nameof(DbCurrentType.PgSql),StringComparison.OrdinalIgnoreCase)) { sql = $"DELETE FROM \"public\".\"{entityType.GetEntityTableName()}\" where \"{tKey}\" in ({joinKeys});"; } diff --git "a/\345\274\200\345\217\221\347\211\210dev/Vue.NetCore/Vue.Net/VOL.Core/Extensions/AutofacManager/AutofacContainerModuleExtension.cs" "b/\345\274\200\345\217\221\347\211\210dev/Vue.NetCore/Vue.Net/VOL.Core/Extensions/AutofacManager/AutofacContainerModuleExtension.cs" index a0169cd2..2eb95a74 100644 --- "a/\345\274\200\345\217\221\347\211\210dev/Vue.NetCore/Vue.Net/VOL.Core/Extensions/AutofacManager/AutofacContainerModuleExtension.cs" +++ "b/\345\274\200\345\217\221\347\211\210dev/Vue.NetCore/Vue.Net/VOL.Core/Extensions/AutofacManager/AutofacContainerModuleExtension.cs" @@ -64,7 +64,7 @@ namespace VOL.Core.Extensions builder.RegisterType().InstancePerLifetimeScope(); string connectionString = DBServerProvider.GetConnectionString(null); - if (DBType.Name == DbCurrentType.MySql.ToString()) + if (DBType.Name.Equals(nameof(DbCurrentType.MySql),StringComparison.OrdinalIgnoreCase)) { //2020.03.31增加dapper对mysql字段Guid映射 SqlMapper.AddTypeHandler(new DapperParseGuidTypeHandler()); @@ -74,7 +74,7 @@ namespace VOL.Core.Extensions //mysql8.x的版本使用Pomelo.EntityFrameworkCore.MySql 3.1会产生异常,需要在字符串连接上添加allowPublicKeyRetrieval=true services.AddDbContextPool(optionsBuilder => { optionsBuilder.UseMySql(connectionString); }, 64); } - else if (DBType.Name == DbCurrentType.PgSql.ToString()) + else if (DBType.Name.Equals(nameof(DbCurrentType.PgSql),StringComparison.OrdinalIgnoreCase)) { services.AddDbContextPool(optionsBuilder => { optionsBuilder.UseNpgsql(connectionString); }, 64); } diff --git "a/\345\274\200\345\217\221\347\211\210dev/Vue.NetCore/Vue.Net/VOL.Core/Infrastructure/DictionaryHandler.cs" "b/\345\274\200\345\217\221\347\211\210dev/Vue.NetCore/Vue.Net/VOL.Core/Infrastructure/DictionaryHandler.cs" index 5be1013b..df9ee4fc 100644 --- "a/\345\274\200\345\217\221\347\211\210dev/Vue.NetCore/Vue.Net/VOL.Core/Infrastructure/DictionaryHandler.cs" +++ "b/\345\274\200\345\217\221\347\211\210dev/Vue.NetCore/Vue.Net/VOL.Core/Infrastructure/DictionaryHandler.cs" @@ -45,7 +45,7 @@ namespace VOL.Core.Infrastructure /// public static string GetRolesSql() { - if (DBType.Name == DbCurrentType.PgSql.ToString()) + if (DBType.Name.Equals(nameof(DbCurrentType.PgSql),StringComparison.OrdinalIgnoreCase)) { return "SELECT \"Role_Id\" as key,\"RoleName\" as value from Sys_Role"; } diff --git "a/\345\274\200\345\217\221\347\211\210dev/Vue.NetCore/Vue.Net/VOL.System/Services/System/Partial/Sys_DictionaryService.cs" "b/\345\274\200\345\217\221\347\211\210dev/Vue.NetCore/Vue.Net/VOL.System/Services/System/Partial/Sys_DictionaryService.cs" index 8eb6e3cc..efbcff17 100644 --- "a/\345\274\200\345\217\221\347\211\210dev/Vue.NetCore/Vue.Net/VOL.System/Services/System/Partial/Sys_DictionaryService.cs" +++ "b/\345\274\200\345\217\221\347\211\210dev/Vue.NetCore/Vue.Net/VOL.System/Services/System/Partial/Sys_DictionaryService.cs" @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; using System.Threading.Tasks; @@ -116,7 +117,7 @@ namespace VOL.System.Services public object GetTableDictionary(Dictionary keyData) { // 2020.08.06增加pgsql获取数据源 - if (DBType.Name == DbCurrentType.PgSql.ToString()) + if (DBType.Name.Equals(nameof(DbCurrentType.PgSql),StringComparison.OrdinalIgnoreCase)) { return GetPgSqlTableDictionary(keyData); } @@ -124,7 +125,7 @@ namespace VOL.System.Services .Select(x => new { x.DicNo, x.DbSql }) .ToList(); List list = new List(); - string keySql = DBType.Name == DbCurrentType.MySql.ToString() ? "t.key" : "t.[key]"; + string keySql = DBType.Name.Equals(nameof(DbCurrentType.MySql),StringComparison.OrdinalIgnoreCase) ? "t.key" : "t.[key]"; dicInfo.ForEach(x => { if (keyData.TryGetValue(x.DicNo, out object[] data)) -- Gitee From fb3a986ecf9fd379162affae3807496d5f2dabce Mon Sep 17 00:00:00 2001 From: 3ddbz Date: Sun, 15 May 2022 00:34:30 +0800 Subject: [PATCH 3/9] =?UTF-8?q?=E6=BB=A1=E8=B6=B3=E6=9D=A1=E4=BB=B6?= =?UTF-8?q?=E6=9B=BF=E6=8D=A2([\s]+)AttributeBuilder.Append\([@]=3F"[\s]{7?= =?UTF-8?q?,}=20$1AttributeBuilder.Append('=20',SpaceLenOfIndented);\r\n$1?= =?UTF-8?q?AttributeBuilder.Append($1"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Core/Partial/Sys_TableInfoService.cs" | 34 +++++++++++++------ 1 file changed, 23 insertions(+), 11 deletions(-) diff --git "a/.Net6\347\211\210\346\234\254/VOL.Builder/Services/Core/Partial/Sys_TableInfoService.cs" "b/.Net6\347\211\210\346\234\254/VOL.Builder/Services/Core/Partial/Sys_TableInfoService.cs" index b84eaf41..5d5f5246 100644 --- "a/.Net6\347\211\210\346\234\254/VOL.Builder/Services/Core/Partial/Sys_TableInfoService.cs" +++ "b/.Net6\347\211\210\346\234\254/VOL.Builder/Services/Core/Partial/Sys_TableInfoService.cs" @@ -1543,17 +1543,22 @@ DISTINCT StringBuilder AttributeBuilder = new StringBuilder(); sysColumn = sysColumn.OrderByDescending(c => c.OrderNo).ToList(); bool addIgnore = false; + int SpaceLenOfIndented = 7; foreach (Sys_TableColumn column in sysColumn) { column.ColumnType = (column.ColumnType ?? "").Trim(); AttributeBuilder.Append("/// "); AttributeBuilder.Append("\r\n"); - AttributeBuilder.Append(" ///" + column.ColumnCnName + ""); + AttributeBuilder.Append(' ',SpaceLenOfIndented); + AttributeBuilder.Append("///" + column.ColumnCnName + ""); AttributeBuilder.Append("\r\n"); - AttributeBuilder.Append(" /// "); + AttributeBuilder.Append(' ',SpaceLenOfIndented); + AttributeBuilder.Append("/// "); AttributeBuilder.Append("\r\n"); - if (column.IsKey == 1) { AttributeBuilder.Append(@" [Key]" + ""); AttributeBuilder.Append("\r\n"); } - AttributeBuilder.Append(" [Display(Name =\"" + ( + if (column.IsKey == 1) { AttributeBuilder.Append(' ',SpaceLenOfIndented); + AttributeBuilder.Append(@"[Key]" + ""); AttributeBuilder.Append("\r\n"); } + AttributeBuilder.Append(' ',SpaceLenOfIndented); + AttributeBuilder.Append("[Display(Name =\"" + ( string.IsNullOrEmpty(column.ColumnCnName) ? column.ColumnName : column.ColumnCnName ) + "\")]"); AttributeBuilder.Append("\r\n"); @@ -1568,14 +1573,16 @@ DISTINCT if (column.ColumnType == "string" && column.Maxlength > 0 && column.Maxlength < 8000) { - AttributeBuilder.Append(" [MaxLength(" + column.Maxlength + ")]"); + AttributeBuilder.Append(' ',SpaceLenOfIndented); + AttributeBuilder.Append("[MaxLength(" + column.Maxlength + ")]"); AttributeBuilder.Append("\r\n"); } //不是数据列的,返回页面数据前不包含此列的数据 if (column.IsColumnData == 0 && createType == 1) { addIgnore = true; - AttributeBuilder.Append(" [JsonIgnore]"); + AttributeBuilder.Append(' ',SpaceLenOfIndented); + AttributeBuilder.Append("[JsonIgnore]"); AttributeBuilder.Append("\r\n"); } //[Column(TypeName="bigint")]如果与字段类型不同会产生异常 @@ -1584,7 +1591,8 @@ DISTINCT { if (!string.IsNullOrEmpty(tableColumnInfo.Prec_Scale) && !tableColumnInfo.Prec_Scale.EndsWith(",0")) { - AttributeBuilder.Append(" [DisplayFormat(DataFormatString=\"" + tableColumnInfo.Prec_Scale + "\")]"); + AttributeBuilder.Append(' ',SpaceLenOfIndented); + AttributeBuilder.Append("[DisplayFormat(DataFormatString=\"" + tableColumnInfo.Prec_Scale + "\")]"); AttributeBuilder.Append("\r\n"); } @@ -1614,7 +1622,8 @@ DISTINCT } } - AttributeBuilder.Append(" [Column(TypeName=\"" + tableColumnInfo.ColumnType + maxLength + "\")]"); + AttributeBuilder.Append(' ',SpaceLenOfIndented); + AttributeBuilder.Append("[Column(TypeName=\"" + tableColumnInfo.ColumnType + maxLength + "\")]"); AttributeBuilder.Append("\r\n"); @@ -1631,13 +1640,15 @@ DISTINCT if (column.EditRowNo != null) { - AttributeBuilder.Append(" [Editable(true)]"); + AttributeBuilder.Append(' ',SpaceLenOfIndented); + AttributeBuilder.Append("[Editable(true)]"); AttributeBuilder.Append("\r\n"); } // && column.ColumnType.ToLower() == "string" if (column.IsNull == 0 || (createType == 2 && column.ApiIsNull == 0)) { - AttributeBuilder.Append(" [Required(AllowEmptyStrings=false)]"); + AttributeBuilder.Append(' ',SpaceLenOfIndented); + AttributeBuilder.Append("[Required(AllowEmptyStrings=false)]"); AttributeBuilder.Append("\r\n"); } string columnType = (column.ColumnType == "Date" ? "DateTime" : column.ColumnType).Trim(); @@ -1658,7 +1669,8 @@ DISTINCT { columnType = "Guid" + (column.IsNull == 1 ? "?" : ""); } - AttributeBuilder.Append(" public " + columnType + " " + column.ColumnName + " { get; set; }"); + AttributeBuilder.Append(' ',SpaceLenOfIndented); + AttributeBuilder.Append("public " + columnType + " " + column.ColumnName + " { get; set; }"); AttributeBuilder.Append("\r\n\r\n "); } if (!string.IsNullOrEmpty(tableInfo.DetailName) && createType == 1) -- Gitee From e6ad065d2bca9888c9780ddb0d128d697f30687f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9D=88=E3=83=BE=E9=AD=82?= <283591387@qq.com> Date: Sat, 21 May 2022 14:10:07 +0000 Subject: [PATCH 4/9] update README.md. --- README.md | 50 +++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index a3adbd6d..487fefdc 100644 --- a/README.md +++ b/README.md @@ -33,73 +33,73 @@ ## App/H5开发 - http://v2.volcore.xyz/app/guide ## 框架移动端(uniapp)已发布,同样全自动生成代码 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/qrcode.png) -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/m001.png) -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/m002.png) +![Home](/imgs/qrcode.png) +![Home](/imgs/m001.png) +![Home](/imgs/m002.png) ## 框架已支持Vue3版本 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/v3.png) +![Home](/imgs/v3.png) ## 框架已增加低代码设计器 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/fd01.png) -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/fd02.png) +![Home](/imgs/fd01.png) +![Home](/imgs/fd02.png) ## 框架2.0已更新(部分新增功能截图) 增加切换皮肤功能 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/h.png) -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/home_them.png) +![Home](/imgs/h.png) +![Home](/imgs/home_them.png) 增加可复用的后台请求参数校验 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/validator.png) +![Home](/imgs/validator.png) 增加树形菜单与代码生成页面使用 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/x7tree.png) +![Home](/imgs/x7tree.png) 增加文本编辑器直接发布静态页面功能 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/editor.png) +![Home](/imgs/editor.png) 一对一多从表显示(只需要少量代码就可完成成,其他都由代码生成器生成) -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/m1.png) +![Home](/imgs/m1.png) 表合并显示 (只需要几行代码完成代码生成器生成的页面实现扩展) -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/span.png) +![Home](/imgs/span.png) 从图上传图片 (只需要几行代码完成代码生成器生成的页面实现扩展) -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/p1.png) +![Home](/imgs/p1.png) 一对多从表(不限从表数量)扩展 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/multi.png) +![Home](/imgs/multi.png) 图表 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/charts.png) +![Home](/imgs/charts.png) ## 1、只读基础表单 整个只读的基础表单的所有前后端代码,全部由代码生成器生成,代码生成器中几乎不需要配置,并支持并后端业务代码扩展,直接生成代码后,配置菜单权限即可 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/table1.png) +![Home](/imgs/table1.png) ## 2、自动绑定下拉框数据表单 整个自动绑定下拉框数据表单的所有前后端代码,全部由代码生成器生成,并支持并后端业务代码扩展,在代码生成器中只需要指定数据源编号,页面加载时会根据编号自动加载数据源并绑定 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/table2.png) +![Home](/imgs/table2.png) ## 3、启用图片支持、审核表单 整个启用图片支持、审核表单的所有前后端代码,全部由代码生成器生成,并支持并后端业务代码扩展,审核功能需要在菜单配置权限、代码生成器中勾选启用图片支持 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/table3.png) +![Home](/imgs/table3.png) ## 4、高级查询 整个表单的所有前后端代码,全部由代码生成器生成,并支持并后端业务代码扩展,查询字段、类型(下拉框、日期、TextArea等)、所在行与列都由代码生成器完成,不需要写任何代码 - ![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/tablesearch4.png) + ![Home](/imgs/tablesearch4.png) ## 5、主从表新建、编辑 主从表新建、编辑所有前后端代码,全部由代码生成器生成,并支持并后端业务代码扩展,新建、编辑从表配置、字段、类型(下拉框、日期、TextArea等)、所在行与列、字段是否只读、标签显示的长度等都由代码生成器完成,不需要写任何代码 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/editTbale2.png) +![Home](/imgs/editTbale2.png) ## 6、excel导入 excel导入整个页面都由代码生成器生成,导入的字段、字段是否必填,下载模板也由代码生成器上配置(自己根据实际需要决定是否采用此方法),导入时会验证是否为空与数据的合法性,逻辑校验自己实现扩展方法即可 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/importTable1.png) +![Home](/imgs/importTable1.png) ## 7、H5开发 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/h5.jpg) +![Home](/imgs/h5.jpg) ## 8、权限分配 目前只实现了对用户的角色的Action进行权限分配 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/auth.png) +![Home](/imgs/auth.png) ## 9、代码生成器 代码生成器提供了20多种可配置的属性,可灵活配置显示、查询、编辑、导入、导出、主从关系等功能点击看代码生成器文档 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/coder.png) +![Home](/imgs/coder.png) 其他功能。。。。。 -- Gitee From 9c8a2289dce606dc5923fd74121e41438c91a997 Mon Sep 17 00:00:00 2001 From: 3ddbz Date: Sun, 22 May 2022 14:06:51 +0800 Subject: [PATCH 5/9] =?UTF-8?q?=E5=88=A0=E9=99=A4vs=20=20.user=20.suo?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../VOL.Core/VOL.Core.csproj.user" | 10 --- .../FolderProfile.pubxml.user" | 12 --- .../VOL.WebApi/VOL.WebApi.csproj.user" | 15 ---- ".Net6\347\211\210\346\234\254/VOL.v12.suo" | Bin 84480 -> 0 bytes .gitignore | 71 ++++-------------- 5 files changed, 13 insertions(+), 95 deletions(-) delete mode 100644 ".Net6\347\211\210\346\234\254/VOL.Core/VOL.Core.csproj.user" delete mode 100644 ".Net6\347\211\210\346\234\254/VOL.WebApi/Properties/PublishProfiles/FolderProfile.pubxml.user" delete mode 100644 ".Net6\347\211\210\346\234\254/VOL.WebApi/VOL.WebApi.csproj.user" delete mode 100644 ".Net6\347\211\210\346\234\254/VOL.v12.suo" diff --git "a/.Net6\347\211\210\346\234\254/VOL.Core/VOL.Core.csproj.user" "b/.Net6\347\211\210\346\234\254/VOL.Core/VOL.Core.csproj.user" deleted file mode 100644 index 5b80dcc1..00000000 --- "a/.Net6\347\211\210\346\234\254/VOL.Core/VOL.Core.csproj.user" +++ /dev/null @@ -1,10 +0,0 @@ - - - - false - VOL.Core - - - ProjectDebugger - - \ No newline at end of file diff --git "a/.Net6\347\211\210\346\234\254/VOL.WebApi/Properties/PublishProfiles/FolderProfile.pubxml.user" "b/.Net6\347\211\210\346\234\254/VOL.WebApi/Properties/PublishProfiles/FolderProfile.pubxml.user" deleted file mode 100644 index 348f8bd1..00000000 --- "a/.Net6\347\211\210\346\234\254/VOL.WebApi/Properties/PublishProfiles/FolderProfile.pubxml.user" +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - <_PublishTargetUrl>E:\jxx\Vue.NetCore\Vue.Net\VOL.WebApi\bin\Release\netcoreapp3.1\publish\ - True|2022-05-04T06:22:09.8601614Z;True|2022-05-04T14:17:58.5839043+08:00;True|2022-05-04T14:04:46.6624577+08:00;True|2022-05-04T14:01:00.7514191+08:00;True|2022-05-04T13:38:17.6611755+08:00;True|2022-05-04T12:49:24.8764268+08:00;True|2022-05-04T12:46:59.8927233+08:00;False|2022-05-04T12:46:29.9426973+08:00;True|2022-05-04T12:45:13.9857344+08:00;True|2022-05-04T12:43:20.8195741+08:00;True|2022-05-04T12:37:57.5020415+08:00; - - \ No newline at end of file diff --git "a/.Net6\347\211\210\346\234\254/VOL.WebApi/VOL.WebApi.csproj.user" "b/.Net6\347\211\210\346\234\254/VOL.WebApi/VOL.WebApi.csproj.user" deleted file mode 100644 index 40ea130f..00000000 --- "a/.Net6\347\211\210\346\234\254/VOL.WebApi/VOL.WebApi.csproj.user" +++ /dev/null @@ -1,15 +0,0 @@ - - - - ProjectDebugger - - - VOL.WebApi - E:\jxx\Vue.NetCore\Vue.Net\VOL.WebApi\Properties\PublishProfiles\FolderProfile.pubxml - MvcControllerEmptyScaffolder - root/Common/MVC/Controller - - - ProjectDebugger - - \ No newline at end of file diff --git "a/.Net6\347\211\210\346\234\254/VOL.v12.suo" "b/.Net6\347\211\210\346\234\254/VOL.v12.suo" deleted file mode 100644 index 3797c9f4d18c8bb622aea74ca71c6880e5c9cad9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 84480 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 Bh7SM$ diff --git a/.gitignore b/.gitignore index f92c5e0b..ff2d221a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,58 +1,13 @@ -/Vol.Vue/node_modules -/Vue.Net/VOL.Web/bin -/Vue.Net/VOL.WebApi/bin -/Vue.Net/VOL.WebApi/Download/ExcelExport -/Vue.Net/VOL.WebApi/Download/Logger -/Vue.Net/VOL.WebApi/Download/SqlLog -/Vue.Net/VOL.WebApi/obj -/Vue.Net/.vs -/Vue.Net/VOL.Entity/bin -/Vue.Net/VOL.Entity/obj -/Vue.Net/VOL.AppManager/bin -/Vue.Net/VOL.AppManager/obj -/Vue.Net/VOL.Builder/obj -/Vue.Net/VOL.Builder/bin -/Vue.Net/VOL.Core/obj -/Vue.Net/VOL.Core/bin -/Vue.Net/VOL.Order/obj -/Vue.Net/VOL.Order/bin -/Vue.Net/VOL.System/obj -/Vue.Net/VOL.System/bin -/Vue.Net/VOL.Web/obj -/Vue.Net/VOL.WebApi/Download/* -/Vol.Vue/dist -/Vue.Net/VOL.WebApi/wwwroot/Upload/ -/Vue.Net/VOL.Web -/开发版dev/Vue.NetCore/Vol.Vue/node_modules -/开发版dev/Vue.NetCore/Vue.Net/VOL.System/bin -/开发版dev/Vue.NetCore/Vue.Net/VOL.WebApi/bin -/开发版dev/Vue.NetCore/Vue.Net/VOL.Entity/bin -/开发版dev/Vue.NetCore/Vue.Net/VOL.Builder/bin -/开发版dev/Vue.NetCore/Vue.Net/VOL.Core/obj -/开发版dev/Vue.NetCore/Vue.Net/VOL.Builder/obj -/开发版dev/Vue.NetCore/Vue.Net/VOL.Entity/obj -/开发版dev/Vue.NetCore/Vue.Net/VOL.System/obj -/开发版dev/Vue.NetCore/Vue.Net/VOL.WebApi/obj -/开发版dev/Vue.NetCore/Vue.Net/VOL.Core/bin -/_ReSharper.Caches/* -/.vs/* -/开发版dev/Vue.NetCore/Vue.Net/_ReSharper.Caches/* -/开发版dev/Vue.NetCore/Vue.Net/.vs/* -/Vue.Net/_ReSharper.Caches/ReSharperPlatformVs16192_607b9a31.VOL.00 -/开发版dev/Vue.NetCore/Vue.Net/VOL.WebApi/Download/Logger/Queue/WriteError -/开发版dev/Vue.NetCore/Vue.Net/.vs -/.Net6版本/.vs -/.Net6版本/VOL.AppManager/obj -/.Net6版本/VOL.AppManager/bin -/.Net6版本/VOL.Builder/obj -/.Net6版本/VOL.Builder/bin -/.Net6版本/VOL.Core/obj -/.Net6版本/VOL.Core/bin -/.Net6版本/VOL.Entity/obj -/.Net6版本/VOL.Entity/bin -/.Net6版本/VOL.Order/obj -/.Net6版本/VOL.Order/bin -/.Net6版本/VOL.System/obj -/.Net6版本/VOL.System/bin -/.Net6版本/VOL.WebApi/obj -/.Net6版本/VOL.WebApi/bin +dist +Upload +node_modules +Download +_ReSharper.Caches +.vs +obj +bin +*.user +/.Net6版本/*.suo +/.Net6版本/VOL.WebApi/Properties/PublishProfiles/*.user +/.Net6版本/VOL.WebApi/*.user +/.Net6版本/VOL.Core/*.user -- Gitee From b98c553a763d4c572d42fbb64dafa9e7260ac5e7 Mon Sep 17 00:00:00 2001 From: 3ddbz Date: Sun, 22 May 2022 16:12:09 +0800 Subject: [PATCH 6/9] =?UTF-8?q?=E7=A9=BA=E6=95=B0=E7=BB=84=E6=94=B9?= =?UTF-8?q?=E6=88=90Array.Empty()=20List.Count()=20=E6=94=B9=E6=88=90?= =?UTF-8?q?=20List.Count=20Array.Count()=20=E6=94=B9=E6=88=90=20Array.Leng?= =?UTF-8?q?th?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Services/System/Partial/Sys_DictionaryService.cs" | 5 +++-- .../VOL.System/Services/System/Partial/Sys_RoleService.cs" | 2 +- .../Controllers/AppManager/Partial/App_NewsController.cs" | 3 ++- .../VOL.WebApi/Controllers/Hubs/HomePageMessageHub.cs" | 6 +++--- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git "a/.Net6\347\211\210\346\234\254/VOL.System/Services/System/Partial/Sys_DictionaryService.cs" "b/.Net6\347\211\210\346\234\254/VOL.System/Services/System/Partial/Sys_DictionaryService.cs" index 8eb6e3cc..9f5859c0 100644 --- "a/.Net6\347\211\210\346\234\254/VOL.System/Services/System/Partial/Sys_DictionaryService.cs" +++ "b/.Net6\347\211\210\346\234\254/VOL.System/Services/System/Partial/Sys_DictionaryService.cs" @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; using System.Threading.Tasks; @@ -33,7 +34,7 @@ namespace VOL.System.Services public object GetVueDictionary(string[] dicNos) { - if (dicNos == null || dicNos.Count() == 0) return new string[] { }; + if (dicNos == null || dicNos.Length == 0) return Array.Empty(); var dicConfig = DictionaryManager.GetDictionaries(dicNos, false).Select(s => new { dicNo = s.DicNo, diff --git "a/.Net6\347\211\210\346\234\254/VOL.System/Services/System/Partial/Sys_RoleService.cs" "b/.Net6\347\211\210\346\234\254/VOL.System/Services/System/Partial/Sys_RoleService.cs" index 0daa8e87..0012058c 100644 --- "a/.Net6\347\211\210\346\234\254/VOL.System/Services/System/Partial/Sys_RoleService.cs" +++ "b/.Net6\347\211\210\346\234\254/VOL.System/Services/System/Partial/Sys_RoleService.cs" @@ -298,7 +298,7 @@ namespace VOL.System.Services //标识缓存已更新 base.CacheContext.Add(roleId.GetRoleIdKey(), _version); - _responseContent.OK($"保存成功:新增加配菜单权限{addCount}条,更新菜单{updateCount}条,删除权限{delAuths.Count()}条"); + _responseContent.OK($"保存成功:新增加配菜单权限{addCount}条,更新菜单{updateCount}条,删除权限{delAuths.Count}条"); } catch (Exception ex) { diff --git "a/.Net6\347\211\210\346\234\254/VOL.WebApi/Controllers/AppManager/Partial/App_NewsController.cs" "b/.Net6\347\211\210\346\234\254/VOL.WebApi/Controllers/AppManager/Partial/App_NewsController.cs" index 299bd6cc..e7e8c794 100644 --- "a/.Net6\347\211\210\346\234\254/VOL.WebApi/Controllers/AppManager/Partial/App_NewsController.cs" +++ "b/.Net6\347\211\210\346\234\254/VOL.WebApi/Controllers/AppManager/Partial/App_NewsController.cs" @@ -7,6 +7,7 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; +using System; using System.Linq; using System.Threading.Tasks; using VOL.AppManager.IRepositories; @@ -76,7 +77,7 @@ namespace VOL.AppManager.Controllers ?.ToList(); if (data == null) { - return Json(new object[] { }); + return Json(Array.Empty()); } return Json(data); } diff --git "a/.Net6\347\211\210\346\234\254/VOL.WebApi/Controllers/Hubs/HomePageMessageHub.cs" "b/.Net6\347\211\210\346\234\254/VOL.WebApi/Controllers/Hubs/HomePageMessageHub.cs" index e53207d0..173c5cda 100644 --- "a/.Net6\347\211\210\346\234\254/VOL.WebApi/Controllers/Hubs/HomePageMessageHub.cs" +++ "b/.Net6\347\211\210\346\234\254/VOL.WebApi/Controllers/Hubs/HomePageMessageHub.cs" @@ -14,8 +14,8 @@ using VOL.System.IServices; namespace VOL.WebApi.Controllers.Hubs { /// - /// https://docs.microsoft.com/zh-cn/aspnet/core/signalr/introduction?view=aspnetcore-3.1 - /// https://docs.microsoft.com/zh-cn/aspnet/core/signalr/javascript-client?view=aspnetcore-6.0&tabs=visual-studio + /// + /// /// public class HomePageMessageHub : Hub { @@ -52,7 +52,7 @@ namespace VOL.WebApi.Controllers.Hubs /// /// /// - public override async Task OnDisconnectedAsync(Exception ex) + public override async Task OnDisconnectedAsync(Exception? ex) { //Console.WriteLine($"断开连接{Context.ConnectionId}"); //从组中删除 -- Gitee From 53a666336dd69d981ff5c7747b36fdec226f52ea Mon Sep 17 00:00:00 2001 From: 3ddbz Date: Sun, 22 May 2022 16:12:49 +0800 Subject: [PATCH 7/9] =?UTF-8?q?Nuget=E5=8C=85=E5=8D=87=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../VOL.AppManager/VOL.AppManager.csproj" | 8 +++--- .../VOL.Builder/VOL.Builder.csproj" | 10 +++---- .../VOL.Core/VOL.Core.csproj" | 28 +++++++++---------- .../VOL.Entity/VOL.Entity.csproj" | 8 +++--- .../VOL.System/VOL.System.csproj" | 10 +++---- .../VOL.WebApi/VOL.WebApi.csproj" | 8 ++++-- 6 files changed, 37 insertions(+), 35 deletions(-) diff --git "a/.Net6\347\211\210\346\234\254/VOL.AppManager/VOL.AppManager.csproj" "b/.Net6\347\211\210\346\234\254/VOL.AppManager/VOL.AppManager.csproj" index 5c93ecb8..09768577 100644 --- "a/.Net6\347\211\210\346\234\254/VOL.AppManager/VOL.AppManager.csproj" +++ "b/.Net6\347\211\210\346\234\254/VOL.AppManager/VOL.AppManager.csproj" @@ -18,10 +18,10 @@ - - - - + + + + diff --git "a/.Net6\347\211\210\346\234\254/VOL.Builder/VOL.Builder.csproj" "b/.Net6\347\211\210\346\234\254/VOL.Builder/VOL.Builder.csproj" index 60411738..a60fa44d 100644 --- "a/.Net6\347\211\210\346\234\254/VOL.Builder/VOL.Builder.csproj" +++ "b/.Net6\347\211\210\346\234\254/VOL.Builder/VOL.Builder.csproj" @@ -17,11 +17,11 @@ - - - - - + + + + + diff --git "a/.Net6\347\211\210\346\234\254/VOL.Core/VOL.Core.csproj" "b/.Net6\347\211\210\346\234\254/VOL.Core/VOL.Core.csproj" index a41f85e8..1f9c1ae2 100644 --- "a/.Net6\347\211\210\346\234\254/VOL.Core/VOL.Core.csproj" +++ "b/.Net6\347\211\210\346\234\254/VOL.Core/VOL.Core.csproj" @@ -35,26 +35,26 @@ - - - + + + - - - + + + - - - - + + + + - - + + - - + + diff --git "a/.Net6\347\211\210\346\234\254/VOL.Entity/VOL.Entity.csproj" "b/.Net6\347\211\210\346\234\254/VOL.Entity/VOL.Entity.csproj" index 89ba8aa7..eebbf824 100644 --- "a/.Net6\347\211\210\346\234\254/VOL.Entity/VOL.Entity.csproj" +++ "b/.Net6\347\211\210\346\234\254/VOL.Entity/VOL.Entity.csproj" @@ -21,10 +21,10 @@ - - - - + + + + diff --git "a/.Net6\347\211\210\346\234\254/VOL.System/VOL.System.csproj" "b/.Net6\347\211\210\346\234\254/VOL.System/VOL.System.csproj" index 04ba03a6..f32edc7b 100644 --- "a/.Net6\347\211\210\346\234\254/VOL.System/VOL.System.csproj" +++ "b/.Net6\347\211\210\346\234\254/VOL.System/VOL.System.csproj" @@ -17,11 +17,11 @@ - - - - - + + + + + diff --git "a/.Net6\347\211\210\346\234\254/VOL.WebApi/VOL.WebApi.csproj" "b/.Net6\347\211\210\346\234\254/VOL.WebApi/VOL.WebApi.csproj" index 0b7b2574..8ee89675 100644 --- "a/.Net6\347\211\210\346\234\254/VOL.WebApi/VOL.WebApi.csproj" +++ "b/.Net6\347\211\210\346\234\254/VOL.WebApi/VOL.WebApi.csproj" @@ -3,6 +3,8 @@ net6.0 enable + 51c29fac-5aae-45d7-912d-bb25567fcc4b + Linux @@ -18,9 +20,9 @@ - - - + + + -- Gitee From d5a112d2075df87731fa6702ede687d30f4efb38 Mon Sep 17 00:00:00 2001 From: 3ddbz Date: Sun, 22 May 2022 16:23:57 +0800 Subject: [PATCH 8/9] =?UTF-8?q?System.Drawing.Common=20=E5=8F=AA=E5=9C=A8W?= =?UTF-8?q?indows=E4=B8=AD=E8=B5=B7=E4=BD=9C=E7=94=A8=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../VOL.Core/Utilities/VierificationCode.cs" | 16 ++-- .../Utilities/VierificationCodeHelpers.cs" | 79 +++++++++++++++++++ .../Utilities/VierificationCodeServices.cs" | 4 +- .../VOL.Core/VOL.Core.csproj" | 1 + .../System/Partial/Sys_UserController.cs" | 16 ++-- 5 files changed, 96 insertions(+), 20 deletions(-) create mode 100644 ".Net6\347\211\210\346\234\254/VOL.Core/Utilities/VierificationCodeHelpers.cs" diff --git "a/.Net6\347\211\210\346\234\254/VOL.Core/Utilities/VierificationCode.cs" "b/.Net6\347\211\210\346\234\254/VOL.Core/Utilities/VierificationCode.cs" index 2e3f7506..b9861191 100644 --- "a/.Net6\347\211\210\346\234\254/VOL.Core/Utilities/VierificationCode.cs" +++ "b/.Net6\347\211\210\346\234\254/VOL.Core/Utilities/VierificationCode.cs" @@ -1,9 +1,8 @@ using System; -using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.IO; -using System.Text; +using System.Runtime.Versioning; namespace VOL.Core.Utilities { @@ -31,6 +30,8 @@ namespace VOL.Core.Utilities } return code; } + [SupportedOSPlatform("Windows")] + [Obsolete("仅在 Windows 上支持 System.Drawing.Common,具体请参考:https://docs.microsoft.com/zh-cn/dotnet/core/compatibility/core-libraries/6.0/system-drawing-common-windows-only")] public static string CreateBase64Imgage(string code) { Random random = new Random(); @@ -64,12 +65,11 @@ namespace VOL.Core.Utilities } g.DrawString(code.Substring(i, 1), f, b, 3 + (i * 12), ii);//绘制一个验证字符 } - using (MemoryStream stream = new MemoryStream()) - { - img.Save(stream, ImageFormat.Jpeg); - byte[] b = stream.ToArray(); - return Convert.ToBase64String(stream.ToArray()); - } + + using var stream = new MemoryStream(); + img.Save(stream, ImageFormat.Jpeg); + stream.TryGetBuffer(out ArraySegment buffer); + return Convert.ToBase64String(buffer.Array); } } } diff --git "a/.Net6\347\211\210\346\234\254/VOL.Core/Utilities/VierificationCodeHelpers.cs" "b/.Net6\347\211\210\346\234\254/VOL.Core/Utilities/VierificationCodeHelpers.cs" new file mode 100644 index 00000000..3bd2ebfe --- /dev/null +++ "b/.Net6\347\211\210\346\234\254/VOL.Core/Utilities/VierificationCodeHelpers.cs" @@ -0,0 +1,79 @@ +using System; +using System.IO; +using System.Linq; +using SkiaSharp; + +namespace VOL.Core.Utilities; + +public static class VierificationCodeHelpers +{ //验证码字体集合 + private static readonly string[] fonts = { "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋体" }; + + public static string CreateBase64Image(string code) + { + var random = new Random(); + var c = new SKColor[] { SKColors.Black, SKColors.Red, SKColors.DarkBlue, SKColors.Green, SKColors.Orange, SKColors.Brown, SKColors.DarkCyan, SKColors.Purple }; + + var info = new SKImageInfo((int)code.Length * 18, 32); + using var bitmap = new SKBitmap(info); + using var canvas = new SKCanvas(bitmap); + + canvas.Clear(SKColors.White); + + //贝塞尔线条 + for (int i = 0; i < 2; i++) + { + var p1 = new SKPoint(0, random.Next(bitmap.Height)); + var p2 = new SKPoint(random.Next(bitmap.Width), random.Next(bitmap.Height)); + var p3 = new SKPoint(random.Next(bitmap.Width), random.Next(bitmap.Height)); + var p4 = new SKPoint(bitmap.Width, random.Next(bitmap.Height)); + + var touchPoints = new SKPoint[] { p1, p2, p3, p4 }; + + using var bPen = new SKPaint(); + bPen.Color = random.GetRandom(c); + bPen.Style = SKPaintStyle.Stroke; + + using var path = new SKPath(); + path.MoveTo(touchPoints[0]); + path.CubicTo(touchPoints[1], touchPoints[2], touchPoints[3]); + canvas.DrawPath(path, bPen); + } + + //噪点 + Enumerable.Range(0, 100).AsParallel().ForAll(_ => + canvas.DrawPoint(random.Next(bitmap.Width), random.Next(bitmap.Height), SKColors.LightGray) + ); + + using var pen = new SKPaint(); + pen.FakeBoldText = true; + pen.TextSize = 0.9f * info.Width * pen.TextSize / pen.MeasureText(code); + for (int i = 0; i < code.Length; i++) + { + pen.Color = random.GetRandom(c);//随机颜色索引值 + pen.Typeface = SKTypeface.FromFamilyName(random.GetRandom(fonts), 700, 20, SKFontStyleSlant.Italic);//配置字体 + var point = new SKPoint() + { + X = i * 12, + Y = info.Height - ((i + 1) % 2 == 0 ? 2 : 4) + }; + //pen.MeasureText(code.Substring(i, 1), ref textBounds); + canvas.DrawText(code.Substring(i, 1), point, pen);//绘制一个验证字符 + } + return bitmap.ToBase64String(SKEncodedImageFormat.Png); + } + public static T GetRandom(this Random random, T[] tArray) + { + if (random == null) random = new Random(); + return tArray[random.Next(tArray.Length)]; + } + + public static string ToBase64String(this SKBitmap bitmap, SKEncodedImageFormat format) + { + using var memStream = new MemoryStream(); + using var wstream = new SKManagedWStream(memStream); + bitmap.Encode(wstream, format, 32); + memStream.TryGetBuffer(out ArraySegment buffer); + return $"{Convert.ToBase64String(buffer.Array, 0, (int)memStream.Length)}"; + } +} \ No newline at end of file diff --git "a/.Net6\347\211\210\346\234\254/VOL.Core/Utilities/VierificationCodeServices.cs" "b/.Net6\347\211\210\346\234\254/VOL.Core/Utilities/VierificationCodeServices.cs" index 2fe79554..a1b2b2b2 100644 --- "a/.Net6\347\211\210\346\234\254/VOL.Core/Utilities/VierificationCodeServices.cs" +++ "b/.Net6\347\211\210\346\234\254/VOL.Core/Utilities/VierificationCodeServices.cs" @@ -2,6 +2,7 @@ using System.DrawingCore; using System.DrawingCore.Imaging; using System.IO; +using System.Runtime.Versioning; namespace DotNet.Utilities { @@ -45,7 +46,8 @@ namespace DotNet.Utilities /// 该方法是将生成的随机数写入图像文件 /// /// code是一个随机数 - /// 生成位数(默认4位) + /// 生成位数(默认4位) + [SupportedOSPlatform("Windows")] public static MemoryStream Create(out string code, int numbers = 4) { code = RndNum(numbers); diff --git "a/.Net6\347\211\210\346\234\254/VOL.Core/VOL.Core.csproj" "b/.Net6\347\211\210\346\234\254/VOL.Core/VOL.Core.csproj" index 1f9c1ae2..18ba3930 100644 --- "a/.Net6\347\211\210\346\234\254/VOL.Core/VOL.Core.csproj" +++ "b/.Net6\347\211\210\346\234\254/VOL.Core/VOL.Core.csproj" @@ -54,6 +54,7 @@ + diff --git "a/.Net6\347\211\210\346\234\254/VOL.WebApi/Controllers/System/Partial/Sys_UserController.cs" "b/.Net6\347\211\210\346\234\254/VOL.WebApi/Controllers/System/Partial/Sys_UserController.cs" index 2f4afd6c..835c468c 100644 --- "a/.Net6\347\211\210\346\234\254/VOL.WebApi/Controllers/System/Partial/Sys_UserController.cs" +++ "b/.Net6\347\211\210\346\234\254/VOL.WebApi/Controllers/System/Partial/Sys_UserController.cs" @@ -1,27 +1,21 @@  -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Mvc; -using Microsoft.Extensions.Caching.Memory; -using Microsoft.Extensions.DependencyInjection; using System; using System.Collections.Concurrent; using System.Linq; -using System.Linq.Expressions; using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Caching.Memory; +using Microsoft.Extensions.DependencyInjection; using VOL.Core.CacheManager; using VOL.Core.Configuration; -using VOL.Core.Controllers.Basic; -using VOL.Core.DBManager; -using VOL.Core.EFDbContext; using VOL.Core.Enums; using VOL.Core.Extensions; using VOL.Core.Filters; -using VOL.Core.Infrastructure; using VOL.Core.ManageUser; using VOL.Core.ObjectActionValidator; using VOL.Core.Services; using VOL.Core.Utilities; -using VOL.Entity.AttributeManager; using VOL.Entity.DomainModels; using VOL.System.IRepositories; using VOL.System.IServices; @@ -169,7 +163,7 @@ namespace VOL.System.Controllers string code = VierificationCode.RandomText(); var data = new { - img = VierificationCode.CreateBase64Imgage(code), + img = VierificationCodeHelpers.CreateBase64Image(code), uuid = Guid.NewGuid() }; HttpContext.GetService().Set(data.uuid.ToString(), code, new TimeSpan(0, 5, 0)); -- Gitee From 3028b77a2fffcf119a3e016330aa65805033c08d Mon Sep 17 00:00:00 2001 From: 3ddbz Date: Sun, 22 May 2022 16:54:01 +0800 Subject: [PATCH 9/9] =?UTF-8?q?=E6=B7=BB=E5=8A=A0docker=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ".Net6\347\211\210\346\234\254/.dockerignore" | 25 ++++++++++++++ .../VOL.WebApi/Dockerfile" | 31 +++++++++++++++++ .../Properties/launchSettings.json" | 33 ++++++++++++------- .../VOL.WebApi/VOL.WebApi.csproj" | 1 + 4 files changed, 78 insertions(+), 12 deletions(-) create mode 100644 ".Net6\347\211\210\346\234\254/.dockerignore" create mode 100644 ".Net6\347\211\210\346\234\254/VOL.WebApi/Dockerfile" diff --git "a/.Net6\347\211\210\346\234\254/.dockerignore" "b/.Net6\347\211\210\346\234\254/.dockerignore" new file mode 100644 index 00000000..3729ff0c --- /dev/null +++ "b/.Net6\347\211\210\346\234\254/.dockerignore" @@ -0,0 +1,25 @@ +**/.classpath +**/.dockerignore +**/.env +**/.git +**/.gitignore +**/.project +**/.settings +**/.toolstarget +**/.vs +**/.vscode +**/*.*proj.user +**/*.dbmdl +**/*.jfm +**/azds.yaml +**/bin +**/charts +**/docker-compose* +**/Dockerfile* +**/node_modules +**/npm-debug.log +**/obj +**/secrets.dev.yaml +**/values.dev.yaml +LICENSE +README.md \ No newline at end of file diff --git "a/.Net6\347\211\210\346\234\254/VOL.WebApi/Dockerfile" "b/.Net6\347\211\210\346\234\254/VOL.WebApi/Dockerfile" new file mode 100644 index 00000000..408f5813 --- /dev/null +++ "b/.Net6\347\211\210\346\234\254/VOL.WebApi/Dockerfile" @@ -0,0 +1,31 @@ +#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging. + + +FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base +RUN apt-get update; apt-get install libfontconfig1 -y + +WORKDIR /app +EXPOSE 9991 + +FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build +WORKDIR /src +COPY ["VOL.WebApi/VOL.WebApi.csproj", "VOL.WebApi/"] +COPY ["VOL.System/VOL.System.csproj", "VOL.System/"] +COPY ["VOL.Core/VOL.Core.csproj", "VOL.Core/"] +COPY ["VOL.Entity/VOL.Entity.csproj", "VOL.Entity/"] +COPY ["VOL.Order/VOL.Order.csproj", "VOL.Order/"] +COPY ["VOL.AppManager/VOL.AppManager.csproj", "VOL.AppManager/"] +COPY ["VOL.Builder/VOL.Builder.csproj", "VOL.Builder/"] +RUN dotnet restore "VOL.WebApi/VOL.WebApi.csproj" + +COPY . . +WORKDIR "/src/VOL.WebApi" +RUN dotnet build "VOL.WebApi.csproj" -c Release -o /app/build + +FROM build AS publish +RUN dotnet publish "VOL.WebApi.csproj" -c Release -o /app/publish + +FROM base AS final +WORKDIR /app +COPY --from=publish /app/publish . +ENTRYPOINT ["dotnet", "VOL.WebApi.dll"] \ No newline at end of file diff --git "a/.Net6\347\211\210\346\234\254/VOL.WebApi/Properties/launchSettings.json" "b/.Net6\347\211\210\346\234\254/VOL.WebApi/Properties/launchSettings.json" index f47b4f7c..b2cce7a7 100644 --- "a/.Net6\347\211\210\346\234\254/VOL.WebApi/Properties/launchSettings.json" +++ "b/.Net6\347\211\210\346\234\254/VOL.WebApi/Properties/launchSettings.json" @@ -1,12 +1,4 @@ -{ - "iisSettings": { - "windowsAuthentication": false, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:1309", - "sslPort": 44318 - } - }, +{ "profiles": { "IIS Express": { "commandName": "IISExpress", @@ -18,10 +10,27 @@ "VOL.WebApi": { "commandName": "Project", "launchBrowser": true, - "applicationUrl": "https://localhost:5001;http://localhost:5000", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" - } + }, + "applicationUrl": "http://localhost:9991;" + }, + "Docker": { + "commandName": "Docker", + "launchBrowser": true, + "httpPort": 9991, + "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}", + "publishAllPorts": true, + "useSSL": false, + "sslPort": 44360 + } + }, + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:9991", + "sslPort": 44318 } } -} +} \ No newline at end of file diff --git "a/.Net6\347\211\210\346\234\254/VOL.WebApi/VOL.WebApi.csproj" "b/.Net6\347\211\210\346\234\254/VOL.WebApi/VOL.WebApi.csproj" index 8ee89675..1821f980 100644 --- "a/.Net6\347\211\210\346\234\254/VOL.WebApi/VOL.WebApi.csproj" +++ "b/.Net6\347\211\210\346\234\254/VOL.WebApi/VOL.WebApi.csproj" @@ -22,6 +22,7 @@ + -- Gitee