Explorar o código

!1533 修复部分已知bug
Merge pull request !1533 from 喵你个汪/next

zuohuaijun hai 1 ano
pai
achega
9733eedda5

+ 11 - 0
Admin.NET/Admin.NET.Core/Service/CodeGen/SysCodeGenService.cs

@@ -19,14 +19,17 @@ public class SysCodeGenService : IDynamicApiController, ITransient
     private readonly SysCodeGenConfigService _codeGenConfigService;
     private readonly CodeGenOptions _codeGenOptions;
     private readonly IViewEngine _viewEngine;
+    private readonly UserManager _userManager;
 
     public SysCodeGenService(ISqlSugarClient db,
         SysCodeGenConfigService codeGenConfigService,
         IOptions<CodeGenOptions> codeGenOptions,
+        UserManager userManager,
         IViewEngine viewEngine)
     {
         _db = db;
         _viewEngine = viewEngine;
+        _userManager = userManager;
         _codeGenOptions = codeGenOptions.Value;
         _codeGenConfigService = codeGenConfigService;
     }
@@ -455,12 +458,15 @@ public class SysCodeGenService : IDynamicApiController, ITransient
         await DeleteMenuTree(title, pid == 0 ? MenuTypeEnum.Dir : MenuTypeEnum.Menu);
 
         var parentMenuPath = "";
+        var appId = _userManager.AppId;
+        var appMenuList = new List<SysAppMenu>();
         var lowerClassName =  className[..1].ToLower() + className[1..];
         if (pid == 0)
         {
             // 新增目录,并记录Id
             var dirMenu = new SysMenu { Pid=0, Title=title, Type=MenuTypeEnum.Dir, Icon="robot", Path="/" + className.ToLower(), Component="Layout" };
             pid = (await _db.Insertable(dirMenu).ExecuteReturnEntityAsync()).Id;
+            appMenuList.Add(new SysAppMenu { AppId = appId, MenuId = pid });
         }
         else
         {
@@ -471,6 +477,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
         // 新增菜单,并记录Id
         var rootMenu = new SysMenu { Pid=pid, Title=title, Type=MenuTypeEnum.Menu, Icon=menuIcon, Path=$"{parentMenuPath}/{className.ToLower()}", Component=$"/{pagePath}/{lowerClassName}/index" };
         pid = (await _db.Insertable(rootMenu).ExecuteReturnEntityAsync()).Id;
+        appMenuList.Add(new SysAppMenu { AppId = appId, MenuId = pid });
 
         var orderNo = 100;
         var menuList = new List<SysMenu>
@@ -494,6 +501,10 @@ public class SysCodeGenService : IDynamicApiController, ITransient
             menuList.Add(new SysMenu { Title=$"上传{column.ColumnComment}", Permission=$"{lowerClassName}:upload{column.PropertyName}", Pid=pid, Type=MenuTypeEnum.Btn, OrderNo=orderNo+=10});
         
         await _db.Insertable(menuList).ExecuteCommandAsync();
+        
+        // 新增应用菜单关联
+        appMenuList.AddRange(menuList.Select(u => new SysAppMenu { AppId = appId, MenuId = u.Id }));
+        await _db.Insertable(appMenuList).ExecuteCommandAsync();
     }
 
     /// <summary>

+ 1 - 1
Admin.NET/Admin.NET.Core/Service/Menu/SysMenuService.cs

@@ -208,7 +208,7 @@ public class SysMenuService : IDynamicApiController, ITransient
         await _sysUserMenuService.DeleteMenuList(menuIdList);
         
         // 删除应用菜单关联
-        await _sysAppMenuRep.AsDeleteable().Where(u => u.MenuId == input.Id).ExecuteCommandAsync();
+        await _sysAppMenuRep.AsDeleteable().Where(u => menuIdList.Contains(u.MenuId)).ExecuteCommandAsync();
 
         // 清除缓存
         DeleteMenuCache();

+ 2 - 1
Web/src/layout/navBars/topBar/user.vue

@@ -75,7 +75,7 @@
 					<!-- <el-dropdown-item command="/dashboard/home">{{ $t('message.user.dropdown1') }}</el-dropdown-item> -->
 					<el-dropdown-item :icon="Avatar" command="/system/userCenter">{{ $t('message.user.dropdown2') }}</el-dropdown-item>
 					<el-dropdown-item :icon="Loading" command="clearCache">{{ $t('message.user.dropdown3') }}</el-dropdown-item>
-					<el-dropdown-item :icon="Switch" divided command="changeApp" v-auth="'sysApp:changeApp'">{{ $t('message.layout.changeApp') }}</el-dropdown-item>
+					<el-dropdown-item :icon="Switch" divided command="changeApp" v-if="auth('sysApp:changeApp')">{{ $t('message.layout.changeApp') }}</el-dropdown-item>
 					<el-dropdown-item :icon="Lock" divided command="lockScreen">{{ $t('message.layout.threeIsLockScreen') }}</el-dropdown-item>
 					<el-dropdown-item :icon="CircleCloseFilled" divided command="logOut">{{ $t('message.user.dropdown5') }}</el-dropdown-item>
 				</el-dropdown-menu>
@@ -105,6 +105,7 @@ import { Avatar, CircleCloseFilled, Loading, Lock, Switch } from '@element-plus/
 
 import { clearAccessTokens, getAPI } from '/@/utils/axios-utils';
 import { SysAuthApi, SysNoticeApi } from '/@/api-services/api';
+import {auth} from "/@/utils/authFunction";
 
 // 引入组件
 const UserNews = defineAsyncComponent(() => import('/@/layout/navBars/topBar/userNews.vue'));

+ 4 - 4
Web/src/views/system/codeGen/component/editCodeGenDialog.vue

@@ -10,7 +10,7 @@
 			<el-form :model="state.ruleForm" ref="ruleFormRef" label-width="auto">
 				<el-row :gutter="35">
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-						<el-form-item label="库定位器" prop="configId">
+						<el-form-item label="库定位器" prop="configId" :rules="[{ required: true, message: '请选择库定位器', trigger: 'blur' }]">
 							<el-select v-model="state.ruleForm.configId" placeholder="库名" filterable @change="dbChanged()" class="w100">
 								<el-option v-for="item in state.dbData" :key="item.configId" :label="item.configId" :value="item.configId" />
 							</el-select>
@@ -48,7 +48,7 @@
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
-						<el-form-item label="库地址" prop="connectionString">
+						<el-form-item label="库地址" prop="connectionString" :rules="[{ required: true, message: '库地址不能为空', trigger: 'blur' }]">
 							<el-input v-model="state.ruleForm.connectionString" disabled clearable type="textarea" />
 						</el-form-item>
 					</el-col>
@@ -60,7 +60,7 @@
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-						<el-form-item label="业务名" prop="busName">
+						<el-form-item label="业务名" prop="busName" :rules="[{ required: true, message: '业务名不能为空', trigger: 'blur' }]">
 							<el-input v-model="state.ruleForm.busName" placeholder="请输入" clearable />
 						</el-form-item>
 					</el-col>
@@ -106,7 +106,7 @@
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-						<el-form-item label="前端目录" prop="pagePath">
+						<el-form-item label="前端目录" prop="pagePath" :rules="[{ required: true, message: '前端目录不能为空', trigger: 'blur' }]">
 							<el-input v-model="state.ruleForm.pagePath" clearable placeholder="请输入" />
 						</el-form-item>
 					</el-col>