瀏覽代碼

Merge commit 'refs/pull/329/head' of https://gitee.com/zuohuaijun/Admin.NET into next

zuohuaijun 3 年之前
父節點
當前提交
005a17db44

+ 5 - 2
Admin.NET/Admin.NET.Core/Service/CodeGen/CodeGenConfigService.cs

@@ -8,9 +8,12 @@ public class CodeGenConfigService : IDynamicApiController, ITransient
 {
     private readonly SqlSugarRepository<SysCodeGenConfig> _sysCodeGenConfigRep;
 
-    public CodeGenConfigService(SqlSugarRepository<SysCodeGenConfig> sysCodeGenConfigRep)
+    private readonly ISqlSugarClient db;
+    public CodeGenConfigService(SqlSugarRepository<SysCodeGenConfig> sysCodeGenConfigRep,
+        ISqlSugarClient db)
     {
         _sysCodeGenConfigRep = sysCodeGenConfigRep;
+        this.db = db;
     }
 
     /// <summary>
@@ -123,7 +126,7 @@ public class CodeGenConfigService : IDynamicApiController, ITransient
             codeGenConfigs.Add(codeGenConfig);
         }
         //多库代码生成,这里要切回主库
-        _sysCodeGenConfigRep.Context.AsTenant().ChangeDatabase(SqlSugarConst.ConfigId);
+        db.AsTenant().ChangeDatabase(SqlSugarConst.ConfigId);
         _sysCodeGenConfigRep.Context.Insertable(codeGenConfigs).ExecuteCommand();
     }
 }

+ 14 - 12
Admin.NET/Admin.NET.Core/Service/CodeGen/CodeGenService.cs

@@ -12,17 +12,22 @@ public class CodeGenService : IDynamicApiController, ITransient
     private readonly IViewEngine _viewEngine;
     private readonly ICommonService _commonService;
 
+    private readonly ISqlSugarClient db;
+
     public CodeGenService(SqlSugarRepository<SysCodeGen> sysCodeGenRep,
         SqlSugarRepository<SysMenu> sysMenuRep,
         CodeGenConfigService codeGenConfigService,
         IViewEngine viewEngine,
-        ICommonService commonService)
+        ICommonService commonService,
+        ISqlSugarClient db)
     {
         _sysCodeGenRep = sysCodeGenRep;
         _sysMenuRep = sysMenuRep;
         _codeGenConfigService = codeGenConfigService;
         _viewEngine = viewEngine;
         _commonService = commonService;
+
+        this.db = db;
     }
 
     /// <summary>
@@ -124,10 +129,9 @@ public class CodeGenService : IDynamicApiController, ITransient
     public async Task<List<TableOutput>> GetTableList(string configId = SqlSugarConst.ConfigId)
     {
         //切库,多库代码生成用
-        if (configId != SqlSugarConst.ConfigId)
-            _sysCodeGenRep.Context.AsTenant().ChangeDatabase(configId);
+        db.AsTenant().ChangeDatabase(configId);
+        List<DbTableInfo> dbTableInfos = db.DbMaintenance.GetTableInfoList(false);//这里不能走缓存,否则切库不起作用
 
-        List<DbTableInfo> dbTableInfos = _sysCodeGenRep.Context.DbMaintenance.GetTableInfoList(false);//这里不能走缓存,否则切库不起作用
         List<string> dbTableNames = dbTableInfos.Select(x => x.Name).ToList();
 
         IEnumerable<EntityInfo> entityInfos = await _commonService.GetEntityInfos();
@@ -154,15 +158,13 @@ public class CodeGenService : IDynamicApiController, ITransient
     public List<TableColumnOuput> GetColumnListByTableName(string tableName, string configId = SqlSugarConst.ConfigId)
     {
         //切库,多库代码生成用
-        if (configId != SqlSugarConst.ConfigId)
-            _sysCodeGenRep.Context.AsTenant().ChangeDatabase(configId);
+        db.AsTenant().ChangeDatabase(configId);
 
         // 获取实体类型属性
-        var entityType = _sysCodeGenRep.Context.DbMaintenance.GetTableInfoList().FirstOrDefault(u => u.Name == tableName);
+        var entityType = db.DbMaintenance.GetTableInfoList(false).FirstOrDefault(u => u.Name == tableName);
         if (entityType == null) return null;
-
         // 按原始类型的顺序获取所有实体类型属性(不包含导航属性,会返回null)
-        return _sysCodeGenRep.Context.DbMaintenance.GetColumnInfosByTableName(entityType.Name).Select(u => new TableColumnOuput
+        return db.DbMaintenance.GetColumnInfosByTableName(entityType.Name).Select(u => new TableColumnOuput
         {
             ColumnName = u.DbColumnName,
             ColumnKey = u.IsPrimarykey.ToString(),
@@ -180,14 +182,14 @@ public class CodeGenService : IDynamicApiController, ITransient
     public List<TableColumnOuput> GetColumnList([FromQuery] AddCodeGenInput input)
     {
         //切库,多库代码生成用
-        if (!string.IsNullOrEmpty(input.ConfigId) && input.ConfigId != SqlSugarConst.ConfigId)
-            _sysCodeGenRep.Context.AsTenant().ChangeDatabase(input.ConfigId);
+        if (!string.IsNullOrEmpty(input.ConfigId))
+            db.AsTenant().ChangeDatabase(input.ConfigId);
 
         var entityType = _commonService.GetEntityInfos().Result.FirstOrDefault(m => m.EntityName == input.TableName);
         if (entityType == null)
             return null;
 
-        return _sysCodeGenRep.Context.DbMaintenance.GetColumnInfosByTableName(entityType.DbTableName, false).Select(u => new TableColumnOuput
+        return db.DbMaintenance.GetColumnInfosByTableName(entityType.DbTableName, false).Select(u => new TableColumnOuput
         {
             ColumnName = u.DbColumnName,
             ColumnKey = u.IsPrimarykey.ToString(),

+ 4 - 1
Vben2/src/views/sys/admin/code/CodeGenerateModal.vue

@@ -13,7 +13,7 @@
 <script lang="ts">
   import { defineComponent, ref, computed, unref } from 'vue';
   import { BasicForm, useForm } from '/@/components/Form/index';
-  import { codeFormSchema } from './codeGenerate.data';
+  import { codeFormSchema, convertDbType } from './codeGenerate.data';
   import { BasicModal, useModalInner } from '/@/components/Modal';
   import { addGenerate, updateGenerate } from '/@/api/sys/admin';
 
@@ -35,6 +35,9 @@
         isUpdate.value = !!data?.isUpdate;
 
         if (unref(isUpdate)) {
+          data.record.dbTypeString = data.record.dbType
+            ? convertDbType(parseInt(data.record.dbType))
+            : '';
           setFieldsValue({
             ...data.record,
           });

+ 50 - 1
Vben2/src/views/sys/admin/code/codeGenerate.data.ts

@@ -45,6 +45,46 @@ const apiDictTypeDropDown = async () => {
   return result;
 };
 
+export const convertDbType = (dbType: number) => {
+  let result = '';
+  switch (dbType) {
+    case 0:
+      result = 'MySql';
+      break;
+    case 1:
+      result = 'SqlServer';
+      break;
+    case 2:
+      result = 'Sqlite';
+      break;
+    case 3:
+      result = 'Oracle';
+      break;
+    case 4:
+      result = 'PostgreSql';
+      break;
+    case 5:
+      result = 'Dm';
+      break;
+    case 6:
+      result = 'Kdbndp';
+      break;
+    case 7:
+      result = 'Oscar';
+      break;
+    case 8:
+      result = 'MySqlConnector';
+      break;
+    case 9:
+      result = 'Access';
+      break;
+    default:
+      result = 'Custom';
+      break;
+  }
+  return result;
+};
+
 export const codeShowColumns: BasicColumn[] = [
   {
     title: '库定位器',
@@ -93,7 +133,9 @@ export const codeFormSchema: FormSchema[] = [
         },
         onChange: (e: any, option: any) => {
           formModel.tableName = undefined;
-          formModel.dbType = option.dbType;
+          formModel.dbTypeString = convertDbType(option.dbType);
+          //数据库是文本类型,此处转字符串否则序列化后会报错
+          formModel.dbType = option.dbType.toString();
           formModel.connectionString = option.connectionString;
           const { updateSchema } = formActionType;
           updateSchema([
@@ -143,6 +185,13 @@ export const codeFormSchema: FormSchema[] = [
     label: '数据库类型',
     component: 'Input',
     dynamicDisabled: true,
+    show: false,
+  },
+  {
+    field: 'dbTypeString',
+    label: '数据库类型',
+    component: 'Input',
+    dynamicDisabled: true,
   },
   {
     field: 'connectionString',