├── zblog-doc ├── 前端菜单生成.txt ├── 后台应用本地启动步骤.txt ├── nimbusds jwt.txt ├── 启动参数.txt ├── Security.txt └── 数据校验逻辑.txt ├── _config.yml ├── zblog-web ├── zblog-web-portal │ ├── src │ │ ├── components │ │ │ ├── zw-player │ │ │ │ ├── playermobile.css │ │ │ │ ├── img │ │ │ │ │ ├── add.png │ │ │ │ │ ├── pan.png │ │ │ │ │ ├── pause.png │ │ │ │ │ ├── play.png │ │ │ │ │ ├── list_bg.jpg │ │ │ │ │ ├── state_0.png │ │ │ │ │ ├── state_1.png │ │ │ │ │ ├── list_pan.png │ │ │ │ │ ├── talkicon1.png │ │ │ │ │ ├── talkicon2.png │ │ │ │ │ └── list_play_hover.png │ │ │ │ └── api │ │ │ │ │ └── music.js │ │ │ ├── loading │ │ │ │ └── index.js │ │ │ └── toast │ │ │ │ └── index.js │ │ ├── assets │ │ │ └── iconfont │ │ │ │ ├── iconfont.ttf │ │ │ │ ├── iconfont.woff │ │ │ │ └── iconfont.woff2 │ │ ├── api │ │ │ ├── http-index.js │ │ │ └── other.js │ │ ├── plugins │ │ │ └── vuetify.js │ │ ├── router │ │ │ └── index.js │ │ ├── utils │ │ │ └── rsaEncrypt.js │ │ └── views │ │ │ └── statistics │ │ │ └── index.vue │ ├── .browserslistrc │ ├── .eslintignore │ ├── babel.config.js │ ├── public │ │ └── favicon.ico │ ├── .editorconfig │ └── vue.config.js └── zblog-web-admin │ ├── public │ ├── robots.txt │ ├── server.js │ └── favicon.ico │ ├── .eslintignore │ ├── src │ ├── utils │ │ ├── config.js │ │ ├── timerUtils.js │ │ ├── rsaEncrypt.js │ │ └── clipboard.js │ ├── assets │ │ ├── 403_images │ │ │ └── 403.gif │ │ ├── 404_images │ │ │ ├── 404.png │ │ │ └── 404_cloud.png │ │ ├── images │ │ │ ├── avatar.png │ │ │ ├── empty.png │ │ │ ├── nodata.png │ │ │ ├── add-icon.png │ │ │ ├── background.jpg │ │ │ ├── no-img-4_3.jpg │ │ │ ├── sidebar-logo.png │ │ │ ├── icon-autosave.png │ │ │ └── publish-success.png │ │ ├── iconfont │ │ │ ├── iconfont.eot │ │ │ ├── iconfont.ttf │ │ │ ├── iconfont.woff │ │ │ └── iconfont.woff2 │ │ ├── icons │ │ │ ├── svg │ │ │ │ ├── size.svg │ │ │ │ ├── fullscreen.svg │ │ │ │ ├── icon-interface.svg │ │ │ │ ├── search.svg │ │ │ │ ├── eye.svg │ │ │ │ ├── icon-logo.svg │ │ │ │ ├── message.svg │ │ │ │ ├── login.svg │ │ │ │ ├── password.svg │ │ │ │ ├── album.svg │ │ │ │ ├── talk.svg │ │ │ │ ├── album-photo.svg │ │ │ │ ├── uv.svg │ │ │ │ └── uu.svg │ │ │ ├── index.js │ │ │ └── svgo.yml │ │ └── styles │ │ │ ├── variables.scss │ │ │ └── transition.scss │ ├── components │ │ ├── ParentView │ │ │ └── index.vue │ │ ├── IconSelect │ │ │ └── requireIcons.js │ │ ├── Web │ │ │ └── index.vue │ │ └── Iframe │ │ │ └── index.vue │ ├── App.vue │ ├── frame │ │ └── muses │ │ │ ├── 缪斯框架说明.txt │ │ │ ├── components │ │ │ ├── pagination │ │ │ │ ├── index.js │ │ │ │ └── muses-pagination.vue │ │ │ ├── search-form │ │ │ │ └── index.js │ │ │ └── search-form-item │ │ │ │ └── index.js │ │ │ └── index.js │ ├── api │ │ ├── base │ │ │ ├── server.js │ │ │ ├── system │ │ │ │ └── interface.js │ │ │ └── version.js │ │ ├── menu.js │ │ ├── service │ │ │ ├── test.js │ │ │ ├── comment.js │ │ │ ├── message.js │ │ │ ├── talk.js │ │ │ ├── page.js │ │ │ └── tag.js │ │ └── home.js │ ├── layout │ │ └── components │ │ │ ├── index.js │ │ │ └── Sidebar │ │ │ ├── Item.vue │ │ │ ├── Link.vue │ │ │ └── FixIosBug.js │ ├── store │ │ ├── getters.js │ │ ├── modules │ │ │ ├── api.js │ │ │ └── router.js │ │ └── index.js │ ├── views │ │ ├── admin │ │ │ ├── monitor │ │ │ │ └── sql │ │ │ │ │ └── index.vue │ │ │ └── mnt │ │ │ │ └── swagger │ │ │ │ └── index.vue │ │ └── features │ │ │ └── redirect.vue │ ├── directive │ │ ├── preventReClick.js │ │ └── highlight.js │ └── settings.js │ ├── postcss.config.js │ ├── .env.production │ ├── .gitignore │ ├── .env.development │ ├── babel.config.js │ └── .editorconfig ├── zblog-services ├── zblog-frame │ ├── zblog-bas │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── github │ │ │ │ │ └── stazxr │ │ │ │ │ └── zblog │ │ │ │ │ └── bas │ │ │ │ │ ├── notify │ │ │ │ │ └── jms │ │ │ │ │ │ └── ReadMe.txt │ │ │ │ │ ├── security │ │ │ │ │ ├── authn │ │ │ │ │ │ ├── oauth2 │ │ │ │ │ │ │ └── 待开发 │ │ │ │ │ │ └── userpass │ │ │ │ │ │ │ └── numcode │ │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── filter │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── SecurityConstant.java │ │ │ │ │ ├── service │ │ │ │ │ │ ├── SecurityLogoutService.java │ │ │ │ │ │ ├── SecurityRoleService.java │ │ │ │ │ │ └── SecurityTokenService.java │ │ │ │ │ ├── core │ │ │ │ │ │ ├── UserStatus.java │ │ │ │ │ │ └── UserType.java │ │ │ │ │ ├── jwt │ │ │ │ │ │ ├── JwtConstants.java │ │ │ │ │ │ ├── decoder │ │ │ │ │ │ │ └── JwtDecoder.java │ │ │ │ │ │ └── JwtException.java │ │ │ │ │ └── authz │ │ │ │ │ │ └── metadata │ │ │ │ │ │ └── ResourceCacheService.java │ │ │ │ │ ├── log │ │ │ │ │ ├── advice │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── filter │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── contants │ │ │ │ │ │ └── LogConstants.java │ │ │ │ │ └── config │ │ │ │ │ │ └── LogConfiguration.java │ │ │ │ │ ├── context │ │ │ │ │ ├── config │ │ │ │ │ │ ├── package-info.java │ │ │ │ │ │ └── ContextConfig.java │ │ │ │ │ ├── filter │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── properties │ │ │ │ │ │ └── package-info.java │ │ │ │ │ └── exception │ │ │ │ │ │ └── ContextException.java │ │ │ │ │ ├── reqsinglepost │ │ │ │ │ ├── package-info.java │ │ │ │ │ └── RequestPostSingleParam.java │ │ │ │ │ ├── props │ │ │ │ │ ├── database │ │ │ │ │ │ └── package-info.java │ │ │ │ │ └── PropertySourceLoadException.java │ │ │ │ │ ├── validation │ │ │ │ │ ├── group │ │ │ │ │ │ ├── Create.java │ │ │ │ │ │ └── Update.java │ │ │ │ │ ├── ext │ │ │ │ │ │ ├── annotation │ │ │ │ │ │ │ └── Phone.java │ │ │ │ │ │ └── PhoneValidator.java │ │ │ │ │ └── AssertException.java │ │ │ │ │ ├── sequence │ │ │ │ │ ├── SequenceGenerator.java │ │ │ │ │ ├── core │ │ │ │ │ │ ├── id │ │ │ │ │ │ │ └── IdGenerator.java │ │ │ │ │ │ └── BaseWorkSequenceGenerator.java │ │ │ │ │ └── SequenceGeneratorAware.java │ │ │ │ │ ├── router │ │ │ │ │ ├── RouterExtLevel.java │ │ │ │ │ └── RouterLevel.java │ │ │ │ │ ├── file │ │ │ │ │ ├── util │ │ │ │ │ │ ├── qiniu │ │ │ │ │ │ │ ├── QiNiuPutRet.java │ │ │ │ │ │ │ ├── QiNiuYunOssConfig.java │ │ │ │ │ │ │ └── QiNiuBiException.java │ │ │ │ │ │ └── aliyun │ │ │ │ │ │ │ └── AliYunOssConfig.java │ │ │ │ │ ├── model │ │ │ │ │ │ ├── UploadFileType.java │ │ │ │ │ │ └── FileInfo.java │ │ │ │ │ └── FileException.java │ │ │ │ │ ├── captcha │ │ │ │ │ ├── factory │ │ │ │ │ │ └── CaptchaFactory.java │ │ │ │ │ └── CaptchaType.java │ │ │ │ │ ├── common │ │ │ │ │ └── CommonUtil.java │ │ │ │ │ ├── mask │ │ │ │ │ └── core │ │ │ │ │ │ └── FieldMask.java │ │ │ │ │ ├── encryption │ │ │ │ │ ├── Encryptor.java │ │ │ │ │ ├── util │ │ │ │ │ │ └── Base64Util.java │ │ │ │ │ ├── EncryptException.java │ │ │ │ │ ├── DecryptException.java │ │ │ │ │ └── EncryptorContext.java │ │ │ │ │ └── idempotence │ │ │ │ │ └── FormResubmitCheck.java │ │ │ └── resources │ │ │ │ ├── default-tags.yml │ │ │ │ ├── kaptchaConfig_demo.json │ │ │ │ ├── META-INF │ │ │ │ └── spring.factories │ │ │ │ └── props-config_demo.properties │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── github │ │ │ └── stazxr │ │ │ └── zblog │ │ │ └── bas │ │ │ ├── captcha │ │ │ └── CaptchaTest.java │ │ │ ├── security │ │ │ └── JwtTest.java │ │ │ ├── encryption │ │ │ ├── rsa │ │ │ │ ├── RsaEncryptorTest.java │ │ │ │ └── RsaEncryptor2Test.java │ │ │ └── md5 │ │ │ │ └── Md5EncryptorTest.java │ │ │ ├── sequence │ │ │ ├── SequenceExceptionTest.java │ │ │ └── IdGeneratorTest.java │ │ │ ├── context │ │ │ └── ContextExceptionTest.java │ │ │ └── mask │ │ │ └── MaskSubVo.java │ └── zblog-util │ │ └── src │ │ ├── main │ │ └── java │ │ │ └── com │ │ │ └── github │ │ │ └── stazxr │ │ │ └── zblog │ │ │ └── util │ │ │ ├── Constants.java │ │ │ ├── exception │ │ │ └── AssertionViolatedException.java │ │ │ ├── ThrowableUtils.java │ │ │ └── math │ │ │ └── RandomUtils.java │ │ └── test │ │ └── java │ │ └── com │ │ └── github │ │ └── stazxr │ │ └── zblog │ │ └── util │ │ ├── ThrowableUtilsTest.java │ │ ├── LocalHostUtilTest.java │ │ ├── UuidTest.java │ │ ├── RegexTest.java │ │ └── IpUtilTest.java └── zblog-business │ ├── zblog-service │ └── src │ │ ├── main │ │ ├── resources │ │ │ ├── 备忘录.txt │ │ │ ├── zblog.jks │ │ │ ├── test001.rk │ │ │ ├── suntaoblogcom.jks │ │ │ ├── kaptchaConfig.json │ │ │ ├── mapper │ │ │ │ ├── WebSettingMapper.xml │ │ │ │ ├── ArticleImgRelationMapper.xml │ │ │ │ ├── ArticleViewMapper.xml │ │ │ │ ├── ArticleTagRelationMapper.xml │ │ │ │ ├── TalkLikeMapper.xml │ │ │ │ ├── ArticleLikeMapper.xml │ │ │ │ ├── CommentLikeMapper.xml │ │ │ │ ├── VisitorAreaMapper.xml │ │ │ │ ├── VisitorMapper.xml │ │ │ │ └── PageMapper.xml │ │ │ ├── application-dev.yml │ │ │ └── props-config.properties │ │ └── java │ │ │ └── com │ │ │ └── github │ │ │ └── stazxr │ │ │ └── zblog │ │ │ ├── mapper │ │ │ ├── WebSettingMapper.java │ │ │ ├── ArticleImgRelationMapper.java │ │ │ ├── ArticleViewMapper.java │ │ │ ├── ArticleTagRelationMapper.java │ │ │ ├── TalkLikeMapper.java │ │ │ ├── ArticleLikeMapper.java │ │ │ ├── CommentLikeMapper.java │ │ │ └── VisitorAreaMapper.java │ │ │ ├── domain │ │ │ ├── vo │ │ │ │ ├── CloudTagVo.java │ │ │ │ ├── PageVo.java │ │ │ │ ├── PortalAlbumPhotoVo.java │ │ │ │ ├── ArticleTagVo.java │ │ │ │ ├── ArticleTmpContentVo.java │ │ │ │ ├── FriendLinkVo.java │ │ │ │ └── AlbumPhotoVo.java │ │ │ ├── bo │ │ │ │ ├── ArticleSimpleData.java │ │ │ │ ├── PageInfo.java │ │ │ │ └── ArticlePageData.java │ │ │ ├── enums │ │ │ │ ├── WebsiteConfigType.java │ │ │ │ ├── ArticleTagType.java │ │ │ │ ├── TalkStatus.java │ │ │ │ ├── AlbumStatus.java │ │ │ │ ├── ArticleType.java │ │ │ │ ├── CommentType.java │ │ │ │ └── ArticlePerm.java │ │ │ ├── dto │ │ │ │ ├── TalkLikeDto.java │ │ │ │ ├── UserLoginDto.java │ │ │ │ ├── ArticleLikeDto.java │ │ │ │ ├── CommentLikeDto.java │ │ │ │ ├── CommentDeleteDto.java │ │ │ │ ├── query │ │ │ │ │ ├── AlbumPhotoQueryDto.java │ │ │ │ │ ├── FriendLinkQueryDto.java │ │ │ │ │ ├── MessageQueryDto.java │ │ │ │ │ ├── TalkQueryDto.java │ │ │ │ │ └── ArticleCategoryQueryDto.java │ │ │ │ ├── ArticleColumnArticleDto.java │ │ │ │ ├── ArticleAuditDto.java │ │ │ │ └── AlbumPhotoDto.java │ │ │ └── entity │ │ │ │ ├── VisitorArea.java │ │ │ │ ├── WebsiteConfig.java │ │ │ │ ├── Page.java │ │ │ │ └── TalkLike.java │ │ │ ├── strategy │ │ │ └── ArticleSearchStrategy.java │ │ │ └── Application.java │ │ └── test │ │ └── java │ │ └── com │ │ └── github │ │ └── stazxr │ │ └── zblog │ │ └── UserTest.java │ ├── zblog-core │ └── src │ │ └── main │ │ └── java │ │ └── com │ │ └── github │ │ └── stazxr │ │ └── zblog │ │ └── core │ │ ├── config │ │ ├── rest │ │ │ └── package-info.java │ │ └── ZblogConfig.java │ │ ├── base │ │ ├── BaseMapper.java │ │ ├── BaseService.java │ │ └── BaseDto.java │ │ ├── annotation │ │ ├── IgnoreResult.java │ │ └── ApiVersion.java │ │ └── exception │ │ ├── BadConfigurationException.java │ │ └── DataValidatedException.java │ ├── zblog-base │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── stazxr │ │ │ └── zblog │ │ │ └── base │ │ │ ├── domain │ │ │ ├── bo │ │ │ │ ├── storage │ │ │ │ │ └── BaseStorageConfig.java │ │ │ │ ├── DateCount.java │ │ │ │ ├── LoginUser.java │ │ │ │ └── QqLoginParam.java │ │ │ ├── FileUploadVo.java │ │ │ ├── enums │ │ │ │ ├── LoginChan.java │ │ │ │ ├── PermissionType.java │ │ │ │ ├── LoginType.java │ │ │ │ ├── DictType.java │ │ │ │ └── Gender.java │ │ │ ├── dto │ │ │ │ ├── FileDeleteDto.java │ │ │ │ ├── RolePermDto.java │ │ │ │ ├── UserRoleDto.java │ │ │ │ ├── query │ │ │ │ │ ├── DictQueryDto.java │ │ │ │ │ ├── NodeQueryDto.java │ │ │ │ │ └── VersionQueryDto.java │ │ │ │ ├── RoleAuthDto.java │ │ │ │ ├── UserUpdatePassDto.java │ │ │ │ └── ForgetPwdDto.java │ │ │ ├── vo │ │ │ │ ├── PermCodeVo.java │ │ │ │ ├── ActiveStorageTypeVo.java │ │ │ │ ├── HomePanelDataCountVo.java │ │ │ │ ├── echarts │ │ │ │ │ └── SingleLineChartDataVo.java │ │ │ │ ├── RoleVo.java │ │ │ │ └── NodeVo.java │ │ │ └── entity │ │ │ │ ├── UserRoleRelation.java │ │ │ │ ├── RolePermissionRelation.java │ │ │ │ ├── FileRelation.java │ │ │ │ └── UserPassLog.java │ │ │ ├── mapper │ │ │ ├── UserLoginLogMapper.java │ │ │ ├── InterfaceMapper.java │ │ │ ├── MenuMapper.java │ │ │ ├── UserPassLogMapper.java │ │ │ ├── ResourceMapper.java │ │ │ ├── FileRelationMapper.java │ │ │ └── VersionMapper.java │ │ │ └── service │ │ │ ├── ServerMonitorService.java │ │ │ ├── MenuService.java │ │ │ ├── ZblogService.java │ │ │ └── InterfaceService.java │ │ └── resources │ │ └── mapper │ │ ├── UserLoginLogMapper.xml │ │ ├── UserPassLogMapper.xml │ │ └── FileRelationMapper.xml │ ├── zblog-log │ └── src │ │ └── main │ │ └── java │ │ └── com │ │ └── github │ │ └── stazxr │ │ └── zblog │ │ └── log │ │ ├── annotation │ │ ├── IgnoredLog.java │ │ ├── Log.java │ │ ├── properties │ │ │ └── LogProperties.java │ │ └── EnableLog.java │ │ └── domain │ │ └── enums │ │ └── LogType.java │ └── pom.xml └── .gitignore /zblog-doc/前端菜单生成.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /zblog-doc/后台应用本地启动步骤.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-cayman -------------------------------------------------------------------------------- /zblog-doc/nimbusds jwt.txt: -------------------------------------------------------------------------------- 1 | JWK 2 | JWS 3 | JWT -------------------------------------------------------------------------------- /zblog-web/zblog-web-portal/src/components/zw-player/playermobile.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/public/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Allow: 3 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/public/server.js: -------------------------------------------------------------------------------- 1 | const serverConfig = { } 2 | -------------------------------------------------------------------------------- /zblog-doc/启动参数.txt: -------------------------------------------------------------------------------- 1 | SERVER_PORT: 应用端口,默认 8081 2 | APP_NAME: 应用名称,默认 zblog 3 | 4 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/.eslintignore: -------------------------------------------------------------------------------- 1 | src/assets 2 | build 3 | public 4 | dist 5 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-portal/.browserslistrc: -------------------------------------------------------------------------------- 1 | > 1% 2 | last 2 versions 3 | not dead 4 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-portal/.eslintignore: -------------------------------------------------------------------------------- 1 | build/*.js 2 | src/assets 3 | public 4 | dist 5 | -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/main/java/com/github/stazxr/zblog/bas/notify/jms/ReadMe.txt: -------------------------------------------------------------------------------- 1 | 待开发 -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/utils/config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | // 压缩文件大小 3 | UPLOAD_SIZE: 200 4 | } 5 | -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/main/java/com/github/stazxr/zblog/bas/security/authn/oauth2/待开发: -------------------------------------------------------------------------------- 1 | 2024-11-24 By SunTao -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | autoprefixer: { 4 | 5 | } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stazxr/zblog/HEAD/zblog-web/zblog-web-admin/public/favicon.ico -------------------------------------------------------------------------------- /zblog-web/zblog-web-portal/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | '@vue/cli-plugin-babel/preset' 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-portal/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stazxr/zblog/HEAD/zblog-web/zblog-web-portal/public/favicon.ico -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/assets/403_images/403.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stazxr/zblog/HEAD/zblog-web/zblog-web-admin/src/assets/403_images/403.gif -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/assets/404_images/404.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stazxr/zblog/HEAD/zblog-web/zblog-web-admin/src/assets/404_images/404.png -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/assets/images/avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stazxr/zblog/HEAD/zblog-web/zblog-web-admin/src/assets/images/avatar.png -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/assets/images/empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stazxr/zblog/HEAD/zblog-web/zblog-web-admin/src/assets/images/empty.png -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/assets/images/nodata.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stazxr/zblog/HEAD/zblog-web/zblog-web-admin/src/assets/images/nodata.png -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/assets/images/add-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stazxr/zblog/HEAD/zblog-web/zblog-web-admin/src/assets/images/add-icon.png -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/assets/iconfont/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stazxr/zblog/HEAD/zblog-web/zblog-web-admin/src/assets/iconfont/iconfont.eot -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/assets/iconfont/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stazxr/zblog/HEAD/zblog-web/zblog-web-admin/src/assets/iconfont/iconfont.ttf -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/assets/iconfont/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stazxr/zblog/HEAD/zblog-web/zblog-web-admin/src/assets/iconfont/iconfont.woff -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/assets/iconfont/iconfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stazxr/zblog/HEAD/zblog-web/zblog-web-admin/src/assets/iconfont/iconfont.woff2 -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/assets/images/background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stazxr/zblog/HEAD/zblog-web/zblog-web-admin/src/assets/images/background.jpg -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/assets/images/no-img-4_3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stazxr/zblog/HEAD/zblog-web/zblog-web-admin/src/assets/images/no-img-4_3.jpg -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/assets/images/sidebar-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stazxr/zblog/HEAD/zblog-web/zblog-web-admin/src/assets/images/sidebar-logo.png -------------------------------------------------------------------------------- /zblog-web/zblog-web-portal/src/assets/iconfont/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stazxr/zblog/HEAD/zblog-web/zblog-web-portal/src/assets/iconfont/iconfont.ttf -------------------------------------------------------------------------------- /zblog-web/zblog-web-portal/src/assets/iconfont/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stazxr/zblog/HEAD/zblog-web/zblog-web-portal/src/assets/iconfont/iconfont.woff -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/assets/404_images/404_cloud.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stazxr/zblog/HEAD/zblog-web/zblog-web-admin/src/assets/404_images/404_cloud.png -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/assets/images/icon-autosave.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stazxr/zblog/HEAD/zblog-web/zblog-web-admin/src/assets/images/icon-autosave.png -------------------------------------------------------------------------------- /zblog-web/zblog-web-portal/src/api/http-index.js: -------------------------------------------------------------------------------- 1 | import portal from './portal.js' 2 | import other from './other.js' 3 | 4 | export default { 5 | portal, other 6 | } 7 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-portal/src/assets/iconfont/iconfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stazxr/zblog/HEAD/zblog-web/zblog-web-portal/src/assets/iconfont/iconfont.woff2 -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/assets/images/publish-success.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stazxr/zblog/HEAD/zblog-web/zblog-web-admin/src/assets/images/publish-success.png -------------------------------------------------------------------------------- /zblog-web/zblog-web-portal/src/components/zw-player/img/add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stazxr/zblog/HEAD/zblog-web/zblog-web-portal/src/components/zw-player/img/add.png -------------------------------------------------------------------------------- /zblog-web/zblog-web-portal/src/components/zw-player/img/pan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stazxr/zblog/HEAD/zblog-web/zblog-web-portal/src/components/zw-player/img/pan.png -------------------------------------------------------------------------------- /zblog-web/zblog-web-portal/src/components/zw-player/img/pause.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stazxr/zblog/HEAD/zblog-web/zblog-web-portal/src/components/zw-player/img/pause.png -------------------------------------------------------------------------------- /zblog-web/zblog-web-portal/src/components/zw-player/img/play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stazxr/zblog/HEAD/zblog-web/zblog-web-portal/src/components/zw-player/img/play.png -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-service/src/main/resources/备忘录.txt: -------------------------------------------------------------------------------- 1 | 1、本地安装数据库时,建议设置root密码为root(部署服务器建议使用复杂密码),这样本地启动改动内容较少 2 | 2、安装完数据库执行SQL脚本时,props > base > message > service 3 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-portal/.editorconfig: -------------------------------------------------------------------------------- 1 | [*.{js,jsx,ts,tsx,vue}] 2 | indent_style = space 3 | indent_size = 2 4 | trim_trailing_whitespace = true 5 | insert_final_newline = true 6 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-portal/src/components/zw-player/img/list_bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stazxr/zblog/HEAD/zblog-web/zblog-web-portal/src/components/zw-player/img/list_bg.jpg -------------------------------------------------------------------------------- /zblog-web/zblog-web-portal/src/components/zw-player/img/state_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stazxr/zblog/HEAD/zblog-web/zblog-web-portal/src/components/zw-player/img/state_0.png -------------------------------------------------------------------------------- /zblog-web/zblog-web-portal/src/components/zw-player/img/state_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stazxr/zblog/HEAD/zblog-web/zblog-web-portal/src/components/zw-player/img/state_1.png -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/.env.production: -------------------------------------------------------------------------------- 1 | ENV = 'production' 2 | 3 | # 接口地址 4 | VUE_APP_BASE_API = 'https://admin.suntaoblog.com' 5 | VUE_APP_WS_API = 'wss://admin.suntaoblog.com' 6 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-portal/src/components/zw-player/img/list_pan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stazxr/zblog/HEAD/zblog-web/zblog-web-portal/src/components/zw-player/img/list_pan.png -------------------------------------------------------------------------------- /zblog-web/zblog-web-portal/src/components/zw-player/img/talkicon1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stazxr/zblog/HEAD/zblog-web/zblog-web-portal/src/components/zw-player/img/talkicon1.png -------------------------------------------------------------------------------- /zblog-web/zblog-web-portal/src/components/zw-player/img/talkicon2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stazxr/zblog/HEAD/zblog-web/zblog-web-portal/src/components/zw-player/img/talkicon2.png -------------------------------------------------------------------------------- /zblog-web/zblog-web-portal/src/plugins/vuetify.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Vuetify from 'vuetify/lib' 3 | 4 | Vue.use(Vuetify) 5 | 6 | export default new Vuetify({ 7 | }) 8 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-service/src/main/resources/zblog.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stazxr/zblog/HEAD/zblog-services/zblog-business/zblog-service/src/main/resources/zblog.jks -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/components/ParentView/index.vue: -------------------------------------------------------------------------------- 1 | 4 | 9 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-service/src/main/resources/test001.rk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stazxr/zblog/HEAD/zblog-services/zblog-business/zblog-service/src/main/resources/test001.rk -------------------------------------------------------------------------------- /zblog-web/zblog-web-portal/src/components/zw-player/img/list_play_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stazxr/zblog/HEAD/zblog-web/zblog-web-portal/src/components/zw-player/img/list_play_hover.png -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-service/src/main/resources/suntaoblogcom.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stazxr/zblog/HEAD/zblog-services/zblog-business/zblog-service/src/main/resources/suntaoblogcom.jks -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/App.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/main/java/com/github/stazxr/zblog/bas/log/advice/package-info.java: -------------------------------------------------------------------------------- 1 | @NonNullApi 2 | package com.github.stazxr.zblog.bas.log.advice; 3 | 4 | import org.springframework.lang.NonNullApi; -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/main/java/com/github/stazxr/zblog/bas/log/filter/package-info.java: -------------------------------------------------------------------------------- 1 | @NonNullApi 2 | package com.github.stazxr.zblog.bas.log.filter; 3 | 4 | import org.springframework.lang.NonNullApi; -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-core/src/main/java/com/github/stazxr/zblog/core/config/rest/package-info.java: -------------------------------------------------------------------------------- 1 | @NonNullApi 2 | package com.github.stazxr.zblog.core.config.rest; 3 | 4 | import org.springframework.lang.NonNullApi; -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/main/java/com/github/stazxr/zblog/bas/context/config/package-info.java: -------------------------------------------------------------------------------- 1 | @NonNullApi 2 | package com.github.stazxr.zblog.bas.context.config; 3 | 4 | import org.springframework.lang.NonNullApi; -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/main/java/com/github/stazxr/zblog/bas/context/filter/package-info.java: -------------------------------------------------------------------------------- 1 | @NonNullApi 2 | package com.github.stazxr.zblog.bas.context.filter; 3 | 4 | import org.springframework.lang.NonNullApi; -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/main/java/com/github/stazxr/zblog/bas/reqsinglepost/package-info.java: -------------------------------------------------------------------------------- 1 | @NonNullApi 2 | package com.github.stazxr.zblog.bas.reqsinglepost; 3 | 4 | import org.springframework.lang.NonNullApi; -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/main/java/com/github/stazxr/zblog/bas/security/filter/package-info.java: -------------------------------------------------------------------------------- 1 | @NonNullApi 2 | package com.github.stazxr.zblog.bas.security.filter; 3 | 4 | import org.springframework.lang.NonNullApi; -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/main/java/com/github/stazxr/zblog/bas/props/database/package-info.java: -------------------------------------------------------------------------------- 1 | @NonNullApi 2 | package com.github.stazxr.zblog.bas.props.database; 3 | 4 | import org.springframework.lang.NonNullApi; 5 | -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/main/java/com/github/stazxr/zblog/bas/context/properties/package-info.java: -------------------------------------------------------------------------------- 1 | @NonNullApi 2 | package com.github.stazxr.zblog.bas.context.properties; 3 | 4 | import org.springframework.lang.NonNullApi; -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/frame/muses/缪斯框架说明.txt: -------------------------------------------------------------------------------- 1 | 前端缪斯框架原型,先进行简单组件的封装! 2 | 第一阶段:补充开发中常用的公共组件 3 | 4 | ChangeLogs 5 | 2024-04-28: 增加搜索组件 muses-search-form 和 muses-search-form-item, 可根据页面宽度自动折叠过多的搜索字段 6 | 7 | 高效的开发离不开日常工作的总结与积累! By 孙涛 at 20240419 8 | -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/main/java/com/github/stazxr/zblog/bas/security/authn/userpass/numcode/package-info.java: -------------------------------------------------------------------------------- 1 | @NonNullApi 2 | package com.github.stazxr.zblog.bas.security.authn.userpass.numcode; 3 | 4 | import org.springframework.lang.NonNullApi; -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/assets/icons/svg/size.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/frame/muses/components/pagination/index.js: -------------------------------------------------------------------------------- 1 | import MusesPagination from './muses-pagination.vue' 2 | 3 | MusesPagination.install = Vue => Vue.component(MusesPagination.name, MusesPagination) 4 | 5 | export default MusesPagination 6 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/frame/muses/components/search-form/index.js: -------------------------------------------------------------------------------- 1 | import MusesSearchForm from './muses-search-form.vue' 2 | 3 | MusesSearchForm.install = Vue => Vue.component(MusesSearchForm.name, MusesSearchForm) 4 | 5 | export default MusesSearchForm 6 | -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/main/java/com/github/stazxr/zblog/bas/security/SecurityConstant.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.bas.security; 2 | 3 | public class SecurityConstant { 4 | public static final String AUTHENTICATION_PREFIX = "Bearer "; 5 | } 6 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/api/base/server.js: -------------------------------------------------------------------------------- 1 | import api from '../custom-axios' 2 | 3 | const serverApi = '/api/server' 4 | 5 | export default { 6 | queryServerData: params => { 7 | return api.httpRequest().get(`${serverApi}/data`, params) 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/main/java/com/github/stazxr/zblog/bas/validation/group/Create.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.bas.validation.group; 2 | 3 | /** 4 | * 5 | * 6 | * @author SunTao 7 | * @since 2025-08-01 8 | */ 9 | public interface Create { 10 | } 11 | -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/main/java/com/github/stazxr/zblog/bas/validation/group/Update.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.bas.validation.group; 2 | 3 | /** 4 | * 5 | * 6 | * @author SunTao 7 | * @since 2025-08-01 8 | */ 9 | public interface Update { 10 | } 11 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/frame/muses/components/search-form-item/index.js: -------------------------------------------------------------------------------- 1 | import MusesSearchFormItem from './muses-search-form-item.vue' 2 | 3 | MusesSearchFormItem.install = Vue => Vue.component(MusesSearchFormItem.name, MusesSearchFormItem) 4 | 5 | export default MusesSearchFormItem 6 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/api/menu.js: -------------------------------------------------------------------------------- 1 | import api from './custom-axios' 2 | 3 | const menuApi = '/api/menu' 4 | 5 | export default { 6 | // 查询用户菜单列表(树) 7 | queryUserMenuTree: params => { 8 | return api.httpRequest().get(`${menuApi}/queryUserMenuTree`, params) 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /zblog-doc/Security.txt: -------------------------------------------------------------------------------- 1 | AuthenticationProvider 2 | 3 | AbstractAuthenticationToken 4 | 5 | UserDetails 6 | 7 | GrantedAuthority 8 | 9 | AuthenticationFilter 10 | 11 | AuthenticationManager 12 | 13 | FilterOrderRegistration 14 | 15 | AuthenticationManagerBuilder 16 | 17 | ProviderManager 18 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/api/service/test.js: -------------------------------------------------------------------------------- 1 | import api from '../custom-axios' 2 | 3 | const testApi = '/api/test' 4 | 5 | export default { 6 | // 测试POI 7 | excelPoi: params => { 8 | return api.httpRequest().post(`${testApi}/excelPoi`, params, { responseType: 'blob' }) 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-service/src/main/resources/kaptchaConfig.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "loginCode", 4 | "properties": { 5 | "captchaType": "Arithmetic", 6 | "duration": 60, 7 | "length": 2, 8 | "width": 111, 9 | "height": 32 10 | } 11 | } 12 | ] -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | dist/ 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | **/*.log 8 | 9 | # Editor directories and files 10 | .idea 11 | .vscode 12 | *.suo 13 | *.ntvs* 14 | *.njsproj 15 | *.sln 16 | *.local 17 | 18 | package-lock.json 19 | yarn.lock 20 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/layout/components/index.js: -------------------------------------------------------------------------------- 1 | export { default as AppMain } from './AppMain' 2 | export { default as Navbar } from './Navbar' 3 | export { default as Settings } from './Settings' 4 | export { default as Sidebar } from './Sidebar/index.vue' 5 | export { default as TagsView } from './TagsView/index.vue' 6 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-base/src/main/java/com/github/stazxr/zblog/base/domain/bo/storage/BaseStorageConfig.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.base.domain.bo.storage; 2 | 3 | /** 4 | * 云存储配置信息-阿里云 5 | * 6 | * @author SunTao 7 | * @since 2022-10-27 8 | */ 9 | public abstract class BaseStorageConfig { 10 | } 11 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-base/src/main/resources/mapper/UserLoginLogMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-service/src/main/resources/mapper/WebSettingMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/.env.development: -------------------------------------------------------------------------------- 1 | ENV = 'development' 2 | 3 | # 接口地址 4 | VUE_APP_BASE_API = http://192.168.31.157:8081 5 | # VUE_APP_BASE_API = 'http://localhost:8081' 6 | VUE_APP_WS_API = 'ws://localhost:8081' 7 | 8 | # 启用 babel-plugin-dynamic-import-node 插件,解决热加载编译速度慢的问题 9 | VUE_CLI_BABEL_TRANSPILE_MODULES = true 10 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/babel.config.js: -------------------------------------------------------------------------------- 1 | const plugins = ['@vue/babel-plugin-transform-vue-jsx'] 2 | 3 | if (process.env.NODE_ENV === 'production') { 4 | // 禁用生产环境的控制台打印 5 | plugins.push('transform-remove-console') 6 | } 7 | 8 | module.exports = { 9 | plugins: plugins, 10 | presets: [ 11 | '@vue/app' 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-service/src/main/resources/application-dev.yml: -------------------------------------------------------------------------------- 1 | mybatis-plus: 2 | configuration: 3 | log-impl: org.apache.ibatis.logging.stdout.StdOutImpl 4 | logging: 5 | level: 6 | '*': debug 7 | com.alibaba.druid.sql: debug 8 | com.github.spring.security.mapper: debug 9 | org.springframework.security: debug -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/store/getters.js: -------------------------------------------------------------------------------- 1 | const getters = { 2 | user: state => state.user.user, 3 | perms: state => state.user.user == null ? [] : state.user.user['perms'] == null ? [] : state.user.user['perms'], 4 | loadMenus: state => state.user.loadMenus, 5 | webSshApi: state => state.api.webSshApi 6 | } 7 | export default getters 8 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-portal/src/router/index.js: -------------------------------------------------------------------------------- 1 | import router from './routers' 2 | 3 | router.beforeEach((to, from, next) => { 4 | to.meta['title'] && (document.title = to.meta['title']) 5 | next() 6 | }) 7 | 8 | router.afterEach((to, from) => { 9 | window.scrollTo({ 10 | top: 0, 11 | behavior: 'instant' 12 | }) 13 | }) 14 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/.editorconfig: -------------------------------------------------------------------------------- 1 | # https://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 2 8 | end_of_line = lf 9 | insert_final_newline = true 10 | trim_trailing_whitespace = true 11 | 12 | [*.md] 13 | insert_final_newline = false 14 | trim_trailing_whitespace = false 15 | -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/test/java/com/github/stazxr/zblog/bas/captcha/CaptchaTest.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.bas.captcha; 2 | 3 | public class CaptchaTest { 4 | public static void main(String[] args) { 5 | CaptchaType captchaType = CaptchaType.of("Default"); 6 | System.out.println(captchaType); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/views/admin/monitor/sql/index.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 16 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/components/IconSelect/requireIcons.js: -------------------------------------------------------------------------------- 1 | const req = require.context('../../assets/icons/svg', false, /\.svg$/) 2 | const requireAll = requireContext => requireContext.keys() 3 | 4 | const re = /\.\/(.*)\.svg/ 5 | 6 | const icons = requireAll(req).map(i => { 7 | return i.match(re)[1] 8 | }) 9 | 10 | export default icons 11 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/views/features/redirect.vue: -------------------------------------------------------------------------------- 1 | 13 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/utils/timerUtils.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 清除定时器并重置定时器标记 3 | * @param {number | null} timer - 定时器ID 4 | * @returns {null} - 返回null表示定时器已清除 5 | */ 6 | export function clearTimer(timer) { 7 | if (timer) { 8 | console.log('Clear Interval', timer) 9 | clearInterval(timer) 10 | return null 11 | } 12 | return timer 13 | } 14 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/views/admin/mnt/swagger/index.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 12 | 13 | 16 | -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/main/resources/default-tags.yml: -------------------------------------------------------------------------------- 1 | tags: 2 | - {tagName: 'zblog-sysCode'} 3 | - {tagName: 'zblog-appCode'} 4 | - {tagName: 'zblog-deployArea'} 5 | - {tagName: 'zblog-deployCenter'} 6 | - {tagName: 'zblog-deployUnit'} 7 | - {tagName: 'zblog-deployIp'} 8 | - {tagName: 'zblog-deployCode'} 9 | - {tagName: 'zblog-loginId'} 10 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/assets/icons/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import SvgIcon from '@/components/SvgIcon'// svg component 3 | 4 | // register globally 5 | Vue.component('svg-icon', SvgIcon) 6 | 7 | const req = require.context('./svg', false, /\.svg$/) 8 | const requireAll = requireContext => requireContext.keys().map(requireContext) 9 | requireAll(req) 10 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-core/src/main/java/com/github/stazxr/zblog/core/base/BaseMapper.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.core.base; 2 | 3 | /** 4 | * BaseMapper 5 | * 6 | * @param entity 实体入库 7 | * @author SunTao 8 | * @since 2021-07-03 9 | */ 10 | public interface BaseMapper extends com.baomidou.mybatisplus.core.mapper.BaseMapper { 11 | } 12 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/assets/icons/svgo.yml: -------------------------------------------------------------------------------- 1 | # replace default config 2 | 3 | # multipass: true 4 | # full: true 5 | 6 | plugins: 7 | 8 | # - name 9 | # 10 | # or: 11 | # - name: false 12 | # - name: true 13 | # 14 | # or: 15 | # - name: 16 | # param1: 1 17 | # param2: 2 18 | 19 | - removeAttrs: 20 | attrs: 21 | - 'fill' 22 | - 'fill-rule' 23 | -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/main/java/com/github/stazxr/zblog/bas/sequence/SequenceGenerator.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.bas.sequence; 2 | 3 | /** 4 | * 序号生成器 5 | * 6 | * @author SunTao 7 | * @since 2021-12-12 8 | */ 9 | public interface SequenceGenerator { 10 | /** 11 | * 获取下一个序号 12 | * 13 | * @return 序号,需要保证唯一性 14 | */ 15 | String nextId(); 16 | } 17 | -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/main/java/com/github/stazxr/zblog/bas/sequence/core/id/IdGenerator.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.bas.sequence.core.id; 2 | 3 | /** 4 | * ID 生成器 5 | * 6 | * @author SunTao 7 | * @since 2024-04-03 8 | */ 9 | public interface IdGenerator { 10 | /** 11 | * 生成一个序号 12 | * 13 | * @return 序号 14 | */ 15 | String generateId(); 16 | } 17 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/frame/muses/components/pagination/muses-pagination.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 19 | 20 | 23 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-core/src/main/java/com/github/stazxr/zblog/core/base/BaseService.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.core.base; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | 5 | /** 6 | * 自定义公共Service接口,实现IService,并添加需要的业务逻辑 7 | * 8 | * @author SunTao 9 | * @since 2021-07-03 10 | */ 11 | public interface BaseService extends IService { 12 | } 13 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-log/src/main/java/com/github/stazxr/zblog/log/annotation/IgnoredLog.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.log.annotation; 2 | 3 | import java.lang.annotation.*; 4 | 5 | /** 6 | * 标注日志,忽略记录接口日志信息 7 | * 8 | * @author SunTao 9 | * @since 2021-09-26 10 | */ 11 | @Documented 12 | @Target({ElementType.METHOD}) 13 | @Retention(RetentionPolicy.RUNTIME) 14 | public @interface IgnoredLog { 15 | } 16 | -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/main/resources/kaptchaConfig_demo.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "captchaName-0", 4 | "properties": { 5 | "captchaType": "Default", 6 | "duration": 60, 7 | "length": 4, 8 | "width": 111, 9 | "height": 32 10 | } 11 | }, 12 | { 13 | "name": "captchaName-1" 14 | }, 15 | { 16 | "name": "captchaName-2", 17 | "properties": { } 18 | } 19 | ] -------------------------------------------------------------------------------- /zblog-doc/数据校验逻辑.txt: -------------------------------------------------------------------------------- 1 | 1、业务错误,如角色编码已存在,数据不允许删除... 2 | 使用:com.github.stazxr.zblog.core.util.DataValidated 3 | 特点:抛出 DataValidatedException 异常,不会打印异常堆栈信息,日志模块不会标记为异常日志,标记执行结果为失败 4 | 注意:业务异常返回的提示要人性化,如返回”角色编码已存在“,”存在子节点,不允许删除“等 5 | 6 | 2、非业务错误,如代码错误,系统错误,数据查询不存在,接口(增删改)入参缺失... 7 | 使用:com.github.stazxr.zblog.util.Assert 8 | 特点:抛出 AssertionViolatedException 异常,会打印异常堆栈信息,日志模块会标记为异常日志 9 | 注意:非业务异常一般是代码原因,未知异常导致,可以返回较具体提示信息,方便根据提示快速定位原因,如”参数【name】缺失“,”数据【id】不存在“等 -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-log/src/main/java/com/github/stazxr/zblog/log/annotation/Log.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.log.annotation; 2 | 3 | import java.lang.annotation.*; 4 | 5 | /** 6 | * 操作日志标注 7 | * 8 | * @author SunTao 9 | * @since 2021-05-16 10 | */ 11 | @Documented 12 | @Target({ElementType.METHOD}) 13 | @Retention(RetentionPolicy.RUNTIME) 14 | public @interface Log { 15 | String value() default ""; 16 | } 17 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-service/src/main/java/com/github/stazxr/zblog/mapper/WebSettingMapper.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.mapper; 2 | 3 | import com.github.stazxr.zblog.core.base.BaseMapper; 4 | import com.github.stazxr.zblog.domain.entity.WebsiteConfig; 5 | 6 | /** 7 | * 网站设置数据持久层 8 | * 9 | * @author SunTao 10 | * @since 2022-12-08 11 | */ 12 | public interface WebSettingMapper extends BaseMapper { 13 | 14 | } 15 | -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/main/java/com/github/stazxr/zblog/bas/security/service/SecurityLogoutService.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.bas.security.service; 2 | 3 | /** 4 | * 用于管理系统中的安全注销服务接口。 5 | * 6 | * @author SunTao 7 | * @since 2024-11-16 8 | */ 9 | public interface SecurityLogoutService { 10 | /** 11 | * 清理用户的登录信息。 12 | * 13 | * @param userId 用户标识 14 | */ 15 | void clearUserLoginInfo(String userId); 16 | } 17 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/assets/icons/svg/fullscreen.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-base/src/main/java/com/github/stazxr/zblog/base/mapper/UserLoginLogMapper.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.base.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.github.stazxr.zblog.base.domain.entity.UserLoginLog; 5 | 6 | /** 7 | * 用户登录日志持久化接口 8 | * 9 | * @author SunTao 10 | * @since 2025-10-17 11 | */ 12 | public interface UserLoginLogMapper extends BaseMapper { 13 | } 14 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-service/src/main/resources/mapper/ArticleImgRelationMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | DELETE FROM article_img_relation WHERE ARTICLE_ID = #{articleId} 6 | 7 | 8 | -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/main/java/com/github/stazxr/zblog/bas/log/contants/LogConstants.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.bas.log.contants; 2 | 3 | /** 4 | * Constants related to logging. 5 | * 6 | * @author SunTao 7 | * @since 2024-07-07 8 | */ 9 | public class LogConstants { 10 | /** 11 | * MDC key used to store the servlet path in log messages. 12 | */ 13 | public static final String LOG_MDC_PATH_KEY = "_mdc_log_path"; 14 | } 15 | -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/main/java/com/github/stazxr/zblog/bas/sequence/SequenceGeneratorAware.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.bas.sequence; 2 | 3 | /** 4 | * 序号生成器接口感知器 5 | * 6 | * @author SunTao 7 | * @since 2024-04-02 8 | */ 9 | public interface SequenceGeneratorAware { 10 | /** 11 | * 设置ID生成器 12 | * 13 | * @param idGenerator IdGenerator的实现类 14 | */ 15 | void setSequenceGenerator(SequenceGenerator idGenerator); 16 | } 17 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-base/src/main/java/com/github/stazxr/zblog/base/service/ServerMonitorService.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.base.service; 2 | 3 | import com.github.stazxr.zblog.base.domain.bo.ServerData; 4 | 5 | /** 6 | * 服务监控业务层 7 | * 8 | * @author SunTao 9 | * @since 2021-09-05 10 | */ 11 | public interface ServerMonitorService { 12 | /** 13 | * 查询服务器信息 14 | * 15 | * @return ServerInfo 16 | */ 17 | ServerData queryServerData(); 18 | } 19 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-core/src/main/java/com/github/stazxr/zblog/core/annotation/IgnoreResult.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.core.annotation; 2 | 3 | import java.lang.annotation.*; 4 | 5 | /** 6 | * 标注不需要统一封装的接口 7 | * 8 | * @author SunTao 9 | * @since 2022-02-07 10 | */ 11 | @Documented 12 | @Inherited 13 | @Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD}) 14 | @Retention(RetentionPolicy.RUNTIME) 15 | public @interface IgnoreResult { 16 | } 17 | -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/test/java/com/github/stazxr/zblog/bas/security/JwtTest.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.bas.security; 2 | 3 | import com.nimbusds.jose.JWSAlgorithm; 4 | import org.junit.Ignore; 5 | import org.junit.Test; 6 | 7 | @Ignore 8 | public class JwtTest { 9 | @Test 10 | public void testJWSAlgorithm() { 11 | JWSAlgorithm jwsAlgorithm = new JWSAlgorithm("HS256"); 12 | System.out.println(jwsAlgorithm); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/api/base/system/interface.js: -------------------------------------------------------------------------------- 1 | import api from '../../custom-axios' 2 | 3 | const interfaceApi = '/api/interfaces' 4 | 5 | export default { 6 | // 分页查询接口列表 7 | pageInterfaceList: params => { 8 | return api.httpRequest().get(`${interfaceApi}/pageList`, params) 9 | }, 10 | // 导出接口列表 11 | exportInterface: params => { 12 | return api.httpRequest().get(`${interfaceApi}/exportInterface`, params, { responseType: 'blob' }) 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-util/src/main/java/com/github/stazxr/zblog/util/Constants.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.util; 2 | 3 | /** 4 | * 常用工具常量 5 | * 6 | * @author SunTao 7 | * @since 2022-06-07 8 | */ 9 | public class Constants { 10 | /** 11 | * 本机IP,IPV4 12 | */ 13 | public static final String LOCAL_HOST_V4 = "127.0.0.1"; 14 | 15 | /** 16 | * 本机IP,IPV6 17 | */ 18 | public static final String LOCAL_HOST_V6 = "0:0:0:0:0:0:0:1"; 19 | } 20 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/components/Web/index.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 24 | -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/main/java/com/github/stazxr/zblog/bas/router/RouterExtLevel.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.bas.router; 2 | 3 | /** 4 | * 扩展路由访问级别 5 | * 6 | * @author SunTao 7 | * @since 2024-11-24 8 | * @version 5.0 9 | */ 10 | public class RouterExtLevel extends RouterLevel { 11 | /** 12 | * 禁止访问 13 | */ 14 | public static final int FORBIDDEN = 1 << 3; 15 | 16 | /** 17 | * 404 18 | */ 19 | public static final int NULL = 1 << 4; 20 | } 21 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-base/src/main/java/com/github/stazxr/zblog/base/domain/bo/DateCount.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.base.domain.bo; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | /** 7 | * 基于日期的数据量 8 | * 9 | * @author SunTao 10 | * @since 2023-05-30 11 | */ 12 | @Getter 13 | @Setter 14 | public class DateCount { 15 | /** 16 | * 日期值 17 | */ 18 | private String date; 19 | 20 | /** 21 | * 数量 22 | */ 23 | private int count; 24 | } 25 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/directive/preventReClick.js: -------------------------------------------------------------------------------- 1 | // 前端防多次点击,重复提交 use: v-preventReClick || v-preventReClick = '1000' 2 | export default function(Vue) { 3 | Vue.directive('preventReClick', { 4 | inserted(el, binding) { 5 | el.addEventListener('click', () => { 6 | if (!el['disabled']) { 7 | el['disabled'] = true 8 | setTimeout(() => { 9 | el['disabled'] = false 10 | }, binding.value || 3000) 11 | } 12 | }) 13 | } 14 | }) 15 | } 16 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-portal/vue.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | devServer: { 3 | host: 'localhost', 4 | port: 31943, 5 | open: true, 6 | proxy: { 7 | '/api': { 8 | target: 'http://localhost:19992', 9 | // target: 'https://www.suntaoblog.com', 10 | changeOrigin: true, 11 | pathRewrite: { 12 | '^/api': 'api' 13 | } 14 | } 15 | }, 16 | disableHostCheck: true 17 | }, 18 | transpileDependencies: [ 19 | 'vuetify' 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-log/src/main/java/com/github/stazxr/zblog/log/annotation/properties/LogProperties.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.log.annotation.properties; 2 | 3 | /** 4 | * 日志配置信息 5 | * 6 | * @author SunTao 7 | * @since 2022-06-20 8 | */ 9 | public class LogProperties { 10 | private boolean enabled = true; 11 | 12 | public boolean isEnabled() { 13 | return enabled; 14 | } 15 | 16 | public void setEnabled(boolean enabled) { 17 | this.enabled = enabled; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-base/src/main/java/com/github/stazxr/zblog/base/service/MenuService.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.base.service; 2 | 3 | import com.github.stazxr.zblog.base.domain.vo.MenuVo; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * 菜单服务 9 | * 10 | * @author SunTao 11 | * @since 2024-12-01 12 | */ 13 | public interface MenuService { 14 | /** 15 | * 查询用户菜单列表(树) 16 | * 17 | * @return {@link List} 返回构建的用户菜单树 18 | */ 19 | List queryUserMenuTree(); 20 | } 21 | 22 | -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-util/src/test/java/com/github/stazxr/zblog/util/ThrowableUtilsTest.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.util; 2 | 3 | import org.junit.Ignore; 4 | import org.junit.Test; 5 | 6 | public class ThrowableUtilsTest { 7 | @Test 8 | @Ignore 9 | public void test1() throws Exception { 10 | try { 11 | throw new RuntimeException("Test exception"); 12 | } catch (Exception e) { 13 | System.out.println(ThrowableUtils.getStackTrace(e)); 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/main/java/com/github/stazxr/zblog/bas/file/util/qiniu/QiNiuPutRet.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.bas.file.util.qiniu; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | import lombok.ToString; 6 | 7 | /** 8 | * 七牛云上传响应对下封装 9 | * 10 | * @author SunTao 11 | * @since 2022-10-31 12 | */ 13 | @Getter 14 | @Setter 15 | @ToString 16 | public class QiNiuPutRet { 17 | private String key; 18 | 19 | private String hash; 20 | 21 | private String bucket; 22 | 23 | private long fsize; 24 | } -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/api/service/comment.js: -------------------------------------------------------------------------------- 1 | import api from '../custom-axios' 2 | 3 | const commentApi = '/api/comments' 4 | 5 | export default { 6 | // 分页查询评论列表 7 | pageList: params => { 8 | return api.httpRequest().get(`${commentApi}/pageList`, params) 9 | }, 10 | // 删除评论 11 | deleteComment: params => { 12 | return api.httpRequest().post(`${commentApi}/deleteComment`, params) 13 | }, 14 | // 审核评论 15 | auditComment: params => { 16 | return api.httpRequest().post(`${commentApi}/auditComment`, params) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/api/service/message.js: -------------------------------------------------------------------------------- 1 | import api from '../custom-axios' 2 | 3 | const messageApi = '/api/messages' 4 | 5 | export default { 6 | // 分页查询留言列表 7 | pageList: params => { 8 | return api.httpRequest().get(`${messageApi}/pageList`, params) 9 | }, 10 | // 删除留言 11 | deleteMessage: params => { 12 | return api.httpRequest().post(`${messageApi}/deleteMessage`, params) 13 | }, 14 | // 审核留言 15 | auditMessage: params => { 16 | return api.httpRequest().post(`${messageApi}/auditMessage`, params) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-service/src/main/resources/mapper/ArticleViewMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-base/src/main/java/com/github/stazxr/zblog/base/domain/FileUploadVo.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.base.component.file.model; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 上传文件的返回列表 7 | * 8 | * @author SunTao 9 | * @since 2022-07-27 10 | */ 11 | @Data 12 | public class FileUploadVo { 13 | /** 14 | * 文件编码 15 | */ 16 | private String fileId; 17 | 18 | /** 19 | * 下载地址 20 | */ 21 | private String downUrl; 22 | 23 | /** 24 | * 文件原名称 25 | */ 26 | private String fileName; 27 | } 28 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-base/src/main/java/com/github/stazxr/zblog/base/domain/enums/LoginChan.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.base.domain.enums; 2 | 3 | import lombok.Getter; 4 | 5 | /** 6 | * 登录渠道 7 | * 8 | * @author SunTao 9 | * @since 2025-10-17 10 | */ 11 | @Getter 12 | public enum LoginChan { 13 | /** 14 | * 移动端 15 | */ 16 | MOBILE("01"), 17 | 18 | /** 19 | * PC端 20 | */ 21 | PC("02"); 22 | 23 | private final String chan; 24 | 25 | LoginChan(String chan) { 26 | this.chan = chan; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-service/src/main/java/com/github/stazxr/zblog/domain/vo/CloudTagVo.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.domain.vo; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | /** 7 | * 标签云 8 | * 9 | * @author SunTao 10 | * @since 2023-02-13 11 | */ 12 | @Getter 13 | @Setter 14 | public class CloudTagVo { 15 | /** 16 | * 主键 17 | */ 18 | private Long id; 19 | 20 | /** 21 | * 标签名称 22 | */ 23 | private String name; 24 | 25 | /** 26 | * 标签对应的文章数 27 | */ 28 | private String value; 29 | } 30 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-service/src/main/java/com/github/stazxr/zblog/strategy/ArticleSearchStrategy.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.strategy; 2 | 3 | import com.github.stazxr.zblog.domain.vo.ArticleVo; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * 文章搜索策略 9 | * 10 | * @author SunTao 11 | * @since 2023-02-08 12 | */ 13 | public interface ArticleSearchStrategy { 14 | /** 15 | * 搜索文章 16 | * 17 | * @param keywords 关键字 18 | * @return {@link List} 文章列表 19 | */ 20 | List searchArticle(String keywords); 21 | } 22 | -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/main/java/com/github/stazxr/zblog/bas/router/RouterLevel.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.bas.router; 2 | 3 | /** 4 | * 路由访问级别 5 | * 6 | * @author SunTao 7 | * @since 2024-11-24 8 | * @version 5.0 9 | */ 10 | public abstract class RouterLevel { 11 | /** 12 | * 公开访问 13 | */ 14 | public static final int OPEN = 1; 15 | 16 | /** 17 | * 登录访问 18 | */ 19 | public static final int PUBLIC = 1 << 1; 20 | 21 | /** 22 | * 授权访问 23 | */ 24 | public static final int PERM = 1 << 2; 25 | } 26 | 27 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/api/home.js: -------------------------------------------------------------------------------- 1 | import api from './custom-axios' 2 | 3 | export default { 4 | // 获取面板 5 | getHomePanelDataCount: params => { 6 | return api.httpRequest().get(`/api/home/getHomePanelDataCount`, params) 7 | }, 8 | // 根据图标类型,获取图标的详细数据 9 | getHomePanelDetailDataByType: params => { 10 | return api.httpRequest().get(`/api/home/getHomePanelDetailDataByType`, params) 11 | }, 12 | // 获取首页面板的访客地域数据 13 | getHomePanelVisitorAreaCount: params => { 14 | return api.httpRequest().get(`/api/home/getHomePanelVisitorAreaCount`, params) 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-base/src/main/java/com/github/stazxr/zblog/base/domain/bo/LoginUser.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.base.domain.bo; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.io.Serializable; 7 | 8 | 9 | /** 10 | * 左侧菜单元数据 11 | * 12 | * @author SunTao 13 | * @since 2023-06-29 14 | */ 15 | @Getter 16 | @Setter 17 | public class LoginUser implements Serializable { 18 | /** 19 | * 用户id 20 | */ 21 | private Long userId; 22 | 23 | /** 24 | * 用户令牌 25 | */ 26 | private String accessToken; 27 | } 28 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-log/src/main/java/com/github/stazxr/zblog/log/annotation/EnableLog.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.log.annotation; 2 | 3 | import com.github.stazxr.zblog.log.annotation.properties.LogProperties; 4 | import org.springframework.context.annotation.Import; 5 | 6 | import java.lang.annotation.*; 7 | 8 | /** 9 | * 日志组件开关 10 | * 11 | * @author SunTao 12 | * @since 2022-06-20 13 | */ 14 | @Documented 15 | @Target({ElementType.TYPE}) 16 | @Retention(RetentionPolicy.RUNTIME) 17 | @Import({ LogProperties.class }) 18 | public @interface EnableLog { 19 | } 20 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-service/src/main/java/com/github/stazxr/zblog/domain/bo/ArticleSimpleData.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.domain.bo; 2 | 3 | import com.github.stazxr.zblog.core.base.BaseVo; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | /** 8 | * 门户-文章页面简单信息 9 | * 10 | * @author SunTao 11 | * @since 2023-01-06 12 | */ 13 | @Getter 14 | @Setter 15 | public class ArticleSimpleData extends BaseVo { 16 | /** 17 | * 主键 18 | */ 19 | private Long id; 20 | 21 | /** 22 | * 文章标题 23 | */ 24 | private String title; 25 | } 26 | -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/main/java/com/github/stazxr/zblog/bas/file/model/UploadFileType.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.bas.file.model; 2 | 3 | import lombok.Getter; 4 | 5 | /** 6 | * 上传文件类型 7 | * 8 | * @author SunTao 9 | * @since 2022-10-22 10 | */ 11 | public enum UploadFileType { 12 | /** 13 | * 普通文件 14 | */ 15 | NORMAL("1"), 16 | 17 | /** 18 | * 测试文件 19 | */ 20 | TEST("2"); 21 | 22 | @Getter 23 | private final String type; 24 | 25 | UploadFileType(String type) { 26 | this.type = type; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-core/src/main/java/com/github/stazxr/zblog/core/config/ZblogConfig.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.core.config; 2 | 3 | import com.github.stazxr.zblog.core.config.properties.ZblogProperties; 4 | import org.springframework.boot.context.properties.EnableConfigurationProperties; 5 | import org.springframework.context.annotation.Configuration; 6 | 7 | /** 8 | * ZblogBase 配置中心 9 | * 10 | * @author SunTao 11 | * @since 2022-01-28 12 | */ 13 | @Configuration 14 | @EnableConfigurationProperties(value = { ZblogProperties.class }) 15 | public class ZblogConfig { 16 | } 17 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-service/src/main/resources/mapper/ArticleTagRelationMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | DELETE FROM article_tag_relation WHERE TAG_ID = #{tagId} 6 | 7 | 8 | 9 | DELETE FROM article_tag_relation WHERE ARTICLE_ID = #{articleId} 10 | 11 | 12 | -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-util/src/main/java/com/github/stazxr/zblog/util/exception/AssertionViolatedException.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.util.exception; 2 | 3 | /** 4 | * Assert校验失败异常 5 | * 6 | * @author SunTao 7 | * @since 2022-07-12 8 | */ 9 | public class AssertionViolatedException extends RuntimeException { 10 | private static final long serialVersionUID = -296455436186838477L; 11 | 12 | /** 13 | * 构造异常对象 14 | * 15 | * @param message 错误信息 16 | */ 17 | public AssertionViolatedException(String message) { 18 | super(message); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/settings.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | // 网站标题 3 | title: '磨刀霍霍', 4 | 5 | // 是否显示标签栏 6 | tagsView: true, 7 | 8 | // 是否固定头部 9 | fixedHeader: true, 10 | 11 | // 是否显示侧边栏的 Logo 12 | sidebarLogo: true, 13 | 14 | // 是否显示设置的底部信息 15 | showFooter: true, 16 | 17 | // 底部文字,支持html语法 18 | footerTxt: '© 2024 Sun Tao MIT License', 19 | 20 | // 备案号 21 | caseNumber: '陕ICP备2021003044号-1', 22 | 23 | // 前台访问地址 24 | webApi: 'http://localhost:31943' // 本地开发 25 | // webApi: 'https://www.suntaoblog.com' // 生产环境 26 | } 27 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-service/src/test/java/com/github/stazxr/zblog/UserTest.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog; 2 | 3 | import com.github.stazxr.zblog.base.domain.entity.User; 4 | import org.junit.Ignore; 5 | import org.junit.Test; 6 | 7 | public class UserTest { 8 | @Test 9 | @Ignore 10 | public void testUserToString() { 11 | User user = new User(); 12 | user.setId(11L); 13 | user.setUsername("suntao"); 14 | user.setPassword("password"); 15 | user.setEmail("1027353579@qq.com"); 16 | System.out.println("TOString: " + user); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Initializers 2 | org.springframework.context.ApplicationContextInitializer=\ 3 | com.github.stazxr.zblog.bas.props.database.DatabasePropertySourceInitializer 4 | 5 | # Auto Configure 6 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 7 | com.github.stazxr.zblog.bas.context.config.ContextConfig,\ 8 | com.github.stazxr.zblog.bas.log.config.LogConfiguration,\ 9 | com.github.stazxr.zblog.bas.captcha.autoconfigure.CaptchaLoadAutoConfigure,\ 10 | com.github.stazxr.zblog.bas.sequence.autoconfigure.SequenceGeneratorAutoConfiguration -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/utils/rsaEncrypt.js: -------------------------------------------------------------------------------- 1 | import JSEncrypt from 'jsencrypt/bin/jsencrypt.min' 2 | 3 | // 密钥对生成 http://web.chacuo.net/netrsakeypair 4 | 5 | const publicKey = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCI0IgHhe8Z9Mim7SXv4sLorWt40YSoivIu3' + 6 | 'K/rZWHtJ6P9/ZxvA1u/LzOoainGnuXEcC0D3RW4qn2FUZ5WtORI5C9F99v2zWHLUYULsSfL3yvnM3zQ1dUcVRAKWf' + 7 | 'dHTVvz4QUad21d3GZQmgS4CsB0iC/XPfgdrbSiVYI9I4tRNwIDAQAB' 8 | 9 | // 加密 10 | export function encrypt(txt) { 11 | const encryptor = new JSEncrypt() 12 | encryptor.setPublicKey(publicKey) // 设置公钥 13 | return encryptor.encrypt(txt) // 对需要加密的数据进行加密 14 | } 15 | 16 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-service/src/main/resources/mapper/TalkLikeMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | DELETE FROM talk_like WHERE USER_ID = #{userId} AND TALK_ID = #{talkId} 6 | 7 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/assets/icons/svg/icon-interface.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/assets/icons/svg/search.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-portal/src/utils/rsaEncrypt.js: -------------------------------------------------------------------------------- 1 | import JSEncrypt from 'jsencrypt/bin/jsencrypt.min' 2 | 3 | // 密钥对生成 http://web.chacuo.net/netrsakeypair 4 | 5 | const publicKey = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQEo7CNrbXiXyWPvFsEsSk9xNI\n' + 6 | 'l0914VMVIHCGyXmXik3oUvQruPLvIOzC0Efdq3xK6SFLBxuRZOBVJxhW6jQ7s9II\n' + 7 | 'rAXFJykfWSFf+BDggmhY89kLtCW77W62SRLWzgdCEsRHjo+y+YEu1fw1Efompgn8\n' + 8 | '8FL6qq131IkYpL9iWwIDAQAB' 9 | 10 | // 加密 11 | export function encrypt(txt) { 12 | const encryptor = new JSEncrypt() 13 | encryptor.setPublicKey(publicKey) // 设置公钥 14 | return encryptor.encrypt(txt) // 对需要加密的数据进行加密 15 | } 16 | -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/test/java/com/github/stazxr/zblog/bas/encryption/rsa/RsaEncryptorTest.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.bas.encryption.rsa; 2 | 3 | import org.junit.Assert; 4 | import org.junit.Ignore; 5 | import org.junit.Test; 6 | 7 | @Ignore 8 | public class RsaEncryptorTest { 9 | @Test 10 | public void testRsaEncryptor() { 11 | RsaEncryptor encryptor = new RsaEncryptor(); 12 | String plainTest = "RSA加解密测试"; 13 | String encrypt = encryptor.encrypt(plainTest); 14 | String decrypt = encryptor.decrypt(encrypt); 15 | Assert.assertNotSame(plainTest, decrypt); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-core/src/main/java/com/github/stazxr/zblog/core/annotation/ApiVersion.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.core.annotation; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | /** 9 | * API 版本 10 | * 11 | * @author SunTao 12 | * @since 2022-03-20 13 | */ 14 | @Retention(RetentionPolicy.RUNTIME) 15 | @Target(ElementType.METHOD) 16 | public @interface ApiVersion { 17 | /** 18 | * 分组 19 | * 20 | * @return group 21 | */ 22 | String[] group(); 23 | } 24 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-service/src/main/resources/mapper/ArticleLikeMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | DELETE FROM article_like WHERE USER_ID = #{userId} AND ARTICLE_ID = #{articleId} 6 | 7 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-service/src/main/resources/mapper/CommentLikeMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | DELETE FROM comment_like WHERE USER_ID = #{userId} AND COMMENT_ID = #{commentId} 6 | 7 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/test/java/com/github/stazxr/zblog/bas/encryption/rsa/RsaEncryptor2Test.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.bas.encryption.rsa; 2 | 3 | import org.junit.Assert; 4 | import org.junit.Ignore; 5 | import org.junit.Test; 6 | 7 | @Ignore 8 | public class RsaEncryptor2Test { 9 | @Test 10 | public void testRsaEncryptor2() { 11 | RsaEncryptor2 encryptor = new RsaEncryptor2(); 12 | String plainTest = "RSA加解密测试"; 13 | String encrypt = encryptor.encrypt(plainTest); 14 | String decrypt = encryptor.decrypt(encrypt); 15 | Assert.assertNotSame(plainTest, decrypt); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/assets/icons/svg/eye.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/assets/icons/svg/icon-logo.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/layout/components/Sidebar/Item.vue: -------------------------------------------------------------------------------- 1 | 30 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-base/src/main/java/com/github/stazxr/zblog/base/mapper/InterfaceMapper.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.base.mapper; 2 | 3 | import com.github.stazxr.zblog.base.domain.dto.query.InterfaceQueryDto; 4 | import com.github.stazxr.zblog.base.domain.vo.InterfaceVo; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * 接口数据持久层 10 | * 11 | * @author SunTao 12 | * @since 2025-11-03 13 | */ 14 | public interface InterfaceMapper { 15 | /** 16 | * 查询字典列表 17 | * 18 | * @param queryDto 查询参数 19 | * @return List 20 | */ 21 | List selectInterfaceList(InterfaceQueryDto queryDto); 22 | } 23 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-base/src/main/java/com/github/stazxr/zblog/base/domain/dto/FileDeleteDto.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.base.domain.dto; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | /** 8 | * 文件删除参数信息 9 | * 10 | * @author SunTao 11 | * @since 2022-12-02 12 | */ 13 | @Data 14 | @ApiModel("文件删除参数") 15 | public class FileDeleteDto { 16 | /** 17 | * 文件id 18 | */ 19 | @ApiModelProperty("文件id") 20 | private Long fileId; 21 | 22 | /** 23 | * 业务id 24 | */ 25 | @ApiModelProperty("业务id") 26 | private Long businessId; 27 | } 28 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-core/src/main/java/com/github/stazxr/zblog/core/base/BaseDto.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.core.base; 2 | 3 | import com.github.stazxr.zblog.core.util.ToStringUtils; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | import java.io.Serializable; 8 | 9 | /** 10 | * BaseDto 11 | * 12 | * @author SunTao 13 | * @since 2021-12-21 14 | */ 15 | @Getter 16 | @Setter 17 | public class BaseDto implements Serializable { 18 | private static final long serialVersionUID = -7385869795196886066L; 19 | 20 | @Override 21 | public String toString() { 22 | return ToStringUtils.buildString(this); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/main/java/com/github/stazxr/zblog/bas/captcha/factory/CaptchaFactory.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.bas.captcha.factory; 2 | 3 | import com.github.stazxr.zblog.bas.captcha.Captcha; 4 | import com.github.stazxr.zblog.bas.captcha.CaptchaException; 5 | 6 | /** 7 | * 生成验证码的工厂接口。 8 | * 9 | * @author SunTao 10 | * @since 2024-08-20 11 | */ 12 | public interface CaptchaFactory { 13 | /** 14 | * 根据指定的键生成验证码。 15 | * 16 | * @param key 用于生成验证码的唯一标识符 17 | * @return 生成的验证码对象 18 | * @throws CaptchaException 验证码生成失败 19 | */ 20 | Captcha createCaptcha(String key) throws CaptchaException; 21 | } 22 | 23 | -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/main/java/com/github/stazxr/zblog/bas/reqsinglepost/RequestPostSingleParam.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.bas.reqsinglepost; 2 | 3 | import org.springframework.web.bind.annotation.ValueConstants; 4 | 5 | import java.lang.annotation.*; 6 | 7 | /** 8 | * 自定义注解接收单个参数 9 | * 10 | * @author SunTao 11 | * @since 2022-07-25 12 | */ 13 | @Documented 14 | @Retention(RetentionPolicy.RUNTIME) 15 | @Target(ElementType.PARAMETER) 16 | public @interface RequestPostSingleParam { 17 | String value() default ""; 18 | 19 | boolean required() default true; 20 | 21 | String defaultValue() default ValueConstants.DEFAULT_NONE; 22 | } 23 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-base/src/main/java/com/github/stazxr/zblog/base/domain/vo/PermCodeVo.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.base.domain.vo; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | /** 7 | * 权限编码实体 8 | * 9 | * @author SunTao 10 | * @since 2022-08-26 11 | */ 12 | @Getter 13 | @Setter 14 | public class PermCodeVo { 15 | /** 16 | * 权限名称 17 | */ 18 | private String name; 19 | 20 | /** 21 | * 权限编码 22 | */ 23 | private String value; 24 | 25 | /** 26 | * 访问级别(默认) 27 | */ 28 | private Integer level; 29 | 30 | /** 31 | * 是否禁用(select) 32 | */ 33 | private Boolean disabled; 34 | } 35 | -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/main/java/com/github/stazxr/zblog/bas/security/core/UserStatus.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.bas.security.core; 2 | 3 | /** 4 | * 用户状态 5 | * 6 | * @author SunTao 7 | * @since 2024-11-10 8 | */ 9 | public enum UserStatus { 10 | /** 11 | * 正常 12 | */ 13 | NORMAL(0), 14 | 15 | /** 16 | * 禁用 17 | */ 18 | FORBID(1), 19 | 20 | /** 21 | * 锁定 22 | */ 23 | LOCKED(2); 24 | 25 | private final Integer status; 26 | 27 | UserStatus(Integer status) { 28 | this.status = status; 29 | } 30 | 31 | public Integer getStatus() { 32 | return status; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-service/src/main/java/com/github/stazxr/zblog/mapper/ArticleImgRelationMapper.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.github.stazxr.zblog.domain.entity.ArticleImgRelation; 5 | import org.apache.ibatis.annotations.Param; 6 | 7 | /** 8 | * 文章封面中间数据数据持久层 9 | * 10 | * @author SunTao 11 | * @since 2022-12-04 12 | */ 13 | public interface ArticleImgRelationMapper extends BaseMapper { 14 | /** 15 | * 根据文章序列删除关联数据 16 | * 17 | * @param articleId 文章序列 18 | */ 19 | void deleteByArticleId(@Param("articleId") Long articleId); 20 | } 21 | -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/test/java/com/github/stazxr/zblog/bas/sequence/SequenceExceptionTest.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.bas.sequence; 2 | 3 | import org.junit.Ignore; 4 | import org.junit.Test; 5 | 6 | @Ignore 7 | public class SequenceExceptionTest { 8 | @Test 9 | public void testThrowExceptionUnSwap() { 10 | throw new SequenceException("test"); 11 | } 12 | 13 | @Test 14 | public void testThrowException() { 15 | throw new SequenceException("ZSEQ001"); 16 | } 17 | 18 | @Test 19 | public void testThrowException2() { 20 | throw new SequenceException("ZSEQ001", new IllegalArgumentException("参数异常")); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/assets/icons/svg/message.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-base/src/main/java/com/github/stazxr/zblog/base/domain/dto/RolePermDto.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.base.domain.dto; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | import java.util.Set; 8 | 9 | /** 10 | * 角色权限 11 | * 12 | * @author SunTao 13 | * @since 2022-09-13 14 | */ 15 | @Data 16 | @ApiModel("角色授权参数-权限") 17 | public class RolePermDto { 18 | /** 19 | * 权限id 20 | */ 21 | @ApiModelProperty("权限id") 22 | private Long permId; 23 | 24 | /** 25 | * 角色id列表 26 | */ 27 | @ApiModelProperty("角色id列表") 28 | private Set roleIds; 29 | } 30 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-base/src/main/java/com/github/stazxr/zblog/base/domain/dto/UserRoleDto.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.base.domain.dto; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | import java.util.Set; 8 | 9 | /** 10 | * 用户角色 11 | * 12 | * @author SunTao 13 | * @since 2022-09-13 14 | */ 15 | @Data 16 | @ApiModel("用户角色信息") 17 | public class UserRoleDto { 18 | /** 19 | * 角色id 20 | */ 21 | @ApiModelProperty("角色id") 22 | private Long roleId; 23 | 24 | /** 25 | * 用户id列表 26 | */ 27 | @ApiModelProperty("用户id列表") 28 | private Set userIds; 29 | } 30 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-service/src/main/java/com/github/stazxr/zblog/domain/enums/WebsiteConfigType.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.domain.enums; 2 | 3 | /** 4 | * 网站配置类型 5 | * 6 | * @author SunTao 7 | * @since 2022-12-08 8 | */ 9 | public enum WebsiteConfigType { 10 | /** 11 | * 网站信息 12 | */ 13 | WEB_INFO(1), 14 | 15 | /** 16 | * 社交信息 17 | */ 18 | SOCIAL_INFO(2), 19 | 20 | /** 21 | * 其他信息 22 | */ 23 | OTHER_INFO(3); 24 | 25 | private final Integer type; 26 | 27 | WebsiteConfigType(Integer type) { 28 | this.type = type; 29 | } 30 | 31 | public Integer value() { 32 | return type; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/main/java/com/github/stazxr/zblog/bas/common/CommonUtil.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.bas.common; 2 | 3 | /** 4 | * 5 | * 6 | * @author SunTao 7 | * @since 2025-08-13 8 | */ 9 | public class CommonUtil { 10 | public static final String SS = "{"; 11 | public static final String AA = "}"; 12 | 13 | public static boolean isValidatorTemplateMessage(String message) { 14 | return message != null && message.startsWith("{") && message.endsWith("}"); 15 | } 16 | 17 | public static boolean isResultTemplateMessage(String message) { 18 | return message != null && message.startsWith("{") && message.endsWith("}"); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-base/src/main/java/com/github/stazxr/zblog/base/domain/enums/PermissionType.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.base.domain.enums; 2 | 3 | import lombok.Getter; 4 | 5 | /** 6 | * 权限类型 7 | * 8 | * @author SunTao 9 | * @since 2020-11-15 10 | */ 11 | @Getter 12 | public enum PermissionType { 13 | /** 14 | * 目录 15 | */ 16 | DIR(1), 17 | 18 | /** 19 | * 菜单 20 | */ 21 | MENU(2), 22 | 23 | /** 24 | * 按钮 25 | */ 26 | BTN(3), 27 | 28 | /** 29 | * 外链 30 | */ 31 | LINK(4); 32 | 33 | private final Integer type; 34 | 35 | PermissionType(Integer type) { 36 | this.type = type; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-base/src/main/resources/mapper/UserPassLogMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | INSERT INTO user_pass_log(ID, USER_ID, PASSWORD, UPDATE_TIME) VALUES (#{id}, #{userId}, #{password}, #{updateTime}) 6 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-service/src/main/java/com/github/stazxr/zblog/domain/bo/PageInfo.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.domain.bo; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | import lombok.ToString; 6 | 7 | /** 8 | * 前台页面信息 9 | * 10 | * @author SunTao 11 | * @since 2022-12-25 12 | */ 13 | @Getter 14 | @Setter 15 | @ToString 16 | public class PageInfo { 17 | /** 18 | * 页面ID 19 | */ 20 | private Long id; 21 | 22 | /** 23 | * 页面名称 24 | */ 25 | private String pageName; 26 | 27 | /** 28 | * 页面标签 29 | */ 30 | private String pageLabel; 31 | 32 | /** 33 | * 封面地址 34 | */ 35 | private String pageCover; 36 | } 37 | -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/main/java/com/github/stazxr/zblog/bas/file/util/qiniu/QiNiuYunOssConfig.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.bas.file.util.qiniu; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | /** 7 | * 七牛云对象存储配置信息 8 | * 9 | * @author SunTao 10 | * @since 2022-10-30 11 | */ 12 | @Getter 13 | @Setter 14 | public class QiNiuYunOssConfig { 15 | /** 16 | * AK 17 | */ 18 | private String ak = ""; 19 | 20 | /** 21 | * SK 22 | */ 23 | private String sk = ""; 24 | 25 | /** 26 | * 存储区域 27 | */ 28 | private String zone = ""; 29 | 30 | /** 31 | * 存储空间 32 | */ 33 | private String bucketName = ""; 34 | } 35 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-base/src/main/java/com/github/stazxr/zblog/base/domain/enums/LoginType.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.base.domain.enums; 2 | 3 | import lombok.Getter; 4 | 5 | /** 6 | * 登录方式 7 | * 8 | * @author SunTao 9 | * @since 2025-10-17 10 | */ 11 | @Getter 12 | public enum LoginType { 13 | /** 14 | * 访客 15 | */ 16 | GUEST("00"), 17 | 18 | /** 19 | * 密码 20 | */ 21 | PASSWORD("01"), 22 | 23 | /** 24 | * QQ互信 25 | */ 26 | QQ("02"), 27 | 28 | /** 29 | * 未知 30 | */ 31 | UNKNOWN("99"); 32 | 33 | private final String type; 34 | 35 | LoginType(String type) { 36 | this.type = type; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/frame/muses/index.js: -------------------------------------------------------------------------------- 1 | import MusesSearchForm from './components/search-form/index.js' 2 | import MusesSearchFormItem from './components/search-form-item/index.js' 3 | import MusesPagination from './components/pagination/index.js' 4 | 5 | const components = [ 6 | MusesSearchForm, MusesSearchFormItem, 7 | MusesPagination 8 | ] 9 | 10 | const install = function(vue) { 11 | components.map(component => { 12 | vue.component(component.name, component) 13 | }) 14 | 15 | if (typeof window !== 'undefined' && window.Vue) { 16 | install(window.Vue) 17 | } 18 | } 19 | 20 | export default { 21 | install, 22 | MusesSearchForm, 23 | MusesSearchFormItem, 24 | MusesPagination 25 | } 26 | -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/main/java/com/github/stazxr/zblog/bas/sequence/core/BaseWorkSequenceGenerator.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.bas.sequence.core; 2 | 3 | import com.github.stazxr.zblog.bas.sequence.SequenceGenerator; 4 | 5 | /** 6 | * 基于数据中心和部署机器的序号生成器扩展 7 | * 8 | * @author SunTao 9 | * @since 2021-12-12 10 | */ 11 | public abstract class BaseWorkSequenceGenerator implements SequenceGenerator { 12 | /** 13 | * 获取数据中心ID 14 | * 15 | * @return Long datacenterId 16 | */ 17 | protected abstract Long getDatacenterId(); 18 | 19 | /** 20 | * 获取机器ID 21 | * 22 | * @return Long machineId 23 | */ 24 | protected abstract Long getMachineId(); 25 | } 26 | -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/test/java/com/github/stazxr/zblog/bas/context/ContextExceptionTest.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.bas.context; 2 | 3 | import com.github.stazxr.zblog.bas.context.exception.ContextErrorCode; 4 | import com.github.stazxr.zblog.bas.context.exception.ContextException; 5 | import org.junit.Ignore; 6 | import org.junit.Test; 7 | 8 | @Ignore 9 | public class ContextExceptionTest { 10 | @Test 11 | public void testThrowException1() { 12 | throw new ContextException(ContextErrorCode.ZCXT001); 13 | } 14 | 15 | @Test 16 | public void testThrowException2() { 17 | throw new ContextException(ContextErrorCode.ZCXT001, new RuntimeException("测试")); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-portal/src/components/loading/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import componentLoading from './PageLoading' 3 | 4 | const ComLoading = Vue.extend(componentLoading) 5 | const instance = new ComLoading({ 6 | el: document.createElement('div') 7 | }) 8 | 9 | instance.show = false 10 | const loading = { 11 | show() { 12 | instance.show = true 13 | document.body.appendChild(instance.$el) 14 | }, 15 | hide() { 16 | instance.show = false 17 | } 18 | } 19 | 20 | export default { 21 | install() { 22 | if (!Vue.$loading) { 23 | Vue.$loading = loading 24 | } 25 | Vue.mixin({ 26 | created() { 27 | this.$loading = Vue.$loading 28 | } 29 | }) 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-base/src/main/java/com/github/stazxr/zblog/base/service/ZblogService.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.base.service; 2 | 3 | import com.github.stazxr.zblog.base.domain.bo.LoginUser; 4 | 5 | import javax.servlet.http.HttpServletRequest; 6 | 7 | /** 8 | * 部分公共接口 9 | * 10 | * @author SunTao 11 | * @since 2022-07-24 12 | */ 13 | public interface ZblogService { 14 | /** 15 | * 清除记住我信息 16 | * 17 | * @param username 用户名 18 | */ 19 | void removeRememberMe(String username); 20 | 21 | /** 22 | * 检查用户的登录状态 23 | * 24 | * @param request 请求信息 25 | * @return LoginUser 26 | */ 27 | LoginUser checkUserLoginStatus(HttpServletRequest request); 28 | } 29 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-service/src/main/java/com/github/stazxr/zblog/domain/bo/ArticlePageData.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.domain.bo; 2 | 3 | import com.github.pagehelper.PageInfo; 4 | import com.github.stazxr.zblog.domain.vo.ArticleVo; 5 | import lombok.Builder; 6 | import lombok.Getter; 7 | import lombok.Setter; 8 | import lombok.ToString; 9 | 10 | /** 11 | * 文章列表数据 12 | * 13 | * @author SunTao 14 | * @since 2023-01-03 15 | */ 16 | @Getter 17 | @Setter 18 | @Builder 19 | @ToString 20 | public class ArticlePageData { 21 | /** 22 | * 分页数据 23 | */ 24 | private PageInfo dataList; 25 | 26 | /** 27 | * 数量统计信息 28 | */ 29 | private ArticleCountData countInfo; 30 | } 31 | -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/main/java/com/github/stazxr/zblog/bas/file/util/qiniu/QiNiuBiException.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.bas.file.util.qiniu; 2 | 3 | /** 4 | * 七牛云相关异常封装 5 | * 6 | * @author SunTao 7 | * @since 2022-10-31 8 | */ 9 | public class QiNiuBiException extends RuntimeException { 10 | /** 11 | * 构造异常对象 12 | * 13 | * @param message 错误信息 14 | */ 15 | public QiNiuBiException(String message) { 16 | super(message); 17 | } 18 | 19 | /** 20 | * 构造异常对象 21 | * 22 | * @param message 错误信息 23 | * @param cause 异常信息 24 | */ 25 | public QiNiuBiException(String message, Throwable cause) { 26 | super(message, cause); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-base/src/main/java/com/github/stazxr/zblog/base/domain/vo/ActiveStorageTypeVo.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.base.domain.vo; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | /** 7 | * 激活的存储配置类别信息 8 | * 9 | * @author SunTao 10 | * @since 2022-11-01 11 | */ 12 | @Getter 13 | @Setter 14 | public class ActiveStorageTypeVo { 15 | /** 16 | * 系统配置的存储类型 17 | */ 18 | private Integer defaultType; 19 | 20 | /** 21 | * 系统配置的存储类型名称 22 | */ 23 | private String defaultTypeName; 24 | 25 | /** 26 | * 激活的存储类型 27 | */ 28 | private Integer activeType; 29 | 30 | /** 31 | * 激活的存储类型名称 32 | */ 33 | private String activeTypeName; 34 | } 35 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-service/src/main/java/com/github/stazxr/zblog/domain/dto/TalkLikeDto.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.domain.dto; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Getter; 6 | import lombok.Setter; 7 | import lombok.ToString; 8 | 9 | /** 10 | * 说说点赞信息 11 | * 12 | * @author SunTao 13 | * @since 2023-02-07 14 | */ 15 | @Getter 16 | @Setter 17 | @ToString 18 | @ApiModel("说说点赞信息") 19 | public class TalkLikeDto { 20 | /** 21 | * 点赞用户id 22 | */ 23 | @ApiModelProperty("点赞用户id") 24 | private Long userId; 25 | 26 | /** 27 | * 说说id 28 | */ 29 | @ApiModelProperty("说说id") 30 | private Long talkId; 31 | } 32 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-service/src/main/java/com/github/stazxr/zblog/domain/dto/UserLoginDto.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.domain.dto; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Getter; 6 | import lombok.Setter; 7 | import lombok.ToString; 8 | 9 | /** 10 | * 用户登录信息 11 | * 12 | * @author SunTao 13 | * @since 2023-02-05 14 | */ 15 | @Getter 16 | @Setter 17 | @ToString 18 | @ApiModel("用户登录信息") 19 | public class UserLoginDto { 20 | /** 21 | * 用户名 22 | */ 23 | @ApiModelProperty("用户名") 24 | private String username; 25 | 26 | /** 27 | * 密码 28 | */ 29 | @ApiModelProperty("密码") 30 | private String password; 31 | } 32 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-service/src/main/java/com/github/stazxr/zblog/domain/dto/ArticleLikeDto.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.domain.dto; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Getter; 6 | import lombok.Setter; 7 | import lombok.ToString; 8 | 9 | /** 10 | * 文章点赞信息 11 | * 12 | * @author SunTao 13 | * @since 2023-02-07 14 | */ 15 | @Getter 16 | @Setter 17 | @ToString 18 | @ApiModel("文章点赞信息") 19 | public class ArticleLikeDto { 20 | /** 21 | * 点赞用户id 22 | */ 23 | @ApiModelProperty("点赞用户id") 24 | private Long userId; 25 | 26 | /** 27 | * 文章id 28 | */ 29 | @ApiModelProperty("文章id") 30 | private Long articleId; 31 | } 32 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-service/src/main/java/com/github/stazxr/zblog/domain/dto/CommentLikeDto.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.domain.dto; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Getter; 6 | import lombok.Setter; 7 | import lombok.ToString; 8 | 9 | /** 10 | * 评论点赞信息 11 | * 12 | * @author SunTao 13 | * @since 2023-02-06 14 | */ 15 | @Getter 16 | @Setter 17 | @ToString 18 | @ApiModel("评论点赞信息") 19 | public class CommentLikeDto { 20 | /** 21 | * 点赞用户id 22 | */ 23 | @ApiModelProperty("点赞用户id") 24 | private Long userId; 25 | 26 | /** 27 | * 评论id 28 | */ 29 | @ApiModelProperty("评论id") 30 | private Long commentId; 31 | } 32 | -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/main/java/com/github/stazxr/zblog/bas/props/PropertySourceLoadException.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.bas.props; 2 | 3 | import com.github.stazxr.zblog.bas.exception.BaseException; 4 | 5 | /** 6 | * 属性源加载异常类,用于表示在加载属性源时发生的异常情况。 7 | * 8 | * @author SunTao 9 | * @since 2024-07-25 10 | */ 11 | public class PropertySourceLoadException extends BaseException { 12 | private static final long serialVersionUID = 458776512891696908L; 13 | 14 | /** 15 | * 构造一个带有指定详细消息和根本原因的异常。 16 | * 17 | * @param message 异常的详细消息 18 | * @param cause 引起此异常的原因 19 | */ 20 | public PropertySourceLoadException(String message, Throwable cause) { 21 | super(message, cause); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-base/src/main/java/com/github/stazxr/zblog/base/domain/vo/HomePanelDataCountVo.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.base.domain.vo; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | /** 7 | * 首页面板数量统计(访问量,评论数等) 8 | * 9 | * @author SunTao 10 | * @since 2022-07-19 11 | */ 12 | @Getter 13 | @Setter 14 | public class HomePanelDataCountVo { 15 | /** 16 | * 浏览量,当用户打开一个网页并加载完成时,会被计为一个页面浏览量 17 | */ 18 | private int pv = 0; 19 | 20 | /** 21 | * 立访客,访问网站的唯一用户数量,每个用户只被计为一个独立访客。 22 | */ 23 | private int uv = 0; 24 | 25 | /** 26 | * 用户数,注册的系统用户数 27 | */ 28 | private int uu = 0; 29 | 30 | /** 31 | * 阅读量,文章访问量 32 | */ 33 | private int av = 0; 34 | } 35 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-base/src/main/java/com/github/stazxr/zblog/base/mapper/MenuMapper.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.base.mapper; 2 | 3 | import com.github.stazxr.zblog.base.domain.entity.Permission; 4 | import org.apache.ibatis.annotations.Param; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * 菜单存储 10 | * 11 | * @author SunTao 12 | * @since 2025-07-06 13 | */ 14 | public interface MenuMapper { 15 | /** 16 | * 查询所有的菜单 17 | * 18 | * @return 所有的菜单列表 19 | */ 20 | List selectAllMenu(); 21 | 22 | /** 23 | * 查询用户对应的菜单 24 | * 25 | * @param userId 用户序列 26 | * @return 启用的菜单列表 27 | */ 28 | List selectMenuByUserId(@Param("userId") Long userId); 29 | 30 | } 31 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-service/src/main/java/com/github/stazxr/zblog/domain/dto/CommentDeleteDto.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.domain.dto; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Getter; 6 | import lombok.Setter; 7 | import lombok.ToString; 8 | 9 | /** 10 | * 评论删除参数 11 | * 12 | * @author SunTao 13 | * @since 2023-02-07 14 | */ 15 | @Getter 16 | @Setter 17 | @ToString 18 | @ApiModel("评论删除参数") 19 | public class CommentDeleteDto { 20 | /** 21 | * 评论用户id 22 | */ 23 | @ApiModelProperty("评论用户id") 24 | private Long userId; 25 | 26 | /** 27 | * 评论id 28 | */ 29 | @ApiModelProperty("评论id") 30 | private Long commentId; 31 | } 32 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-service/src/main/java/com/github/stazxr/zblog/mapper/ArticleViewMapper.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.mapper; 2 | 3 | import com.github.stazxr.zblog.core.base.BaseMapper; 4 | import com.github.stazxr.zblog.domain.entity.ArticleView; 5 | import org.apache.ibatis.annotations.Param; 6 | 7 | /** 8 | * 文章浏览数据持久层 9 | * 10 | * @author SunTao 11 | * @since 2023-02-08 12 | */ 13 | public interface ArticleViewMapper extends BaseMapper { 14 | /** 15 | * 查找最近的浏览记录 16 | * 17 | * @param articleId 文章ID 18 | * @param accessIp 访问IP 19 | * @return ArticleView 20 | */ 21 | ArticleView selectLastedRecord(@Param("articleId") Long articleId, @Param("accessIp") String accessIp); 22 | } 23 | -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/main/java/com/github/stazxr/zblog/bas/file/util/aliyun/AliYunOssConfig.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.bas.file.util.aliyun; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | /** 7 | * 阿里云对象存储配置信息 8 | * 9 | * @author SunTao 10 | * @since 2021-01-25 11 | */ 12 | @Getter 13 | @Setter 14 | public class AliYunOssConfig { 15 | /** 16 | * endpoint 17 | */ 18 | private String endpoint = ""; 19 | 20 | /** 21 | * accessKeyId 22 | */ 23 | private String accessKeyId = ""; 24 | 25 | /** 26 | * accessKeySecret 27 | */ 28 | private String accessKeySecret = ""; 29 | 30 | /** 31 | * bucket 32 | */ 33 | private String bucketName = ""; 34 | } 35 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-base/src/main/java/com/github/stazxr/zblog/base/domain/entity/UserRoleRelation.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.base.domain.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.TableName; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | import java.io.Serializable; 8 | 9 | /** 10 | * 用户角色关系表 11 | * 12 | * @author SunTao 13 | * @since 2021-01-03 14 | */ 15 | @Getter 16 | @Setter 17 | @TableName("user_role_relation") 18 | public class UserRoleRelation implements Serializable { 19 | private static final long serialVersionUID = 2721485954618944620L; 20 | 21 | /** 22 | * 用户序列 23 | */ 24 | private Long userId; 25 | 26 | /** 27 | * 角色序列 28 | */ 29 | private Long roleId; 30 | } 31 | -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-util/src/test/java/com/github/stazxr/zblog/util/LocalHostUtilTest.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.util; 2 | 3 | import com.github.stazxr.zblog.util.net.LocalHostUtils; 4 | import org.junit.Ignore; 5 | import org.junit.Test; 6 | 7 | import java.util.Arrays; 8 | 9 | @Ignore 10 | public class LocalHostUtilTest { 11 | @Test 12 | public void testAllMethod() throws Exception { 13 | System.out.println(LocalHostUtils.getLocalHostName()); 14 | System.out.println(LocalHostUtils.getLocalHostAddress()); 15 | System.out.println(LocalHostUtils.getLocalIp()); 16 | System.out.println(Arrays.toString(LocalHostUtils.getLocalIps())); 17 | System.out.println(LocalHostUtils.getMacAddress()); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/main/java/com/github/stazxr/zblog/bas/mask/core/FieldMask.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.bas.mask.core; 2 | 3 | import com.github.stazxr.zblog.bas.mask.MaskType; 4 | 5 | import java.lang.annotation.*; 6 | 7 | /** 8 | * Annotation for field masking. 9 | 10 | *

This annotation marks fields that need to be masked. 11 | * 12 | * @author SunTao 13 | * @since 2024-05-15 14 | */ 15 | @Documented 16 | @Target(ElementType.FIELD) 17 | @Retention(RetentionPolicy.RUNTIME) 18 | public @interface FieldMask { 19 | /** 20 | * Masking type. 21 | * Defaults to first letter mask. 22 | * 23 | * @return MaskType enum representing the type of masking 24 | */ 25 | MaskType type() default MaskType.FIRST_MASK; 26 | } 27 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/layout/components/Sidebar/Link.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 36 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/store/modules/api.js: -------------------------------------------------------------------------------- 1 | // 获取环境变量 2 | const wsUrl = process.env.VUE_APP_WS_API || '' 3 | const baseUrl = process.env.VUE_APP_BASE_API === '/' ? '' : process.env.VUE_APP_BASE_API || '' 4 | 5 | // 创建一个函数用于拼接完整的 API 地址 6 | const createApiUrl = (path) => `${baseUrl}${path}` 7 | 8 | const api = { 9 | state: { 10 | baseApi: baseUrl, 11 | // 通用文件上传 12 | fileUploadApi: createApiUrl('/api/file/uploadFile'), 13 | // 文件上传测试接口 14 | testUploadFile: createApiUrl('/api/file/testUploadFile'), 15 | // Druid 16 | sqlApi: createApiUrl('/api/druid/index.html'), 17 | // Swagger 18 | swaggerApi: createApiUrl('/doc.html'), 19 | // webSsh 20 | webSshApi: wsUrl ? `${wsUrl}/webssh` : '' 21 | } 22 | } 23 | 24 | export default api 25 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-base/src/main/java/com/github/stazxr/zblog/base/domain/vo/echarts/SingleLineChartDataVo.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.base.domain.vo.echarts; 2 | 3 | import lombok.Data; 4 | import lombok.ToString; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * 单折线图 10 | * 11 | * @author SunTao 12 | * @since 2022-07-19 13 | */ 14 | @Data 15 | @ToString 16 | public class SingleLineChartDataVo { 17 | /** 18 | * X轴下标 19 | */ 20 | private String[] xAxisData; 21 | 22 | /** 23 | * 折现名称 24 | */ 25 | private String legendName; 26 | 27 | /** 28 | * 折现类型,默认是折现图 29 | */ 30 | private String legendType = "line"; 31 | 32 | /** 33 | * Y轴数据 34 | */ 35 | private List legendData; 36 | } 37 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-base/src/main/java/com/github/stazxr/zblog/base/domain/dto/query/DictQueryDto.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.base.domain.dto.query; 2 | 3 | import com.github.stazxr.zblog.core.base.PageParam; 4 | import io.swagger.annotations.ApiModel; 5 | import io.swagger.annotations.ApiModelProperty; 6 | import lombok.Getter; 7 | import lombok.Setter; 8 | 9 | /** 10 | * 字典查询参数 11 | * 12 | * @author SunTao 13 | * @since 2022-09-20 14 | */ 15 | @Getter 16 | @Setter 17 | @ApiModel("字典查询参数") 18 | public class DictQueryDto extends PageParam { 19 | private static final long serialVersionUID = -8231077447608203396L; 20 | 21 | /** 22 | * 字典名称 23 | */ 24 | @ApiModelProperty(value = "字典名称", notes = "模糊查询") 25 | private String dictName; 26 | } 27 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-base/src/main/java/com/github/stazxr/zblog/base/domain/entity/RolePermissionRelation.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.base.domain.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.TableName; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | import java.io.Serializable; 8 | 9 | /** 10 | * 角色权限关系表 11 | * 12 | * @author SunTao 13 | * @since 2020-01-03 14 | */ 15 | @Getter 16 | @Setter 17 | @TableName("role_permission_relation") 18 | public class RolePermissionRelation implements Serializable { 19 | private static final long serialVersionUID = 6823950832644631052L; 20 | 21 | /** 22 | * 角色序列 23 | */ 24 | private Long roleId; 25 | 26 | /** 27 | * 权限序列 28 | */ 29 | private Long permId; 30 | } 31 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-core/src/main/java/com/github/stazxr/zblog/core/exception/BadConfigurationException.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.core.exception; 2 | 3 | import com.github.stazxr.zblog.core.enums.ResultCode; 4 | 5 | /** 6 | * 错误的配置信息导致的异常 7 | * 8 | * @author SunTao 9 | * @since 2022-05-20 10 | */ 11 | public class BadConfigurationException extends ServiceException { 12 | /** 13 | * 生成一个默认配置信息错误异常 14 | */ 15 | public BadConfigurationException() { 16 | super(ResultCode.BAD_CONFIGURATION); 17 | } 18 | 19 | /** 20 | * 生成一个带有错误信息的的业务异常 21 | * 22 | * @param message 错误信息 23 | */ 24 | public BadConfigurationException(String message) { 25 | super(ResultCode.BAD_CONFIGURATION, message); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/assets/icons/svg/login.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/layout/components/Sidebar/FixIosBug.js: -------------------------------------------------------------------------------- 1 | export default { 2 | computed: { 3 | device() { 4 | return this.$store.state.app.device 5 | } 6 | }, 7 | mounted() { 8 | // In order to fix the click on menu on the ios device will trigger the mouseleave bug 9 | // https://github.com/PanJiaChen/vue-element-admin/issues/1135 10 | this.fixBugInIos() 11 | }, 12 | methods: { 13 | fixBugInIos() { 14 | const $subMenu = this.$refs.subMenu 15 | if ($subMenu) { 16 | const handleMouseleave = $subMenu.handleMouseleave 17 | $subMenu.handleMouseleave = (e) => { 18 | if (this.device === 'mobile') { 19 | return 20 | } 21 | handleMouseleave(e) 22 | } 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/api/service/talk.js: -------------------------------------------------------------------------------- 1 | import api from '../custom-axios' 2 | import qs from 'qs' 3 | 4 | const talkApi = '/api/talks' 5 | 6 | export default { 7 | // 分页查询说说列表 8 | pageList: params => { 9 | return api.httpRequest().get(`${talkApi}/pageList`, params) 10 | }, 11 | // 查询说说详情 12 | queryTalkDetail: params => { 13 | return api.httpRequest().get(`${talkApi}/queryTalkDetail`, params) 14 | }, 15 | // 新增或编辑说说 16 | addOrEditTalk: params => { 17 | return api.httpRequest().post(`${talkApi}/addOrEditTalk`, params) 18 | }, 19 | // 删除说说 20 | deleteTalk: params => { 21 | return api.httpRequest().post(`${talkApi}/deleteTalk`, qs.stringify(params), { 22 | headers: { 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8' } 23 | }) 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-service/src/main/java/com/github/stazxr/zblog/domain/vo/PageVo.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.domain.vo; 2 | 3 | import com.github.stazxr.zblog.core.base.BaseVo; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | /** 8 | * 页面页面展示信息 9 | * 10 | * @author SunTao 11 | * @since 2022-12-14 12 | */ 13 | @Getter 14 | @Setter 15 | public class PageVo extends BaseVo { 16 | /** 17 | * 主键 18 | */ 19 | private Long id; 20 | 21 | /** 22 | * 页面名称 23 | */ 24 | private String pageName; 25 | 26 | /** 27 | * 页面标签 28 | */ 29 | private String pageLabel; 30 | 31 | /** 32 | * 页面封面 33 | */ 34 | private String pageCover; 35 | 36 | /** 37 | * 页面排序 38 | */ 39 | private Integer pageSort; 40 | } 41 | -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/main/java/com/github/stazxr/zblog/bas/encryption/Encryptor.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.bas.encryption; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * 加密解密接口。 7 | * 8 | * @author SunTao 9 | * @since 2024-07-25 10 | */ 11 | public interface Encryptor extends Serializable { 12 | /** 13 | * 加密方法 14 | * 15 | * @param plainText 明文字符串 16 | * @return 加密后的密文字符串 17 | * @throws EncryptorException 如果加密过程中出现错误 18 | */ 19 | String encrypt(String plainText) throws EncryptorException; 20 | 21 | /** 22 | * 解密方法 23 | * 24 | * @param cipherText 密文字符串 25 | * @return 解密后的明文字符串 26 | * @throws DecryptException 如果解密过程中出现错误 27 | */ 28 | String decrypt(String cipherText) throws DecryptException; 29 | } 30 | -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/main/java/com/github/stazxr/zblog/bas/encryption/util/Base64Util.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.bas.encryption.util; 2 | 3 | import java.util.Base64; 4 | 5 | /** 6 | * Base64 工具类 7 | * 8 | * @author SunTao 9 | * @since 2024年07月13日 10 | */ 11 | public class Base64Util { 12 | /** 13 | * Base64 编码 14 | * 15 | * @param data 要编码的字节数组 16 | * @return 编码后的字符串 17 | */ 18 | public static String encode(byte[] data) { 19 | return Base64.getEncoder().encodeToString(data); 20 | } 21 | 22 | /** 23 | * Base64 解码 24 | * 25 | * @param base64 编码后的字符串 26 | * @return 解码后的字节数组 27 | */ 28 | public static byte[] decode(String base64) { 29 | return Base64.getDecoder().decode(base64); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/main/java/com/github/stazxr/zblog/bas/validation/ext/annotation/Phone.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.bas.validation.ext.annotation; 2 | 3 | import com.github.stazxr.zblog.bas.validation.ext.PhoneValidator; 4 | 5 | import javax.validation.Constraint; 6 | import javax.validation.Payload; 7 | import java.lang.annotation.*; 8 | 9 | /** 10 | * 11 | * 12 | * @author SunTao 13 | * @since 2025-08-01 14 | */ 15 | @Documented 16 | @Constraint(validatedBy = PhoneValidator.class) 17 | @Target({ ElementType.FIELD, ElementType.PARAMETER }) 18 | @Retention(RetentionPolicy.RUNTIME) 19 | public @interface Phone { 20 | String message() default "{phone.invalid}"; 21 | 22 | Class[] groups() default {}; 23 | 24 | Class[] payload() default {}; 25 | } 26 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/api/service/page.js: -------------------------------------------------------------------------------- 1 | import qs from 'qs' 2 | import api from '../custom-axios' 3 | 4 | const pageApi = '/api/pages' 5 | 6 | export default { 7 | // 查询页面列表 8 | pageList: params => { 9 | return api.httpRequest().get(`${pageApi}/queryPageList`, params) 10 | }, 11 | // 查询页面详情 12 | queryPageDetail: params => { 13 | return api.httpRequest().get(`${pageApi}/queryPageDetail`, params) 14 | }, 15 | // 新增或编辑页面 16 | addOrEditPage: params => { 17 | return api.httpRequest().post(`${pageApi}/addOrEditPage`, params) 18 | }, 19 | // 删除页面 20 | deletePage: params => { 21 | return api.httpRequest().post(`${pageApi}/deletePage`, qs.stringify(params), { 22 | headers: { 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8' } 23 | }) 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/assets/icons/svg/password.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-portal/src/components/toast/index.js: -------------------------------------------------------------------------------- 1 | import ToastComponent from './Toast.vue' 2 | 3 | const Toast = {} 4 | 5 | // 注册Toast 6 | Toast.install = function(Vue) { 7 | // 生成一个Vue的子类 8 | const ToastConstructor = Vue.extend(ToastComponent) 9 | // 生成一个该子类的实例 10 | const instance = new ToastConstructor() 11 | 12 | // 将这个实例挂载在我创建的div上,并将此div加入全局挂载点内部 13 | instance.$mount(document.createElement('div')) 14 | document.body.appendChild(instance.$el) 15 | 16 | // 通过Vue的原型注册一个方法,让所有实例共享这个方法 17 | Vue.prototype.$toast = (options, duration = 2000) => { 18 | instance.message = options.message 19 | instance.type = options.type 20 | instance.show = true 21 | 22 | setTimeout(() => { 23 | instance.show = false 24 | }, duration) 25 | } 26 | } 27 | 28 | export default Toast 29 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-service/src/main/java/com/github/stazxr/zblog/domain/entity/VisitorArea.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.domain.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.TableName; 4 | import lombok.Builder; 5 | import lombok.Getter; 6 | import lombok.Setter; 7 | 8 | /** 9 | * 访客地域 10 | * 11 | * @author SunTao 12 | * @since 2022-12-09 13 | */ 14 | @Getter 15 | @Setter 16 | @Builder 17 | @TableName("visitor_area") 18 | public class VisitorArea { 19 | /** 20 | * 访问地域 21 | */ 22 | private String area; 23 | 24 | /** 25 | * 访问量 26 | */ 27 | private Integer areaCount; 28 | 29 | /** 30 | * 创建时间 31 | */ 32 | private String createTime; 33 | 34 | /** 35 | * 修改时间 36 | */ 37 | private String updateTime; 38 | } 39 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-service/src/main/java/com/github/stazxr/zblog/domain/vo/PortalAlbumPhotoVo.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.domain.vo; 2 | 3 | import com.github.stazxr.zblog.core.base.BaseVo; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * 照片页面展示信息 11 | * 12 | * @author SunTao 13 | * @since 2022-12-15 14 | */ 15 | @Getter 16 | @Setter 17 | public class PortalAlbumPhotoVo extends BaseVo { 18 | /** 19 | * 相册名称 20 | */ 21 | private String photoAlbumName; 22 | 23 | /** 24 | * 相册作者 25 | */ 26 | private String photoAlbumAuthor; 27 | 28 | /** 29 | * 相册封面 30 | */ 31 | private String photoAlbumCover; 32 | 33 | /** 34 | * 照片列表 35 | */ 36 | List list; 37 | } 38 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-service/src/main/resources/mapper/VisitorAreaMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | INSERT INTO visitor_area (AREA, AREA_COUNT, CREATE_TIME) VALUES (#{area}, 1, #{createTime}) 6 | 7 | 8 | 9 | UPDATE visitor_area SET AREA_COUNT = AREA_COUNT + 1, UPDATE_TIME = #{updateTime} WHERE area = #{area} 10 | 11 | 12 | 15 | 16 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-service/src/main/java/com/github/stazxr/zblog/domain/vo/ArticleTagVo.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.domain.vo; 2 | 3 | import com.github.stazxr.zblog.core.base.BaseVo; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | /** 8 | * ArticleTagVo 9 | * 10 | * @author SunTao 11 | * @since 2022-11-24 12 | */ 13 | @Getter 14 | @Setter 15 | public class ArticleTagVo extends BaseVo { 16 | /** 17 | * 主键 18 | */ 19 | private Long id; 20 | 21 | /** 22 | * 标签名称 23 | */ 24 | private String name; 25 | 26 | /** 27 | * 标签类型 28 | */ 29 | private Integer type; 30 | 31 | /** 32 | * 是否启用 33 | */ 34 | private Boolean enabled; 35 | 36 | /** 37 | * 文章数 38 | */ 39 | private Integer articleCount; 40 | } 41 | -------------------------------------------------------------------------------- /zblog-services/zblog-business/zblog-service/src/main/java/com/github/stazxr/zblog/domain/entity/WebsiteConfig.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.domain.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import com.baomidou.mybatisplus.annotation.TableName; 6 | import com.github.stazxr.zblog.core.base.BaseEntity; 7 | import lombok.Getter; 8 | import lombok.Setter; 9 | 10 | /** 11 | * 网站配置 12 | * 13 | * @author SunTao 14 | * @since 2022-12-08 15 | */ 16 | @Getter 17 | @Setter 18 | @TableName("website_config") 19 | public class WebsiteConfig extends BaseEntity { 20 | /** 21 | * 主键 22 | */ 23 | @TableId(type = IdType.AUTO) 24 | private Long id; 25 | 26 | /** 27 | * 配置信息 28 | */ 29 | private String config; 30 | } 31 | -------------------------------------------------------------------------------- /zblog-services/zblog-frame/zblog-bas/src/main/java/com/github/stazxr/zblog/bas/security/core/UserType.java: -------------------------------------------------------------------------------- 1 | package com.github.stazxr.zblog.bas.security.core; 2 | 3 | /** 4 | * 用户类型 5 | * 6 | * @author SunTao 7 | * @since 2024-11-10 8 | */ 9 | public enum UserType { 10 | /** 11 | * 系统用户 12 | */ 13 | SYSTEM_USER(0), 14 | 15 | /** 16 | * 普通用户 17 | */ 18 | NORMAL_USER(1), 19 | 20 | /** 21 | * 管理员用户 22 | */ 23 | ADMIN_USER(2), 24 | 25 | /** 26 | * 测试用户 27 | */ 28 | TEST_USER(3), 29 | 30 | /** 31 | * 临时用户 32 | */ 33 | TEMP_USER(4); 34 | 35 | private final Integer type; 36 | 37 | UserType(Integer type) { 38 | this.type = type; 39 | } 40 | 41 | public Integer getType() { 42 | return type; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /zblog-web/zblog-web-admin/src/components/Iframe/index.vue: -------------------------------------------------------------------------------- 1 |