刷新丢失其它标签,前端页面优化
-
在layout/components/TagsView文件中的index.vue目录中,在methods方法中添加如下内容方法:
tagsViewCache() { window.addEventListener("beforeunload", () => { let tabViews = this.visitedViews.map(item => { return { fullPath: item.fullPath, hash: item.hash, meta: { ...item.meta }, name: item.name, params: { ...item.params }, path: item.path, query: { ...item.query }, title: item.title }; }); sessionStorage.setItem("tabViews", JSON.stringify(tabViews)); });
-
在mounted()方法中进行调用tagsViewCache()方法,内容如下
this.tagsViewCache();
-
注销时删除所有tagview,所以需要在layout/components文件中的Navbar.vue中的methods方法中的async logout()中添加如下内容:
// 注销时删除所有tagview await this.$store.dispatch('tagsView/delAllViews') sessionStorage.removeItem('tabViews') 修改路径为:this.$router.push("/login")
整合Swagger
-
在pom.xml文件中添加依赖
<!--Swagger文档工具--> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> <version>3.0.0</version> </dependency>
-
配置一个swagger配置类MySwaggerConfig.java,内容如下
package com.zz.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.oas.annotations.EnableOpenApi; import springfox.documentation.service.ApiInfo; import springfox.documentation.service.Contact; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; /** * ClassName:MySwaggerConfig * Package:com.zz.config * Description: 描述信息 * * @date:2023/5/18 9:27 * @author:ZZ */ @Configuration @EnableOpenApi @EnableWebMvc public class MySwaggerConfig { @Bean public Docket api() { return new Docket(DocumentationType.OAS_30) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage("com.zz"))//这里是包名 .paths(PathSelectors.any()) .build(); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("XXXX管理系统接口文档") .description("全网最简单的SpringBoot+Vue前后端分离项目实战") .version("1.0") .contact(new Contact("qqcn", "http://www.qqcn.cn", "qqcn@aliyun.com")) .build(); } }
-
控制器根据需要添加swagger注解
-
测试swagger地址:http://localhost:9999/swagger-ui/index.html
-
在每个方法上增加一个@ApiOperation(“xxx”),可以对该方法在swagger中进行说明。
-
完善swagger配置文件,使得可以携带token值。
package com.zz.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.oas.annotations.EnableOpenApi; import springfox.documentation.service.*; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spi.service.contexts.SecurityContext; import springfox.documentation.spring.web.plugins.Docket; import java.util.Collections; import java.util.List; /** * ClassName:MySwaggerConfig * Package:com.zz.config * Description: 描述信息 * * @date:2023/5/18 9:27 * @author:ZZ */ @Configuration @EnableOpenApi @EnableWebMvc public class MySwaggerConfig { @Bean public Docket api() { return new Docket(DocumentationType.OAS_30) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage("com.zz"))//这里是包名 .paths(PathSelectors.any()) .build() .securitySchemes(Collections.singletonList(securityScheme())) .securityContexts(Collections.singletonList(securityContext())); } private SecurityScheme securityScheme() { //return new ApiKey("Authorization", "Authorization", "header"); return new ApiKey("X-Token", "X-Token", "header"); } private SecurityContext securityContext() { return SecurityContext.builder() .securityReferences(defaultAuth()) .forPaths(PathSelectors.regex("^(?!auth).*$")) .build(); } private List<SecurityReference> defaultAuth() { AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything"); AuthorizationScope[] authorizationScopes = new AuthorizationScope[1]; authorizationScopes[0] = authorizationScope; return Collections.singletonList( new SecurityReference("X-Token", authorizationScopes)); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("XXXX管理系统接口文档") .description("全网最简单的SpringBoot+Vue前后端分离项目实战") .version("1.0") .contact(new Contact("qqcn", "http://www.qqcn.cn", "qqcn@aliyun.com")) .build(); } }