diff --git a/base-manager/src/main/java/com/mortals/xhx/base/framework/config/CrossInterceptor.java b/base-manager/src/main/java/com/mortals/xhx/base/framework/config/CrossInterceptor.java
index 038e575c7b81d75af05f6d595e30acf6ecc7fc9a..d2784d7287de70940ce556e6dbd97e1a13b9a1e7 100644
--- a/base-manager/src/main/java/com/mortals/xhx/base/framework/config/CrossInterceptor.java
+++ b/base-manager/src/main/java/com/mortals/xhx/base/framework/config/CrossInterceptor.java
@@ -11,7 +11,7 @@ import javax.servlet.http.HttpServletResponse;
  * @date: 2022/6/6 15:05
  * @description:娣诲姞璺ㄥ煙鍝嶅簲
  **/
-@Component
+//@Component
 public class CrossInterceptor extends HandlerInterceptorAdapter {
 
     @Override
diff --git a/base-manager/src/main/java/com/mortals/xhx/module/sms/model/SmsSetQuery.java b/base-manager/src/main/java/com/mortals/xhx/module/sms/model/SmsSetQuery.java
index ba20af0cb11788592b48dbf5438f56f8a17d682b..5d28bda622a2c31121b5982b7c20bb9f2dd421b3 100644
--- a/base-manager/src/main/java/com/mortals/xhx/module/sms/model/SmsSetQuery.java
+++ b/base-manager/src/main/java/com/mortals/xhx/module/sms/model/SmsSetQuery.java
@@ -932,36 +932,5 @@ public class SmsSetQuery extends SmsSetEntity {
         }
 
 
-    /**
-    * 鑾峰彇 OR鏉′欢闆嗗悎锛屽垪琛ㄩ」涔嬮棿鏄疧R锛岄」鍐呭涔嬮棿鏄疉ND锛屽锛�(list[0].1 and list[0].2) or (list[1].3 and list[1].4)
-    * @return orConditionList
-    */
-    public List<SmsSetQuery> getOrConditionList(){
-    return this.orConditionList;
-    }
-
-    /**
-    * 璁剧疆 OR鏉′欢闆嗗悎锛屽垪琛ㄩ」涔嬮棿鏄疧R锛岄」鍐呭涔嬮棿鏄疉ND锛屽锛�(list[0].1 and list[0].2) or (list[1].3 and list[1].4)
-    * @param orConditionList
-    */
-    public void setOrConditionList(List<SmsSetQuery> orConditionList){
-        this.orConditionList = orConditionList;
-    }
-
-    /**
-    * 鑾峰彇 AND鏉′欢闆嗗悎锛屽垪琛ㄩ」涔嬮棿鏄疉ND锛岄」鍐呭涔嬮棿鏄疧R锛屽锛�(list[0].1 or list[0].2) and (list[1].3 or list[1].4)
-    * @return andConditionList
-    */
-    public List<SmsSetQuery> getAndConditionList(){
-        return this.andConditionList;
-    }
-
-    /**
-    * 璁剧疆 AND鏉′欢闆嗗悎锛屽垪琛ㄩ」涔嬮棿鏄疉ND锛岄」鍐呭涔嬮棿鏄疧R锛屽锛�(list[0].1 or list[0].2) and (list[1].3 or list[1].4)
-    * @param andConditionList
-    */
-    public void setAndConditionList(List<SmsSetQuery> andConditionList){
-        this.andConditionList = andConditionList;
-    }
 
 }
\ No newline at end of file
diff --git a/common-lib/src/main/java/com/mortals/xhx/utils/SpringUtils.java b/common-lib/src/main/java/com/mortals/xhx/utils/SpringUtils.java
index 08eb180fd0b0e3a3d384293824a2b3a743bc4ed7..d7148e8e199bbd9c80c3c3bf58125c8b2e16cbde 100644
--- a/common-lib/src/main/java/com/mortals/xhx/utils/SpringUtils.java
+++ b/common-lib/src/main/java/com/mortals/xhx/utils/SpringUtils.java
@@ -1,47 +1,63 @@
 package com.mortals.xhx.utils;
 
+import cn.hutool.extra.spring.SpringUtil;
+import org.springframework.aop.framework.AopContext;
 import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.NoSuchBeanDefinitionException;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.ApplicationContextAware;
 import org.springframework.stereotype.Component;
 
-/**
- * @ClassName SpringUtils
- * @Description TODO
- * @Author finegirl
- * @Date 2020/4/24 15:32
- **/
 @Component
-public class SpringUtils implements ApplicationContextAware {
+public final class SpringUtils extends SpringUtil {
 
-    private static ApplicationContext applicationContext;
+    /**
+     * 濡傛灉BeanFactory鍖呭惈涓€涓笌鎵€缁欏悕绉板尮閰嶇殑bean瀹氫箟锛屽垯杩斿洖true
+     *
+     * @param name
+     * @return boolean
+     */
+    public static boolean containsBean(String name) {
+        return getBeanFactory().containsBean(name);
+    }
 
-    @Override
-    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
-        SpringUtils.applicationContext = applicationContext;
+    /**
+     * 鍒ゆ柇浠ョ粰瀹氬悕瀛楁敞鍐岀殑bean瀹氫箟鏄竴涓猻ingleton杩樻槸涓€涓猵rototype銆�
+     * 濡傛灉涓庣粰瀹氬悕瀛楃浉搴旂殑bean瀹氫箟娌℃湁琚壘鍒帮紝灏嗕細鎶涘嚭涓€涓紓甯革紙NoSuchBeanDefinitionException锛�
+     *
+     * @param name
+     * @return boolean
+     */
+    public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException {
+        return getBeanFactory().isSingleton(name);
     }
 
-    public static ApplicationContext getApplicationContext() {
-        return applicationContext;
+    /**
+     * @param name
+     * @return Class 娉ㄥ唽瀵硅薄鐨勭被鍨�
+     */
+    public static Class<?> getType(String name) throws NoSuchBeanDefinitionException {
+        return getBeanFactory().getType(name);
     }
 
     /**
-     * 瀵瑰簲鐨勮绠$悊绫绘湁鍒悕鏃朵娇鐢�
+     * 濡傛灉缁欏畾鐨刡ean鍚嶅瓧鍦╞ean瀹氫箟涓湁鍒悕锛屽垯杩斿洖杩欎簺鍒悕
+     *
      * @param name
-     * @param <T>
-     * @return
-     * @throws BeansException
      */
-    @SuppressWarnings("unchecked")
-    public static <T> T getBean(String name) throws BeansException {
-        return (T) applicationContext.getBean(name);
+    public static String[] getAliases(String name) throws NoSuchBeanDefinitionException {
+        return getBeanFactory().getAliases(name);
     }
 
     /**
-     * 鍦ㄥ搴旂殑娉ㄨВ鍐呮湭浣跨敤鍒悕鏃� 浣跨敤
+     * 鑾峰彇aop浠g悊瀵硅薄
+     *
+     * @param invoker
+     * @return
      */
-    public static <T> T getBean(Class<T> clazz) {
-        return applicationContext.getBean(clazz);
+    @SuppressWarnings("unchecked")
+    public static <T> T getAopProxy(T invoker) {
+        return (T) AopContext.currentProxy();
     }
 
 }
diff --git a/portal-manager/pom.xml b/portal-manager/pom.xml
index 248953aada154327b6fa2e59a4259427258c3093..1cfc48f69ff9086640348d852726a09f15d6152b 100644
--- a/portal-manager/pom.xml
+++ b/portal-manager/pom.xml
@@ -111,6 +111,16 @@
 			<version>2.3.31</version>
 		</dependency>
 
+		<dependency>
+			<groupId>com.github.xiaoymin</groupId>
+			<artifactId>knife4j-spring-boot-starter</artifactId>
+		</dependency>
+
+		<dependency>
+			<groupId>io.swagger</groupId>
+			<artifactId>swagger-annotations</artifactId>
+		</dependency>
+
 		<!--Token鐢熸垚涓庤В鏋�-->
 		<dependency>
 			<groupId>io.jsonwebtoken</groupId>
diff --git a/portal-manager/src/main/java/com/mortals/xhx/base/framework/interceptor/AuthUserInterceptor.java b/portal-manager/src/main/java/com/mortals/xhx/base/framework/interceptor/AuthUserInterceptor.java
index 6c4eef874324151774c6d86c0f1c5527e95e82bc..e148876b4c4921b8b8f1d8128ee09baedd2e7817 100644
--- a/portal-manager/src/main/java/com/mortals/xhx/base/framework/interceptor/AuthUserInterceptor.java
+++ b/portal-manager/src/main/java/com/mortals/xhx/base/framework/interceptor/AuthUserInterceptor.java
@@ -8,6 +8,7 @@ import com.mortals.framework.util.AESUtil;
 import com.mortals.framework.utils.ServletUtils;
 import com.mortals.framework.web.interceptor.BaseInterceptor;
 import com.mortals.xhx.base.framework.config.InterceptorConfig;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.util.ObjectUtils;
@@ -24,6 +25,7 @@ import java.lang.reflect.Method;
  * @date: 2022/4/24 11:04
  */
 @Component
+@Slf4j
 public class AuthUserInterceptor extends BaseInterceptor {
     @Autowired
     private InterceptorConfig config;
@@ -40,12 +42,14 @@ public class AuthUserInterceptor extends BaseInterceptor {
             throws Exception {
         JSONObject ret = new JSONObject();
         try {
-            HandlerMethod handlerMethod = (HandlerMethod) handler;
-            Method method = handlerMethod.getMethod();
-            UnAuth annotation = method.getAnnotation(UnAuth.class);
-            if (annotation != null) {
-                //鍙栨秷鏍¢獙
-                return true;
+            if(handler instanceof HandlerMethod){
+                HandlerMethod handlerMethod = (HandlerMethod) handler;
+                Method method = handlerMethod.getMethod();
+                UnAuth annotation = method.getAnnotation(UnAuth.class);
+                if (annotation != null) {
+                    //鍙栨秷鏍¢獙
+                    return true;
+                }
             }
             String uri = request.getServletPath();
             //鏍¢獙閰嶇疆鐨勮姹傝矾寰勬槸鍚﹂渶瑕佹鏌ユ潈闄�
@@ -71,7 +75,7 @@ public class AuthUserInterceptor extends BaseInterceptor {
                 }
             }
         } catch (Exception e) {
-            logger.error("鏉冮檺鏍¢獙鎷︽埅璇锋眰澶勭悊寮傚父-->" + e.getMessage());
+            log.error("鏉冮檺鏍¢獙鎷︽埅璇锋眰澶勭悊寮傚父-->" + e.getMessage(),e);
             writeJsonResponse(response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "鐢ㄦ埛鏉冮檺鏍¢獙寮傚父");
             return false;
         }
diff --git a/portal-manager/src/main/java/com/mortals/xhx/base/framework/config/CrossInterceptor.java b/portal-manager/src/main/java/com/mortals/xhx/base/framework/interceptor/CrossInterceptor.java
similarity index 68%
rename from portal-manager/src/main/java/com/mortals/xhx/base/framework/config/CrossInterceptor.java
rename to portal-manager/src/main/java/com/mortals/xhx/base/framework/interceptor/CrossInterceptor.java
index 038e575c7b81d75af05f6d595e30acf6ecc7fc9a..6449553a665ee3378c6829eb6ccecf2c6418abd1 100644
--- a/portal-manager/src/main/java/com/mortals/xhx/base/framework/config/CrossInterceptor.java
+++ b/portal-manager/src/main/java/com/mortals/xhx/base/framework/interceptor/CrossInterceptor.java
@@ -1,5 +1,6 @@
-package com.mortals.xhx.base.framework.config;
+package com.mortals.xhx.base.framework.interceptor;
 
+import com.mortals.framework.web.interceptor.BaseInterceptor;
 import org.springframework.stereotype.Component;
 import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
 
@@ -12,7 +13,7 @@ import javax.servlet.http.HttpServletResponse;
  * @description:娣诲姞璺ㄥ煙鍝嶅簲
  **/
 @Component
-public class CrossInterceptor extends HandlerInterceptorAdapter {
+public class CrossInterceptor extends BaseInterceptor {
 
     @Override
     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
@@ -23,4 +24,9 @@ public class CrossInterceptor extends HandlerInterceptorAdapter {
         response.setHeader("Access-Control-Allow-Credentials", "true");
         return true;
     }
+
+    @Override
+    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
+        super.afterCompletion(request, response, handler, ex);
+    }
 }
diff --git a/portal-manager/src/main/java/com/mortals/xhx/base/system/upload/service/impl/UploadServiceImpl.java b/portal-manager/src/main/java/com/mortals/xhx/base/system/upload/service/impl/UploadServiceImpl.java
index e27589a608041aef6a6fbdf045f55411f532847f..8db0f591d33a3d06c9c25733f4fe4b47fda080af 100644
--- a/portal-manager/src/main/java/com/mortals/xhx/base/system/upload/service/impl/UploadServiceImpl.java
+++ b/portal-manager/src/main/java/com/mortals/xhx/base/system/upload/service/impl/UploadServiceImpl.java
@@ -67,7 +67,6 @@ public class UploadServiceImpl implements UploadService {
         }
         String newName = new Date().getTime() + "." + extension;
         String filePathAll = filePath + newName;
-
         File uploadFile = new File(filePathAll);
         try {
             log.info("鏂囦欢姝e湪鍌ㄥ瓨锛宖ilepath:"+filePathAll);
diff --git a/portal-manager/src/main/java/com/mortals/xhx/module/menu/service/impl/MenuServiceImpl.java b/portal-manager/src/main/java/com/mortals/xhx/module/menu/service/impl/MenuServiceImpl.java
index 459bb5d57f863c9283f52d0f0579014e47e1ee63..599271cf4a85349d4c7486164124016735079655 100644
--- a/portal-manager/src/main/java/com/mortals/xhx/module/menu/service/impl/MenuServiceImpl.java
+++ b/portal-manager/src/main/java/com/mortals/xhx/module/menu/service/impl/MenuServiceImpl.java
@@ -28,6 +28,26 @@ import java.util.*;
 @Service("menuService")
 public class MenuServiceImpl extends AbstractCRUDServiceImpl<MenuDao, MenuEntity, Long> implements MenuService {
 
+
+    @Override
+    public int remove(Long[] ids, Context context) throws AppException {
+        //鍒犻櫎鍚庣骇鑱斿垹闄ゅ瓙鑺傜偣
+        Arrays.asList(ids).stream().forEach(id->{
+            menudelete(context, id);
+        });
+        return super.remove(ids, context);
+    }
+
+    private void menudelete(Context context, Long id) {
+        List<MenuEntity> menuEntityList = this.find(new MenuQuery().parentId(id));
+        if(!ObjectUtils.isEmpty(menuEntityList)){
+            this.remove(menuEntityList, context);
+            menuEntityList.forEach(item->{
+                menudelete(context,item.getId());
+            });
+        }
+    }
+
     @Override
     protected void findAfter(MenuEntity params, PageInfo pageInfo, Context context, List<MenuEntity> list) throws AppException {
         //鏌ヨ褰撳墠鐩綍绛夌骇
diff --git a/portal-manager/src/main/java/com/mortals/xhx/module/user/web/UserController.java b/portal-manager/src/main/java/com/mortals/xhx/module/user/web/UserController.java
index 3864f158f16112a2fa298fd585d425034442b9a8..52ff551c7c887604d111b71310159a773736ffbd 100644
--- a/portal-manager/src/main/java/com/mortals/xhx/module/user/web/UserController.java
+++ b/portal-manager/src/main/java/com/mortals/xhx/module/user/web/UserController.java
@@ -14,6 +14,8 @@ import com.mortals.xhx.module.role.model.RoleUserQuery;
 import com.mortals.xhx.module.role.service.RoleService;
 import com.mortals.xhx.module.role.service.RoleUserService;
 import com.mortals.xhx.module.user.model.UserEntityExt;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.util.ObjectUtils;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -51,6 +53,8 @@ import static com.mortals.framework.ap.SysConstains.*;
  * @author zxfei
  * @date 2022-05-25
  */
+@Api(value = "鐢ㄦ埛淇℃伅鎺у埗鍣�", tags = {"鐢ㄦ埛淇℃伅绠$悊"})
+
 @RestController
 @RequestMapping("user")
 public class UserController extends BaseCRUDJsonBodyMappingController<UserService, UserEntity, Long> {
@@ -64,7 +68,6 @@ public class UserController extends BaseCRUDJsonBodyMappingController<UserServic
     private RoleService roleService;
 
     public UserController() {
-        super.setFormClass(UserForm.class);
         super.setModuleDesc("鐢ㄦ埛淇℃伅涓氬姟");
     }
 
diff --git a/portal-manager/src/main/resources/bootstrap.yml b/portal-manager/src/main/resources/bootstrap.yml
index 12dbb154737197595516ba4b876285253e3415a3..46b96549f5e97d14e362a6a3e35d161937c27bc3 100644
--- a/portal-manager/src/main/resources/bootstrap.yml
+++ b/portal-manager/src/main/resources/bootstrap.yml
@@ -36,7 +36,6 @@ mybatis:
 
 application:
   auth:
-    unloginUrl: /refresh,/error,/login/login,/login/index,/login/logout,/securitycode/createCode,/file/common/*,/test*,/padsign/*,/terminal/*,/resource/list,/api/asset/*,/api/*,/flow/*,/uploads/*,/project/file/*,/file/*,/assessment/*
-    uncheckUrl: /refresh,/error,/login/login,/login/index,/login/logout,/securitycode/createCode,/file/common/*,/test*,/padsign/*,/terminal/*,/resource/list,/api/asset/*,/api/*,/flow/*,/uploads/*,/project/file/*,/file/*,/assessment/*
-
+    unloginUrl: /refresh,/error,/login/login,/login/index,/login/logout,/securitycode/createCode,/file/common/*,/test*,/padsign/*,/terminal/*,/resource/list,/api/asset/*,/api/*,/flow/*,/uploads/*,/project/file/*,/file/*,/doc.html
+    uncheckUrl: /refresh,/error,/login/login,/login/index,/login/logout,/securitycode/createCode,/file/common/*,/test*,/padsign/*,/terminal/*,/resource/list,/api/asset/*,/api/*,/flow/*,/uploads/*,/project/file/*,/file/*,/doc.html
 
diff --git a/portal-manager/src/test/java/com/mortals/httpclient/system.http b/portal-manager/src/test/java/com/mortals/httpclient/system.http
index 4b391891d15541ba8a50e68b74fd35979fb7edb4..6561bb22c93408d6e200d607c2b7571fdd1a8fc6 100644
--- a/portal-manager/src/test/java/com/mortals/httpclient/system.http
+++ b/portal-manager/src/test/java/com/mortals/httpclient/system.http
@@ -1,3 +1,13 @@
+POST {{baseUrl}}/file/commonupload
+Content-Type: multipart/form-data; boundary=WebAppBoundary
+
+--WebAppBoundary
+Content-Disposition: form-data; name="file"; filename="1.png"
+
+< ./1.png
+--WebAppBoundary--
+
+###
 
 ###鐧诲綍
 POST {{baseUrl}}/login/login