diff --git "a/.Net6\347\211\210\346\234\254/EF Core + Dapper \345\257\271\346\216\245\350\276\276\346\242\246\346\225\260\346\215\256\345\272\223.md" "b/.Net6\347\211\210\346\234\254/EF Core + Dapper \345\257\271\346\216\245\350\276\276\346\242\246\346\225\260\346\215\256\345\272\223.md" new file mode 100644 index 0000000000000000000000000000000000000000..bdca43bd69681fa7409cbdb6f81ae9639627762c --- /dev/null +++ "b/.Net6\347\211\210\346\234\254/EF Core + Dapper \345\257\271\346\216\245\350\276\276\346\242\246\346\225\260\346\215\256\345\272\223.md" @@ -0,0 +1,18 @@ +# EF Core + Dapper 对接达梦数据库 +1. 安装达梦数据库以及管理工具 + 下载地址:https://www.dameng.com/list_103.html + + 根据需求下载 + + ![image-20231114143759784](C:\Users\KR\AppData\Roaming\Typora\typora-user-images\image-20231114143759784.png) + + 已Windows为例,选择红框内容下载,选择CPU平台,操作系统,ISO包内部包含数据库安装文件以及7种数据库管理工具 + +2. 安装达梦数据库 + 参照官方文档:https://eco.dameng.com/document/dm/zh-cn/start/ + +3. 必坑指南 + 1) 安装数据库实例时,去掉大小写敏感(EF Core 对接大小敏感时会有各种问题),实例默认端口:5236,验证方式:达梦服务器验证,用户名:SYSDBA,口令:SYSDBA + 2) 模式名称(数据库名称)全部大写 + 3) 迁移数据库,先修改数据库兼容模式,修改COMPATIBLE_MODE为对应数据库( 0:none, 1:SQL92, 2:Oracle, 3:MS SQL Server, 4:MySQL, 5:DM6, 6:Teradata, 7:PG),默认为0 + windows目录:C:\dmdbms\data\DAMENG\dm.ini 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 5c93ecb8c5eb193f18cc6357c09fb66be6714157..0c12e0065aa73fd3c006efafe9d167690ed08385 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,7 +18,7 @@ - + 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 180d2a4a8818e23b5688afcfab6a51631d5b4a6d..ed1052d14070d1ff95478215c014b0938b8bc33d 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" @@ -121,6 +121,25 @@ namespace VOL.Builder.Services } } + /// + /// 2023.11.14 增加达梦获取表结构时区分当前所在模式 + /// + /// + /// + private string GetDMOwner() + { + try + { + string dbName = DBServerProvider.GetConnectionString().Split("schema=")[1].Split(";")[0]?.Trim(); + return dbName; + } + catch (Exception ex) + { + Console.WriteLine($"获取达梦数据库名异常:{ex.Message}"); + return ""; + } + } + /// /// 获取Mysql表结构信息 /// 2020.06.14增加对mysql数据类型double区分 @@ -155,6 +174,29 @@ DISTINCT table_name = ?tableName {GetMysqlTableSchema()};"; } + /// + /// 获取达梦表结构信息 2023.11.14 + /// + /// + private string GetDMModelInfo() + { + return $@"SELECT DISTINCT + IF(DATA_PRECISION IS NOT NULL, CONCAT(DATA_PRECISION,',',DATA_SCALE),'') as Prec_Scale, + CASE + WHEN data_type IN( 'BIT', 'BOOL','bit', 'bool') THEN 'bool' + WHEN data_type in('smallint','SMALLINT') THEN 'short' + WHEN data_type in('tinyint', 'TINYINT') THEN 'sbyte' + WHEN data_type IN('MEDIUMINT','mediumint', 'int','INT','year', 'Year') THEN 'int' + WHEN data_type in ( 'BIGINT','bigint') THEN 'bigint' + WHEN data_type IN('FLOAT', 'DECIMAL','float', 'decimal') THEN 'decimal' + WHEN data_type IN( 'DOUBLE', 'double') THEN 'double' + WHEN data_type IN('CHAR', 'VARCHAR', 'TINY TEXT', 'TEXT', 'MEDIUMTEXT', 'LONGTEXT', 'TINYBLOB', 'BLOB', 'MEDIUMBLOB', 'LONGBLOB', 'Time','char', 'varchar', 'tiny text', 'text', 'mediumtext', 'longtext', 'tinyblob', 'blob', 'mediumblob', 'longblob', 'time') THEN 'nvarchar' + WHEN data_type IN('Date', 'DateTime', 'TimeStamp','date', 'datetime', 'timestamp') THEN 'datetime' ELSE 'nvarchar' + END AS ColumnType, + Column_Name AS ColumnName + FROM user_tab_columns + WHERE table_name = :tableName "; + } /// /// 获取SqlServer表结构信息 @@ -297,6 +339,9 @@ DISTINCT case "PgSql": sql = GetPgSqlModelInfo(); break; + case "DM": + sql = GetDMModelInfo(); + break; default: sql = GetSqlServerModelInfo(); break; @@ -369,6 +414,10 @@ DISTINCT { sql = GetPgSqlStructure(tableName); } + else if (DBType.Name.ToLower() == DbCurrentType.DM.ToString().ToLower()) + { + sql = GetDMStructure(tableName); + } else { sql = GetSqlServerStructure(tableName); @@ -970,7 +1019,7 @@ DISTINCT 120 AS ColumnWidth, 0 AS OrderNo, CASE - WHEN IS_NULLABLE = 'NO' THEN + WHEN IS_NULLABLE = 'N' THEN 0 ELSE 1 END AS IsNull, CASE @@ -985,6 +1034,65 @@ DISTINCT order by ordinal_position"; } + /// + /// 获取达梦表结构信息 2023.11.14 + /// + /// + /// + /// + private string GetDMStructure(string tableName) + { + return $@"SELECT DISTINCT + tc.COLUMN_NAME AS ColumnName, + '{tableName}' as tableName, + IFNULL(col.COMMENTS,'') AS ColumnCnName, + CASE + WHEN data_type IN( 'BIT', 'BOOL', 'bit', 'bool') THEN + 'bool' + WHEN data_type in('smallint','SMALLINT') THEN 'short' + WHEN data_type in('tinyint','TINYINT') THEN 'sbyte' + WHEN data_type IN('MEDIUMINT','mediumint', 'int','INT','year', 'Year') THEN + 'int' + WHEN data_type in ( 'BIGINT','bigint') THEN + 'bigint' + WHEN data_type IN('FLOAT', 'DOUBLE', 'DECIMAL','float', 'double', 'decimal') THEN + 'decimal' + WHEN data_type IN('CHAR', 'VARCHAR', 'TINY TEXT', 'TEXT', 'MEDIUMTEXT', 'LONGTEXT', 'TINYBLOB', 'BLOB', 'MEDIUMBLOB', 'LONGBLOB', 'Time','char', 'varchar', 'tiny text', 'text', 'mediumtext', 'longtext', 'tinyblob', 'blob', 'mediumblob', 'longblob', 'time') THEN + 'string' + WHEN data_type IN('Date', 'DateTime', 'TimeStamp','date', 'datetime', 'timestamp') THEN + 'DateTime' ELSE 'string' + END AS ColumnType, + case WHEN DATA_LENGTH>8000 THEN 0 ELSE DATA_LENGTH end AS Maxlength, + CASE + WHEN c.constraint_type='P' THEN + 1 ELSE 0 + END AS IsKey, + CASE + WHEN tc.Column_Name IN( 'CreateID', 'ModifyID', '' ) + OR c.constraint_type='P' THEN + 0 ELSE 1 + END AS IsDisplay, + 1 AS IsColumnData, + 120 AS ColumnWidth, + 0 AS OrderNo, + CASE + WHEN NULLABLE = 'NO' THEN + 0 ELSE 1 + END AS IsNull, + CASE + WHEN c.constraint_type='P' THEN + 1 ELSE 0 + END AS IsReadDataset + FROM + user_tab_columns tc + INNER JOIN dba_tables t ON tc.TABLE_NAME=t.TABLE_NAME + LEFT JOIN dba_cons_columns cons ON tc.COLUMN_NAME=cons.COLUMN_NAME AND tc.TABLE_NAME=cons.TABLE_NAME + LEFT JOIN dba_constraints c ON c.constraint_name=cons.constraint_name + LEFT JOIN user_col_comments col ON tc.TABLE_NAME=col.TABLE_NAME AND tc.COLUMN_NAME=col.COLUMN_NAME + + WHERE tc.table_name = :tableName AND t.OWNER='{GetDMOwner()}'"; + } + /// /// 获取SqlServer表结构信息 /// @@ -1597,7 +1705,7 @@ DISTINCT if ((column.IsKey == 1 && (column.ColumnType == "uniqueidentifier")) || tableColumnInfo.ColumnType.ToLower() == "guid" - || (IsMysql() && column.ColumnType == "string" && column.Maxlength == 36)) + || ((IsMysql() || IsDM()) && column.ColumnType == "string" && column.Maxlength == 36)) { tableColumnInfo.ColumnType = "uniqueidentifier"; } @@ -1664,7 +1772,7 @@ DISTINCT if ((column.IsKey == 1 && (column.ColumnType == "uniqueidentifier")) || column.ColumnType == "guid" - || (IsMysql() && column.ColumnType == "string" && column.Maxlength == 36)) + || ((IsMysql() || IsDM()) && column.ColumnType == "string" && column.Maxlength == 36)) { columnType = "Guid" + (column.IsNull == 1 ? "?" : ""); } @@ -1890,6 +1998,12 @@ DISTINCT { return DBType.Name.ToLower() == DbCurrentType.MySql.ToString().ToLower(); } + + private static bool IsDM() + { + return DBType.Name.ToLower() == DbCurrentType.DM.ToString().ToLower(); + } + private WebResponseContent ValidColumnString(Sys_TableInfo tableInfo) { WebResponseContent webResponse = new WebResponseContent(true); @@ -1919,7 +2033,7 @@ DISTINCT return webResponse.Error($"明细表的字段[{tableColumn.ColumnName}]类型必须与主表的主键的类型相同"); } - if (!IsMysql()) return webResponse; + if (!IsMysql()|| !IsDM()) return webResponse; if (mainTableColumn.ColumnType?.ToLower() == "string" && tableColumn.Maxlength != 36) 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 6041173809c5ac68e56171b2e471cf4408db37a0..fb52a0ba75bf2fdbe90bc0b782747dd85ef34d4f 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" @@ -18,7 +18,7 @@ - + diff --git "a/.Net6\347\211\210\346\234\254/VOL.Core/DBManager/DBServerProvider.cs" "b/.Net6\347\211\210\346\234\254/VOL.Core/DBManager/DBServerProvider.cs" index 006d29d5aa814fb4550759a97744d1c33f419671..8890757dacd4322e04dd3b67592f6836a93123d1 100644 --- "a/.Net6\347\211\210\346\234\254/VOL.Core/DBManager/DBServerProvider.cs" +++ "b/.Net6\347\211\210\346\234\254/VOL.Core/DBManager/DBServerProvider.cs" @@ -1,4 +1,5 @@ -using Microsoft.EntityFrameworkCore; +using Dm; +using Microsoft.EntityFrameworkCore; using MySqlConnector; using Npgsql; using System; @@ -73,6 +74,10 @@ namespace VOL.Core.DBManager { return new NpgsqlConnection(connString); } + if (DBType.Name == DbCurrentType.DM.ToString()) + { + return new DmConnection(connString); + } return new SqlConnection(connString); } @@ -98,6 +103,10 @@ namespace VOL.Core.DBManager { return new NpgsqlConnection(connString); } + if (dbCurrentType == DbCurrentType.DM) + { + return new DmConnection(connString); + } return new SqlConnection(connString); } diff --git "a/.Net6\347\211\210\346\234\254/VOL.Core/Dapper/SqlDapper.cs" "b/.Net6\347\211\210\346\234\254/VOL.Core/Dapper/SqlDapper.cs" index 3b6879b406fdc9e446697a54358ed03f6a9be3eb..37fe3aa52026b0559e47eaaacbc2562948b4b946 100644 --- "a/.Net6\347\211\210\346\234\254/VOL.Core/Dapper/SqlDapper.cs" +++ "b/.Net6\347\211\210\346\234\254/VOL.Core/Dapper/SqlDapper.cs" @@ -1,5 +1,6 @@  using Dapper; +using Dm; using MySqlConnector; using System; using System.Collections.Generic; @@ -719,6 +720,7 @@ namespace VOL.Core.Dapper { tmpPath = tmpPath.ReplacePath(); } + if (DBType.Name == "MySql") { return MySqlBulkInsert(table, tableName, fileName, tmpPath); @@ -729,6 +731,12 @@ namespace VOL.Core.Dapper PGSqlBulkInsert(table, tableName); return table.Rows.Count; } + + if (DBType.Name == "DM") + { + return DMBulkInsert(table, tableName); + } + return MSSqlBulkInsert(table, tableName, sqlBulkCopyOptions ?? SqlBulkCopyOptions.KeepIdentity); } @@ -800,6 +808,54 @@ namespace VOL.Core.Dapper } return insertCount; } + + /// + /// 达梦大批量数据插入,返回成功插入行数 + /// + /// + /// + /// + /// + private int DMBulkInsert(DataTable table, string tableName) + { + if (table.Rows.Count == 0) return 0; + + try + { + using (var Connection = DBServerProvider.GetDbConnection(_connectionString, DbCurrentType.DM)) + { + if (Connection.State == ConnectionState.Closed) + { + Connection.Open(); + } + using (IDbTransaction tran = Connection.BeginTransaction()) + { + using (var bulk = new DmBulkCopy(Connection as DmConnection)) + { + //设置插入的目标表 + bulk.DestinationTableName = tableName; + + //DataTable列名与数据库列名的映射 + for (int i = 0; i < table.Columns.Count; i++) + { + bulk.ColumnMappings.Add(table.Columns[i].ColumnName, table.Columns[i].ColumnName); + } + + //写入数据库 + bulk.WriteToServer(table); + tran.Commit(); + } + } + } + + return table.Rows.Count; + } + catch (Exception ex) + { + throw new Exception(ex.Message, ex.InnerException); + } + } + /// ///将DataTable转换为标准的CSV /// diff --git "a/.Net6\347\211\210\346\234\254/VOL.Core/EFDbContext/VOLContext.cs" "b/.Net6\347\211\210\346\234\254/VOL.Core/EFDbContext/VOLContext.cs" index c8631525dcd683288f5900a38cc83c6056350e45..484aa5fea4dcca7f6ff9041aba50827a513cae5b 100644 --- "a/.Net6\347\211\210\346\234\254/VOL.Core/EFDbContext/VOLContext.cs" +++ "b/.Net6\347\211\210\346\234\254/VOL.Core/EFDbContext/VOLContext.cs" @@ -80,6 +80,10 @@ namespace VOL.Core.EFDbContext { optionsBuilder.UseNpgsql(connectionString); } + else if (Const.DBType.Name == Enums.DbCurrentType.DM.ToString()) + { + optionsBuilder.UseDm(connectionString); + } else { optionsBuilder.UseSqlServer(connectionString); diff --git "a/.Net6\347\211\210\346\234\254/VOL.Core/Enums/DbCurrentType.cs" "b/.Net6\347\211\210\346\234\254/VOL.Core/Enums/DbCurrentType.cs" index a703fbaa0638d6a3073bb1b6fdf45e9b3c07fea8..a4109853fcc015b5aeda790ef5db72a96754260a 100644 --- "a/.Net6\347\211\210\346\234\254/VOL.Core/Enums/DbCurrentType.cs" +++ "b/.Net6\347\211\210\346\234\254/VOL.Core/Enums/DbCurrentType.cs" @@ -9,6 +9,7 @@ namespace VOL.Core.Enums Default = 0, MySql = 1, MsSql = 2,//2020.08.08修改sqlserver拼写 - PgSql = 3 + PgSql = 3, + DM=4 } } diff --git "a/.Net6\347\211\210\346\234\254/VOL.Core/Extensions/AutofacManager/AutofacContainerModuleExtension.cs" "b/.Net6\347\211\210\346\234\254/VOL.Core/Extensions/AutofacManager/AutofacContainerModuleExtension.cs" index 4f839fd1f06852850ffbc3d7983a97a4b9bf61cb..6efaeca3cc7e85715823643bdd79553c87f1d629 100644 --- "a/.Net6\347\211\210\346\234\254/VOL.Core/Extensions/AutofacManager/AutofacContainerModuleExtension.cs" +++ "b/.Net6\347\211\210\346\234\254/VOL.Core/Extensions/AutofacManager/AutofacContainerModuleExtension.cs" @@ -80,6 +80,11 @@ namespace VOL.Core.Extensions { services.AddDbContextPool(optionsBuilder => { optionsBuilder.UseNpgsql(connectionString); }, 64); } + else if (DBType.Name == DbCurrentType.DM.ToString()) + { + services.AddDbContextPool(optionsBuilder => { optionsBuilder.UseDm(connectionString); }, 64); + services.AddEntityFrameworkDm(); + } else { services.AddDbContextPool(optionsBuilder => { optionsBuilder.UseSqlServer(connectionString); }, 64); 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 4da4f3610be9d7881f9484ea708a1ab17394cb26..0e12aef7525c42cb59c02ab96f63a94e5439e8e3 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" @@ -41,11 +41,12 @@ + - + 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 4d0fc61037d8a9b45824636690573aabe8da5f21..80f88bc8f2dad618352b63a234923644f0879d63 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,7 +21,7 @@ - + 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 04ba03a6551fea078c83c7c4bcb4441880ef45b3..78f9917cc3c5d9f276f1a4c33f3df19038db0011 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" @@ -18,7 +18,7 @@ - + diff --git "a/.Net6\347\211\210\346\234\254/VOL.WebApi/appsettings.json" "b/.Net6\347\211\210\346\234\254/VOL.WebApi/appsettings.json" index 655d26477067aaa3f17cdb9fb851b8d656a3962d..f2d0057b0d7c54bd06883d5f5cefb23228f10d32 100644 --- "a/.Net6\347\211\210\346\234\254/VOL.WebApi/appsettings.json" +++ "b/.Net6\347\211\210\346\234\254/VOL.WebApi/appsettings.json" @@ -14,7 +14,7 @@ "AppUrls": { }, "Connection": { - "DBType": "MsSql", //MySql/MsSql/PgSql //数据库类型,如果使用的是sqlserver此处应设置为MsSql + "DBType": "MsSql", //MySql/MsSql/PgSql/DM //数据库类型,如果使用的是sqlserver此处应设置为MsSql //sqlserver连接字符串 "DbConnectionString": "Data Source=JXX2835\\SQLEXPRESS;Initial Catalog=netcoredev;Persist Security Info=True;User ID=sa;Password=123456;Connect Timeout=500;", @@ -23,6 +23,10 @@ //PgSql连接字符串 // "DbConnectionString": "Host=132.232.2.109;Port=5432;User id=postgres;password=jxx_abcd;Database=netcoredev;", + + //达梦 连接字符串 + // "DbConnectionString": "Server=127.0.0.1:5236; schema=netcoredev; User=SYSDBA; Password=SYSDBA;", + "RedisConnectionString": "127.0.0.1,Password=123456,SyncTimeout=15000", //redis连接字符串(最好加密) "UseRedis": "false", //是否使用redis,如果不使用,默认使用Memory内置缓存 "UseSignalR": "true" //是否使用SignalR(2022.05.03),注意需要将端的地址配置到下面的CorsUrls属性中 diff --git a/README.md b/README.md index 4a10ddd66fd00a7588653f7bbe322a89e0c0cf84..09bf3a4620ac7a2d7c6d177833298a28a187dd73 100644 --- a/README.md +++ b/README.md @@ -40,83 +40,83 @@ App、H5、微信小程序: [http://v2.volcore.xyz/app/guide](http://v2.volcore. sqlsugar: [https://www.donet5.com/](https://www.donet5.com/) ## 2023.05.13增加审批流程分支、条件功能 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/flow.png) -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/flow2.png) -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/flow3.png) +![Home](/imgs/flow.png) +![Home](/imgs/flow2.png) +![Home](/imgs/flow3.png) ## 框架移动端(uniapp)已发布,同样全自动生成代码,扫描小程序二维码即可查看 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/qrcode.png) +![Home](/imgs/qrcode.png) -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/app-01.png) -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/app-02.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/app-01.png) +![Home](/imgs/app-02.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) 其他功能。。。。。