gitextract_6bk_xo_u/ ├── .gitignore ├── LICENSE ├── README.md ├── docker/ │ ├── mysql/ │ │ ├── conf.d/ │ │ │ └── my.cnf │ │ ├── docker-compose.yml │ │ └── geshanzsq_nav.sql │ ├── nginx/ │ │ ├── conf.d/ │ │ │ └── gesdh.cn.conf │ │ ├── docker-compose.yml │ │ └── nginx.conf │ ├── project/ │ │ ├── backend/ │ │ │ ├── Dockerfile │ │ │ ├── application-prod.yml │ │ │ ├── docker-compose.yml │ │ │ ├── geshanzsq-nav-admin-application.jar │ │ │ └── start.sh │ │ └── frontend/ │ │ ├── Dockerfile │ │ ├── docker-compose.yml │ │ ├── nginx/ │ │ │ └── nginx.conf │ │ └── start.sh │ ├── redis/ │ │ ├── docker-compose.yml │ │ └── redis.conf │ └── start.sh ├── geshanzsq-nav-admin/ │ ├── geshanzsq-nav-admin-application/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── geshanzsq/ │ │ │ └── admin/ │ │ │ ├── GeshanzsqNavAdminApplication.java │ │ │ ├── client/ │ │ │ │ ├── nav/ │ │ │ │ │ ├── constant/ │ │ │ │ │ │ └── NavClientConstant.java │ │ │ │ │ ├── controller/ │ │ │ │ │ │ ├── ClientNavCommentController.java │ │ │ │ │ │ └── ClientNavController.java │ │ │ │ │ ├── dto/ │ │ │ │ │ │ └── ClientNavCommentAddDTO.java │ │ │ │ │ ├── mapstruct/ │ │ │ │ │ │ └── ClientNavConverter.java │ │ │ │ │ ├── service/ │ │ │ │ │ │ ├── ClientNavService.java │ │ │ │ │ │ └── impl/ │ │ │ │ │ │ └── ClientNavServiceImpl.java │ │ │ │ │ ├── util/ │ │ │ │ │ │ ├── NavClientCategoryUtils.java │ │ │ │ │ │ └── NavClientUtils.java │ │ │ │ │ └── vo/ │ │ │ │ │ ├── ClientNavCommentTreeVO.java │ │ │ │ │ ├── NavCategoryClientVO.java │ │ │ │ │ ├── NavCategorySiteClientVO.java │ │ │ │ │ └── NavClientListVO.java │ │ │ │ └── search/ │ │ │ │ ├── controller/ │ │ │ │ │ └── ClientSearchController.java │ │ │ │ └── vo/ │ │ │ │ └── NavClientSiteSearchVO.java │ │ │ ├── core/ │ │ │ │ ├── bing/ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ └── BingController.java │ │ │ │ │ ├── util/ │ │ │ │ │ │ └── BingUtils.java │ │ │ │ │ └── vo/ │ │ │ │ │ └── BingImageVO.java │ │ │ │ ├── captcha/ │ │ │ │ │ ├── constant/ │ │ │ │ │ │ └── CaptchaConstant.java │ │ │ │ │ ├── controller/ │ │ │ │ │ │ └── CaptchaController.java │ │ │ │ │ └── vo/ │ │ │ │ │ └── CaptchaImageVO.java │ │ │ │ ├── config/ │ │ │ │ │ ├── InsertUpdateMyBatisInterceptorConfig.java │ │ │ │ │ ├── MyBatisPlusConfig.java │ │ │ │ │ └── XssFilterConfig.java │ │ │ │ ├── exception/ │ │ │ │ │ └── GlobalExceptionHandler.java │ │ │ │ └── security/ │ │ │ │ ├── auth/ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ └── AuthController.java │ │ │ │ │ ├── dto/ │ │ │ │ │ │ └── AuthLoginDTO.java │ │ │ │ │ ├── filter/ │ │ │ │ │ │ └── TokenAuthenticationFilter.java │ │ │ │ │ ├── service/ │ │ │ │ │ │ ├── AuthService.java │ │ │ │ │ │ └── impl/ │ │ │ │ │ │ ├── AuthServiceImpl.java │ │ │ │ │ │ └── UserDetailsServiceImpl.java │ │ │ │ │ └── vo/ │ │ │ │ │ └── AuthLoginVO.java │ │ │ │ └── config/ │ │ │ │ └── SecurityConfig.java │ │ │ └── nav/ │ │ │ ├── category/ │ │ │ │ ├── controller/ │ │ │ │ │ └── NavCategoryController.java │ │ │ │ ├── dto/ │ │ │ │ │ ├── NavCategoryAddDTO.java │ │ │ │ │ ├── NavCategoryListDTO.java │ │ │ │ │ └── NavCategoryUpdateDTO.java │ │ │ │ ├── mapper/ │ │ │ │ │ └── NavCategoryMapper.java │ │ │ │ ├── mapstrcut/ │ │ │ │ │ └── NavCategoryConverter.java │ │ │ │ ├── po/ │ │ │ │ │ └── NavCategory.java │ │ │ │ ├── service/ │ │ │ │ │ ├── NavCategoryService.java │ │ │ │ │ └── impl/ │ │ │ │ │ └── NavCategoryServiceImpl.java │ │ │ │ └── vo/ │ │ │ │ ├── NavCategoryTreeVO.java │ │ │ │ └── NavCategoryVO.java │ │ │ ├── comment/ │ │ │ │ ├── constant/ │ │ │ │ │ └── NavCommentConstant.java │ │ │ │ ├── controller/ │ │ │ │ │ └── NavCommentController.java │ │ │ │ ├── dto/ │ │ │ │ │ ├── NavCommentPageDTO.java │ │ │ │ │ └── NavCommentRejectDTO.java │ │ │ │ ├── enums/ │ │ │ │ │ └── NavCommentStatus.java │ │ │ │ ├── mapper/ │ │ │ │ │ └── NavCommentMapper.java │ │ │ │ ├── mapstruct/ │ │ │ │ │ └── NavCommentConverter.java │ │ │ │ ├── po/ │ │ │ │ │ └── NavComment.java │ │ │ │ ├── service/ │ │ │ │ │ ├── NavCommentService.java │ │ │ │ │ └── impl/ │ │ │ │ │ └── NavCommentServiceImpl.java │ │ │ │ └── vo/ │ │ │ │ └── NavCommentVO.java │ │ │ ├── config/ │ │ │ │ ├── controller/ │ │ │ │ │ └── NavSiteConfigController.java │ │ │ │ ├── dto/ │ │ │ │ │ └── NavSiteConfigUpdateDTO.java │ │ │ │ ├── mapper/ │ │ │ │ │ └── NavSiteConfigMapper.java │ │ │ │ ├── mapstruct/ │ │ │ │ │ └── NavSiteConfigConverter.java │ │ │ │ ├── po/ │ │ │ │ │ └── NavSiteConfig.java │ │ │ │ ├── service/ │ │ │ │ │ ├── NavSiteConfigService.java │ │ │ │ │ └── impl/ │ │ │ │ │ └── NavSiteConfigServiceImpl.java │ │ │ │ └── vo/ │ │ │ │ ├── NavSiteConfigAboutVO.java │ │ │ │ └── NavSiteConfigVO.java │ │ │ ├── index/ │ │ │ │ ├── controller/ │ │ │ │ │ └── NavIndexController.java │ │ │ │ ├── service/ │ │ │ │ │ ├── NavIndexService.java │ │ │ │ │ └── impl/ │ │ │ │ │ └── NavIndexServiceImpl.java │ │ │ │ └── vo/ │ │ │ │ └── NavIndexStatisticsVO.java │ │ │ ├── picture/ │ │ │ │ ├── constant/ │ │ │ │ │ └── NavPictureConstant.java │ │ │ │ ├── controller/ │ │ │ │ │ └── NavPictureController.java │ │ │ │ ├── mapper/ │ │ │ │ │ └── NavPictureMapper.java │ │ │ │ ├── mapstrcut/ │ │ │ │ │ └── NavPictureConverter.java │ │ │ │ ├── po/ │ │ │ │ │ └── NavPicture.java │ │ │ │ ├── service/ │ │ │ │ │ ├── NavPictureService.java │ │ │ │ │ └── impl/ │ │ │ │ │ └── NavPictureServiceImpl.java │ │ │ │ └── vo/ │ │ │ │ └── NavPictureUploadVO.java │ │ │ └── site/ │ │ │ ├── constant/ │ │ │ │ └── NavSiteClientConstant.java │ │ │ ├── controller/ │ │ │ │ └── NavSiteController.java │ │ │ ├── dto/ │ │ │ │ ├── NavSiteAddDTO.java │ │ │ │ ├── NavSiteListUserImportDTO.java │ │ │ │ ├── NavSitePageDTO.java │ │ │ │ ├── NavSiteUpdateDTO.java │ │ │ │ └── NavSiteUpdateSortDTO.java │ │ │ ├── mapper/ │ │ │ │ └── NavSiteMapper.java │ │ │ ├── mapstrcut/ │ │ │ │ └── NavSiteConverter.java │ │ │ ├── po/ │ │ │ │ └── NavSite.java │ │ │ ├── service/ │ │ │ │ ├── NavSiteService.java │ │ │ │ └── impl/ │ │ │ │ └── NavSiteServiceImpl.java │ │ │ └── vo/ │ │ │ ├── NavSiteClientVO.java │ │ │ ├── NavSiteLatestCollectVO.java │ │ │ ├── NavSiteMatchVO.java │ │ │ └── NavSiteVO.java │ │ └── resources/ │ │ ├── application-dev.yml │ │ ├── application-prod.yml │ │ ├── application.yml │ │ ├── i18n/ │ │ │ └── message.properties │ │ ├── logback-spring.xml │ │ └── mapper/ │ │ └── nav/ │ │ ├── category/ │ │ │ └── NavCategoryMapper.xml │ │ ├── config/ │ │ │ └── NavSiteConfigMapper.xml │ │ └── site/ │ │ └── NavSiteMapper.xml │ ├── geshanzsq-nav-admin-system/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── geshanzsq/ │ │ │ └── admin/ │ │ │ └── system/ │ │ │ ├── api/ │ │ │ │ ├── controller/ │ │ │ │ │ ├── SysApiCategoryController.java │ │ │ │ │ └── SysApiController.java │ │ │ │ ├── dto/ │ │ │ │ │ ├── SysApiAddDTO.java │ │ │ │ │ ├── SysApiCategoryAddDTO.java │ │ │ │ │ ├── SysApiCategoryPageDTO.java │ │ │ │ │ ├── SysApiCategoryUpdateDTO.java │ │ │ │ │ ├── SysApiPageDTO.java │ │ │ │ │ └── SysApiUpdateDTO.java │ │ │ │ ├── mapper/ │ │ │ │ │ ├── SysApiCategoryMapper.java │ │ │ │ │ ├── SysApiMapper.java │ │ │ │ │ └── SysApiMenuMapper.java │ │ │ │ ├── mapstruct/ │ │ │ │ │ ├── SysApiCategoryConverter.java │ │ │ │ │ └── SysApiConverter.java │ │ │ │ ├── po/ │ │ │ │ │ ├── SysApi.java │ │ │ │ │ ├── SysApiCategory.java │ │ │ │ │ └── SysApiMenu.java │ │ │ │ ├── service/ │ │ │ │ │ ├── SysApiCategoryService.java │ │ │ │ │ ├── SysApiMenuService.java │ │ │ │ │ ├── SysApiService.java │ │ │ │ │ └── impl/ │ │ │ │ │ ├── SysApiCategoryServiceImpl.java │ │ │ │ │ ├── SysApiMenuServiceImpl.java │ │ │ │ │ └── SysApiServiceImpl.java │ │ │ │ └── vo/ │ │ │ │ ├── SysApiCategoryVO.java │ │ │ │ └── SysApiVO.java │ │ │ ├── dictionary/ │ │ │ │ ├── controller/ │ │ │ │ │ ├── SysDictionaryController.java │ │ │ │ │ └── SysDictionaryDataController.java │ │ │ │ ├── dto/ │ │ │ │ │ ├── SysDictionaryAddDTO.java │ │ │ │ │ ├── SysDictionaryDataAddDTO.java │ │ │ │ │ ├── SysDictionaryDataPageDTO.java │ │ │ │ │ ├── SysDictionaryDataUpdateDTO.java │ │ │ │ │ ├── SysDictionaryPageDTO.java │ │ │ │ │ └── SysDictionaryUpdateDTO.java │ │ │ │ ├── mapper/ │ │ │ │ │ ├── SysDictionaryDataMapper.java │ │ │ │ │ └── SysDictionaryMapper.java │ │ │ │ ├── mapstruct/ │ │ │ │ │ ├── SysDictionaryConverter.java │ │ │ │ │ └── SysDictionaryDataConverter.java │ │ │ │ ├── po/ │ │ │ │ │ ├── SysDictionary.java │ │ │ │ │ └── SysDictionaryData.java │ │ │ │ ├── service/ │ │ │ │ │ ├── SysDictionaryDataService.java │ │ │ │ │ ├── SysDictionaryService.java │ │ │ │ │ └── impl/ │ │ │ │ │ ├── SysDictionaryDataServiceImpl.java │ │ │ │ │ └── SysDictionaryServiceImpl.java │ │ │ │ └── vo/ │ │ │ │ ├── DictionaryDataInfoVO.java │ │ │ │ ├── DictionaryInfoVO.java │ │ │ │ ├── SysDictionaryDataVO.java │ │ │ │ └── SysDictionaryVO.java │ │ │ ├── log/ │ │ │ │ ├── login/ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ └── LogLoginController.java │ │ │ │ │ ├── dto/ │ │ │ │ │ │ ├── LogLoginAddDTO.java │ │ │ │ │ │ └── LogLoginPageDTO.java │ │ │ │ │ ├── enums/ │ │ │ │ │ │ └── LogLoginStatus.java │ │ │ │ │ ├── factory/ │ │ │ │ │ │ └── LogLoginAsyncFactory.java │ │ │ │ │ ├── mapper/ │ │ │ │ │ │ └── LogLoginMapper.java │ │ │ │ │ ├── mapstruct/ │ │ │ │ │ │ └── LogLoginConverter.java │ │ │ │ │ ├── po/ │ │ │ │ │ │ └── LogLogin.java │ │ │ │ │ ├── service/ │ │ │ │ │ │ ├── LogLoginService.java │ │ │ │ │ │ └── impl/ │ │ │ │ │ │ └── LogLoginServiceImpl.java │ │ │ │ │ └── vo/ │ │ │ │ │ └── LogLoginVO.java │ │ │ │ └── operation/ │ │ │ │ ├── config/ │ │ │ │ │ └── LogMqConfig.java │ │ │ │ ├── controller/ │ │ │ │ │ └── LogOperationController.java │ │ │ │ ├── dto/ │ │ │ │ │ └── LogOperationPageDTO.java │ │ │ │ ├── mapper/ │ │ │ │ │ └── LogOperationMapper.java │ │ │ │ ├── mapstruct/ │ │ │ │ │ └── LogOperationConverter.java │ │ │ │ ├── mq/ │ │ │ │ │ └── LogOperationMq.java │ │ │ │ ├── po/ │ │ │ │ │ └── LogOperation.java │ │ │ │ ├── service/ │ │ │ │ │ ├── LogOperationService.java │ │ │ │ │ └── impl/ │ │ │ │ │ └── LogOperationServiceImpl.java │ │ │ │ └── vo/ │ │ │ │ └── LogOperationVo.java │ │ │ ├── menu/ │ │ │ │ ├── constant/ │ │ │ │ │ └── MenuConstant.java │ │ │ │ ├── controller/ │ │ │ │ │ └── SysMenuController.java │ │ │ │ ├── dto/ │ │ │ │ │ ├── SysMenuAddDTO.java │ │ │ │ │ ├── SysMenuAuthApiDTO.java │ │ │ │ │ ├── SysMenuListDTO.java │ │ │ │ │ └── SysMenuUpdateDTO.java │ │ │ │ ├── enums/ │ │ │ │ │ ├── MenuShowStatus.java │ │ │ │ │ ├── MenuStatus.java │ │ │ │ │ └── MenuType.java │ │ │ │ ├── mapper/ │ │ │ │ │ └── SysMenuMapper.java │ │ │ │ ├── mapstruct/ │ │ │ │ │ └── SysMenuConverter.java │ │ │ │ ├── po/ │ │ │ │ │ └── SysMenu.java │ │ │ │ ├── service/ │ │ │ │ │ ├── SysMenuService.java │ │ │ │ │ └── impl/ │ │ │ │ │ └── SysMenuServiceImpl.java │ │ │ │ └── vo/ │ │ │ │ ├── MetaVO.java │ │ │ │ ├── RouterVO.java │ │ │ │ ├── SysMenuAuthApiVO.java │ │ │ │ └── SysMenuVO.java │ │ │ ├── param/ │ │ │ │ ├── constant/ │ │ │ │ │ └── SysParamConstant.java │ │ │ │ ├── controller/ │ │ │ │ │ └── SysParamController.java │ │ │ │ ├── dto/ │ │ │ │ │ ├── SysParamAddDTO.java │ │ │ │ │ ├── SysParamPageDTO.java │ │ │ │ │ └── SysParamUpdateDTO.java │ │ │ │ ├── mapper/ │ │ │ │ │ └── SysParamMapper.java │ │ │ │ ├── mapstruct/ │ │ │ │ │ └── SysParamConverter.java │ │ │ │ ├── po/ │ │ │ │ │ └── SysParam.java │ │ │ │ ├── service/ │ │ │ │ │ ├── SysParamService.java │ │ │ │ │ └── impl/ │ │ │ │ │ └── SysParamServiceImpl.java │ │ │ │ └── vo/ │ │ │ │ └── SysParamVO.java │ │ │ ├── role/ │ │ │ │ ├── controller/ │ │ │ │ │ └── SysRoleController.java │ │ │ │ ├── dto/ │ │ │ │ │ ├── SysRoleAddDTO.java │ │ │ │ │ ├── SysRoleAuthUserDTO.java │ │ │ │ │ ├── SysRoleAuthUserDeleteDTO.java │ │ │ │ │ ├── SysRoleAuthUserPageDTO.java │ │ │ │ │ ├── SysRoleNotAuthUserPageDTO.java │ │ │ │ │ ├── SysRolePageDTO.java │ │ │ │ │ └── SysRoleUpdateDTO.java │ │ │ │ ├── mapper/ │ │ │ │ │ ├── SysRoleMapper.java │ │ │ │ │ └── SysRoleMenuMapper.java │ │ │ │ ├── mapstruct/ │ │ │ │ │ └── SysRoleConverter.java │ │ │ │ ├── po/ │ │ │ │ │ ├── SysRole.java │ │ │ │ │ └── SysRoleMenu.java │ │ │ │ ├── service/ │ │ │ │ │ ├── SysRoleMenuService.java │ │ │ │ │ ├── SysRoleService.java │ │ │ │ │ └── impl/ │ │ │ │ │ ├── SysRoleMenuServiceImpl.java │ │ │ │ │ └── SysRoleServiceImpl.java │ │ │ │ └── vo/ │ │ │ │ └── SysRoleVO.java │ │ │ └── user/ │ │ │ ├── controller/ │ │ │ │ ├── SysUserController.java │ │ │ │ └── SysUserInfoController.java │ │ │ ├── dto/ │ │ │ │ ├── SysUserAddDTO.java │ │ │ │ ├── SysUserPageDTO.java │ │ │ │ ├── SysUserResetPasswordDTO.java │ │ │ │ ├── SysUserResetUserPasswordDTO.java │ │ │ │ ├── SysUserUpdateDTO.java │ │ │ │ └── SysUserUpdateInfoDTO.java │ │ │ ├── enums/ │ │ │ │ └── UserType.java │ │ │ ├── mapper/ │ │ │ │ ├── SysUserMapper.java │ │ │ │ └── SysUserRoleMapper.java │ │ │ ├── mapstruct/ │ │ │ │ └── SysUserConverter.java │ │ │ ├── po/ │ │ │ │ ├── SysUser.java │ │ │ │ └── SysUserRole.java │ │ │ ├── service/ │ │ │ │ ├── SysUserInfoService.java │ │ │ │ ├── SysUserRoleService.java │ │ │ │ ├── SysUserService.java │ │ │ │ └── impl/ │ │ │ │ ├── SysUserInfoServiceImpl.java │ │ │ │ ├── SysUserRoleServiceImpl.java │ │ │ │ └── SysUserServiceImpl.java │ │ │ └── vo/ │ │ │ └── SysUserVO.java │ │ └── resources/ │ │ └── mapper/ │ │ ├── api/ │ │ │ ├── SysApiCategoryMapper.xml │ │ │ └── SysApiMapper.xml │ │ ├── dictionary/ │ │ │ ├── SysDictionaryDataMapper.xml │ │ │ └── SysDictionaryMapper.xml │ │ ├── log/ │ │ │ └── LogOperationMapper.xml │ │ ├── menu/ │ │ │ └── SysMenuMapper.xml │ │ ├── param/ │ │ │ └── SysParamMapper.xml │ │ ├── role/ │ │ │ └── SysRoleMapper.xml │ │ └── user/ │ │ └── SysUserRoleMapper.xml │ └── pom.xml ├── geshanzsq-nav-common/ │ ├── geshanzsq-nav-common-core/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── geshanzsq/ │ │ └── common/ │ │ └── core/ │ │ ├── constant/ │ │ │ ├── CommonConstant.java │ │ │ └── HttpStatus.java │ │ ├── enums/ │ │ │ ├── CommonStatus.java │ │ │ ├── DelFlag.java │ │ │ ├── OpenStatus.java │ │ │ └── YesNo.java │ │ ├── exception/ │ │ │ ├── BaseException.java │ │ │ ├── ParamException.java │ │ │ └── ServiceException.java │ │ ├── filter/ │ │ │ ├── XssFilter.java │ │ │ └── XssHttpServletRequestWrapper.java │ │ ├── util/ │ │ │ ├── html/ │ │ │ │ ├── EscapeUtil.java │ │ │ │ └── HTMLFilter.java │ │ │ ├── http/ │ │ │ │ └── HttpUtils.java │ │ │ ├── id/ │ │ │ │ ├── IdUtils.java │ │ │ │ └── IdWorker.java │ │ │ ├── ip/ │ │ │ │ ├── AddressUtils.java │ │ │ │ └── IpUtils.java │ │ │ ├── message/ │ │ │ │ └── MessageUtils.java │ │ │ ├── servlet/ │ │ │ │ └── ServletUtils.java │ │ │ ├── spring/ │ │ │ │ └── SpringUtils.java │ │ │ ├── string/ │ │ │ │ └── StrUtils.java │ │ │ └── thread/ │ │ │ └── Threads.java │ │ └── web/ │ │ ├── response/ │ │ │ └── ResponseResult.java │ │ └── vo/ │ │ └── BaseVO.java │ ├── geshanzsq-nav-common-framework/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── geshanzsq/ │ │ └── common/ │ │ └── framework/ │ │ ├── config/ │ │ │ ├── ResourceConfig.java │ │ │ └── WebConfig.java │ │ ├── file/ │ │ │ ├── exception/ │ │ │ │ └── FileException.java │ │ │ ├── property/ │ │ │ │ └── FileUploadProperty.java │ │ │ ├── service/ │ │ │ │ ├── FileService.java │ │ │ │ └── impl/ │ │ │ │ └── FileServiceImpl.java │ │ │ └── util/ │ │ │ ├── FileUploadUtils.java │ │ │ └── MimeTypeUtils.java │ │ ├── manager/ │ │ │ └── AsyncManager.java │ │ ├── mybatis/ │ │ │ ├── page/ │ │ │ │ ├── dto/ │ │ │ │ │ └── PageDTO.java │ │ │ │ ├── util/ │ │ │ │ │ └── PageUtils.java │ │ │ │ └── vo/ │ │ │ │ └── PageVO.java │ │ │ ├── plugin/ │ │ │ │ ├── annotation/ │ │ │ │ │ └── Query.java │ │ │ │ ├── constant/ │ │ │ │ │ └── FieldConstant.java │ │ │ │ ├── enums/ │ │ │ │ │ └── QueryWay.java │ │ │ │ ├── interceptor/ │ │ │ │ │ └── InsertUpdateMyBatisInterceptor.java │ │ │ │ └── query/ │ │ │ │ ├── LambdaQueryWrapperPlus.java │ │ │ │ └── QueryWrapperPlus.java │ │ │ ├── property/ │ │ │ │ └── PageProperty.java │ │ │ └── util/ │ │ │ └── MybatisUtils.java │ │ ├── thread/ │ │ │ ├── config/ │ │ │ │ └── ThreadPoolConfig.java │ │ │ └── property/ │ │ │ └── ThreadPoolProperty.java │ │ └── web/ │ │ ├── controller/ │ │ │ └── BaseController.java │ │ ├── mapper/ │ │ │ └── BaseMapperPlus.java │ │ └── service/ │ │ ├── BaseService.java │ │ └── impl/ │ │ └── BaseServiceImpl.java │ ├── geshanzsq-nav-common-log/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── geshanzsq/ │ │ └── common/ │ │ └── log/ │ │ ├── annotation/ │ │ │ └── Log.java │ │ ├── aspect/ │ │ │ └── LogAspect.java │ │ ├── constant/ │ │ │ └── LogConstant.java │ │ ├── dto/ │ │ │ └── LogDTO.java │ │ ├── enums/ │ │ │ ├── BusinessType.java │ │ │ ├── LogStatus.java │ │ │ └── OperateType.java │ │ ├── factory/ │ │ │ └── LogAsyncFactory.java │ │ └── service/ │ │ ├── LogMqService.java │ │ └── impl/ │ │ └── LogMqServiceImpl.java │ ├── geshanzsq-nav-common-rate-limiter/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── geshanzsq/ │ │ └── common/ │ │ └── rate/ │ │ └── limiter/ │ │ ├── annotation/ │ │ │ └── RateLimiter.java │ │ ├── aspect/ │ │ │ └── RateLimiterAspect.java │ │ ├── constant/ │ │ │ └── RateLimitConstant.java │ │ ├── enums/ │ │ │ └── RateLimiterType.java │ │ └── exception/ │ │ └── RateLimiterException.java │ ├── geshanzsq-nav-common-redis/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── geshanzsq/ │ │ └── common/ │ │ └── redis/ │ │ ├── config/ │ │ │ ├── FastJson2JsonRedisSerializer.java │ │ │ └── RedisConfig.java │ │ └── service/ │ │ └── RedisService.java │ ├── geshanzsq-nav-common-security/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── geshanzsq/ │ │ └── framework/ │ │ └── security/ │ │ ├── constant/ │ │ │ └── SecurityConstant.java │ │ ├── domain/ │ │ │ ├── ApiPermission.java │ │ │ └── LoginUserDetail.java │ │ ├── handler/ │ │ │ ├── AccessDeniedExceptionHandler.java │ │ │ ├── AuthenticationEntryPointImpl.java │ │ │ └── LogoutSuccessHandlerImpl.java │ │ ├── property/ │ │ │ ├── SecurityProperty.java │ │ │ └── TokenProperty.java │ │ ├── service/ │ │ │ ├── TokenService.java │ │ │ └── impl/ │ │ │ ├── AuthorizationService.java │ │ │ └── TokenServiceImpl.java │ │ └── util/ │ │ └── SecurityUtils.java │ ├── geshanzsq-nav-common-swagger/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── geshanzsq/ │ │ └── common/ │ │ └── swagger/ │ │ ├── config/ │ │ │ └── SwaggerConfig.java │ │ └── property/ │ │ └── SwaggerProperty.java │ └── pom.xml ├── pom.xml ├── sql/ │ └── geshanzsq_nav.sql └── vue-geshanzsq-nav/ ├── .browserslistrc ├── .editorconfig ├── .eslintrc.js ├── .gitignore ├── .prettierrc ├── README.md ├── babel.config.js ├── jsconfig.json ├── lint-staged.config.js ├── package.json ├── public/ │ └── index.html ├── src/ │ ├── App.vue │ ├── api/ │ │ ├── auth/ │ │ │ ├── login.js │ │ │ └── user.js │ │ ├── client/ │ │ │ ├── comment.js │ │ │ ├── nav.js │ │ │ └── search.js │ │ ├── common/ │ │ │ └── bing.js │ │ ├── nav/ │ │ │ ├── category.js │ │ │ ├── comment.js │ │ │ ├── config.js │ │ │ ├── index.js │ │ │ ├── picture.js │ │ │ └── site.js │ │ └── system/ │ │ ├── api/ │ │ │ ├── api.js │ │ │ └── category.js │ │ ├── dictionary/ │ │ │ ├── data.js │ │ │ └── dictionary.js │ │ ├── log/ │ │ │ ├── login.js │ │ │ └── operation.js │ │ ├── menu.js │ │ ├── param.js │ │ ├── role.js │ │ └── user.js │ ├── assets/ │ │ └── styles/ │ │ ├── btn.scss │ │ ├── element-plus-ui.scss │ │ ├── geshanzsq.scss │ │ ├── index.scss │ │ ├── mixin.scss │ │ ├── sidebar.scss │ │ ├── themes/ │ │ │ ├── blue-black.scss │ │ │ └── blue-white.scss │ │ └── variables.module.scss │ ├── components/ │ │ ├── Breadcrumb/ │ │ │ └── index.vue │ │ ├── DictionaryOption/ │ │ │ └── index.vue │ │ ├── DictionaryRadio/ │ │ │ └── index.vue │ │ ├── DictionaryTag/ │ │ │ └── index.vue │ │ ├── Hamburger/ │ │ │ └── index.vue │ │ ├── HeaderSearch/ │ │ │ └── index.vue │ │ ├── IconSelect/ │ │ │ ├── index.vue │ │ │ └── requireIcons.js │ │ ├── Pagination/ │ │ │ └── index.vue │ │ ├── ParentView/ │ │ │ └── index.vue │ │ ├── Screenfull/ │ │ │ └── index.vue │ │ ├── SiteCard/ │ │ │ └── index.vue │ │ ├── SizeSelect/ │ │ │ └── index.vue │ │ ├── SvgIcon/ │ │ │ ├── index.vue │ │ │ └── svgicon.js │ │ ├── TopNav/ │ │ │ └── index.vue │ │ ├── WangEditor/ │ │ │ └── index.vue │ │ └── Weather/ │ │ └── index.vue │ ├── config/ │ │ ├── index.js │ │ ├── network.config.js │ │ ├── setting.config.js │ │ ├── theme.config.js │ │ └── vue.cli.config.js │ ├── directive/ │ │ ├── index.js │ │ └── permission/ │ │ ├── hasPermission.js │ │ └── hasRole.js │ ├── layout/ │ │ ├── client/ │ │ │ ├── components/ │ │ │ │ ├── FooterBottom/ │ │ │ │ │ └── index.vue │ │ │ │ ├── Navbar/ │ │ │ │ │ └── index.vue │ │ │ │ ├── Search/ │ │ │ │ │ └── index.vue │ │ │ │ └── Sidebar/ │ │ │ │ ├── Link.vue │ │ │ │ ├── Logo.vue │ │ │ │ ├── SidebarItem.vue │ │ │ │ └── index.vue │ │ │ └── index.vue │ │ ├── components/ │ │ │ ├── AppMain.vue │ │ │ ├── InnerLink/ │ │ │ │ └── index.vue │ │ │ ├── Navbar/ │ │ │ │ └── index.vue │ │ │ ├── Settings/ │ │ │ │ └── index.vue │ │ │ ├── Sidebar/ │ │ │ │ ├── Link.vue │ │ │ │ ├── Logo.vue │ │ │ │ ├── SidebarItem.vue │ │ │ │ └── index.vue │ │ │ ├── TagsView/ │ │ │ │ ├── ScrollPane.vue │ │ │ │ └── index.vue │ │ │ └── index.js │ │ └── index.vue │ ├── main.js │ ├── permission.js │ ├── plugins/ │ │ ├── auth.js │ │ ├── cache.js │ │ ├── index.js │ │ ├── modal.js │ │ ├── svg-icon.js │ │ └── tab.js │ ├── router/ │ │ └── index.js │ ├── store/ │ │ ├── index.js │ │ └── modules/ │ │ ├── app.js │ │ ├── dictionary.js │ │ ├── permission.js │ │ ├── settings.js │ │ ├── tagsView.js │ │ └── user.js │ ├── utils/ │ │ ├── auth.js │ │ ├── download.js │ │ ├── dynamicTitle.js │ │ ├── geshanzsq.js │ │ ├── request.js │ │ ├── scroll-to.js │ │ └── validate.js │ └── views/ │ ├── client/ │ │ ├── about/ │ │ │ ├── components/ │ │ │ │ ├── Comment.vue │ │ │ │ └── SendComment.vue │ │ │ └── index.vue │ │ ├── index/ │ │ │ └── index.vue │ │ └── search/ │ │ └── index.vue │ ├── error/ │ │ ├── 403.vue │ │ └── 404.vue │ ├── index/ │ │ └── index.vue │ ├── login/ │ │ └── index.vue │ ├── nav/ │ │ ├── category/ │ │ │ ├── components/ │ │ │ │ └── CategoryEdit.vue │ │ │ └── index.vue │ │ ├── comment/ │ │ │ ├── components/ │ │ │ │ └── CommentReject.vue │ │ │ └── index.vue │ │ ├── components/ │ │ │ └── SitePicture.vue │ │ ├── config/ │ │ │ └── index.vue │ │ └── site/ │ │ ├── components/ │ │ │ └── SiteEdit.vue │ │ └── index.vue │ └── system/ │ ├── api/ │ │ ├── category.vue │ │ ├── components/ │ │ │ ├── ApiCategoryEdit.vue │ │ │ └── ApiEdit.vue │ │ └── index.vue │ ├── dictionary/ │ │ ├── components/ │ │ │ ├── DictionaryDataEdit.vue │ │ │ └── DictionaryEdit.vue │ │ ├── data.vue │ │ └── index.vue │ ├── log/ │ │ ├── login/ │ │ │ └── index.vue │ │ └── operation/ │ │ ├── components/ │ │ │ └── LogOperationDetail.vue │ │ └── index.vue │ ├── menu/ │ │ ├── components/ │ │ │ ├── MenuEdit.vue │ │ │ └── SelectApi.vue │ │ └── index.vue │ ├── param/ │ │ ├── components/ │ │ │ └── ParamEdit.vue │ │ └── index.vue │ ├── role/ │ │ ├── authUser.vue │ │ ├── components/ │ │ │ ├── RoleEdit.vue │ │ │ └── SelectAuthUser.vue │ │ └── index.vue │ └── user/ │ ├── components/ │ │ ├── UserEdit.vue │ │ └── UserResetPassword.vue │ ├── index.vue │ └── profile/ │ ├── UpdateUserInfo.vue │ ├── UserAvatar.vue │ ├── UserBaseInfo.vue │ └── index.vue └── vue.config.js