├── .gitattributes ├── .gitignore ├── .project-resouce ├── MI-PRO-O.png ├── MILOGO-120x120.png ├── README.md ├── thanks.png └── 项目效果图 │ ├── SBA-v1.0.gif │ ├── SBA监控项目环境.png │ ├── blog │ ├── background.jpg │ ├── detail.jpg │ ├── index.jpg │ └── markdown.jpg │ ├── eureka.png │ ├── sbad.png │ └── swagger2.gif ├── LICENSE ├── README.md ├── mi-admin ├── README.md ├── mi-platform-center-web │ ├── .babelrc │ ├── .editorconfig │ ├── .gitignore │ ├── .postcssrc.js │ ├── README.md │ ├── build │ │ ├── build.js │ │ ├── check-versions.js │ │ ├── dev-client.js │ │ ├── dev-server.js │ │ ├── utils.js │ │ ├── vue-loader.conf.js │ │ ├── webpack.base.conf.js │ │ ├── webpack.dev.conf.js │ │ └── webpack.prod.conf.js │ ├── config │ │ ├── dev.env.js │ │ ├── index.js │ │ └── prod.env.js │ ├── index.html │ ├── package.json │ ├── src │ │ ├── App.vue │ │ ├── assets │ │ │ └── logo.png │ │ ├── components │ │ │ └── Hello.vue │ │ ├── main.js │ │ └── router │ │ │ └── index.js │ └── static │ │ └── .gitkeep ├── mi-platform-center │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── mi │ │ │ ├── MiPlatformCenterApplication.java │ │ │ ├── SwaggerConfig.java │ │ │ ├── config │ │ │ ├── aspect │ │ │ │ └── WebRequestLogAspect.java │ │ │ ├── database │ │ │ │ ├── DataBaseConfiguration.java │ │ │ │ ├── DataSourceAop.java │ │ │ │ ├── DataSourceContextHolder.java │ │ │ │ ├── DataSourceTransactionManager.java │ │ │ │ ├── DataSourceType.java │ │ │ │ ├── MyAbstractRoutingDataSource.java │ │ │ │ └── MybatisPlusConfig.java │ │ │ ├── druid │ │ │ │ ├── DruidStatFilter.java │ │ │ │ └── DruidStatViewServlet.java │ │ │ └── redis │ │ │ │ ├── RedisConfig.java │ │ │ │ └── RedisUtil.java │ │ │ └── module │ │ │ ├── common │ │ │ └── controller │ │ │ │ └── RedisController.java │ │ │ └── system │ │ │ ├── controller │ │ │ └── MiSysLogController.java │ │ │ ├── entity │ │ │ └── MiSysLog.java │ │ │ ├── mapper │ │ │ ├── MiSysLogMapper.java │ │ │ └── impl │ │ │ │ └── MiSysLogMapper.xml │ │ │ └── service │ │ │ ├── IMiSysLogService.java │ │ │ └── impl │ │ │ └── MiSysLogServiceImpl.java │ │ └── resources │ │ ├── application.properties │ │ └── logback.xml └── pom.xml ├── mi-api ├── README.md ├── mi-eureka-client-api │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── mi │ │ │ ├── MiEurekaClientApiApplication.java │ │ │ └── controller │ │ │ └── ApiController.java │ │ └── resources │ │ └── application.yml ├── mi-eureka-client │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── mi │ │ │ ├── MiEurekaClientApplication.java │ │ │ ├── common │ │ │ ├── CORSConfiguration.java │ │ │ ├── CorsFilter.java │ │ │ └── ServiceMoitor.java │ │ │ └── controller │ │ │ ├── ClientController.java │ │ │ ├── SwaggerController.java │ │ │ └── TestController.java │ │ └── resources │ │ ├── application-dev.yml │ │ ├── application.yml │ │ └── logback.xml ├── mi-eureka-consumer │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── mi │ │ │ ├── MiEurekaConsumerApplication.java │ │ │ ├── common │ │ │ └── CloudRestTemplateConfig.java │ │ │ ├── feign │ │ │ └── FeignController.java │ │ │ ├── ribbon │ │ │ └── RibbonController.java │ │ │ └── service │ │ │ ├── FeignService.java │ │ │ └── impl │ │ │ └── RibbonServiceImpl.java │ │ └── resources │ │ ├── application-dev.yml │ │ ├── application.yml │ │ └── logback.xml ├── mi-eureka-server-bak │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── mi │ │ │ └── MiEurekaServerBakApplication.java │ │ └── resources │ │ └── application.yml ├── mi-eureka-server │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── mi │ │ │ └── MiEurekaServerApplication.java │ │ └── resources │ │ ├── application-dev.yml │ │ ├── application.yml │ │ └── logback.xml └── pom.xml ├── mi-blog ├── README.md ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── mi │ │ ├── MiBlogApplication.java │ │ ├── config │ │ ├── aspect │ │ │ └── WebRequestLogAspect.java │ │ ├── auth │ │ │ ├── CustomAuthenticationProvider.java │ │ │ └── WebSecurityAdapter.java │ │ ├── database │ │ │ ├── DataBaseConfiguration.java │ │ │ ├── DataSourceAop.java │ │ │ ├── DataSourceContextHolder.java │ │ │ ├── DataSourceTransactionManager.java │ │ │ ├── DataSourceType.java │ │ │ ├── MyAbstractRoutingDataSource.java │ │ │ └── MybatisPlusConfig.java │ │ └── druid │ │ │ ├── DruidStatFilter.java │ │ │ └── DruidStatViewServlet.java │ │ ├── data │ │ ├── dto │ │ │ └── readme.txt │ │ └── vo │ │ │ ├── ArticleVo.java │ │ │ ├── Pager.java │ │ │ ├── TagCloudVo.java │ │ │ ├── TypeVo.java │ │ │ └── readme.txt │ │ └── module │ │ ├── admin │ │ └── controller │ │ │ ├── AdminArticleController.java │ │ │ ├── AdminFlinkController.java │ │ │ ├── AdminPageController.java │ │ │ ├── AdminTagController.java │ │ │ ├── AdminTypeController.java │ │ │ └── AdminUserController.java │ │ └── blog │ │ ├── controller │ │ ├── IndexPageController.java │ │ └── MenuController.java │ │ ├── entity │ │ ├── Article.java │ │ ├── ArticleTag.java │ │ ├── ArticleType.java │ │ ├── Friendlink.java │ │ ├── Log.java │ │ ├── Tag.java │ │ ├── Type.java │ │ ├── User.java │ │ └── UserInfo.java │ │ ├── mapper │ │ ├── ArticleMapper.java │ │ ├── ArticleTagMapper.java │ │ ├── ArticleTypeMapper.java │ │ ├── FriendlinkMapper.java │ │ ├── LogMapper.java │ │ ├── TagMapper.java │ │ ├── TypeMapper.java │ │ ├── UserInfoMapper.java │ │ ├── UserMapper.java │ │ └── impl │ │ │ ├── ArticleMapper.xml │ │ │ ├── ArticleTagMapper.xml │ │ │ ├── ArticleTypeMapper.xml │ │ │ ├── FriendlinkMapper.xml │ │ │ ├── LogMapper.xml │ │ │ ├── TagMapper.xml │ │ │ ├── TypeMapper.xml │ │ │ ├── UserInfoMapper.xml │ │ │ └── UserMapper.xml │ │ └── service │ │ ├── IArticleService.java │ │ ├── IArticleTagService.java │ │ ├── IArticleTypeService.java │ │ ├── IFriendlinkService.java │ │ ├── ILogService.java │ │ ├── ITagService.java │ │ ├── ITypeService.java │ │ ├── IUserInfoService.java │ │ ├── IUserService.java │ │ └── impl │ │ ├── ArticleServiceImpl.java │ │ ├── ArticleTagServiceImpl.java │ │ ├── ArticleTypeServiceImpl.java │ │ ├── FriendlinkServiceImpl.java │ │ ├── LogServiceImpl.java │ │ ├── TagServiceImpl.java │ │ ├── TypeServiceImpl.java │ │ ├── UserInfoServiceImpl.java │ │ └── UserServiceImpl.java │ └── resources │ ├── application-dev.properties │ ├── application.properties │ ├── banner.txt │ ├── logback.xml │ ├── static │ ├── admin │ │ ├── css │ │ │ ├── animate.css │ │ │ ├── article-add.css │ │ │ ├── base.css │ │ │ ├── bootstrap-rtl.css │ │ │ ├── bootstrap.min.css │ │ │ ├── editormd.css │ │ │ ├── font-awesome.min.css │ │ │ ├── md.css │ │ │ ├── owl.carousel.css │ │ │ ├── patterns │ │ │ │ ├── header-profile-skin-1.png │ │ │ │ ├── header-profile-skin-2.png │ │ │ │ ├── header-profile-skin-3.png │ │ │ │ ├── header-profile.png │ │ │ │ └── shattered.png │ │ │ ├── plugins │ │ │ │ ├── chosen │ │ │ │ │ ├── chosen-sprite.png │ │ │ │ │ └── chosen.css │ │ │ │ ├── codemirror │ │ │ │ │ ├── ambiance.css │ │ │ │ │ └── codemirror.css │ │ │ │ ├── colorpicker │ │ │ │ │ └── css │ │ │ │ │ │ └── bootstrap-colorpicker.min.css │ │ │ │ ├── dataTables │ │ │ │ │ └── dataTables.bootstrap.css │ │ │ │ ├── datapicker │ │ │ │ │ └── datepicker3.css │ │ │ │ ├── markdown │ │ │ │ │ └── bootstrap-markdown.min.css │ │ │ │ ├── morris │ │ │ │ │ └── morris-0.4.3.min.css │ │ │ │ ├── nouslider │ │ │ │ │ └── jquery.nouislider.css │ │ │ │ ├── simditor │ │ │ │ │ └── simditor.css │ │ │ │ ├── steps │ │ │ │ │ └── jquery.steps.css │ │ │ │ ├── summernote │ │ │ │ │ ├── summernote-bs3.css │ │ │ │ │ └── summernote.css │ │ │ │ ├── switchery │ │ │ │ │ └── switchery.css │ │ │ │ ├── toastr │ │ │ │ │ └── toastr.min.css │ │ │ │ ├── treeview │ │ │ │ │ └── bootstrap-treeview.css │ │ │ │ └── webuploader │ │ │ │ │ └── webuploader.css │ │ │ ├── public.css │ │ │ ├── style.css │ │ │ └── upload-image.css │ │ ├── js │ │ │ ├── article │ │ │ │ ├── add_article.js │ │ │ │ ├── article.js │ │ │ │ └── edit_article.js │ │ │ ├── bootstrap.js │ │ │ ├── bootstrap.min.js │ │ │ ├── cropper.min.js │ │ │ ├── editormd.js │ │ │ ├── flavr │ │ │ │ ├── base.js │ │ │ │ ├── css │ │ │ │ │ ├── bootstrap.min.css │ │ │ │ │ ├── highlight │ │ │ │ │ │ └── default.css │ │ │ │ │ └── style.css │ │ │ │ ├── flavr │ │ │ │ │ ├── css │ │ │ │ │ │ ├── animate.css │ │ │ │ │ │ ├── flavr.css │ │ │ │ │ │ └── flavr.min.css │ │ │ │ │ ├── images │ │ │ │ │ │ └── icons │ │ │ │ │ │ │ ├── calendar.png │ │ │ │ │ │ │ ├── chat-bubble.png │ │ │ │ │ │ │ ├── chrome.png │ │ │ │ │ │ │ ├── document.png │ │ │ │ │ │ │ ├── dribbble.png │ │ │ │ │ │ │ ├── drive.png │ │ │ │ │ │ │ ├── email.png │ │ │ │ │ │ │ ├── evernote.png │ │ │ │ │ │ │ ├── facebook.png │ │ │ │ │ │ │ ├── forsquare.png │ │ │ │ │ │ │ ├── github.png │ │ │ │ │ │ │ ├── gmail.png │ │ │ │ │ │ │ ├── google+.png │ │ │ │ │ │ │ ├── linkedin.png │ │ │ │ │ │ │ ├── location-pointer.png │ │ │ │ │ │ │ ├── play.png │ │ │ │ │ │ │ ├── search.png │ │ │ │ │ │ │ ├── skype.png │ │ │ │ │ │ │ ├── star.png │ │ │ │ │ │ │ ├── task.png │ │ │ │ │ │ │ ├── tumblr.png │ │ │ │ │ │ │ ├── twitter.png │ │ │ │ │ │ │ ├── upload.png │ │ │ │ │ │ │ ├── vimeo.png │ │ │ │ │ │ │ └── youtube.png │ │ │ │ │ └── js │ │ │ │ │ │ ├── flavr.js │ │ │ │ │ │ └── flavr.min.js │ │ │ │ ├── fonts │ │ │ │ │ ├── fontawesome.css │ │ │ │ │ ├── fontawesome │ │ │ │ │ │ ├── FontAwesome.otf │ │ │ │ │ │ ├── fontawesome-webfont.eot │ │ │ │ │ │ ├── fontawesome-webfont.svg │ │ │ │ │ │ ├── fontawesome-webfont.ttf │ │ │ │ │ │ └── fontawesome-webfont.woff │ │ │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ │ │ ├── lato.css │ │ │ │ │ └── lato │ │ │ │ │ │ ├── lato-bold-webfont.eot │ │ │ │ │ │ ├── lato-bold-webfont.svg │ │ │ │ │ │ ├── lato-bold-webfont.ttf │ │ │ │ │ │ ├── lato-bold-webfont.woff │ │ │ │ │ │ ├── lato-light-demo.html │ │ │ │ │ │ ├── lato-light-webfont.eot │ │ │ │ │ │ ├── lato-light-webfont.svg │ │ │ │ │ │ ├── lato-light-webfont.ttf │ │ │ │ │ │ ├── lato-light-webfont.woff │ │ │ │ │ │ ├── lato-regular-demo.html │ │ │ │ │ │ ├── lato-regular-webfont.eot │ │ │ │ │ │ ├── lato-regular-webfont.svg │ │ │ │ │ │ ├── lato-regular-webfont.ttf │ │ │ │ │ │ └── lato-regular-webfont.woff │ │ │ │ ├── js │ │ │ │ │ ├── bootstrap.min.js │ │ │ │ │ ├── highlight.pack.js │ │ │ │ │ ├── jquery-1.10.2.min.map │ │ │ │ │ ├── jquery.browser.js │ │ │ │ │ ├── jquery.min.js │ │ │ │ │ └── livedemo.js │ │ │ │ └── less │ │ │ │ │ ├── flavr.less │ │ │ │ │ ├── mixins.less │ │ │ │ │ └── style.less │ │ │ ├── flink │ │ │ │ └── flink.js │ │ │ ├── hplus.js │ │ │ ├── jquery.form.js │ │ │ ├── plugins │ │ │ │ ├── chosen │ │ │ │ │ └── chosen.jquery.js │ │ │ │ ├── colorpicker │ │ │ │ │ └── bootstrap-colorpicker.min.js │ │ │ │ ├── dataTables │ │ │ │ │ ├── dataTables.bootstrap.js │ │ │ │ │ └── jquery.dataTables.js │ │ │ │ ├── datapicker │ │ │ │ │ └── bootstrap-datepicker.js │ │ │ │ ├── markdown │ │ │ │ │ ├── bootstrap-markdown.js │ │ │ │ │ ├── bootstrap-markdown.zh.js │ │ │ │ │ ├── markdown.js │ │ │ │ │ └── to-markdown.js │ │ │ │ ├── metisMenu │ │ │ │ │ └── jquery.metisMenu.js │ │ │ │ └── slimscroll │ │ │ │ │ └── jquery.slimscroll.min.js │ │ │ ├── tag │ │ │ │ └── tag.js │ │ │ ├── type │ │ │ │ └── type.js │ │ │ ├── upload-image.js │ │ │ ├── userinfo.js │ │ │ └── validation.js │ │ ├── lib │ │ │ ├── codemirror │ │ │ │ ├── AUTHORS │ │ │ │ ├── LICENSE │ │ │ │ ├── README.md │ │ │ │ ├── addon │ │ │ │ │ ├── comment │ │ │ │ │ │ ├── comment.js │ │ │ │ │ │ └── continuecomment.js │ │ │ │ │ ├── dialog │ │ │ │ │ │ ├── dialog.css │ │ │ │ │ │ └── dialog.js │ │ │ │ │ ├── display │ │ │ │ │ │ ├── fullscreen.css │ │ │ │ │ │ ├── fullscreen.js │ │ │ │ │ │ ├── panel.js │ │ │ │ │ │ ├── placeholder.js │ │ │ │ │ │ └── rulers.js │ │ │ │ │ ├── edit │ │ │ │ │ │ ├── closebrackets.js │ │ │ │ │ │ ├── closetag.js │ │ │ │ │ │ ├── continuelist.js │ │ │ │ │ │ ├── matchbrackets.js │ │ │ │ │ │ ├── matchtags.js │ │ │ │ │ │ └── trailingspace.js │ │ │ │ │ ├── fold │ │ │ │ │ │ ├── brace-fold.js │ │ │ │ │ │ ├── comment-fold.js │ │ │ │ │ │ ├── foldcode.js │ │ │ │ │ │ ├── foldgutter.css │ │ │ │ │ │ ├── foldgutter.js │ │ │ │ │ │ ├── indent-fold.js │ │ │ │ │ │ ├── markdown-fold.js │ │ │ │ │ │ └── xml-fold.js │ │ │ │ │ ├── hint │ │ │ │ │ │ ├── anyword-hint.js │ │ │ │ │ │ ├── css-hint.js │ │ │ │ │ │ ├── html-hint.js │ │ │ │ │ │ ├── javascript-hint.js │ │ │ │ │ │ ├── show-hint.css │ │ │ │ │ │ ├── show-hint.js │ │ │ │ │ │ ├── sql-hint.js │ │ │ │ │ │ └── xml-hint.js │ │ │ │ │ ├── lint │ │ │ │ │ │ ├── coffeescript-lint.js │ │ │ │ │ │ ├── css-lint.js │ │ │ │ │ │ ├── javascript-lint.js │ │ │ │ │ │ ├── json-lint.js │ │ │ │ │ │ ├── lint.css │ │ │ │ │ │ ├── lint.js │ │ │ │ │ │ └── yaml-lint.js │ │ │ │ │ ├── merge │ │ │ │ │ │ ├── merge.css │ │ │ │ │ │ └── merge.js │ │ │ │ │ ├── mode │ │ │ │ │ │ ├── loadmode.js │ │ │ │ │ │ ├── multiplex.js │ │ │ │ │ │ ├── multiplex_test.js │ │ │ │ │ │ ├── overlay.js │ │ │ │ │ │ └── simple.js │ │ │ │ │ ├── runmode │ │ │ │ │ │ ├── colorize.js │ │ │ │ │ │ ├── runmode-standalone.js │ │ │ │ │ │ ├── runmode.js │ │ │ │ │ │ └── runmode.node.js │ │ │ │ │ ├── scroll │ │ │ │ │ │ ├── annotatescrollbar.js │ │ │ │ │ │ ├── scrollpastend.js │ │ │ │ │ │ ├── simplescrollbars.css │ │ │ │ │ │ └── simplescrollbars.js │ │ │ │ │ ├── search │ │ │ │ │ │ ├── match-highlighter.js │ │ │ │ │ │ ├── matchesonscrollbar.css │ │ │ │ │ │ ├── matchesonscrollbar.js │ │ │ │ │ │ ├── search.js │ │ │ │ │ │ └── searchcursor.js │ │ │ │ │ ├── selection │ │ │ │ │ │ ├── active-line.js │ │ │ │ │ │ ├── mark-selection.js │ │ │ │ │ │ └── selection-pointer.js │ │ │ │ │ ├── tern │ │ │ │ │ │ ├── tern.css │ │ │ │ │ │ ├── tern.js │ │ │ │ │ │ └── worker.js │ │ │ │ │ └── wrap │ │ │ │ │ │ └── hardwrap.js │ │ │ │ ├── addons.min.js │ │ │ │ ├── bower.json │ │ │ │ ├── codemirror.min.css │ │ │ │ ├── codemirror.min.js │ │ │ │ ├── lib │ │ │ │ │ ├── codemirror.css │ │ │ │ │ └── codemirror.js │ │ │ │ ├── mode │ │ │ │ │ ├── apl │ │ │ │ │ │ ├── apl.js │ │ │ │ │ │ └── index.html │ │ │ │ │ ├── asterisk │ │ │ │ │ │ ├── asterisk.js │ │ │ │ │ │ └── index.html │ │ │ │ │ ├── clike │ │ │ │ │ │ ├── clike.js │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── scala.html │ │ │ │ │ ├── clojure │ │ │ │ │ │ ├── clojure.js │ │ │ │ │ │ └── index.html │ │ │ │ │ ├── cobol │ │ │ │ │ │ ├── cobol.js │ │ │ │ │ │ └── index.html │ │ │ │ │ ├── coffeescript │ │ │ │ │ │ ├── coffeescript.js │ │ │ │ │ │ └── index.html │ │ │ │ │ ├── commonlisp │ │ │ │ │ │ ├── commonlisp.js │ │ │ │ │ │ └── index.html │ │ │ │ │ ├── css │ │ │ │ │ │ ├── css.js │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ ├── less.html │ │ │ │ │ │ ├── less_test.js │ │ │ │ │ │ ├── scss.html │ │ │ │ │ │ ├── scss_test.js │ │ │ │ │ │ └── test.js │ │ │ │ │ ├── cypher │ │ │ │ │ │ ├── cypher.js │ │ │ │ │ │ └── index.html │ │ │ │ │ ├── d │ │ │ │ │ │ ├── d.js │ │ │ │ │ │ └── index.html │ │ │ │ │ ├── dart │ │ │ │ │ │ ├── dart.js │ │ │ │ │ │ └── index.html │ │ │ │ │ ├── diff │ │ │ │ │ │ ├── diff.js │ │ │ │ │ │ └── index.html │ │ │ │ │ ├── django │ │ │ │ │ │ ├── django.js │ │ │ │ │ │ └── index.html │ │ │ │ │ ├── dockerfile │ │ │ │ │ │ ├── dockerfile.js │ │ │ │ │ │ └── index.html │ │ │ │ │ ├── dtd │ │ │ │ │ │ ├── dtd.js │ │ │ │ │ │ └── index.html │ │ │ │ │ ├── dylan │ │ │ │ │ │ ├── dylan.js │ │ │ │ │ │ └── index.html │ │ │ │ │ ├── ebnf │ │ │ │ │ │ ├── ebnf.js │ │ │ │ │ │ └── index.html │ │ │ │ │ ├── ecl │ │ │ │ │ │ ├── ecl.js │ │ │ │ │ │ └── index.html │ │ │ │ │ ├── eiffel │ │ │ │ │ │ ├── eiffel.js │ │ │ │ │ │ └── index.html │ │ │ │ │ ├── erlang │ │ │ │ │ │ ├── erlang.js │ │ │ │ │ │ └── index.html │ │ │ │ │ ├── forth │ │ │ │ │ │ ├── forth.js │ │ │ │ │ │ └── index.html │ │ │ │ │ ├── fortran │ │ │ │ │ │ ├── fortran.js │ │ │ │ │ │ └── index.html │ │ │ │ │ ├── gas │ │ │ │ │ │ ├── gas.js │ │ │ │ │ │ └── index.html │ │ │ │ │ ├── gfm │ │ │ │ │ │ ├── gfm.js │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── test.js │ │ │ │ │ ├── gherkin │ │ │ │ │ │ ├── gherkin.js │ │ │ │ │ │ └── index.html │ │ │ │ │ ├── go │ │ │ │ │ │ ├── go.js │ │ │ │ │ │ └── index.html │ │ │ │ │ ├── groovy │ │ │ │ │ │ ├── groovy.js │ │ │ │ │ │ └── index.html │ │ │ │ │ ├── haml │ │ │ │ │ │ ├── haml.js │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── test.js │ │ │ │ │ ├── haskell │ │ │ │ │ │ ├── haskell.js │ │ │ │ │ │ └── index.html │ │ │ │ │ ├── haxe │ │ │ │ │ │ ├── haxe.js │ │ │ │ │ │ └── index.html │ │ │ │ │ ├── htmlembedded │ │ │ │ │ │ ├── htmlembedded.js │ │ │ │ │ │ └── index.html │ │ │ │ │ ├── htmlmixed │ │ │ │ │ │ ├── htmlmixed.js │ │ │ │ │ │ └── index.html │ │ │ │ │ ├── http │ │ │ │ │ │ ├── http.js │ │ │ │ │ │ └── index.html │ │ │ │ │ ├── idl │ │ │ │ │ │ ├── idl.js │ │ │ │ │ │ └── index.html │ │ │ │ │ ├── index.html │ │ │ │ │ ├── jade │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── jade.js │ │ │ │ │ ├── javascript │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ ├── javascript.js │ │ │ │ │ │ ├── json-ld.html │ │ │ │ │ │ ├── test.js │ │ │ │ │ │ └── typescript.html │ │ │ │ │ ├── jinja2 │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── jinja2.js │ │ │ │ │ ├── julia │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── julia.js │ │ │ │ │ ├── kotlin │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── kotlin.js │ │ │ │ │ ├── livescript │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── livescript.js │ │ │ │ │ ├── lua │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── lua.js │ │ │ │ │ ├── markdown │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ ├── markdown.js │ │ │ │ │ │ └── test.js │ │ │ │ │ ├── meta.js │ │ │ │ │ ├── mirc │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── mirc.js │ │ │ │ │ ├── mllike │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── mllike.js │ │ │ │ │ ├── modelica │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── modelica.js │ │ │ │ │ ├── nginx │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── nginx.js │ │ │ │ │ ├── ntriples │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── ntriples.js │ │ │ │ │ ├── octave │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── octave.js │ │ │ │ │ ├── pascal │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── pascal.js │ │ │ │ │ ├── pegjs │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── pegjs.js │ │ │ │ │ ├── perl │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── perl.js │ │ │ │ │ ├── php │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ ├── php.js │ │ │ │ │ │ └── test.js │ │ │ │ │ ├── pig │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── pig.js │ │ │ │ │ ├── properties │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── properties.js │ │ │ │ │ ├── puppet │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── puppet.js │ │ │ │ │ ├── python │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── python.js │ │ │ │ │ ├── q │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── q.js │ │ │ │ │ ├── r │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── r.js │ │ │ │ │ ├── rpm │ │ │ │ │ │ ├── changes │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── rpm.js │ │ │ │ │ ├── rst │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── rst.js │ │ │ │ │ ├── ruby │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ ├── ruby.js │ │ │ │ │ │ └── test.js │ │ │ │ │ ├── rust │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── rust.js │ │ │ │ │ ├── sass │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── sass.js │ │ │ │ │ ├── scheme │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── scheme.js │ │ │ │ │ ├── shell │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ ├── shell.js │ │ │ │ │ │ └── test.js │ │ │ │ │ ├── sieve │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── sieve.js │ │ │ │ │ ├── slim │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ ├── slim.js │ │ │ │ │ │ └── test.js │ │ │ │ │ ├── smalltalk │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── smalltalk.js │ │ │ │ │ ├── smarty │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── smarty.js │ │ │ │ │ ├── smartymixed │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── smartymixed.js │ │ │ │ │ ├── solr │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── solr.js │ │ │ │ │ ├── soy │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── soy.js │ │ │ │ │ ├── sparql │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── sparql.js │ │ │ │ │ ├── spreadsheet │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── spreadsheet.js │ │ │ │ │ ├── sql │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── sql.js │ │ │ │ │ ├── stex │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ ├── stex.js │ │ │ │ │ │ └── test.js │ │ │ │ │ ├── stylus │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── stylus.js │ │ │ │ │ ├── tcl │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── tcl.js │ │ │ │ │ ├── textile │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ ├── test.js │ │ │ │ │ │ └── textile.js │ │ │ │ │ ├── tiddlywiki │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ ├── tiddlywiki.css │ │ │ │ │ │ └── tiddlywiki.js │ │ │ │ │ ├── tiki │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ ├── tiki.css │ │ │ │ │ │ └── tiki.js │ │ │ │ │ ├── toml │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── toml.js │ │ │ │ │ ├── tornado │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── tornado.js │ │ │ │ │ ├── turtle │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── turtle.js │ │ │ │ │ ├── vb │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── vb.js │ │ │ │ │ ├── vbscript │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── vbscript.js │ │ │ │ │ ├── velocity │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── velocity.js │ │ │ │ │ ├── verilog │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ ├── test.js │ │ │ │ │ │ └── verilog.js │ │ │ │ │ ├── xml │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ ├── test.js │ │ │ │ │ │ └── xml.js │ │ │ │ │ ├── xquery │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ ├── test.js │ │ │ │ │ │ └── xquery.js │ │ │ │ │ ├── yaml │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── yaml.js │ │ │ │ │ └── z80 │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── z80.js │ │ │ │ ├── modes.min.js │ │ │ │ ├── package.json │ │ │ │ └── theme │ │ │ │ │ ├── 3024-day.css │ │ │ │ │ ├── 3024-night.css │ │ │ │ │ ├── ambiance-mobile.css │ │ │ │ │ ├── ambiance.css │ │ │ │ │ ├── base16-dark.css │ │ │ │ │ ├── base16-light.css │ │ │ │ │ ├── blackboard.css │ │ │ │ │ ├── cobalt.css │ │ │ │ │ ├── colorforth.css │ │ │ │ │ ├── eclipse.css │ │ │ │ │ ├── elegant.css │ │ │ │ │ ├── erlang-dark.css │ │ │ │ │ ├── lesser-dark.css │ │ │ │ │ ├── mbo.css │ │ │ │ │ ├── mdn-like.css │ │ │ │ │ ├── midnight.css │ │ │ │ │ ├── monokai.css │ │ │ │ │ ├── neat.css │ │ │ │ │ ├── neo.css │ │ │ │ │ ├── night.css │ │ │ │ │ ├── paraiso-dark.css │ │ │ │ │ ├── paraiso-light.css │ │ │ │ │ ├── pastel-on-dark.css │ │ │ │ │ ├── rubyblue.css │ │ │ │ │ ├── solarized.css │ │ │ │ │ ├── the-matrix.css │ │ │ │ │ ├── tomorrow-night-bright.css │ │ │ │ │ ├── tomorrow-night-eighties.css │ │ │ │ │ ├── twilight.css │ │ │ │ │ ├── vibrant-ink.css │ │ │ │ │ ├── xq-dark.css │ │ │ │ │ ├── xq-light.css │ │ │ │ │ └── zenburn.css │ │ │ ├── flowchart.min.js │ │ │ ├── jquery.flowchart.min.js │ │ │ ├── marked.min.js │ │ │ ├── prettify.min.js │ │ │ ├── raphael.min.js │ │ │ ├── sequence-diagram.min.js │ │ │ └── underscore.min.js │ │ └── plugins │ │ │ ├── code-block-dialog │ │ │ └── code-block-dialog.js │ │ │ ├── emoji-dialog │ │ │ ├── emoji-dialog.js │ │ │ └── emoji.json │ │ │ ├── image-dialog │ │ │ └── image-dialog.js │ │ │ ├── link-dialog │ │ │ └── link-dialog.js │ │ │ ├── preformatted-text-dialog │ │ │ └── preformatted-text-dialog.js │ │ │ ├── reference-link-dialog │ │ │ └── reference-link-dialog.js │ │ │ └── table-dialog │ │ │ └── table-dialog.js │ ├── css │ │ ├── about.me.css │ │ ├── bootstrap.min.css │ │ ├── common.css │ │ ├── editormd.preview.css │ │ ├── error.css │ │ ├── images │ │ │ ├── login_bgx.gif │ │ │ ├── m.png │ │ │ └── thumb-default-small.png │ │ ├── load.css │ │ ├── loading.css │ │ ├── login.css │ │ ├── normalize.css │ │ ├── pagination.css │ │ ├── share.css │ │ └── style.css │ ├── ex │ │ ├── background.jpg │ │ ├── detail.jpg │ │ ├── index.jpg │ │ └── markdown.jpg │ ├── favicon.ico │ ├── image │ │ ├── avatar.jpg │ │ ├── error-img.png │ │ ├── fork_github.png │ │ ├── img-sprite.png │ │ ├── loading.gif │ │ ├── loading@2x.gif │ │ ├── loading@3x.gif │ │ ├── login_bgx.gif │ │ ├── login_m_bg.png │ │ ├── m.png │ │ ├── share_core_square.jpg │ │ ├── social.png │ │ ├── thymeleaf.png │ │ └── wechar.jpg │ ├── js │ │ ├── article-content.js │ │ ├── busuamzi.pure.mini.js │ │ ├── insight.js │ │ ├── jqPaginator.min.js │ │ ├── jquery.imgbox.pack.js │ │ ├── jquery.js │ │ ├── jquery.min.js │ │ ├── lightgallery.min.js │ │ ├── login.js │ │ ├── main.js │ │ ├── mi-shake.js │ │ ├── rotator.js │ │ └── share.js │ └── sql │ │ └── mi-blog.sql │ └── templates │ ├── admin │ ├── article │ │ ├── articleAdd.html │ │ ├── articleEdit.html │ │ ├── articleEditInfo.html │ │ ├── articleInfo.html │ │ ├── articleList.html │ │ └── articleTable.html │ ├── flink │ │ ├── flinkAdd.html │ │ ├── flinkEdit.html │ │ ├── flinkList.html │ │ └── flinkTable.html │ ├── index.html │ ├── partial │ │ ├── avatar.html │ │ ├── footer.html │ │ ├── head.html │ │ ├── module-userinfo.html │ │ ├── sidebar.html │ │ └── userinfo.html │ ├── tag │ │ ├── tagAdd.html │ │ ├── tagEdit.html │ │ ├── tagList.html │ │ └── tagTable.html │ └── type │ │ ├── typeAdd.html │ │ ├── typeEdit.html │ │ ├── typeList.html │ │ └── typeTable.html │ ├── blog │ ├── aboutMe.html │ ├── archive.html │ ├── archiveSummary.html │ ├── article.html │ ├── index.html │ ├── left │ │ └── baseUserInfo.html │ ├── main.html │ ├── part │ │ ├── footer.html │ │ ├── head.html │ │ ├── header.html │ │ ├── page.html │ │ └── search-info.html │ ├── right │ │ ├── announcement.html │ │ ├── aphorism.html │ │ ├── books.html │ │ ├── onlineTool.html │ │ ├── tagCloud.html │ │ └── typeList.html │ ├── tag.html │ ├── tagSummary.html │ ├── type.html │ └── typeSummary.html │ ├── error │ └── 404.html │ └── login.html ├── mi-common ├── README.md ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── mi │ │ ├── MiCommonApplication.java │ │ ├── MybatisPlusGenerator.java │ │ └── common │ │ ├── annotation │ │ ├── Dev.java │ │ └── Pro.java │ │ ├── constant │ │ └── SystemPath.java │ │ ├── dictionary │ │ └── Dictionary.java │ │ ├── excle │ │ ├── Constant.java │ │ ├── ExcelUtil.java │ │ └── Parameter.java │ │ ├── model │ │ ├── BaseModel.java │ │ ├── BaseResult.java │ │ └── ReturnCode.java │ │ └── util │ │ ├── AESUtil.java │ │ ├── FileUtil.java │ │ ├── IDUntil.java │ │ └── StaticContantUtil.java │ └── resources │ ├── application.yml │ └── templates │ ├── controller.java.vm │ ├── entity.java.vm │ ├── mapper.java.vm │ ├── mapper.xml.vm │ ├── service.java.vm │ └── serviceImpl.java.vm ├── mi-config ├── README.md ├── mi-cloud-config-client │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── mi │ │ │ ├── MiCloudConfigClientApplication.java │ │ │ └── TestController.java │ │ └── resources │ │ └── bootstrap.properties ├── mi-cloud-config-repo │ ├── billing-dev.properties │ ├── cloud_config_client-dev.yml │ ├── prod.yml │ └── test.yml ├── mi-cloud-config-server │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── mi │ │ │ └── MiCloudConfigServerApplication.java │ │ └── resources │ │ └── application.yml └── pom.xml ├── mi-monitor ├── README.md ├── mi-spring-boot-admin │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── mi │ │ │ ├── MiSpringBootAdminApplication.java │ │ │ └── common │ │ │ └── WebSecurityConfig.java │ │ └── resources │ │ ├── application-dev.yml │ │ ├── application.yml │ │ └── logback.xml └── pom.xml └── pom.xml /.gitattributes: -------------------------------------------------------------------------------- 1 | *.js linguist-language=java -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | logs 2 | # 项目资源 3 | /.idea/ 4 | *.iml 5 | 6 | *application-pro.properties 7 | *application-pro.yml 8 | 9 | test 10 | target/ 11 | 12 | 13 | 14 | 15 | 16 | # 目录结构太长隐藏 17 | # 暂时隐藏 18 | #mi-admin 19 | #mi-api 20 | #mi-app 21 | # 22 | #mi-config 23 | # 24 | #mi-blog/target/ 25 | #mi-common/target/ 26 | 27 | -------------------------------------------------------------------------------- /.project-resouce/MI-PRO-O.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/.project-resouce/MI-PRO-O.png -------------------------------------------------------------------------------- /.project-resouce/MILOGO-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/.project-resouce/MILOGO-120x120.png -------------------------------------------------------------------------------- /.project-resouce/README.md: -------------------------------------------------------------------------------- 1 | ## 项目资源文件 2 | -------------------------------------------------------------------------------- /.project-resouce/thanks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/.project-resouce/thanks.png -------------------------------------------------------------------------------- /.project-resouce/项目效果图/SBA-v1.0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/.project-resouce/项目效果图/SBA-v1.0.gif -------------------------------------------------------------------------------- /.project-resouce/项目效果图/SBA监控项目环境.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/.project-resouce/项目效果图/SBA监控项目环境.png -------------------------------------------------------------------------------- /.project-resouce/项目效果图/blog/background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/.project-resouce/项目效果图/blog/background.jpg -------------------------------------------------------------------------------- /.project-resouce/项目效果图/blog/detail.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/.project-resouce/项目效果图/blog/detail.jpg -------------------------------------------------------------------------------- /.project-resouce/项目效果图/blog/index.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/.project-resouce/项目效果图/blog/index.jpg -------------------------------------------------------------------------------- /.project-resouce/项目效果图/blog/markdown.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/.project-resouce/项目效果图/blog/markdown.jpg -------------------------------------------------------------------------------- /.project-resouce/项目效果图/eureka.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/.project-resouce/项目效果图/eureka.png -------------------------------------------------------------------------------- /.project-resouce/项目效果图/sbad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/.project-resouce/项目效果图/sbad.png -------------------------------------------------------------------------------- /.project-resouce/项目效果图/swagger2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/.project-resouce/项目效果图/swagger2.gif -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 MIYAOW 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /mi-admin/README.md: -------------------------------------------------------------------------------- 1 | [![License](https://img.shields.io/badge/license-MIT-blue.svg)](http://blog.csdn.net/fjnpysh) 2 | 3 | # MI - ADMIN 模块 4 | 5 | ## 技术要点 6 | 7 | #### **`Mi Platform Center`** MI 总平台管理中心 8 | 9 | - 数据库读写分离配置(AOP切入控制层读写) 10 | - Druid 数据监控 11 | - Mybatis 升级为 Mybatis-Plus 12 | - Reids 缓存数据库 13 | 14 | 15 | #### **`Mi Platform Center Web`** MI 总平台管理中心 16 | 17 | - Vue.js使用 18 | - 前后端分离 19 | 20 | 21 | #### **` √ Mi Spring Boot Admin `** 在Spring Boot Actuator的基础上提供简洁的可视化WEB UI,是用来管理 Spring Boot 应用程序的一个简单的界面,提供如下功能: 22 | - 引入Spring Security框架配套登入模块 23 | - 显示 name/id 和版本号 24 | - 显示在线状态 25 | - Logging日志级别管理 26 | - JMX beans管理 27 | - Threads会话和线程管理 28 | - Trace应用请求跟踪 29 | - 应用运行参数信息,如: 30 | - Java 系统属性 31 | - Java 环境变量属性 32 | - 内存信息 33 | - Spring 环境属性 34 | 35 | 36 | - 更新 `README.md` 等相关文档和示例; 37 | 38 | ## 备注 39 | 40 | 本案例只做演示作用 41 | 使用阿里云等服务器就已经就内置有监控系统了。没必要浪费系统资源。而且也有系统预警等多重服务 -------------------------------------------------------------------------------- /mi-admin/mi-platform-center-web/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["env", { "modules": false }], 4 | "stage-2" 5 | ], 6 | "plugins": ["transform-runtime"], 7 | "comments": false, 8 | "env": { 9 | "test": { 10 | "presets": ["env", "stage-2"], 11 | "plugins": [ "istanbul" ] 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /mi-admin/mi-platform-center-web/.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /mi-admin/mi-platform-center-web/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | dist/ 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | -------------------------------------------------------------------------------- /mi-admin/mi-platform-center-web/.postcssrc.js: -------------------------------------------------------------------------------- 1 | // https://github.com/michael-ciniawsky/postcss-load-config 2 | 3 | module.exports = { 4 | "plugins": { 5 | // to edit target browsers: use "browserlist" field in package.json 6 | "autoprefixer": {} 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /mi-admin/mi-platform-center-web/README.md: -------------------------------------------------------------------------------- 1 | # mi-platform-center-web 2 | 3 | > A Vue.js project 4 | 5 | ## Build Setup 6 | 7 | ``` bash 8 | # install dependencies 9 | npm install 10 | 11 | # serve with hot reload at localhost:8080 12 | npm run dev 13 | 14 | # build for production with minification 15 | npm run build 16 | 17 | # build for production and view the bundle analyzer report 18 | npm run build --report 19 | ``` 20 | 21 | For detailed explanation on how things work, checkout the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader). 22 | -------------------------------------------------------------------------------- /mi-admin/mi-platform-center-web/build/build.js: -------------------------------------------------------------------------------- 1 | require('./check-versions')() 2 | 3 | process.env.NODE_ENV = 'production' 4 | 5 | var ora = require('ora') 6 | var rm = require('rimraf') 7 | var path = require('path') 8 | var chalk = require('chalk') 9 | var webpack = require('webpack') 10 | var config = require('../config') 11 | var webpackConfig = require('./webpack.prod.conf') 12 | 13 | var spinner = ora('building for production...') 14 | spinner.start() 15 | 16 | rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => { 17 | if (err) throw err 18 | webpack(webpackConfig, function (err, stats) { 19 | spinner.stop() 20 | if (err) throw err 21 | process.stdout.write(stats.toString({ 22 | colors: true, 23 | modules: false, 24 | children: false, 25 | chunks: false, 26 | chunkModules: false 27 | }) + '\n\n') 28 | 29 | console.log(chalk.cyan(' Build complete.\n')) 30 | console.log(chalk.yellow( 31 | ' Tip: built files are meant to be served over an HTTP server.\n' + 32 | ' Opening index.html over file:// won\'t work.\n' 33 | )) 34 | }) 35 | }) 36 | -------------------------------------------------------------------------------- /mi-admin/mi-platform-center-web/build/check-versions.js: -------------------------------------------------------------------------------- 1 | var chalk = require('chalk') 2 | var semver = require('semver') 3 | var packageConfig = require('../package.json') 4 | var shell = require('shelljs') 5 | function exec (cmd) { 6 | return require('child_process').execSync(cmd).toString().trim() 7 | } 8 | 9 | var versionRequirements = [ 10 | { 11 | name: 'node', 12 | currentVersion: semver.clean(process.version), 13 | versionRequirement: packageConfig.engines.node 14 | }, 15 | ] 16 | 17 | if (shell.which('npm')) { 18 | versionRequirements.push({ 19 | name: 'npm', 20 | currentVersion: exec('npm --version'), 21 | versionRequirement: packageConfig.engines.npm 22 | }) 23 | } 24 | 25 | module.exports = function () { 26 | var warnings = [] 27 | for (var i = 0; i < versionRequirements.length; i++) { 28 | var mod = versionRequirements[i] 29 | if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) { 30 | warnings.push(mod.name + ': ' + 31 | chalk.red(mod.currentVersion) + ' should be ' + 32 | chalk.green(mod.versionRequirement) 33 | ) 34 | } 35 | } 36 | 37 | if (warnings.length) { 38 | console.log('') 39 | console.log(chalk.yellow('To use this template, you must update following to modules:')) 40 | console.log() 41 | for (var i = 0; i < warnings.length; i++) { 42 | var warning = warnings[i] 43 | console.log(' ' + warning) 44 | } 45 | console.log() 46 | process.exit(1) 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /mi-admin/mi-platform-center-web/build/dev-client.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | require('eventsource-polyfill') 3 | var hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true') 4 | 5 | hotClient.subscribe(function (event) { 6 | if (event.action === 'reload') { 7 | window.location.reload() 8 | } 9 | }) 10 | -------------------------------------------------------------------------------- /mi-admin/mi-platform-center-web/build/vue-loader.conf.js: -------------------------------------------------------------------------------- 1 | var utils = require('./utils') 2 | var config = require('../config') 3 | var isProduction = process.env.NODE_ENV === 'production' 4 | 5 | module.exports = { 6 | loaders: utils.cssLoaders({ 7 | sourceMap: isProduction 8 | ? config.build.productionSourceMap 9 | : config.dev.cssSourceMap, 10 | extract: isProduction 11 | }) 12 | } 13 | -------------------------------------------------------------------------------- /mi-admin/mi-platform-center-web/build/webpack.base.conf.js: -------------------------------------------------------------------------------- 1 | var path = require('path') 2 | var utils = require('./utils') 3 | var config = require('../config') 4 | var vueLoaderConfig = require('./vue-loader.conf') 5 | 6 | function resolve (dir) { 7 | return path.join(__dirname, '..', dir) 8 | } 9 | 10 | module.exports = { 11 | entry: { 12 | app: './src/main.js' 13 | }, 14 | output: { 15 | path: config.build.assetsRoot, 16 | filename: '[name].js', 17 | publicPath: process.env.NODE_ENV === 'production' 18 | ? config.build.assetsPublicPath 19 | : config.dev.assetsPublicPath 20 | }, 21 | resolve: { 22 | extensions: ['.js', '.vue', '.json'], 23 | alias: { 24 | 'vue$': 'vue/dist/vue.esm.js', 25 | '@': resolve('src') 26 | } 27 | }, 28 | module: { 29 | rules: [ 30 | { 31 | test: /\.vue$/, 32 | loader: 'vue-loader', 33 | options: vueLoaderConfig 34 | }, 35 | { 36 | test: /\.js$/, 37 | loader: 'babel-loader', 38 | include: [resolve('src'), resolve('test')] 39 | }, 40 | { 41 | test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, 42 | loader: 'url-loader', 43 | options: { 44 | limit: 10000, 45 | name: utils.assetsPath('img/[name].[hash:7].[ext]') 46 | } 47 | }, 48 | { 49 | test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, 50 | loader: 'url-loader', 51 | options: { 52 | limit: 10000, 53 | name: utils.assetsPath('fonts/[name].[hash:7].[ext]') 54 | } 55 | } 56 | ] 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /mi-admin/mi-platform-center-web/build/webpack.dev.conf.js: -------------------------------------------------------------------------------- 1 | var utils = require('./utils') 2 | var webpack = require('webpack') 3 | var config = require('../config') 4 | var merge = require('webpack-merge') 5 | var baseWebpackConfig = require('./webpack.base.conf') 6 | var HtmlWebpackPlugin = require('html-webpack-plugin') 7 | var FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') 8 | 9 | // add hot-reload related code to entry chunks 10 | Object.keys(baseWebpackConfig.entry).forEach(function (name) { 11 | baseWebpackConfig.entry[name] = ['./build/dev-client'].concat(baseWebpackConfig.entry[name]) 12 | }) 13 | 14 | module.exports = merge(baseWebpackConfig, { 15 | module: { 16 | rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap }) 17 | }, 18 | // cheap-module-eval-source-map is faster for development 19 | devtool: '#cheap-module-eval-source-map', 20 | plugins: [ 21 | new webpack.DefinePlugin({ 22 | 'process.env': config.dev.env 23 | }), 24 | // https://github.com/glenjamin/webpack-hot-middleware#installation--usage 25 | new webpack.HotModuleReplacementPlugin(), 26 | new webpack.NoEmitOnErrorsPlugin(), 27 | // https://github.com/ampedandwired/html-webpack-plugin 28 | new HtmlWebpackPlugin({ 29 | filename: 'index.html', 30 | template: 'index.html', 31 | inject: true 32 | }), 33 | new FriendlyErrorsPlugin() 34 | ] 35 | }) 36 | -------------------------------------------------------------------------------- /mi-admin/mi-platform-center-web/config/dev.env.js: -------------------------------------------------------------------------------- 1 | var merge = require('webpack-merge') 2 | var prodEnv = require('./prod.env') 3 | 4 | module.exports = merge(prodEnv, { 5 | NODE_ENV: '"development"' 6 | }) 7 | -------------------------------------------------------------------------------- /mi-admin/mi-platform-center-web/config/index.js: -------------------------------------------------------------------------------- 1 | // see http://vuejs-templates.github.io/webpack for documentation. 2 | var path = require('path') 3 | 4 | module.exports = { 5 | build: { 6 | env: require('./prod.env'), 7 | index: path.resolve(__dirname, '../dist/index.html'), 8 | assetsRoot: path.resolve(__dirname, '../dist'), 9 | assetsSubDirectory: 'static', 10 | assetsPublicPath: '/', 11 | productionSourceMap: true, 12 | // Gzip off by default as many popular static hosts such as 13 | // Surge or Netlify already gzip all static assets for you. 14 | // Before setting to `true`, make sure to: 15 | // npm install --save-dev compression-webpack-plugin 16 | productionGzip: false, 17 | productionGzipExtensions: ['js', 'css'], 18 | // Run the build command with an extra argument to 19 | // View the bundle analyzer report after build finishes: 20 | // `npm run build --report` 21 | // Set to `true` or `false` to always turn it on or off 22 | bundleAnalyzerReport: process.env.npm_config_report 23 | }, 24 | dev: { 25 | env: require('./dev.env'), 26 | port: 8080, 27 | autoOpenBrowser: true, 28 | assetsSubDirectory: 'static', 29 | assetsPublicPath: '/', 30 | proxyTable: {}, 31 | // CSS Sourcemaps off by default because relative paths are "buggy" 32 | // with this option, according to the CSS-Loader README 33 | // (https://github.com/webpack/css-loader#sourcemaps) 34 | // In our experience, they generally work as expected, 35 | // just be aware of this issue when enabling this option. 36 | cssSourceMap: false 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /mi-admin/mi-platform-center-web/config/prod.env.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | NODE_ENV: '"production"' 3 | } 4 | -------------------------------------------------------------------------------- /mi-admin/mi-platform-center-web/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | mi-platform-center-web 6 | 7 | 8 |
9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /mi-admin/mi-platform-center-web/src/App.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 13 | 14 | 24 | -------------------------------------------------------------------------------- /mi-admin/mi-platform-center-web/src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-admin/mi-platform-center-web/src/assets/logo.png -------------------------------------------------------------------------------- /mi-admin/mi-platform-center-web/src/components/Hello.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 33 | 34 | 35 | 54 | -------------------------------------------------------------------------------- /mi-admin/mi-platform-center-web/src/main.js: -------------------------------------------------------------------------------- 1 | // The Vue build version to load with the `import` command 2 | // (runtime-only or standalone) has been set in webpack.base.conf with an alias. 3 | import Vue from 'vue' 4 | import App from './App' 5 | import router from './router' 6 | 7 | Vue.config.productionTip = false 8 | 9 | /* eslint-disable no-new */ 10 | new Vue({ 11 | el: '#app', 12 | router, 13 | template: '', 14 | components: { App } 15 | }) 16 | -------------------------------------------------------------------------------- /mi-admin/mi-platform-center-web/src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Router from 'vue-router' 3 | import Hello from '@/components/Hello' 4 | 5 | Vue.use(Router) 6 | 7 | export default new Router({ 8 | routes: [ 9 | { 10 | path: '/', 11 | name: 'Hello', 12 | component: Hello 13 | } 14 | ] 15 | }) 16 | -------------------------------------------------------------------------------- /mi-admin/mi-platform-center-web/static/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-admin/mi-platform-center-web/static/.gitkeep -------------------------------------------------------------------------------- /mi-admin/mi-platform-center/src/main/java/com/mi/MiPlatformCenterApplication.java: -------------------------------------------------------------------------------- 1 | package com.mi; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.EnableAutoConfiguration; 5 | import org.springframework.boot.autoconfigure.SpringBootApplication; 6 | import org.springframework.boot.web.servlet.ServletComponentScan; 7 | import org.springframework.context.annotation.Configuration; 8 | 9 | @ServletComponentScan 10 | @Configuration 11 | @EnableAutoConfiguration 12 | public class MiPlatformCenterApplication { 13 | 14 | public static void main(String[] args) { 15 | SpringApplication.run(MiPlatformCenterApplication.class, args); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /mi-admin/mi-platform-center/src/main/java/com/mi/SwaggerConfig.java: -------------------------------------------------------------------------------- 1 | package com.mi; 2 | 3 | import com.mi.common.swagger.BaseSwaggerConfig; 4 | import org.springframework.context.annotation.Configuration; 5 | import springfox.documentation.swagger2.annotations.EnableSwagger2; 6 | 7 | /** 8 | * 需配置Swagger API Doc 继承既可 9 | * @author yesh 10 | * (M.M)! 11 | * Created by 2017/6/29. 12 | */ 13 | @Configuration 14 | @EnableSwagger2 15 | public class SwaggerConfig extends BaseSwaggerConfig { 16 | 17 | } 18 | -------------------------------------------------------------------------------- /mi-admin/mi-platform-center/src/main/java/com/mi/config/database/DataSourceAop.java: -------------------------------------------------------------------------------- 1 | package com.mi.config.aspect.database; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | import org.aspectj.lang.annotation.Aspect; 5 | import org.aspectj.lang.annotation.Before; 6 | import org.springframework.stereotype.Component; 7 | 8 | /** 9 | * 数据源切换AOP 10 | * @author yesh 11 | * (M.M)! 12 | * Created by 2017/6/16. 13 | */ 14 | @Slf4j 15 | @Aspect 16 | @Component 17 | public class DataSourceAop { 18 | 19 | @Before("execution(* com.mi.module.*.controller..*.select*(..)) || execution(* com.mi.module.*.controller..*.find*(..)) || execution(* com.mi.module.*.controller..*.get*(..))") 20 | public void setReadDataSourceType() { 21 | DataSourceContextHolder.read(); 22 | log.info("dataSource切换到:Read"); 23 | } 24 | 25 | @Before("execution(* com.mi.module.*.controller..*.insert*(..)) || execution(* com.mi.module.*.controller..*.update*(..))") 26 | public void setWriteDataSourceType() { 27 | DataSourceContextHolder.write(); 28 | log.info("dataSource切换到:write"); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /mi-admin/mi-platform-center/src/main/java/com/mi/config/database/DataSourceContextHolder.java: -------------------------------------------------------------------------------- 1 | package com.mi.config.aspect.database; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | 5 | /** 6 | * 本地线程全局变量(控制读写分离) 7 | * @author yesh 8 | * (M.M)! 9 | * Created by 2017/6/16. 10 | */ 11 | @Slf4j 12 | public class DataSourceContextHolder { 13 | 14 | private static final ThreadLocal local = new ThreadLocal(); 15 | 16 | public static ThreadLocal getLocal() { 17 | return local; 18 | } 19 | 20 | /** 21 | * Read Maybe More Database 22 | */ 23 | public static void read() { 24 | local.set(DataSourceType.read.getType()); 25 | } 26 | 27 | /** 28 | * Write Only One DataBase 29 | */ 30 | public static void write() { 31 | local.set(DataSourceType.write.getType()); 32 | } 33 | 34 | public static String getJdbcType() { 35 | return local.get(); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /mi-admin/mi-platform-center/src/main/java/com/mi/config/database/DataSourceTransactionManager.java: -------------------------------------------------------------------------------- 1 | package com.mi.config.aspect.database; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | import org.springframework.context.annotation.Bean; 5 | import org.springframework.context.annotation.Configuration; 6 | import org.springframework.transaction.annotation.EnableTransactionManagement; 7 | 8 | import javax.annotation.Resource; 9 | import javax.sql.DataSource; 10 | 11 | /** 12 | * 自定义事务 13 | * @author yesh 14 | * (M.M)! 15 | * Created by 2017/6/16. 16 | */ 17 | @Slf4j 18 | @Configuration 19 | @EnableTransactionManagement 20 | public class DataSourceTransactionManager { 21 | /** 22 | * 自定义事务 23 | * MyBatis自动参与到spring事务管理中,无需额外配置,只要org.mybatis.spring.SqlSessionFactoryBean引用的数据源与DataSourceTransactionManager引用的数据源一致即可,否则事务管理会不起作用。 24 | * @return 25 | */ 26 | @Resource(name = "masterDataSource") 27 | private DataSource dataSource; 28 | 29 | @Bean(name = "transactionManager") 30 | public org.springframework.jdbc.datasource.DataSourceTransactionManager transactionManagers() { 31 | log.info("-------------------- Master DataSource TransactionManager init ---------------------"); 32 | return new org.springframework.jdbc.datasource.DataSourceTransactionManager(dataSource); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /mi-admin/mi-platform-center/src/main/java/com/mi/config/database/DataSourceType.java: -------------------------------------------------------------------------------- 1 | package com.mi.config.aspect.database; 2 | import lombok.Getter; 3 | 4 | /** 5 | * 读写分离数据枚举 6 | * @author yesh 7 | * (M.M)! 8 | * Created by 2017/6/16. 9 | */ 10 | public enum DataSourceType{ 11 | 12 | read("read", "从库"), 13 | write("write", "主库"); 14 | 15 | @Getter 16 | private String type; 17 | @Getter 18 | private String name; 19 | 20 | DataSourceType(String type, String name) { 21 | this.type = type; 22 | this.name = name; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /mi-admin/mi-platform-center/src/main/java/com/mi/config/database/MyAbstractRoutingDataSource.java: -------------------------------------------------------------------------------- 1 | package com.mi.config.aspect.database; 2 | 3 | import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; 4 | 5 | import java.util.concurrent.atomic.AtomicInteger; 6 | 7 | /** 8 | * 多数据源切换 9 | * @author yesh 10 | * (M.M)! 11 | * Created by 2017/6/16. 12 | */ 13 | public class MyAbstractRoutingDataSource extends AbstractRoutingDataSource { 14 | 15 | private final int dataSourceNumber; 16 | 17 | private AtomicInteger count = new AtomicInteger(0); 18 | 19 | public MyAbstractRoutingDataSource(int dataSourceNumber) { 20 | this.dataSourceNumber = dataSourceNumber; 21 | } 22 | 23 | @Override 24 | protected Object determineCurrentLookupKey() { 25 | String typeKey = DataSourceContextHolder.getJdbcType(); 26 | //配置MyBatis后 27 | //determineTargetDataSource中默认跑了determineCurrentLookupKey方法 28 | //若为空设置为主库(写) 29 | if (typeKey == null){ 30 | return DataSourceType.write.getType(); 31 | } 32 | else if (typeKey.equals(DataSourceType.write.getType())){ 33 | return DataSourceType.write.getType(); 34 | } 35 | 36 | // 不为则为分库(读) 简单负载均衡 37 | int number = count.getAndAdd(1); 38 | int lookupKey = number % dataSourceNumber; 39 | return new Integer(lookupKey); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /mi-admin/mi-platform-center/src/main/java/com/mi/config/druid/DruidStatFilter.java: -------------------------------------------------------------------------------- 1 | package com.mi.config.druid; 2 | 3 | import javax.servlet.annotation.WebFilter; 4 | import javax.servlet.annotation.WebInitParam; 5 | 6 | import com.alibaba.druid.support.http.WebStatFilter; 7 | 8 | /** 9 | * 数据库监控过滤器 10 | * @author yesh 11 | * (M.M)! 12 | * Created by 2017/6/16. 13 | */ 14 | @WebFilter(filterName = "druidWebStatFilter", urlPatterns = "/*", 15 | initParams = { 16 | @WebInitParam(name = "exclusions", value = "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*")// 忽略资源 17 | } 18 | ) 19 | public class DruidStatFilter extends WebStatFilter { 20 | 21 | } 22 | -------------------------------------------------------------------------------- /mi-admin/mi-platform-center/src/main/java/com/mi/config/druid/DruidStatViewServlet.java: -------------------------------------------------------------------------------- 1 | package com.mi.config.druid; 2 | 3 | import javax.servlet.annotation.WebInitParam; 4 | import javax.servlet.annotation.WebServlet; 5 | 6 | import com.alibaba.druid.support.http.StatViewServlet; 7 | 8 | /** 9 | * 数据监控视图配置 10 | * @author yesh 11 | * (M.M)! 12 | * Created by 2017/6/16. 13 | */ 14 | @WebServlet(urlPatterns="/druid/*", 15 | 16 | initParams={ 17 | //@WebInitParam(name="allow",value="10.70.8.240,127.0.0.1"),// IP白名单(没有配置或者为空,则允许所有访问) 18 | // @WebInitParam(name="deny",value="192.168.1.73"),// IP黑名单 (存在共同时,deny优先于allow) 19 | // @WebInitParam(name="loginUsername",value="admin"),// 用户名 20 | // @WebInitParam(name="loginPassword",value="123456"),// 密码 21 | @WebInitParam(name="resetEnable",value="false")// 禁用HTML页面上的“Reset All”功能 22 | } 23 | ) 24 | public class DruidStatViewServlet extends StatViewServlet{ 25 | 26 | private static final long serialVersionUID = 1476501110303564392L; 27 | 28 | } 29 | -------------------------------------------------------------------------------- /mi-admin/mi-platform-center/src/main/java/com/mi/module/common/controller/RedisController.java: -------------------------------------------------------------------------------- 1 | package com.mi.module.common.controller; 2 | 3 | import com.mi.common.annotation.Dev; 4 | import com.mi.config.redis.RedisUtil; 5 | import io.swagger.annotations.Api; 6 | import io.swagger.annotations.ApiImplicitParam; 7 | import io.swagger.annotations.ApiOperation; 8 | import org.springframework.web.bind.annotation.RequestMapping; 9 | import org.springframework.web.bind.annotation.RequestMethod; 10 | import org.springframework.web.bind.annotation.RequestParam; 11 | import org.springframework.web.bind.annotation.RestController; 12 | 13 | 14 | /** 15 | * Redis 控制器 16 | * 17 | * @author yesh 18 | * (M.M)! 19 | * Created by 2017-06-28. 20 | */ 21 | @Api(description = "Redis 测试 控制器") 22 | @Dev 23 | @RestController 24 | @RequestMapping("/redis") 25 | public class RedisController { 26 | 27 | 28 | @ApiOperation(value = "接口简介",notes = "接口详细描述") 29 | @ApiImplicitParam(name = "name",required = true,paramType = "query" ,dataType = "String") 30 | @RequestMapping(value = "/test",method = RequestMethod.GET) 31 | public String test(@RequestParam(value = "name",required = false) String name) { 32 | RedisUtil.set("name:",name); 33 | return RedisUtil.get("name:").toString(); 34 | } 35 | 36 | 37 | } 38 | -------------------------------------------------------------------------------- /mi-admin/mi-platform-center/src/main/java/com/mi/module/system/mapper/MiSysLogMapper.java: -------------------------------------------------------------------------------- 1 | package com.mi.module.system.mapper; 2 | 3 | import com.mi.module.system.entity.MiSysLog; 4 | import com.baomidou.mybatisplus.mapper.BaseMapper; 5 | 6 | /** 7 | * 8 | * 操作日志; InnoDB free: 4096 kB Mapper 接口 9 | * 10 | * @author yesh 11 | * (M.M)! 12 | * Created by 2017-06-28. 13 | */ 14 | public interface MiSysLogMapper extends BaseMapper { 15 | 16 | } -------------------------------------------------------------------------------- /mi-admin/mi-platform-center/src/main/java/com/mi/module/system/mapper/impl/MiSysLogMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /mi-admin/mi-platform-center/src/main/java/com/mi/module/system/service/IMiSysLogService.java: -------------------------------------------------------------------------------- 1 | package com.mi.module.system.service; 2 | 3 | import com.mi.module.system.entity.MiSysLog; 4 | import com.baomidou.mybatisplus.service.IService; 5 | 6 | /** 7 | * 8 | * 操作日志; InnoDB free: 4096 kB 服务接口 9 | * 10 | * @author yesh 11 | * (M.M)! 12 | * Created by 2017-06-28. 13 | */ 14 | public interface IMiSysLogService extends IService { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /mi-admin/mi-platform-center/src/main/java/com/mi/module/system/service/impl/MiSysLogServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.mi.module.system.service.impl; 2 | 3 | import com.mi.module.system.entity.MiSysLog; 4 | import com.mi.module.system.mapper.MiSysLogMapper; 5 | import com.mi.module.system.service.IMiSysLogService; 6 | import com.baomidou.mybatisplus.service.impl.ServiceImpl; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | * 11 | * 操作日志; InnoDB free: 4096 kB 服务实现类 12 | * 13 | * @author yesh 14 | * (M.M)! 15 | * Created by 2017-06-28. 16 | */ 17 | @Service 18 | public class MiSysLogServiceImpl extends ServiceImpl implements IMiSysLogService { 19 | 20 | } 21 | -------------------------------------------------------------------------------- /mi-admin/mi-platform-center/src/main/resources/application.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-admin/mi-platform-center/src/main/resources/application.properties -------------------------------------------------------------------------------- /mi-admin/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 4.0.0 5 | 6 | com.mi 7 | mi-admin 8 | 1.0 9 | jar 10 | mi-admin 11 | Admin Modules 12 | 13 | 14 | -------------------------------------------------------------------------------- /mi-api/README.md: -------------------------------------------------------------------------------- 1 | [![License](https://img.shields.io/badge/license-MIT-blue.svg)](http://blog.csdn.net/fjnpysh) 2 | 3 | # MI - API 模块 4 | 5 | ## 技术要点 6 | 7 | - **`Eureka Netflix`** 云端服务发现,一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移 8 | 9 | - **`Hystrix Netflix`** 熔断器,容错管理工具,通过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力 10 | 11 | ### V1.0 releases 12 | 13 | - 摘录要点 14 | 15 | - `完成服务注册中心可集群配置化、高可用性` 16 | 17 | - `完成消费者双模式消费` `(常用:Ribbon模式)` 18 | 19 | 20 | - 注意事项 21 | 22 | - 若远程调用服务,可能因为hostname名称识别不了。Win系统下# Windx C:\Windows\System32\drivers\etc 设置 指定好对应的hostname即可 23 | 24 | 25 | ### 主要模块: 26 | 27 | - 注册中心的服务与发现 Eureka server; 28 | 29 | - ` √ mi-eureka-server`(注册中心一) 30 | 31 | - ` √ mi-eureka-server-bak`(注册中心二) 32 | 33 | - 服务注册与消费 Eureka Client 34 | 35 | - ` √ mi-eureka-client` (服务提供者一) 36 | 37 | - ` √ mi-eureka-client-api` (服务提供者二) 38 | 39 | - ` √ mi-eureka-consumer` (服务消费者 双模式案例 Feign Ribbon) 40 | 41 | - 更新 `README.md` 等相关文档和示例; 42 | -------------------------------------------------------------------------------- /mi-api/mi-eureka-client-api/src/main/java/com/mi/MiEurekaClientApiApplication.java: -------------------------------------------------------------------------------- 1 | package com.mi; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | import org.springframework.web.bind.annotation.RestController; 7 | 8 | @SpringBootApplication 9 | @EnableDiscoveryClient 10 | public class MiEurekaClientApiApplication { 11 | 12 | public static void main(String[] args) { 13 | SpringApplication.run(MiEurekaClientApiApplication.class, args); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /mi-api/mi-eureka-client-api/src/main/java/com/mi/controller/ApiController.java: -------------------------------------------------------------------------------- 1 | package com.mi.controller; 2 | 3 | import org.apache.log4j.Logger; 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | import org.springframework.cloud.client.ServiceInstance; 6 | import org.springframework.cloud.client.discovery.DiscoveryClient; 7 | import org.springframework.web.bind.annotation.RequestMapping; 8 | import org.springframework.web.bind.annotation.RequestParam; 9 | import org.springframework.web.bind.annotation.RestController; 10 | 11 | /** 12 | * API服务提供控制器 13 | * @author yesh 14 | * (M.M)! 15 | * Created by 2017/5/2. 16 | */ 17 | @RestController 18 | public class ApiController { 19 | 20 | private final Logger log = Logger.getLogger(ApiController.class); 21 | 22 | private final DiscoveryClient discoveryClient; 23 | 24 | @Autowired 25 | public ApiController(DiscoveryClient discoveryClient) { 26 | this.discoveryClient = discoveryClient; 27 | } 28 | 29 | @RequestMapping("/hi") 30 | public String hello(@RequestParam String name){ 31 | System.err.println("-----------------------------"); 32 | //监听指定的服务提供者 33 | ServiceInstance instance = discoveryClient.getInstances("mi-eureka-client").get(0); 34 | 35 | log.info("Method:---->"+this.getClass().getSimpleName()+"---->Hello"); 36 | log.info("Url:---->"+instance.getUri()); 37 | log.info("Host:---->"+instance.getHost()); 38 | log.info("Port:---->"+instance.getPort()); 39 | 40 | return "Hello Api "+name + " ,i here in port :" +instance.getPort(); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /mi-api/mi-eureka-client-api/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 1002 3 | spring: 4 | application: 5 | name: mi-eureka-client 6 | eureka: 7 | client: 8 | serviceUrl: 9 | defaultZone: http://mione:1000/eureka/ #,http://mitwo:2000/eureka/ 10 | -------------------------------------------------------------------------------- /mi-api/mi-eureka-client/src/main/java/com/mi/MiEurekaClientApplication.java: -------------------------------------------------------------------------------- 1 | package com.mi; 2 | 3 | import com.didispace.swagger.EnableSwagger2Doc; 4 | import org.springframework.boot.SpringApplication; 5 | import org.springframework.boot.autoconfigure.SpringBootApplication; 6 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 7 | 8 | 9 | @SpringBootApplication 10 | @EnableDiscoveryClient 11 | @EnableSwagger2Doc //启动配置 DD 自制Swagger2 12 | public class MiEurekaClientApplication { 13 | 14 | public static void main(String[] args) { 15 | SpringApplication.run(MiEurekaClientApplication.class, args); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /mi-api/mi-eureka-client/src/main/java/com/mi/common/CORSConfiguration.java: -------------------------------------------------------------------------------- 1 | //package com.mi.common; 2 | // 3 | //import org.springframework.context.annotation.Bean; 4 | //import org.springframework.context.annotation.Configuration; 5 | //import org.springframework.stereotype.Component; 6 | //import org.springframework.web.cors.CorsConfiguration; 7 | //import org.springframework.web.cors.UrlBasedCorsConfigurationSource; 8 | //import org.springframework.web.filter.CorsFilter; 9 | // 10 | ///** 11 | // * 跨域过滤器 12 | // * @author yesh 13 | // * (M.M)! 14 | // * Created by 2017/9/14. 15 | // */ 16 | //@Configuration 17 | //@Component 18 | //public class CORSConfiguration{ 19 | // 20 | // private CorsConfiguration buildConfig() { 21 | // CorsConfiguration corsConfiguration = new CorsConfiguration(); 22 | // corsConfiguration.addAllowedOrigin("*"); // 1 23 | // corsConfiguration.addAllowedHeader("*"); // 2 24 | // corsConfiguration.addAllowedMethod("*"); // 3 25 | // return corsConfiguration; 26 | // } 27 | // @Bean 28 | // public CorsFilter corsFilter() { 29 | // UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); 30 | // source.registerCorsConfiguration("/**", buildConfig()); // 4 31 | // return new CorsFilter(source); 32 | // } 33 | // 34 | //} 35 | // 36 | -------------------------------------------------------------------------------- /mi-api/mi-eureka-client/src/main/java/com/mi/common/CorsFilter.java: -------------------------------------------------------------------------------- 1 | //package com.mi.common; 2 | // 3 | //import org.springframework.stereotype.Component; 4 | // 5 | //import javax.servlet.*; 6 | //import javax.servlet.http.HttpServletRequest; 7 | //import javax.servlet.http.HttpServletResponse; 8 | //import java.io.IOException; 9 | // 10 | ///** 11 | // * 跨域过滤器 12 | // * @author yesh 13 | // * (M.M)! 14 | // * Created by 2017/9/14. 15 | // */ 16 | //@Component 17 | //public class CorsFilter implements Filter { 18 | // @Override 19 | // public void init(FilterConfig filterConfig) throws ServletException { 20 | // 21 | // } 22 | // 23 | // @Override 24 | // public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { 25 | // HttpServletResponse response = (HttpServletResponse) res; 26 | // HttpServletRequest reqs = (HttpServletRequest) req; 27 | // response.setHeader("Access-Control-Allow-Origin","*"); 28 | // response.setHeader("Access-Control-Allow-Credentials", "true"); 29 | // response.setHeader("Access-Control-Allow-Methods", "*"); 30 | // response.setHeader("Access-Control-Max-Age", "3600"); 31 | // response.setHeader("Access-Control-Allow-Headers", "*"); 32 | // chain.doFilter(req, res); 33 | // } 34 | // 35 | // @Override 36 | // public void destroy() { 37 | // 38 | // } 39 | //} 40 | -------------------------------------------------------------------------------- /mi-api/mi-eureka-client/src/main/java/com/mi/common/ServiceMoitor.java: -------------------------------------------------------------------------------- 1 | //package com.mi.common; 2 | // 3 | //import org.aspectj.lang.annotation.Aspect; 4 | // 5 | //import org.springframework.stereotype.Component; 6 | // 7 | ///** 8 | // * gague和counter的定制 监控 9 | // * @author yesh 10 | // * (M.M)! 11 | // * Created by 2017/5/10. 12 | // */ 13 | //@Aspect 14 | //@Component 15 | //public class ServiceMoitor { 16 | // 17 | //// @Autowired 18 | //// private GaugeService gaugeService; 19 | //// 20 | //// @Autowired 21 | //// private CounterService counterService; 22 | // 23 | //// @Before(value = "execution(* com.mi.controller.*.*(..))") 24 | //// public void countServiceInvoke(JoinPoint joinPoint) { 25 | ////// counterService.increment(joinPoint.getSignature().toString()); 26 | ////// System.err.println("监控咯"+joinPoint.getSignature()); 27 | //// } 28 | //// 29 | //// @Around(value = "execution(* com.mi.controller.*.*(..))") 30 | //// public void latencyService(ProceedingJoinPoint pjp) throws Throwable { 31 | ////// long start = System.currentTimeMillis(); 32 | //////// pjp.proceed(); 33 | //////// Thread.sleep(2000); 34 | ////// long end = System.currentTimeMillis(); 35 | ////// System.err.println("延迟多久:"+(end-start)); 36 | ////// gaugeService.submit(pjp.getSignature().toString(), end - start); 37 | //// } 38 | // 39 | //} 40 | -------------------------------------------------------------------------------- /mi-api/mi-eureka-client/src/main/java/com/mi/controller/ClientController.java: -------------------------------------------------------------------------------- 1 | package com.mi.controller; 2 | 3 | import org.apache.log4j.Logger; 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | import org.springframework.cloud.client.ServiceInstance; 6 | import org.springframework.cloud.client.discovery.DiscoveryClient; 7 | import org.springframework.stereotype.Controller; 8 | import org.springframework.web.bind.annotation.*; 9 | 10 | /** 11 | * 服务提供控制器 12 | * @author yesh 13 | * (M.M)! 14 | * Created by 2017/5/2. 15 | */ 16 | @Controller 17 | public class ClientController { 18 | 19 | private final Logger log = Logger.getLogger(ClientController.class); 20 | 21 | private final DiscoveryClient discoveryClient; 22 | 23 | @Autowired 24 | public ClientController(DiscoveryClient discoveryClient) { 25 | this.discoveryClient = discoveryClient; 26 | } 27 | 28 | @ResponseBody 29 | @RequestMapping(value = "/hi", method = RequestMethod.GET) 30 | public String hello1(@RequestParam String name){ 31 | System.err.println("-----------------------------"); 32 | ServiceInstance instance = discoveryClient.getInstances("mi-eureka-client").get(0); 33 | 34 | log.info("Method:---->"+this.getClass().getSimpleName()+"---->Hello"); 35 | log.info("Url:---->"+instance.getUri()); 36 | log.info("Host:---->"+instance.getHost()); 37 | log.info("Port:---->"+instance.getPort()); 38 | 39 | return "Hello !! "+name + " ,I here in port "+instance.getPort(); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /mi-api/mi-eureka-client/src/main/java/com/mi/controller/SwaggerController.java: -------------------------------------------------------------------------------- 1 | package com.mi.controller; 2 | 3 | import io.swagger.annotations.*; 4 | import org.apache.log4j.Logger; 5 | import org.springframework.web.bind.annotation.*; 6 | 7 | /** 8 | * Swagger 控制器案例模版 9 | * @author yesh 10 | * (M.M)! 11 | * Created by 2017/5/7. 12 | */ 13 | @Api(description = "Swagger模版控制器") 14 | @RestController 15 | @RequestMapping("/swagger") 16 | public class SwaggerController { 17 | private static final Logger log = Logger.getLogger(SwaggerController.class); 18 | 19 | @ApiOperation(value = "Swagger2案例接口(Get)", notes = "接口案例详细描述") 20 | @ApiImplicitParam(name = "name",required = true,paramType = "query" ,dataType = "String") 21 | @RequestMapping(value = "hello" ,method = RequestMethod.GET) 22 | public String hello(@RequestParam(value = "name",required = false) String name){ 23 | log.info("Hello Swagger : my name is" + name); 24 | return "Hello Swagger : my name is "+ name; 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /mi-api/mi-eureka-client/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | profiles: 3 | active: dev 4 | -------------------------------------------------------------------------------- /mi-api/mi-eureka-client/src/main/resources/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /mi-api/mi-eureka-consumer/src/main/java/com/mi/MiEurekaConsumerApplication.java: -------------------------------------------------------------------------------- 1 | package com.mi; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker; 6 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 7 | import org.springframework.cloud.netflix.eureka.EnableEurekaClient; 8 | import org.springframework.cloud.netflix.feign.EnableFeignClients; 9 | import org.springframework.context.annotation.ComponentScan; 10 | 11 | 12 | @SpringBootApplication 13 | @ComponentScan 14 | @EnableDiscoveryClient 15 | @EnableFeignClients 16 | @EnableEurekaClient 17 | @EnableCircuitBreaker //路由注解开启 18 | public class MiEurekaConsumerApplication { 19 | 20 | public static void main(String[] args) { 21 | SpringApplication.run(MiEurekaConsumerApplication.class, args); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /mi-api/mi-eureka-consumer/src/main/java/com/mi/feign/FeignController.java: -------------------------------------------------------------------------------- 1 | package com.mi.feign; 2 | 3 | import com.mi.service.FeignService; 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | import org.springframework.beans.factory.annotation.Qualifier; 6 | import org.springframework.web.bind.annotation.RequestMapping; 7 | import org.springframework.web.bind.annotation.RequestMethod; 8 | import org.springframework.web.bind.annotation.RequestParam; 9 | import org.springframework.web.bind.annotation.RestController; 10 | 11 | /** 12 | * Feign消费模式 13 | * @author yesh 14 | * (M.M)! 15 | * Created by 2017/5/2. 16 | */ 17 | @RestController 18 | public class FeignController { 19 | 20 | 21 | @Autowired 22 | private FeignService feignService; 23 | 24 | @RequestMapping(value = "/hi", method = RequestMethod.GET) 25 | public String hello(@RequestParam String name){ 26 | return feignService.Hello(name); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /mi-api/mi-eureka-consumer/src/main/java/com/mi/ribbon/RibbonController.java: -------------------------------------------------------------------------------- 1 | package com.mi.ribbon; 2 | 3 | import com.mi.service.impl.RibbonServiceImpl; 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | import org.springframework.web.bind.annotation.RequestMapping; 6 | import org.springframework.web.bind.annotation.RequestMethod; 7 | import org.springframework.web.bind.annotation.RestController; 8 | import org.springframework.web.client.RestTemplate; 9 | 10 | /** 11 | * Ribbon消费模式 12 | * @author yesh 13 | * (M.M)! 14 | * Created by 2017/5/2. 15 | */ 16 | @RestController 17 | public class RibbonController { 18 | 19 | @Autowired 20 | private RestTemplate restTemplate; 21 | 22 | @Autowired 23 | private RibbonServiceImpl ribbonServiceImpl; 24 | 25 | @RequestMapping(value = "/helloR",method = RequestMethod.GET) 26 | public String hello(){ 27 | return restTemplate.getForEntity("http://MI-EUREKA-CLIENT/hi?name=Ribbon", String.class).getBody(); 28 | } 29 | 30 | @RequestMapping(value = "/helloH",method = RequestMethod.GET) 31 | public String helloHi(){ 32 | return ribbonServiceImpl.helloToYou(); 33 | } 34 | 35 | 36 | } 37 | -------------------------------------------------------------------------------- /mi-api/mi-eureka-consumer/src/main/java/com/mi/service/FeignService.java: -------------------------------------------------------------------------------- 1 | package com.mi.service; 2 | 3 | import org.springframework.cloud.netflix.feign.FeignClient; 4 | import org.springframework.web.bind.annotation.RequestMapping; 5 | import org.springframework.web.bind.annotation.RequestMethod; 6 | import org.springframework.web.bind.annotation.RequestParam; 7 | 8 | /** 9 | * Feign调用接口 10 | * @author yesh 11 | * (M.M)! 12 | * Created by 2017/5/2. 13 | */ 14 | @FeignClient(name = "mi-eureka-client" , fallback = HystrixClientFallback.class) 15 | public interface FeignService { 16 | 17 | @RequestMapping(value = "/hi", method = RequestMethod.GET) 18 | String Hello(@RequestParam(value = "name") String name); 19 | 20 | } 21 | 22 | class HystrixClientFallback implements FeignService { 23 | @Override 24 | public String Hello(String name) { 25 | return "error"; 26 | } 27 | } 28 | 29 | 30 | -------------------------------------------------------------------------------- /mi-api/mi-eureka-consumer/src/main/java/com/mi/service/impl/RibbonServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.mi.service.impl; 2 | 3 | import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | import org.springframework.stereotype.Service; 6 | import org.springframework.web.client.RestTemplate; 7 | 8 | /** 9 | * Ribbon接口实现类 10 | * @author yesh 11 | * (M.M)! 12 | * Created by 2017/5/3. 13 | */ 14 | @Service 15 | public class RibbonServiceImpl { 16 | 17 | @Autowired 18 | RestTemplate restTemplate; 19 | 20 | @HystrixCommand(fallbackMethod = "helloError") 21 | public String helloToYou(){ 22 | return restTemplate.getForEntity("http://MI-EUREKA-CLIENT/hi?name=RibbonHystrix",String .class).getBody(); 23 | } 24 | 25 | public String helloError(){ 26 | return "I am not here Ribbon --> Error"; 27 | } 28 | 29 | 30 | } 31 | -------------------------------------------------------------------------------- /mi-api/mi-eureka-consumer/src/main/resources/application-dev.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 2002 3 | ip: 127.0.0.1 4 | spring: 5 | application: 6 | name: MI-EUREKA-CONSUMER 7 | boot: 8 | admin: 9 | url: http://${server.ip}:1000 # 应用服务监控 10 | 11 | eureka: 12 | client: 13 | serviceUrl: 14 | defaultZone: http://${server.ip}:2000/eureka/ #,http://mitwo:2000/eureka/ 15 | 16 | # 消费者中心 Map 17 | info: 18 | artifact : mi-eureka-consumer 19 | name: ${spring.application.name} 20 | description: 消费服务中心 21 | version : V1.0 22 | 23 | 24 | # 注意事项:若远程调用服务,可能因为hostname名称识别不了。Win系统下# Windx C:\Windows\System32\drivers\etc 设置 指定好对应的hostname即可 -------------------------------------------------------------------------------- /mi-api/mi-eureka-consumer/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | profiles: 3 | active: dev -------------------------------------------------------------------------------- /mi-api/mi-eureka-consumer/src/main/resources/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /mi-api/mi-eureka-server-bak/src/main/java/com/mi/MiEurekaServerBakApplication.java: -------------------------------------------------------------------------------- 1 | package com.mi; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.boot.builder.SpringApplicationBuilder; 6 | import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; 7 | 8 | @EnableEurekaServer 9 | @SpringBootApplication 10 | public class MiEurekaServerBakApplication { 11 | 12 | public static void main(String[] args) { 13 | new SpringApplicationBuilder(MiEurekaServerBakApplication.class).web(true).run(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /mi-api/mi-eureka-server-bak/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 2000 3 | spring: 4 | application: 5 | name: mi-eureka-server 6 | 7 | eureka: 8 | instance: 9 | hostname: mitwo # Windx C:\Windows\System32\drivers\etc 设置 10 | client: 11 | #若取消集群注册中心配置 registerWithEureka fetchRegistry defaultZone 值修改 12 | registerWithEureka: true 13 | fetchRegistry: true 14 | serviceUrl: 15 | defaultZone: http://mione:1000 16 | server: 17 | enable-self-preservation: true 18 | renewalPercentThreshold: 0 #设置更新率阈值 19 | eviction-interval-timer-in-ms: 20000 #毫秒 有关注册服务调用 20 | 21 | 22 | -------------------------------------------------------------------------------- /mi-api/mi-eureka-server/src/main/java/com/mi/MiEurekaServerApplication.java: -------------------------------------------------------------------------------- 1 | package com.mi; 2 | 3 | //import org.springframework.boot.SpringApplication; 4 | //import org.springframework.boot.autoconfigure.EnableAutoConfiguration; 5 | //import org.springframework.boot.autoconfigure.SpringBootApplication; 6 | //import org.springframework.boot.builder.SpringApplicationBuilder; 7 | //import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 8 | //import org.springframework.cloud.netflix.eureka.EnableEurekaClient; 9 | //import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; 10 | //import org.springframework.context.annotation.Configuration; 11 | 12 | import org.springframework.boot.SpringApplication; 13 | import org.springframework.boot.autoconfigure.SpringBootApplication; 14 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 15 | import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; 16 | import org.springframework.context.annotation.Configuration; 17 | 18 | @Configuration 19 | @EnableEurekaServer 20 | @SpringBootApplication 21 | public class MiEurekaServerApplication { 22 | 23 | public static void main(String[] args) { 24 | SpringApplication.run(MiEurekaServerApplication.class, args); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /mi-api/mi-eureka-server/src/main/resources/application-dev.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 2000 3 | ip: 127.0.0.1 4 | spring: 5 | application: 6 | name: MI-EUREKA-SERVER 7 | boot: 8 | admin: 9 | url: http://${server.ip}:1000 #应用服务监控 10 | eureka: 11 | instance: 12 | hostname: ${server.ip} # Windx C:\Windows\System32\drivers\etc 设置 13 | 14 | #若取消集群注册中心配置 registerWithEureka fetchRegistry defaultZone 值修改 true 15 | client: 16 | register-with-eureka: false 17 | fetch-registry: false 18 | serviceUrl: 19 | defaultZone: http://${server.ip}:2000/eureka/ 20 | 21 | server: 22 | enable-self-preservation: true 23 | renewalPercentThreshold: 0.7 #设置更新率阈值 24 | eviction-interval-timer-in-ms: 20000 #毫秒 有关注册服务调用 25 | 26 | #开启shutdown的安全验证 27 | endpoints: 28 | health: 29 | sensitive: true 30 | shutdown: 31 | enabled: true #启用shutdown 32 | sensitive: false #禁用密码验证 33 | path: /stop/sc_eureka #最好不要暴露出去 34 | 35 | 36 | # 注册服务中心显式内容Map 37 | info: 38 | artifact : mi-eureka-server 39 | name: ${spring.application.name} 40 | description: 注册服务中心 41 | version : V1.0 42 | 43 | -------------------------------------------------------------------------------- /mi-api/mi-eureka-server/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | profiles: 3 | active: dev -------------------------------------------------------------------------------- /mi-api/mi-eureka-server/src/main/resources/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /mi-api/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 4.0.0 5 | 6 | com.mi 7 | mi-api 8 | 1.0 9 | pom 10 | 11 | mi-api 12 | About Api 13 | 14 | 15 | -------------------------------------------------------------------------------- /mi-blog/README.md: -------------------------------------------------------------------------------- 1 | 2 | # MI - BLOG 模块 3 | 4 | [![License](https://img.shields.io/badge/license-MIT-blue.svg)](http://blog.csdn.net/fjnpysh) 5 | 6 | 7 | ## MI-博客模块 8 | 9 | 10 | 11 | ## 运行环境 12 | - JDK 1.8 13 | - Maven 14 | - MySQL 5.0↑ 15 | 16 | ## 技术掌握 17 | 18 | - Spring 19 | - Spring Security 20 | - Spring Boot 21 | - Mybatis-plus 22 | - Bootstrap 23 | - Thymeleaf 24 | - Editor.md 25 | - jqPaginator 26 | 27 | ### V1.0 releases 28 | 29 | 发布 V1.0 测试版。 30 | 31 | ## License 32 | 33 | The mi-blog is released under version 2.0 of the [Apache License](http://www.apache.org/licenses/LICENSE-2.0). 34 | 35 | 36 | - 基础版本(因为开源的博客系统太多,可选择性部署。也可以自己编写) 37 | 38 | - 更新 `README.md` 等相关文档和示例; 39 | -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/MiBlogApplication.java: -------------------------------------------------------------------------------- 1 | package com.mi; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration; 6 | import org.springframework.boot.context.properties.EnableConfigurationProperties; 7 | import org.springframework.transaction.annotation.EnableTransactionManagement; 8 | 9 | 10 | @SpringBootApplication 11 | @EnableConfigurationProperties 12 | public class MiBlogApplication { 13 | 14 | public static void main(String[] args) { 15 | SpringApplication.run(MiBlogApplication.class, args); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/config/database/DataSourceAop.java: -------------------------------------------------------------------------------- 1 | //package com.mi.config.database; 2 | // 3 | //import lombok.extern.slf4j.Slf4j; 4 | //import org.aspectj.lang.annotation.Aspect; 5 | //import org.aspectj.lang.annotation.Before; 6 | //import org.springframework.stereotype.Component; 7 | // 8 | ///** 9 | // * 数据源切换AOP 10 | // * @author yesh 11 | // * (M.M)! 12 | // * Created by 2017/6/16. 13 | // */ 14 | //@Slf4j 15 | //@Aspect 16 | //@Component 17 | //public class DataSourceAop { 18 | // 19 | // @Before("execution(* com.mi.module.*.mapper..*.load*(..)) || execution(* com.mi.module.*.mapper..*.select*(..)) || execution(* com.mi.module.*.mapper..*.find*(..)) || execution(* com.mi.module.*.mapper..*.get*(..))") 20 | // public void setReadDataSourceType() { 21 | // DataSourceContextHolder.read(); 22 | // log.info("dataSource切换到:Read"); 23 | // } 24 | // 25 | // @Before("execution(* com.mi.module.*.mapper..*.insert*(..)) || execution(* com.mi.module.*.mapper..*.update*(..)) || execution(* com.mi.module.*.mapper..*.save*(..)) ") 26 | // public void setWriteDataSourceType() { 27 | // DataSourceContextHolder.write(); 28 | // log.info("dataSource切换到:write"); 29 | // } 30 | //} 31 | -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/config/database/DataSourceContextHolder.java: -------------------------------------------------------------------------------- 1 | //package com.mi.config.database; 2 | // 3 | //import lombok.extern.slf4j.Slf4j; 4 | // 5 | ///** 6 | // * 本地线程全局变量(控制读写分离) 7 | // * @author yesh 8 | // * (M.M)! 9 | // * Created by 2017/6/16. 10 | // */ 11 | //@Slf4j 12 | //public class DataSourceContextHolder { 13 | // 14 | // private static final ThreadLocal local = new ThreadLocal(); 15 | // 16 | // public static ThreadLocal getLocal() { 17 | // return local; 18 | // } 19 | // 20 | // /** 21 | // * Read Maybe More Database 22 | // */ 23 | // public static void read() { 24 | // local.set(DataSourceType.read.getType()); 25 | // } 26 | // 27 | // /** 28 | // * Write Only One DataBase 29 | // */ 30 | // public static void write() { 31 | // local.set(DataSourceType.write.getType()); 32 | // } 33 | // 34 | // public static String getJdbcType() { 35 | // return local.get(); 36 | // } 37 | //} 38 | -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/config/database/DataSourceType.java: -------------------------------------------------------------------------------- 1 | //package com.mi.config.database; 2 | //import lombok.Getter; 3 | // 4 | ///** 5 | // * 读写分离数据枚举 6 | // * @author yesh 7 | // * (M.M)! 8 | // * Created by 2017/6/16. 9 | // */ 10 | //public enum DataSourceType{ 11 | // 12 | // read("read", "从库"), 13 | // write("write", "主库"); 14 | // 15 | // @Getter 16 | // private String type; 17 | // @Getter 18 | // private String name; 19 | // 20 | // DataSourceType(String type, String name) { 21 | // this.type = type; 22 | // this.name = name; 23 | // } 24 | //} 25 | -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/config/database/MyAbstractRoutingDataSource.java: -------------------------------------------------------------------------------- 1 | //package com.mi.config.database; 2 | // 3 | //import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; 4 | // 5 | //import java.util.concurrent.atomic.AtomicInteger; 6 | // 7 | ///** 8 | // * 多数据源切换 9 | // * @author yesh 10 | // * (M.M)! 11 | // * Created by 2017/6/16. 12 | // */ 13 | //public class MyAbstractRoutingDataSource extends AbstractRoutingDataSource { 14 | // 15 | // private final int dataSourceNumber; 16 | // 17 | // private AtomicInteger count = new AtomicInteger(0); 18 | // 19 | // public MyAbstractRoutingDataSource(int dataSourceNumber) { 20 | // this.dataSourceNumber = dataSourceNumber; 21 | // } 22 | // 23 | // @Override 24 | // protected Object determineCurrentLookupKey() { 25 | // String typeKey = DataSourceContextHolder.getJdbcType(); 26 | // //配置MyBatis后 27 | // //determineTargetDataSource中默认跑了determineCurrentLookupKey方法 28 | // //若为空设置为主库(写) 29 | // if (typeKey == null){ 30 | // return DataSourceType.write.getType(); 31 | // } 32 | // else if (typeKey.equals(DataSourceType.write.getType())){ 33 | // return DataSourceType.write.getType(); 34 | // } 35 | // 36 | // // 不为则为分库(读) 简单负载均衡 37 | // int number = count.getAndAdd(1); 38 | // int lookupKey = number % dataSourceNumber; 39 | // return new Integer(lookupKey); 40 | // } 41 | //} 42 | -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/config/druid/DruidStatFilter.java: -------------------------------------------------------------------------------- 1 | package com.mi.config.druid; 2 | 3 | import javax.servlet.annotation.WebFilter; 4 | import javax.servlet.annotation.WebInitParam; 5 | 6 | import com.alibaba.druid.support.http.WebStatFilter; 7 | 8 | /** 9 | * 数据库监控过滤器 10 | * @author yesh 11 | * (M.M)! 12 | * Created by 2017/6/16. 13 | */ 14 | @WebFilter(filterName = "druidWebStatFilter", urlPatterns = "/*", 15 | initParams = { 16 | @WebInitParam(name = "exclusions", value = "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*")// 忽略资源 17 | } 18 | ) 19 | public class DruidStatFilter extends WebStatFilter { 20 | 21 | } 22 | -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/config/druid/DruidStatViewServlet.java: -------------------------------------------------------------------------------- 1 | package com.mi.config.druid; 2 | 3 | import javax.servlet.annotation.WebInitParam; 4 | import javax.servlet.annotation.WebServlet; 5 | 6 | import com.alibaba.druid.support.http.StatViewServlet; 7 | 8 | /** 9 | * 数据监控视图配置 10 | * @author yesh 11 | * (M.M)! 12 | * Created by 2017/6/16. 13 | */ 14 | @WebServlet(urlPatterns="/druid/*", 15 | 16 | initParams={ 17 | //@WebInitParam(name="allow",value="10.70.8.240,127.0.0.1"),// IP白名单(没有配置或者为空,则允许所有访问) 18 | // @WebInitParam(name="deny",value="192.168.1.73"),// IP黑名单 (存在共同时,deny优先于allow) 19 | // @WebInitParam(name="loginUsername",value="admin"),// 用户名 20 | // @WebInitParam(name="loginPassword",value="123456"),// 密码 21 | @WebInitParam(name="resetEnable",value="false")// 禁用HTML页面上的“Reset All”功能 22 | } 23 | ) 24 | public class DruidStatViewServlet extends StatViewServlet{ 25 | 26 | private static final long serialVersionUID = 1476501110303564392L; 27 | 28 | } 29 | -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/data/dto/readme.txt: -------------------------------------------------------------------------------- 1 | 用于处理业务传输实体 -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/data/vo/ArticleVo.java: -------------------------------------------------------------------------------- 1 | package com.mi.data.vo; 2 | 3 | 4 | import com.baomidou.mybatisplus.annotations.TableId; 5 | import com.mi.module.blog.entity.Tag; 6 | import com.mi.module.blog.entity.Type; 7 | import lombok.Data; 8 | 9 | import java.io.Serializable; 10 | import java.util.Date; 11 | import java.util.List; 12 | 13 | /** 14 | * 自定义文章类 15 | * @author yesh 16 | * (M.M)! 17 | * Created by 2017/7/9. 18 | */ 19 | @Data 20 | public class ArticleVo implements Serializable { 21 | 22 | /** 23 | * 主键 24 | */ 25 | private String articleId; 26 | /** 27 | * 标题 28 | */ 29 | private String title; 30 | /** 31 | * 内容 32 | */ 33 | private String content; 34 | /** 35 | * 简介 36 | */ 37 | private String description; 38 | /** 39 | * 状态 0:正常 1:不可用 40 | */ 41 | private Integer status; 42 | /** 43 | * 状态 0:原创 1:装载 44 | */ 45 | private Integer classType; 46 | /** 47 | * 作者 48 | */ 49 | private String author; 50 | /** 51 | * 创建时间 52 | */ 53 | private Date createTime; 54 | /** 55 | * 修改时间 56 | */ 57 | private Date updateTime; 58 | /** 59 | * 访问量 60 | */ 61 | private Integer lookCount; 62 | 63 | private List typeList; //文章类别 64 | private List tagList; //标签列表 65 | 66 | 67 | } 68 | -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/data/vo/TagCloudVo.java: -------------------------------------------------------------------------------- 1 | package com.mi.data.vo; 2 | 3 | /** 4 | * 标签云定位 5 | * 6 | * @author yesh 7 | * (M.M)! 8 | * Created by 2017/9/6. 9 | */ 10 | public class TagCloudVo { 11 | 12 | private String tagId; 13 | private String tagName; // 表情名称 14 | private String position;//坐标 15 | 16 | public String getTagId() { 17 | return tagId; 18 | } 19 | 20 | public void setTagId(String tagId) { 21 | this.tagId = tagId; 22 | } 23 | 24 | public String getTagName() { 25 | return tagName; 26 | } 27 | 28 | public void setTagName(String tagName) { 29 | this.tagName = tagName; 30 | } 31 | 32 | public String getPosition() { 33 | return position; 34 | } 35 | 36 | public void setPosition(String position) { 37 | this.position = position; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/data/vo/TypeVo.java: -------------------------------------------------------------------------------- 1 | package com.mi.data.vo; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | /** 8 | * 类别视图 9 | * @author yesh 10 | * (M.M)! 11 | * Created by 2017/8/16. 12 | */ 13 | @Data 14 | public class TypeVo implements Serializable { 15 | private String typeId; 16 | private String typeName; //分类名 17 | private String aliasName;//分类别名 18 | private Integer articleCount;//此分类下文章的数量 19 | } 20 | -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/data/vo/readme.txt: -------------------------------------------------------------------------------- 1 | 视图传输实体 -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/module/blog/entity/ArticleTag.java: -------------------------------------------------------------------------------- 1 | package com.mi.module.blog.entity; 2 | 3 | import com.baomidou.mybatisplus.annotations.TableId; 4 | import com.baomidou.mybatisplus.annotations.TableField; 5 | import com.baomidou.mybatisplus.activerecord.Model; 6 | import com.baomidou.mybatisplus.annotations.TableName; 7 | import lombok.Data; 8 | 9 | import java.io.Serializable; 10 | 11 | /** 12 | * 13 | * 文章标签关联; InnoDB free: 11264 kB 实体 14 | * 15 | * @author yesh 16 | * (M.M)! 17 | * Created by 2017-07-09. 18 | */ 19 | @TableName("blog_article_tag") 20 | @Data 21 | public class ArticleTag extends Model { 22 | 23 | private static final long serialVersionUID = 1L; 24 | 25 | /** 26 | * 文章主键 27 | */ 28 | @TableId("article_id") 29 | private String articleId; 30 | /** 31 | * 标签主键 32 | */ 33 | @TableField("tag_id") 34 | private String tagId; 35 | 36 | 37 | 38 | @Override 39 | protected Serializable pkVal() { 40 | return this.articleId; 41 | } 42 | 43 | } 44 | -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/module/blog/entity/ArticleType.java: -------------------------------------------------------------------------------- 1 | package com.mi.module.blog.entity; 2 | 3 | import com.baomidou.mybatisplus.annotations.TableId; 4 | import com.baomidou.mybatisplus.annotations.TableField; 5 | import com.baomidou.mybatisplus.activerecord.Model; 6 | import com.baomidou.mybatisplus.annotations.TableName; 7 | import lombok.Data; 8 | 9 | import java.io.Serializable; 10 | 11 | /** 12 | * 13 | * 文章分类关联; InnoDB free: 11264 kB 实体 14 | * 15 | * @author yesh 16 | * (M.M)! 17 | * Created by 2017-07-09. 18 | */ 19 | @TableName("blog_article_type") 20 | @Data 21 | public class ArticleType extends Model { 22 | 23 | private static final long serialVersionUID = 1L; 24 | 25 | /** 26 | * 文章主键 27 | */ 28 | @TableId("article_id") 29 | private String articleId; 30 | /** 31 | * 标签主键 32 | */ 33 | @TableField("type_id") 34 | private String typeId; 35 | 36 | @Override 37 | protected Serializable pkVal() { 38 | return this.articleId; 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/module/blog/entity/Friendlink.java: -------------------------------------------------------------------------------- 1 | package com.mi.module.blog.entity; 2 | 3 | import java.util.Date; 4 | import com.baomidou.mybatisplus.annotations.TableId; 5 | import com.baomidou.mybatisplus.annotations.TableField; 6 | import com.baomidou.mybatisplus.activerecord.Model; 7 | import com.baomidou.mybatisplus.annotations.TableName; 8 | import lombok.Data; 9 | 10 | import java.io.Serializable; 11 | 12 | /** 13 | * 友情链接; InnoDB free: 11264 kB 实体 14 | * @author yesh 15 | * (M.M)! 16 | * Created by 2017-07-09. 17 | */ 18 | @TableName("blog_friendlink") 19 | @Data 20 | public class Friendlink extends Model { 21 | 22 | private static final long serialVersionUID = 1L; 23 | 24 | /** 25 | * 主键 26 | */ 27 | @TableId("flink_id") 28 | private String flinkId; 29 | /** 30 | * 站点名称 31 | */ 32 | @TableField("site_name") 33 | private String siteName; 34 | /** 35 | * 站点地址 36 | */ 37 | @TableField("site_url") 38 | private String siteUrl; 39 | /** 40 | * 站点作者 41 | */ 42 | @TableField("site_author") 43 | private String siteAuthor; 44 | /** 45 | * 站点描述 46 | */ 47 | @TableField("site_desc") 48 | private String siteDesc; 49 | /** 50 | * 排序 51 | */ 52 | private Integer sort; 53 | /** 54 | * 创建时间 55 | */ 56 | @TableField("create_time") 57 | private Date createTime; 58 | 59 | /** 60 | * 修改时间 61 | */ 62 | @TableField("update_time") 63 | private Date updateTime; 64 | 65 | 66 | @Override 67 | protected Serializable pkVal() { 68 | return null; 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/module/blog/mapper/ArticleMapper.java: -------------------------------------------------------------------------------- 1 | package com.mi.module.blog.mapper; 2 | 3 | import com.baomidou.mybatisplus.plugins.Page; 4 | import com.mi.data.vo.ArticleVo; 5 | import com.mi.data.vo.Pager; 6 | import com.mi.module.blog.entity.Article; 7 | import com.baomidou.mybatisplus.mapper.BaseMapper; 8 | import org.apache.ibatis.annotations.Param; 9 | 10 | import java.util.List; 11 | import java.util.Map; 12 | 13 | /** 14 | * 15 | * 文章; InnoDB free: 11264 kB Mapper 接口 16 | * 17 | * @author yesh 18 | * (M.M)! 19 | * Created by 2017-07-09. 20 | */ 21 | public interface ArticleMapper extends BaseMapper
{ 22 | 23 | List selectArticleArchiveList(); 24 | 25 | List
selectArticleListByKeywords(Map map); 26 | 27 | 28 | 29 | 30 | ArticleVo getArticleCustomById(String articleId); 31 | 32 | Article getLastArticle(String articleId); 33 | 34 | Article getNextArticle(String articleId); 35 | 36 | void addArticleCount(String articleId); 37 | 38 | List selectArticleList(Page page); 39 | 40 | List selectArticleByArchive(Page page); 41 | 42 | List selectArticleByType(@Param("Pager") Pager Pager, @Param("typeId") String typeId); 43 | 44 | List selectArticleByType2(@Param("page") Page page, @Param("typeId") String typeId); 45 | 46 | List selectArticleByTag(@Param("page") Page page, @Param("tagId") String tagId); 47 | 48 | List
selectArticlePage(@Param("page") Page page, @Param("p") Map param); 49 | } -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/module/blog/mapper/ArticleTagMapper.java: -------------------------------------------------------------------------------- 1 | package com.mi.module.blog.mapper; 2 | 3 | import com.mi.module.blog.entity.ArticleTag; 4 | import com.baomidou.mybatisplus.mapper.BaseMapper; 5 | 6 | /** 7 | * 8 | * 文章标签关联; InnoDB free: 11264 kB Mapper 接口 9 | * 10 | * @author yesh 11 | * (M.M)! 12 | * Created by 2017-07-09. 13 | */ 14 | public interface ArticleTagMapper extends BaseMapper { 15 | 16 | } -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/module/blog/mapper/ArticleTypeMapper.java: -------------------------------------------------------------------------------- 1 | package com.mi.module.blog.mapper; 2 | 3 | import com.mi.module.blog.entity.ArticleType; 4 | import com.baomidou.mybatisplus.mapper.BaseMapper; 5 | 6 | /** 7 | * 8 | * 文章分类关联; InnoDB free: 11264 kB Mapper 接口 9 | * 10 | * @author yesh 11 | * (M.M)! 12 | * Created by 2017-07-09. 13 | */ 14 | public interface ArticleTypeMapper extends BaseMapper { 15 | 16 | } -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/module/blog/mapper/FriendlinkMapper.java: -------------------------------------------------------------------------------- 1 | package com.mi.module.blog.mapper; 2 | 3 | import com.mi.data.vo.Pager; 4 | import com.mi.module.blog.entity.Friendlink; 5 | import com.baomidou.mybatisplus.mapper.BaseMapper; 6 | import org.apache.ibatis.annotations.Param; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * 12 | * 友情链接; InnoDB free: 11264 kB Mapper 接口 13 | * 14 | * @author yesh 15 | * (M.M)! 16 | * Created by 2017-07-09. 17 | */ 18 | public interface FriendlinkMapper extends BaseMapper { 19 | 20 | List selectAllList(); 21 | 22 | } -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/module/blog/mapper/LogMapper.java: -------------------------------------------------------------------------------- 1 | package com.mi.module.blog.mapper; 2 | 3 | import com.mi.module.blog.entity.Log; 4 | import com.baomidou.mybatisplus.mapper.BaseMapper; 5 | 6 | /** 7 | * 8 | * 操作日志; InnoDB free: 11264 kB Mapper 接口 9 | * 10 | * @author yesh 11 | * (M.M)! 12 | * Created by 2017-07-09. 13 | */ 14 | public interface LogMapper extends BaseMapper { 15 | 16 | } -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/module/blog/mapper/TagMapper.java: -------------------------------------------------------------------------------- 1 | package com.mi.module.blog.mapper; 2 | 3 | import com.mi.data.vo.Pager; 4 | import com.mi.module.blog.entity.Tag; 5 | import com.baomidou.mybatisplus.mapper.BaseMapper; 6 | import com.mi.module.blog.entity.Type; 7 | import org.apache.ibatis.annotations.Param; 8 | 9 | import java.util.List; 10 | 11 | /** 12 | * 13 | * 文章标签; InnoDB free: 11264 kB Mapper 接口 14 | * 15 | * @author yesh 16 | * (M.M)! 17 | * Created by 2017-07-09. 18 | */ 19 | public interface TagMapper extends BaseMapper { 20 | 21 | List load(@Param("pager") Pager pager,@Param("param") String param); 22 | 23 | int checkExist(Tag tag); 24 | } -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/module/blog/mapper/TypeMapper.java: -------------------------------------------------------------------------------- 1 | package com.mi.module.blog.mapper; 2 | 3 | import com.mi.data.vo.ArticleVo; 4 | import com.mi.data.vo.Pager; 5 | import com.mi.data.vo.TypeVo; 6 | import com.mi.module.blog.entity.Type; 7 | import com.baomidou.mybatisplus.mapper.BaseMapper; 8 | import org.apache.ibatis.annotations.Param; 9 | 10 | import java.util.List; 11 | 12 | /** 13 | * 14 | * 文章类型; InnoDB free: 11264 kB Mapper 接口 15 | * 16 | * @author yesh 17 | * (M.M)! 18 | * Created by 2017-07-09. 19 | */ 20 | public interface TypeMapper extends BaseMapper { 21 | 22 | List load(@Param("pager") Pager pager, @Param("param") String param); 23 | 24 | int checkExist(Type type); 25 | 26 | List initTypeList(); 27 | 28 | } -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/module/blog/mapper/UserInfoMapper.java: -------------------------------------------------------------------------------- 1 | package com.mi.module.blog.mapper; 2 | 3 | import com.mi.module.blog.entity.UserInfo; 4 | import com.baomidou.mybatisplus.mapper.BaseMapper; 5 | 6 | /** 7 | * 8 | * 用户详细; InnoDB free: 11264 kB Mapper 接口 9 | * 10 | * @author yesh 11 | * (M.M)! 12 | * Created by 2017-07-09. 13 | */ 14 | public interface UserInfoMapper extends BaseMapper { 15 | 16 | UserInfo selectByUserId(String uid); 17 | } -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/module/blog/mapper/UserMapper.java: -------------------------------------------------------------------------------- 1 | package com.mi.module.blog.mapper; 2 | 3 | import com.mi.module.blog.entity.User; 4 | import com.baomidou.mybatisplus.mapper.BaseMapper; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | * 9 | * 博客用户; InnoDB free: 11264 kB Mapper 接口 10 | * 11 | * @author yesh 12 | * (M.M)! 13 | * Created by 2017-07-09. 14 | */ 15 | @Mapper 16 | public interface UserMapper extends BaseMapper { 17 | 18 | User selectByName(String username); 19 | } -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/module/blog/mapper/impl/ArticleTagMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/module/blog/mapper/impl/ArticleTypeMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/module/blog/mapper/impl/FriendlinkMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/module/blog/mapper/impl/LogMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/module/blog/mapper/impl/TagMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 22 | 23 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/module/blog/mapper/impl/UserInfoMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 21 | 22 | -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/module/blog/mapper/impl/UserMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/module/blog/service/IArticleTagService.java: -------------------------------------------------------------------------------- 1 | package com.mi.module.blog.service; 2 | 3 | import com.mi.module.blog.entity.ArticleTag; 4 | import com.baomidou.mybatisplus.service.IService; 5 | 6 | /** 7 | * 8 | * 文章标签关联; InnoDB free: 11264 kB 服务接口 9 | * 10 | * @author yesh 11 | * (M.M)! 12 | * Created by 2017-07-09. 13 | */ 14 | public interface IArticleTagService extends IService { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/module/blog/service/IArticleTypeService.java: -------------------------------------------------------------------------------- 1 | package com.mi.module.blog.service; 2 | 3 | import com.mi.module.blog.entity.ArticleType; 4 | import com.baomidou.mybatisplus.service.IService; 5 | 6 | /** 7 | * 8 | * 文章分类关联; InnoDB free: 11264 kB 服务接口 9 | * 10 | * @author yesh 11 | * (M.M)! 12 | * Created by 2017-07-09. 13 | */ 14 | public interface IArticleTypeService extends IService { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/module/blog/service/IFriendlinkService.java: -------------------------------------------------------------------------------- 1 | package com.mi.module.blog.service; 2 | 3 | import com.mi.data.vo.Pager; 4 | import com.mi.module.blog.entity.Friendlink; 5 | import com.baomidou.mybatisplus.service.IService; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * 11 | * 友情链接; InnoDB free: 11264 kB 服务接口 12 | * 13 | * @author yesh 14 | * (M.M)! 15 | * Created by 2017-07-09. 16 | */ 17 | public interface IFriendlinkService extends IService { 18 | 19 | /** 获取所有友情链接 **/ 20 | List selectAllList(); 21 | 22 | 23 | } 24 | -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/module/blog/service/ILogService.java: -------------------------------------------------------------------------------- 1 | package com.mi.module.blog.service; 2 | 3 | import com.mi.module.blog.entity.Log; 4 | import com.baomidou.mybatisplus.service.IService; 5 | 6 | /** 7 | * 8 | * 操作日志; InnoDB free: 11264 kB 服务接口 9 | * 10 | * @author yesh 11 | * (M.M)! 12 | * Created by 2017-07-09. 13 | */ 14 | public interface ILogService extends IService { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/module/blog/service/ITagService.java: -------------------------------------------------------------------------------- 1 | package com.mi.module.blog.service; 2 | 3 | import com.mi.data.vo.Pager; 4 | import com.mi.module.blog.entity.Tag; 5 | import com.baomidou.mybatisplus.service.IService; 6 | import com.mi.module.blog.entity.Type; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * 12 | * 文章标签; InnoDB free: 11264 kB 服务接口 13 | * 14 | * @author yesh 15 | * (M.M)! 16 | * Created by 2017-07-09. 17 | */ 18 | public interface ITagService extends IService { 19 | 20 | void initPage(Pager pager); 21 | 22 | List load(Pager pager, String param); 23 | 24 | boolean checkExist(Tag tag); 25 | } 26 | -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/module/blog/service/ITypeService.java: -------------------------------------------------------------------------------- 1 | package com.mi.module.blog.service; 2 | 3 | import com.mi.data.vo.ArticleVo; 4 | import com.mi.data.vo.Pager; 5 | import com.mi.data.vo.TypeVo; 6 | import com.mi.module.blog.entity.Type; 7 | import com.baomidou.mybatisplus.service.IService; 8 | 9 | import java.util.List; 10 | 11 | /** 12 | * 13 | * 文章类型; InnoDB free: 11264 kB 服务接口 14 | * 15 | * @author yesh 16 | * (M.M)! 17 | * Created by 2017-07-09. 18 | */ 19 | public interface ITypeService extends IService { 20 | 21 | List load(Pager pager, String param); 22 | 23 | boolean checkExist(Type type); 24 | 25 | /** 26 | * 初始化分类信息 27 | * @return 28 | */ 29 | List initTypeList(); 30 | 31 | List selectArticleByType(Pager pager, String typeId); 32 | 33 | boolean deleteType(String typeId); 34 | } 35 | -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/module/blog/service/IUserInfoService.java: -------------------------------------------------------------------------------- 1 | package com.mi.module.blog.service; 2 | 3 | import com.mi.module.blog.entity.UserInfo; 4 | import com.baomidou.mybatisplus.service.IService; 5 | 6 | /** 7 | * 8 | * 用户详细; InnoDB free: 11264 kB 服务接口 9 | * 10 | * @author yesh 11 | * (M.M)! 12 | * Created by 2017-07-09. 13 | */ 14 | public interface IUserInfoService extends IService { 15 | 16 | /** 通过用户ID 获取用户详细 **/ 17 | UserInfo selectByUserId(String uid); 18 | } 19 | -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/module/blog/service/IUserService.java: -------------------------------------------------------------------------------- 1 | package com.mi.module.blog.service; 2 | 3 | import com.mi.module.blog.entity.User; 4 | import com.baomidou.mybatisplus.service.IService; 5 | 6 | /** 7 | * 8 | * 博客用户; InnoDB free: 11264 kB 服务接口 9 | * 10 | * @author yesh 11 | * (M.M)! 12 | * Created by 2017-07-09. 13 | */ 14 | public interface IUserService extends IService { 15 | /** 16 | * 根据用户名获取用户登录信息 17 | * @param username 18 | * @return 19 | */ 20 | User selectByName(String username); 21 | 22 | /** 23 | * 获取当前用户 24 | * @return 25 | */ 26 | User getCurrentUser(); 27 | } 28 | -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/module/blog/service/impl/ArticleTagServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.mi.module.blog.service.impl; 2 | 3 | import com.mi.module.blog.entity.ArticleTag; 4 | import com.mi.module.blog.mapper.ArticleTagMapper; 5 | import com.mi.module.blog.service.IArticleTagService; 6 | import com.baomidou.mybatisplus.service.impl.ServiceImpl; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | * 11 | * 文章标签关联; InnoDB free: 11264 kB 服务实现类 12 | * 13 | * @author yesh 14 | * (M.M)! 15 | * Created by 2017-07-09. 16 | */ 17 | @Service 18 | public class ArticleTagServiceImpl extends ServiceImpl implements IArticleTagService { 19 | 20 | } 21 | -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/module/blog/service/impl/ArticleTypeServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.mi.module.blog.service.impl; 2 | 3 | import com.mi.module.blog.entity.ArticleType; 4 | import com.mi.module.blog.mapper.ArticleTypeMapper; 5 | import com.mi.module.blog.service.IArticleTypeService; 6 | import com.baomidou.mybatisplus.service.impl.ServiceImpl; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | * 11 | * 文章分类关联; InnoDB free: 11264 kB 服务实现类 12 | * 13 | * @author yesh 14 | * (M.M)! 15 | * Created by 2017-07-09. 16 | */ 17 | @Service 18 | public class ArticleTypeServiceImpl extends ServiceImpl implements IArticleTypeService { 19 | 20 | } 21 | -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/module/blog/service/impl/FriendlinkServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.mi.module.blog.service.impl; 2 | 3 | import com.baomidou.mybatisplus.mapper.EntityWrapper; 4 | import com.mi.data.vo.Pager; 5 | import com.mi.module.blog.entity.Article; 6 | import com.mi.module.blog.entity.Friendlink; 7 | import com.mi.module.blog.mapper.FriendlinkMapper; 8 | import com.mi.module.blog.service.IFriendlinkService; 9 | import com.baomidou.mybatisplus.service.impl.ServiceImpl; 10 | import org.springframework.stereotype.Service; 11 | 12 | import javax.annotation.Resource; 13 | import java.util.List; 14 | 15 | /** 16 | * 17 | * 友情链接; InnoDB free: 11264 kB 服务实现类 18 | * 19 | * @author yesh 20 | * (M.M)! 21 | * Created by 2017-07-09. 22 | */ 23 | @Service 24 | public class FriendlinkServiceImpl extends ServiceImpl implements IFriendlinkService { 25 | 26 | @Resource 27 | private FriendlinkMapper friendlinkMapper; 28 | 29 | @Override 30 | public List selectAllList() { 31 | return friendlinkMapper.selectAllList(); 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/module/blog/service/impl/LogServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.mi.module.blog.service.impl; 2 | 3 | import com.mi.module.blog.entity.Log; 4 | import com.mi.module.blog.mapper.LogMapper; 5 | import com.mi.module.blog.service.ILogService; 6 | import com.baomidou.mybatisplus.service.impl.ServiceImpl; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | * 11 | * 操作日志; InnoDB free: 11264 kB 服务实现类 12 | * 13 | * @author yesh 14 | * (M.M)! 15 | * Created by 2017-07-09. 16 | */ 17 | @Service 18 | public class LogServiceImpl extends ServiceImpl implements ILogService { 19 | 20 | } 21 | -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/module/blog/service/impl/TagServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.mi.module.blog.service.impl; 2 | 3 | import com.baomidou.mybatisplus.mapper.EntityWrapper; 4 | import com.mi.data.vo.Pager; 5 | import com.mi.module.blog.entity.Tag; 6 | import com.mi.module.blog.entity.Type; 7 | import com.mi.module.blog.mapper.TagMapper; 8 | import com.mi.module.blog.service.ITagService; 9 | import com.baomidou.mybatisplus.service.impl.ServiceImpl; 10 | import org.springframework.stereotype.Service; 11 | import org.springframework.ui.Model; 12 | import org.springframework.web.bind.annotation.RequestMapping; 13 | 14 | import javax.annotation.Resource; 15 | import java.util.List; 16 | 17 | /** 18 | * 19 | * 文章标签; InnoDB free: 11264 kB 服务实现类 20 | * 21 | * @author yesh 22 | * (M.M)! 23 | * Created by 2017-07-09. 24 | */ 25 | @Service 26 | public class TagServiceImpl extends ServiceImpl implements ITagService { 27 | 28 | @Resource 29 | private TagMapper tagMapper; 30 | 31 | @Override 32 | public void initPage(Pager pager) { 33 | EntityWrapper ew = new EntityWrapper<>(); 34 | int count = tagMapper.selectCount(ew); 35 | pager.setTotalCount(count); 36 | } 37 | 38 | @Override 39 | public List load(Pager pager, String param) { 40 | pager.setStart(pager.getStart()); 41 | return tagMapper.load(pager,param); 42 | } 43 | 44 | @Override 45 | public boolean checkExist(Tag tag) { 46 | int count = tagMapper.checkExist(tag); 47 | if (count > 0){ 48 | return true; 49 | } 50 | return false; 51 | } 52 | 53 | } 54 | -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/module/blog/service/impl/UserInfoServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.mi.module.blog.service.impl; 2 | 3 | import com.mi.module.blog.entity.UserInfo; 4 | import com.mi.module.blog.mapper.UserInfoMapper; 5 | import com.mi.module.blog.service.IUserInfoService; 6 | import com.baomidou.mybatisplus.service.impl.ServiceImpl; 7 | import org.springframework.stereotype.Service; 8 | 9 | import javax.annotation.Resource; 10 | 11 | /** 12 | * 13 | * 用户详细; InnoDB free: 11264 kB 服务实现类 14 | * 15 | * @author yesh 16 | * (M.M)! 17 | * Created by 2017-07-09. 18 | */ 19 | @Service 20 | public class UserInfoServiceImpl extends ServiceImpl implements IUserInfoService { 21 | 22 | @Resource 23 | private UserInfoMapper userInfoMapper; 24 | 25 | @Override 26 | public UserInfo selectByUserId(String uid) { 27 | return userInfoMapper.selectByUserId(uid); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /mi-blog/src/main/java/com/mi/module/blog/service/impl/UserServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.mi.module.blog.service.impl; 2 | 3 | import com.mi.module.blog.entity.User; 4 | import com.mi.module.blog.mapper.UserMapper; 5 | import com.mi.module.blog.service.IUserService; 6 | import com.baomidou.mybatisplus.service.impl.ServiceImpl; 7 | import org.springframework.stereotype.Service; 8 | import org.springframework.web.context.request.RequestContextHolder; 9 | import org.springframework.web.context.request.ServletRequestAttributes; 10 | 11 | import javax.annotation.Resource; 12 | import javax.servlet.http.HttpServletRequest; 13 | import javax.servlet.http.HttpSession; 14 | 15 | /** 16 | * 17 | * 博客用户; InnoDB free: 11264 kB 服务实现类 18 | * 19 | * @author yesh 20 | * (M.M)! 21 | * Created by 2017-07-09. 22 | */ 23 | @Service 24 | public class UserServiceImpl extends ServiceImpl implements IUserService { 25 | @Resource 26 | private UserMapper userMapper; 27 | 28 | @Override 29 | public User selectByName(String username) { 30 | return userMapper.selectByName(username); 31 | } 32 | 33 | @Override 34 | public User getCurrentUser() { 35 | HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); 36 | HttpSession session = request.getSession(); 37 | return (User) session.getAttribute("user"); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /mi-blog/src/main/resources/application-dev.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/application-dev.properties -------------------------------------------------------------------------------- /mi-blog/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.profiles.active=dev 2 | -------------------------------------------------------------------------------- /mi-blog/src/main/resources/banner.txt: -------------------------------------------------------------------------------- 1 | |\/|. _ _ __ |__)| _ _ 2 | | ||\/(O|(O)!\)/ |__)|(m)(m) 3 | / _/ 4 | : MI-Blog : version 1.0 -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/css/patterns/header-profile-skin-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/css/patterns/header-profile-skin-1.png -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/css/patterns/header-profile-skin-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/css/patterns/header-profile-skin-2.png -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/css/patterns/header-profile-skin-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/css/patterns/header-profile-skin-3.png -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/css/patterns/header-profile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/css/patterns/header-profile.png -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/css/patterns/shattered.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/css/patterns/shattered.png -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/css/plugins/chosen/chosen-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/css/plugins/chosen/chosen-sprite.png -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/css/plugins/morris/morris-0.4.3.min.css: -------------------------------------------------------------------------------- 1 | .morris-hover{position:absolute;z-index:1000;}.morris-hover.morris-default-style{border-radius:10px;padding:6px;color:#666;background:rgba(255, 255, 255, 0.8);border:solid 2px rgba(230, 230, 230, 0.8);font-family:sans-serif;font-size:12px;text-align:center;}.morris-hover.morris-default-style .morris-hover-row-label{font-weight:bold;margin:0.25em 0;} 2 | .morris-hover.morris-default-style .morris-hover-point{white-space:nowrap;margin:0.1em 0;} -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/css/plugins/switchery/switchery.css: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * Main stylesheet for Switchery. 4 | * http://abpetkov.github.io/switchery/ 5 | * 6 | */ 7 | 8 | .switchery { 9 | background-color: #fff; 10 | border: 1px solid #dfdfdf; 11 | border-radius: 20px; 12 | cursor: pointer; 13 | display: inline-block; 14 | height: 30px; 15 | position: relative; 16 | vertical-align: middle; 17 | width: 50px; 18 | 19 | -webkit-box-sizing: content-box; 20 | -moz-box-sizing: content-box; 21 | box-sizing: content-box; 22 | } 23 | 24 | .switchery > small { 25 | background: #fff; 26 | border-radius: 100%; 27 | box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4); 28 | height: 30px; 29 | position: absolute; 30 | top: 0; 31 | width: 30px; 32 | } -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/css/plugins/treeview/bootstrap-treeview.css: -------------------------------------------------------------------------------- 1 | /* ========================================================= 2 | * bootstrap-treeview.css v1.0.0 3 | * ========================================================= 4 | * Copyright 2013 Jonathan Miles 5 | * Project URL : http://www.jondmiles.com/bootstrap-treeview 6 | * 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * ========================================================= */ 19 | 20 | .list-group-item { 21 | cursor: pointer; 22 | } 23 | 24 | /*.list-group-item:hover { 25 | background-color: #f5f5f5; 26 | }*/ 27 | 28 | span.indent { 29 | margin-left: 10px; 30 | margin-right: 10px; 31 | } 32 | 33 | span.icon { 34 | margin-right: 5px; 35 | } 36 | -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/css/plugins/webuploader/webuploader.css: -------------------------------------------------------------------------------- 1 | .webuploader-container { 2 | position: relative; 3 | } 4 | .webuploader-element-invisible { 5 | position: absolute !important; 6 | clip: rect(1px 1px 1px 1px); /* IE6, IE7 */ 7 | clip: rect(1px,1px,1px,1px); 8 | } 9 | .webuploader-pick { 10 | position: relative; 11 | display: inline-block; 12 | cursor: pointer; 13 | background: #00b7ee; 14 | padding: 10px 15px; 15 | color: #fff; 16 | text-align: center; 17 | border-radius: 3px; 18 | overflow: hidden; 19 | } 20 | .webuploader-pick-hover { 21 | background: #00a2d4; 22 | } 23 | 24 | .webuploader-pick-disable { 25 | opacity: 0.6; 26 | pointer-events:none; 27 | } 28 | 29 | -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/base.js: -------------------------------------------------------------------------------- 1 | // 弹出窗口公共方法 2 | function autoCloseAlert(msg,second){ 3 | new $.flavr({ 4 | content : msg, 5 | autoclose : true, 6 | timeout : second 7 | }); 8 | } -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/calendar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/calendar.png -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/chat-bubble.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/chat-bubble.png -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/chrome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/chrome.png -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/document.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/document.png -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/dribbble.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/dribbble.png -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/drive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/drive.png -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/email.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/email.png -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/evernote.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/evernote.png -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/facebook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/facebook.png -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/forsquare.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/forsquare.png -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/github.png -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/gmail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/gmail.png -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/google+.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/google+.png -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/linkedin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/linkedin.png -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/location-pointer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/location-pointer.png -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/play.png -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/search.png -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/skype.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/skype.png -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/star.png -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/task.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/task.png -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/tumblr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/tumblr.png -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/twitter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/twitter.png -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/upload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/upload.png -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/vimeo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/vimeo.png -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/youtube.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/js/flavr/flavr/images/icons/youtube.png -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/fonts/fontawesome/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/js/flavr/fonts/fontawesome/FontAwesome.otf -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/fonts/fontawesome/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/js/flavr/fonts/fontawesome/fontawesome-webfont.eot -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/fonts/fontawesome/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/js/flavr/fonts/fontawesome/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/fonts/fontawesome/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/js/flavr/fonts/fontawesome/fontawesome-webfont.woff -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/js/flavr/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/js/flavr/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/js/flavr/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/fonts/lato.css: -------------------------------------------------------------------------------- 1 | 2 | @font-face { 3 | font-family: 'Lato'; 4 | src: url('lato/lato-bold-webfont.eot'); 5 | src: url('lato/lato-bold-webfont.eot?#iefix') format('embedded-opentype'), 6 | url('lato/lato-bold-webfont.woff') format('woff'), 7 | url('lato/lato-bold-webfont.ttf') format('truetype'), 8 | url('lato/lato-bold-webfont.svg#latobold') format('svg'); 9 | font-weight: 700; 10 | font-style: normal; 11 | } 12 | @font-face { 13 | font-family: 'Lato'; 14 | src: url('lato/lato-light-webfont.eot'); 15 | src: url('lato/lato-light-webfont.eot?#iefix') format('embedded-opentype'), 16 | url('lato/lato-light-webfont.woff') format('woff'), 17 | url('lato/lato-light-webfont.ttf') format('truetype'), 18 | url('lato/lato-light-webfont.svg#latolight') format('svg'); 19 | font-weight: 300; 20 | font-style: normal; 21 | } 22 | @font-face { 23 | font-family: 'Lato'; 24 | src: url('lato/lato-regular-webfont.eot'); 25 | src: url('lato/lato-regular-webfont.eot?#iefix') format('embedded-opentype'), 26 | url('lato/lato-regular-webfont.woff') format('woff'), 27 | url('lato/lato-regular-webfont.ttf') format('truetype'), 28 | url('lato/lato-regular-webfont.svg#latoregular') format('svg'); 29 | font-weight: 400; 30 | font-style: normal; 31 | } -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/fonts/lato/lato-bold-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/js/flavr/fonts/lato/lato-bold-webfont.eot -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/fonts/lato/lato-bold-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/js/flavr/fonts/lato/lato-bold-webfont.ttf -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/fonts/lato/lato-bold-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/js/flavr/fonts/lato/lato-bold-webfont.woff -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/fonts/lato/lato-light-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/js/flavr/fonts/lato/lato-light-webfont.eot -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/fonts/lato/lato-light-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/js/flavr/fonts/lato/lato-light-webfont.ttf -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/fonts/lato/lato-light-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/js/flavr/fonts/lato/lato-light-webfont.woff -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/fonts/lato/lato-regular-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/js/flavr/fonts/lato/lato-regular-webfont.eot -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/fonts/lato/lato-regular-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/js/flavr/fonts/lato/lato-regular-webfont.ttf -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/fonts/lato/lato-regular-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/admin/js/flavr/fonts/lato/lato-regular-webfont.woff -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/js/jquery.browser.js: -------------------------------------------------------------------------------- 1 | (function($){$.browserTest=function(a,z){var u='unknown',x='X',m=function(r,h){for(var i=0;i400){r.version='2.0';}if(r.name==='presto'){r.version=($.browser.version>9.27)?'futhark':'linear_b';}r.versionNumber=parseFloat(r.version,10)||0;r.versionX=(r.version!==x)?(r.version+'').substr(0,1):x;r.className=r.name+r.versionX;return r;};a=(a.match(/Opera|Navigator|Minefield|KHTML|Chrome/)?m(a,[[/(Firefox|MSIE|KHTML,\slike\sGecko|Konqueror)/,''],['Chrome Safari','Chrome'],['KHTML','Konqueror'],['Minefield','Firefox'],['Navigator','Netscape']]):a).toLowerCase();$.browser=$.extend((!z)?$.browser:{},c(a,/(camino|chrome|firefox|netscape|konqueror|lynx|msie|opera|safari)/,[],/(camino|chrome|firefox|netscape|netscape6|opera|version|konqueror|lynx|msie|safari)(\/|\s)([a-z0-9\.\+]*?)(\;|dev|rel|\s|$)/));$.layout=c(a,/(gecko|konqueror|msie|opera|webkit)/,[['konqueror','khtml'],['msie','trident'],['opera','presto']],/(applewebkit|rv|konqueror|msie)(\:|\/|\s)([a-z0-9\.]*?)(\;|\)|\s)/);$.os={name:(/(win|mac|linux|sunos|solaris|iphone)/.exec(navigator.platform.toLowerCase())||[u])[0].replace('sunos','solaris')};if(!z){$('html').addClass([$.os.name,$.browser.name,$.browser.className,$.layout.name,$.layout.className].join(' '));}};$.browserTest(navigator.userAgent);})(jQuery); -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/flavr/js/livedemo.js: -------------------------------------------------------------------------------- 1 | 2 | ;(function($) { 3 | 4 | $.fn.livedemo = function(options) { 5 | 6 | var codeblock = $('
'); 7 | var blockclose = $('x'); 8 | 9 | return this.each(function(){ 10 | 11 | var livedemo = $(this); 12 | 13 | livedemo.on('click', '.btn-code', function(e){ 14 | e.preventDefault(); 15 | 16 | var btn = $(this); 17 | var block = $(this).parents('.demo-block'); 18 | var codes = block.find('.demo-code').html(); 19 | 20 | if( block.next().hasClass('code-block') ) 21 | { 22 | block.next().stop().slideToggle(); 23 | } 24 | else 25 | { 26 | livedemo.find('.btn-code').removeClass('filled'); 27 | livedemo.find('.code-block').stop().slideUp(function(){ $(this).remove() }); 28 | 29 | var newblock = codeblock.clone(); 30 | newblock.append( codes ).append( blockclose ).insertAfter( block ).slideDown(); 31 | } 32 | 33 | $(this).toggleClass('filled'); 34 | 35 | }).on('click', '.block-close', function(){ 36 | $(this).parents('.code-block').stop().slideUp().prev('.demo-block').find('.btn-code').removeClass('filled'); 37 | }); 38 | 39 | }); 40 | 41 | }; 42 | })(jQuery); -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/hplus.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | // Custom scripts 4 | $(document).ready(function () { 5 | 6 | // MetsiMenu 7 | $('#side-menu').metisMenu(); 8 | 9 | 10 | 11 | // minimalize menu 12 | $('.navbar-minimalize').click(function () { 13 | $("body").toggleClass("mini-navbar"); 14 | SmoothlyMenu(); 15 | }) 16 | 17 | 18 | 19 | $("[data-toggle=popover]") 20 | .popover(); 21 | }); 22 | 23 | 24 | 25 | // Minimalize menu when screen is less than 768px 26 | $(function() { 27 | $(window).bind("load resize", function() { 28 | if ($(this).width() < 769) { 29 | $('body').addClass('body-small') 30 | } else { 31 | $('body').removeClass('body-small') 32 | } 33 | }) 34 | }) 35 | 36 | function SmoothlyMenu() { 37 | if (!$('body').hasClass('mini-navbar') || $('body').hasClass('body-small')) { 38 | // Hide menu in order to smoothly turn on when maximize menu 39 | $('#side-menu').hide(); 40 | // For smoothly turn on menu 41 | setTimeout( 42 | function () { 43 | $('#side-menu').fadeIn(500); 44 | }, 100); 45 | } else if ($('body').hasClass('fixed-sidebar')){ 46 | $('#side-menu').hide(); 47 | setTimeout( 48 | function () { 49 | $('#side-menu').fadeIn(500); 50 | }, 300); 51 | } else { 52 | // Remove all inline style from jquery fadeIn function to reset menu state 53 | $('#side-menu').removeAttr('style'); 54 | } 55 | } 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/js/plugins/markdown/bootstrap-markdown.zh.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Chinese translation for bootstrap-markdown 3 | * benhaile 4 | */ 5 | (function ($) { 6 | $.fn.markdown.messages.zh = { 7 | 'Bold': "粗体", 8 | 'Italic': "斜体", 9 | 'Heading': "标题", 10 | 'URL/Link': "链接", 11 | 'Image': "图片", 12 | 'List': "列表", 13 | 'Unordered List': "无序列表", 14 | 'Ordered List': "有序列表", 15 | 'Code': "代码", 16 | 'Quote': "引用", 17 | 'Preview': "预览", 18 | 'strong text': "粗体", 19 | 'emphasized text': "强调", 20 | 'heading text': "标题", 21 | 'enter link description here': "输入链接说明", 22 | 'Insert Hyperlink': "URL地址", 23 | 'enter image description here': "输入图片说明", 24 | 'Insert Image Hyperlink': "图片URL地址", 25 | 'enter image title here': "在这里输入图片标题", 26 | 'list text here': "这里是列表文本", 27 | 'code text here': "这里输入代码", 28 | 'quote here': "这里输入引用文本" 29 | 30 | 31 | }; 32 | }(jQuery)); 33 | -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/lib/codemirror/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (C) 2014 by Marijn Haverbeke and others 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/lib/codemirror/README.md: -------------------------------------------------------------------------------- 1 | # CodeMirror 2 | [![Build Status](https://travis-ci.org/codemirror/CodeMirror.svg)](https://travis-ci.org/codemirror/CodeMirror) 3 | [![NPM version](https://img.shields.io/npm/v/codemirror.svg)](https://www.npmjs.org/package/codemirror) 4 | [Funding status: ![maintainer happiness](https://marijnhaverbeke.nl/fund/status_s.png)](https://marijnhaverbeke.nl/fund/) 5 | 6 | CodeMirror is a JavaScript component that provides a code editor in 7 | the browser. When a mode is available for the language you are coding 8 | in, it will color your code, and optionally help with indentation. 9 | 10 | The project page is http://codemirror.net 11 | The manual is at http://codemirror.net/doc/manual.html 12 | The contributing guidelines are in [CONTRIBUTING.md](https://github.com/codemirror/CodeMirror/blob/master/CONTRIBUTING.md) 13 | -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/lib/codemirror/addon/dialog/dialog.css: -------------------------------------------------------------------------------- 1 | .CodeMirror-dialog { 2 | position: absolute; 3 | left: 0; right: 0; 4 | background: white; 5 | z-index: 15; 6 | padding: .1em .8em; 7 | overflow: hidden; 8 | color: #333; 9 | } 10 | 11 | .CodeMirror-dialog-top { 12 | border-bottom: 1px solid #eee; 13 | top: 0; 14 | } 15 | 16 | .CodeMirror-dialog-bottom { 17 | border-top: 1px solid #eee; 18 | bottom: 0; 19 | } 20 | 21 | .CodeMirror-dialog input { 22 | border: none; 23 | outline: none; 24 | background: transparent; 25 | width: 20em; 26 | color: inherit; 27 | font-family: monospace; 28 | } 29 | 30 | .CodeMirror-dialog button { 31 | font-size: 70%; 32 | } 33 | -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/lib/codemirror/addon/display/fullscreen.css: -------------------------------------------------------------------------------- 1 | .CodeMirror-fullscreen { 2 | position: fixed; 3 | top: 0; left: 0; right: 0; bottom: 0; 4 | height: auto; 5 | z-index: 9; 6 | } 7 | -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/lib/codemirror/addon/edit/trailingspace.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | (function(mod) { 5 | if (typeof exports == "object" && typeof module == "object") // CommonJS 6 | mod(require("../../lib/codemirror")); 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror"], mod); 9 | else // Plain browser env 10 | mod(CodeMirror); 11 | })(function(CodeMirror) { 12 | CodeMirror.defineOption("showTrailingSpace", false, function(cm, val, prev) { 13 | if (prev == CodeMirror.Init) prev = false; 14 | if (prev && !val) 15 | cm.removeOverlay("trailingspace"); 16 | else if (!prev && val) 17 | cm.addOverlay({ 18 | token: function(stream) { 19 | for (var l = stream.string.length, i = l; i && /\s/.test(stream.string.charAt(i - 1)); --i) {} 20 | if (i > stream.pos) { stream.pos = i; return null; } 21 | stream.pos = l; 22 | return "trailingspace"; 23 | }, 24 | name: "trailingspace" 25 | }); 26 | }); 27 | }); 28 | -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/lib/codemirror/addon/fold/foldgutter.css: -------------------------------------------------------------------------------- 1 | .CodeMirror-foldmarker { 2 | color: blue; 3 | text-shadow: #b9f 1px 1px 2px, #b9f -1px -1px 2px, #b9f 1px -1px 2px, #b9f -1px 1px 2px; 4 | font-family: arial; 5 | line-height: .3; 6 | cursor: pointer; 7 | } 8 | .CodeMirror-foldgutter { 9 | width: .7em; 10 | } 11 | .CodeMirror-foldgutter-open, 12 | .CodeMirror-foldgutter-folded { 13 | cursor: pointer; 14 | } 15 | .CodeMirror-foldgutter-open:after { 16 | content: "\25BE"; 17 | } 18 | .CodeMirror-foldgutter-folded:after { 19 | content: "\25B8"; 20 | } 21 | -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/lib/codemirror/addon/hint/show-hint.css: -------------------------------------------------------------------------------- 1 | .CodeMirror-hints { 2 | position: absolute; 3 | z-index: 10; 4 | overflow: hidden; 5 | list-style: none; 6 | 7 | margin: 0; 8 | padding: 2px; 9 | 10 | -webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2); 11 | -moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2); 12 | box-shadow: 2px 3px 5px rgba(0,0,0,.2); 13 | border-radius: 3px; 14 | border: 1px solid silver; 15 | 16 | background: white; 17 | font-size: 90%; 18 | font-family: monospace; 19 | 20 | max-height: 20em; 21 | overflow-y: auto; 22 | } 23 | 24 | .CodeMirror-hint { 25 | margin: 0; 26 | padding: 0 4px; 27 | border-radius: 2px; 28 | max-width: 19em; 29 | overflow: hidden; 30 | white-space: pre; 31 | color: black; 32 | cursor: pointer; 33 | } 34 | 35 | li.CodeMirror-hint-active { 36 | background: #08f; 37 | color: white; 38 | } 39 | -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/lib/codemirror/addon/lint/coffeescript-lint.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | // Depends on coffeelint.js from http://www.coffeelint.org/js/coffeelint.js 5 | 6 | // declare global: coffeelint 7 | 8 | (function(mod) { 9 | if (typeof exports == "object" && typeof module == "object") // CommonJS 10 | mod(require("../../lib/codemirror")); 11 | else if (typeof define == "function" && define.amd) // AMD 12 | define(["../../lib/codemirror"], mod); 13 | else // Plain browser env 14 | mod(CodeMirror); 15 | })(function(CodeMirror) { 16 | "use strict"; 17 | 18 | CodeMirror.registerHelper("lint", "coffeescript", function(text) { 19 | var found = []; 20 | var parseError = function(err) { 21 | var loc = err.lineNumber; 22 | found.push({from: CodeMirror.Pos(loc-1, 0), 23 | to: CodeMirror.Pos(loc, 0), 24 | severity: err.level, 25 | message: err.message}); 26 | }; 27 | try { 28 | var res = coffeelint.lint(text); 29 | for(var i = 0; i < res.length; i++) { 30 | parseError(res[i]); 31 | } 32 | } catch(e) { 33 | found.push({from: CodeMirror.Pos(e.location.first_line, 0), 34 | to: CodeMirror.Pos(e.location.last_line, e.location.last_column), 35 | severity: 'error', 36 | message: e.message}); 37 | } 38 | return found; 39 | }); 40 | 41 | }); 42 | -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/lib/codemirror/addon/lint/css-lint.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | // Depends on csslint.js from https://github.com/stubbornella/csslint 5 | 6 | // declare global: CSSLint 7 | 8 | (function(mod) { 9 | if (typeof exports == "object" && typeof module == "object") // CommonJS 10 | mod(require("../../lib/codemirror")); 11 | else if (typeof define == "function" && define.amd) // AMD 12 | define(["../../lib/codemirror"], mod); 13 | else // Plain browser env 14 | mod(CodeMirror); 15 | })(function(CodeMirror) { 16 | "use strict"; 17 | 18 | CodeMirror.registerHelper("lint", "css", function(text) { 19 | var found = []; 20 | if (!window.CSSLint) return found; 21 | var results = CSSLint.verify(text), messages = results.messages, message = null; 22 | for ( var i = 0; i < messages.length; i++) { 23 | message = messages[i]; 24 | var startLine = message.line -1, endLine = message.line -1, startCol = message.col -1, endCol = message.col; 25 | found.push({ 26 | from: CodeMirror.Pos(startLine, startCol), 27 | to: CodeMirror.Pos(endLine, endCol), 28 | message: message.message, 29 | severity : message.type 30 | }); 31 | } 32 | return found; 33 | }); 34 | 35 | }); 36 | -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/lib/codemirror/addon/lint/json-lint.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | // Depends on jsonlint.js from https://github.com/zaach/jsonlint 5 | 6 | // declare global: jsonlint 7 | 8 | (function(mod) { 9 | if (typeof exports == "object" && typeof module == "object") // CommonJS 10 | mod(require("../../lib/codemirror")); 11 | else if (typeof define == "function" && define.amd) // AMD 12 | define(["../../lib/codemirror"], mod); 13 | else // Plain browser env 14 | mod(CodeMirror); 15 | })(function(CodeMirror) { 16 | "use strict"; 17 | 18 | CodeMirror.registerHelper("lint", "json", function(text) { 19 | var found = []; 20 | jsonlint.parseError = function(str, hash) { 21 | var loc = hash.loc; 22 | found.push({from: CodeMirror.Pos(loc.first_line - 1, loc.first_column), 23 | to: CodeMirror.Pos(loc.last_line - 1, loc.last_column), 24 | message: str}); 25 | }; 26 | try { jsonlint.parse(text); } 27 | catch(e) {} 28 | return found; 29 | }); 30 | 31 | }); 32 | -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/lib/codemirror/addon/lint/yaml-lint.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | (function(mod) { 5 | if (typeof exports == "object" && typeof module == "object") // CommonJS 6 | mod(require("../../lib/codemirror")); 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror"], mod); 9 | else // Plain browser env 10 | mod(CodeMirror); 11 | })(function(CodeMirror) { 12 | "use strict"; 13 | 14 | // Depends on js-yaml.js from https://github.com/nodeca/js-yaml 15 | 16 | // declare global: jsyaml 17 | 18 | CodeMirror.registerHelper("lint", "yaml", function(text) { 19 | var found = []; 20 | try { jsyaml.load(text); } 21 | catch(e) { 22 | var loc = e.mark; 23 | found.push({ from: CodeMirror.Pos(loc.line, loc.column), to: CodeMirror.Pos(loc.line, loc.column), message: e.message }); 24 | } 25 | return found; 26 | }); 27 | 28 | }); 29 | -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/lib/codemirror/addon/mode/multiplex_test.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | (function() { 5 | CodeMirror.defineMode("markdown_with_stex", function(){ 6 | var inner = CodeMirror.getMode({}, "stex"); 7 | var outer = CodeMirror.getMode({}, "markdown"); 8 | 9 | var innerOptions = { 10 | open: '$', 11 | close: '$', 12 | mode: inner, 13 | delimStyle: 'delim', 14 | innerStyle: 'inner' 15 | }; 16 | 17 | return CodeMirror.multiplexingMode(outer, innerOptions); 18 | }); 19 | 20 | var mode = CodeMirror.getMode({}, "markdown_with_stex"); 21 | 22 | function MT(name) { 23 | test.mode( 24 | name, 25 | mode, 26 | Array.prototype.slice.call(arguments, 1), 27 | 'multiplexing'); 28 | } 29 | 30 | MT( 31 | "stexInsideMarkdown", 32 | "[strong **Equation:**] [delim $][inner&tag \\pi][delim $]"); 33 | })(); 34 | -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/lib/codemirror/addon/runmode/colorize.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | (function(mod) { 5 | if (typeof exports == "object" && typeof module == "object") // CommonJS 6 | mod(require("../../lib/codemirror"), require("./runmode")); 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror", "./runmode"], mod); 9 | else // Plain browser env 10 | mod(CodeMirror); 11 | })(function(CodeMirror) { 12 | "use strict"; 13 | 14 | var isBlock = /^(p|li|div|h\\d|pre|blockquote|td)$/; 15 | 16 | function textContent(node, out) { 17 | if (node.nodeType == 3) return out.push(node.nodeValue); 18 | for (var ch = node.firstChild; ch; ch = ch.nextSibling) { 19 | textContent(ch, out); 20 | if (isBlock.test(node.nodeType)) out.push("\n"); 21 | } 22 | } 23 | 24 | CodeMirror.colorize = function(collection, defaultMode) { 25 | if (!collection) collection = document.body.getElementsByTagName("pre"); 26 | 27 | for (var i = 0; i < collection.length; ++i) { 28 | var node = collection[i]; 29 | var mode = node.getAttribute("data-lang") || defaultMode; 30 | if (!mode) continue; 31 | 32 | var text = []; 33 | textContent(node, text); 34 | node.innerHTML = ""; 35 | CodeMirror.runMode(text.join(""), mode, node); 36 | 37 | node.className += " cm-s-default"; 38 | } 39 | }; 40 | }); 41 | -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/lib/codemirror/addon/search/matchesonscrollbar.css: -------------------------------------------------------------------------------- 1 | .CodeMirror-search-match { 2 | background: gold; 3 | border-top: 1px solid orange; 4 | border-bottom: 1px solid orange; 5 | -moz-box-sizing: border-box; 6 | box-sizing: border-box; 7 | opacity: .5; 8 | } 9 | -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/lib/codemirror/addon/tern/worker.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | // declare global: tern, server 5 | 6 | var server; 7 | 8 | this.onmessage = function(e) { 9 | var data = e.data; 10 | switch (data.type) { 11 | case "init": return startServer(data.defs, data.plugins, data.scripts); 12 | case "add": return server.addFile(data.name, data.text); 13 | case "del": return server.delFile(data.name); 14 | case "req": return server.request(data.body, function(err, reqData) { 15 | postMessage({id: data.id, body: reqData, err: err && String(err)}); 16 | }); 17 | case "getFile": 18 | var c = pending[data.id]; 19 | delete pending[data.id]; 20 | return c(data.err, data.text); 21 | default: throw new Error("Unknown message type: " + data.type); 22 | } 23 | }; 24 | 25 | var nextId = 0, pending = {}; 26 | function getFile(file, c) { 27 | postMessage({type: "getFile", name: file, id: ++nextId}); 28 | pending[nextId] = c; 29 | } 30 | 31 | function startServer(defs, plugins, scripts) { 32 | if (scripts) importScripts.apply(null, scripts); 33 | 34 | server = new tern.Server({ 35 | getFile: getFile, 36 | async: true, 37 | defs: defs, 38 | plugins: plugins 39 | }); 40 | } 41 | 42 | var console = { 43 | log: function(v) { postMessage({type: "debug", message: v}); } 44 | }; 45 | -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/lib/codemirror/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "codemirror", 3 | "version":"5.0.0", 4 | "main": ["lib/codemirror.js", "lib/codemirror.css"], 5 | "ignore": [ 6 | "**/.*", 7 | "node_modules", 8 | "components", 9 | "bin", 10 | "demo", 11 | "doc", 12 | "test", 13 | "index.html", 14 | "package.json" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/lib/codemirror/mode/diff/diff.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | (function(mod) { 5 | if (typeof exports == "object" && typeof module == "object") // CommonJS 6 | mod(require("../../lib/codemirror")); 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror"], mod); 9 | else // Plain browser env 10 | mod(CodeMirror); 11 | })(function(CodeMirror) { 12 | "use strict"; 13 | 14 | CodeMirror.defineMode("diff", function() { 15 | 16 | var TOKEN_NAMES = { 17 | '+': 'positive', 18 | '-': 'negative', 19 | '@': 'meta' 20 | }; 21 | 22 | return { 23 | token: function(stream) { 24 | var tw_pos = stream.string.search(/[\t ]+?$/); 25 | 26 | if (!stream.sol() || tw_pos === 0) { 27 | stream.skipToEnd(); 28 | return ("error " + ( 29 | TOKEN_NAMES[stream.string.charAt(0)] || '')).replace(/ $/, ''); 30 | } 31 | 32 | var token_name = TOKEN_NAMES[stream.peek()] || stream.skipToEnd(); 33 | 34 | if (tw_pos === -1) { 35 | stream.skipToEnd(); 36 | } else { 37 | stream.pos = tw_pos; 38 | } 39 | 40 | return token_name; 41 | } 42 | }; 43 | }); 44 | 45 | CodeMirror.defineMIME("text/x-diff", "diff"); 46 | 47 | }); 48 | -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/lib/codemirror/mode/http/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: HTTP mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

HTTP mode

27 | 28 | 29 |
39 | 40 | 43 | 44 |

MIME types defined: message/http.

45 |
46 | -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/lib/codemirror/mode/ntriples/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: NTriples mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 15 | 28 | 29 |
30 |

NTriples mode

31 |
32 | 39 |
40 | 41 | 44 |

MIME types defined: text/n-triples.

45 |
46 | -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/lib/codemirror/mode/ruby/test.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | (function() { 5 | var mode = CodeMirror.getMode({indentUnit: 2}, "ruby"); 6 | function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } 7 | 8 | MT("divide_equal_operator", 9 | "[variable bar] [operator /=] [variable foo]"); 10 | 11 | MT("divide_equal_operator_no_spacing", 12 | "[variable foo][operator /=][number 42]"); 13 | 14 | })(); 15 | -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/lib/codemirror/mode/spreadsheet/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Spreadsheet mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 25 | 26 |
27 |

Spreadsheet mode

28 |
29 | 30 | 37 | 38 |

MIME types defined: text/x-spreadsheet.

39 | 40 |

The Spreadsheet Mode

41 |

Created by Robert Plummer

42 |
43 | -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/lib/codemirror/mode/tiddlywiki/tiddlywiki.css: -------------------------------------------------------------------------------- 1 | span.cm-underlined { 2 | text-decoration: underline; 3 | } 4 | span.cm-strikethrough { 5 | text-decoration: line-through; 6 | } 7 | span.cm-brace { 8 | color: #170; 9 | font-weight: bold; 10 | } 11 | span.cm-table { 12 | color: blue; 13 | font-weight: bold; 14 | } 15 | -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/lib/codemirror/mode/tiki/tiki.css: -------------------------------------------------------------------------------- 1 | .cm-tw-syntaxerror { 2 | color: #FFF; 3 | background-color: #900; 4 | } 5 | 6 | .cm-tw-deleted { 7 | text-decoration: line-through; 8 | } 9 | 10 | .cm-tw-header5 { 11 | font-weight: bold; 12 | } 13 | .cm-tw-listitem:first-child { /*Added first child to fix duplicate padding when highlighting*/ 14 | padding-left: 10px; 15 | } 16 | 17 | .cm-tw-box { 18 | border-top-width: 0px ! important; 19 | border-style: solid; 20 | border-width: 1px; 21 | border-color: inherit; 22 | } 23 | 24 | .cm-tw-underline { 25 | text-decoration: underline; 26 | } -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/lib/codemirror/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "codemirror", 3 | "version":"5.0.0", 4 | "main": "lib/codemirror.js", 5 | "description": "In-browser code editing made bearable", 6 | "licenses": [{"type": "MIT", 7 | "url": "http://codemirror.net/LICENSE"}], 8 | "directories": {"lib": "./lib"}, 9 | "scripts": {"test": "node ./test/run.js"}, 10 | "devDependencies": {"node-static": "0.6.0", 11 | "phantomjs": "1.9.2-5", 12 | "blint": ">=0.1.1"}, 13 | "bugs": "http://github.com/codemirror/CodeMirror/issues", 14 | "keywords": ["JavaScript", "CodeMirror", "Editor"], 15 | "homepage": "http://codemirror.net", 16 | "maintainers":[{"name": "Marijn Haverbeke", 17 | "email": "marijnh@gmail.com", 18 | "web": "http://marijnhaverbeke.nl"}], 19 | "repository": {"type": "git", 20 | "url": "https://github.com/codemirror/CodeMirror.git"} 21 | } 22 | -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/lib/codemirror/theme/ambiance-mobile.css: -------------------------------------------------------------------------------- 1 | .cm-s-ambiance.CodeMirror { 2 | -webkit-box-shadow: none; 3 | -moz-box-shadow: none; 4 | box-shadow: none; 5 | } 6 | -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/lib/codemirror/theme/cobalt.css: -------------------------------------------------------------------------------- 1 | .cm-s-cobalt.CodeMirror { background: #002240; color: white; } 2 | .cm-s-cobalt div.CodeMirror-selected { background: #b36539 !important; } 3 | .cm-s-cobalt.CodeMirror ::selection { background: rgba(179, 101, 57, .99); } 4 | .cm-s-cobalt.CodeMirror ::-moz-selection { background: rgba(179, 101, 57, .99); } 5 | .cm-s-cobalt .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; } 6 | .cm-s-cobalt .CodeMirror-guttermarker { color: #ffee80; } 7 | .cm-s-cobalt .CodeMirror-guttermarker-subtle { color: #d0d0d0; } 8 | .cm-s-cobalt .CodeMirror-linenumber { color: #d0d0d0; } 9 | .cm-s-cobalt .CodeMirror-cursor { border-left: 1px solid white !important; } 10 | 11 | .cm-s-cobalt span.cm-comment { color: #08f; } 12 | .cm-s-cobalt span.cm-atom { color: #845dc4; } 13 | .cm-s-cobalt span.cm-number, .cm-s-cobalt span.cm-attribute { color: #ff80e1; } 14 | .cm-s-cobalt span.cm-keyword { color: #ffee80; } 15 | .cm-s-cobalt span.cm-string { color: #3ad900; } 16 | .cm-s-cobalt span.cm-meta { color: #ff9d00; } 17 | .cm-s-cobalt span.cm-variable-2, .cm-s-cobalt span.cm-tag { color: #9effff; } 18 | .cm-s-cobalt span.cm-variable-3, .cm-s-cobalt span.cm-def { color: white; } 19 | .cm-s-cobalt span.cm-bracket { color: #d8d8d8; } 20 | .cm-s-cobalt span.cm-builtin, .cm-s-cobalt span.cm-special { color: #ff9e59; } 21 | .cm-s-cobalt span.cm-link { color: #845dc4; } 22 | .cm-s-cobalt span.cm-error { color: #9d1e15; } 23 | 24 | .cm-s-cobalt .CodeMirror-activeline-background {background: #002D57 !important;} 25 | .cm-s-cobalt .CodeMirror-matchingbracket {outline:1px solid grey;color:white !important} 26 | -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/lib/codemirror/theme/eclipse.css: -------------------------------------------------------------------------------- 1 | .cm-s-eclipse span.cm-meta {color: #FF1717;} 2 | .cm-s-eclipse span.cm-keyword { line-height: 1em; font-weight: bold; color: #7F0055; } 3 | .cm-s-eclipse span.cm-atom {color: #219;} 4 | .cm-s-eclipse span.cm-number {color: #164;} 5 | .cm-s-eclipse span.cm-def {color: #00f;} 6 | .cm-s-eclipse span.cm-variable {color: black;} 7 | .cm-s-eclipse span.cm-variable-2 {color: #0000C0;} 8 | .cm-s-eclipse span.cm-variable-3 {color: #0000C0;} 9 | .cm-s-eclipse span.cm-property {color: black;} 10 | .cm-s-eclipse span.cm-operator {color: black;} 11 | .cm-s-eclipse span.cm-comment {color: #3F7F5F;} 12 | .cm-s-eclipse span.cm-string {color: #2A00FF;} 13 | .cm-s-eclipse span.cm-string-2 {color: #f50;} 14 | .cm-s-eclipse span.cm-qualifier {color: #555;} 15 | .cm-s-eclipse span.cm-builtin {color: #30a;} 16 | .cm-s-eclipse span.cm-bracket {color: #cc7;} 17 | .cm-s-eclipse span.cm-tag {color: #170;} 18 | .cm-s-eclipse span.cm-attribute {color: #00c;} 19 | .cm-s-eclipse span.cm-link {color: #219;} 20 | .cm-s-eclipse span.cm-error {color: #f00;} 21 | 22 | .cm-s-eclipse .CodeMirror-activeline-background {background: #e8f2ff !important;} 23 | .cm-s-eclipse .CodeMirror-matchingbracket {outline:1px solid grey; color:black !important;} 24 | -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/lib/codemirror/theme/elegant.css: -------------------------------------------------------------------------------- 1 | .cm-s-elegant span.cm-number, .cm-s-elegant span.cm-string, .cm-s-elegant span.cm-atom {color: #762;} 2 | .cm-s-elegant span.cm-comment {color: #262; font-style: italic; line-height: 1em;} 3 | .cm-s-elegant span.cm-meta {color: #555; font-style: italic; line-height: 1em;} 4 | .cm-s-elegant span.cm-variable {color: black;} 5 | .cm-s-elegant span.cm-variable-2 {color: #b11;} 6 | .cm-s-elegant span.cm-qualifier {color: #555;} 7 | .cm-s-elegant span.cm-keyword {color: #730;} 8 | .cm-s-elegant span.cm-builtin {color: #30a;} 9 | .cm-s-elegant span.cm-link {color: #762;} 10 | .cm-s-elegant span.cm-error {background-color: #fdd;} 11 | 12 | .cm-s-elegant .CodeMirror-activeline-background {background: #e8f2ff !important;} 13 | .cm-s-elegant .CodeMirror-matchingbracket {outline:1px solid grey; color:black !important;} 14 | -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/lib/codemirror/theme/neat.css: -------------------------------------------------------------------------------- 1 | .cm-s-neat span.cm-comment { color: #a86; } 2 | .cm-s-neat span.cm-keyword { line-height: 1em; font-weight: bold; color: blue; } 3 | .cm-s-neat span.cm-string { color: #a22; } 4 | .cm-s-neat span.cm-builtin { line-height: 1em; font-weight: bold; color: #077; } 5 | .cm-s-neat span.cm-special { line-height: 1em; font-weight: bold; color: #0aa; } 6 | .cm-s-neat span.cm-variable { color: black; } 7 | .cm-s-neat span.cm-number, .cm-s-neat span.cm-atom { color: #3a3; } 8 | .cm-s-neat span.cm-meta {color: #555;} 9 | .cm-s-neat span.cm-link { color: #3a3; } 10 | 11 | .cm-s-neat .CodeMirror-activeline-background {background: #e8f2ff !important;} 12 | .cm-s-neat .CodeMirror-matchingbracket {outline:1px solid grey; color:black !important;} 13 | -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/lib/codemirror/theme/neo.css: -------------------------------------------------------------------------------- 1 | /* neo theme for codemirror */ 2 | 3 | /* Color scheme */ 4 | 5 | .cm-s-neo.CodeMirror { 6 | background-color:#ffffff; 7 | color:#2e383c; 8 | line-height:1.4375; 9 | } 10 | .cm-s-neo .cm-comment {color:#75787b} 11 | .cm-s-neo .cm-keyword, .cm-s-neo .cm-property {color:#1d75b3} 12 | .cm-s-neo .cm-atom,.cm-s-neo .cm-number {color:#75438a} 13 | .cm-s-neo .cm-node,.cm-s-neo .cm-tag {color:#9c3328} 14 | .cm-s-neo .cm-string {color:#b35e14} 15 | .cm-s-neo .cm-variable,.cm-s-neo .cm-qualifier {color:#047d65} 16 | 17 | 18 | /* Editor styling */ 19 | 20 | .cm-s-neo pre { 21 | padding:0; 22 | } 23 | 24 | .cm-s-neo .CodeMirror-gutters { 25 | border:none; 26 | border-right:10px solid transparent; 27 | background-color:transparent; 28 | } 29 | 30 | .cm-s-neo .CodeMirror-linenumber { 31 | padding:0; 32 | color:#e0e2e5; 33 | } 34 | 35 | .cm-s-neo .CodeMirror-guttermarker { color: #1d75b3; } 36 | .cm-s-neo .CodeMirror-guttermarker-subtle { color: #e0e2e5; } 37 | 38 | .cm-s-neo div.CodeMirror-cursor { 39 | width: auto; 40 | border: 0; 41 | background: rgba(155,157,162,0.37); 42 | z-index: 1; 43 | } 44 | -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/admin/lib/jquery.flowchart.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery.flowchart.js v1.1.0 | jquery.flowchart.min.js | jQuery plugin for flowchart.js. | MIT License | By: Pandao | https://github.com/pandao/jquery.flowchart.js | 2015-03-09 */ 2 | (function(factory){if(typeof require==="function"&&typeof exports==="object"&&typeof module==="object"){module.exports=factory}else{if(typeof define==="function"){factory(jQuery,flowchart)}else{factory($,flowchart)}}}(function(jQuery,flowchart){(function($){$.fn.flowChart=function(options){options=options||{};var defaults={"x":0,"y":0,"line-width":2,"line-length":50,"text-margin":10,"font-size":14,"font-color":"black","line-color":"black","element-color":"black","fill":"white","yes-text":"yes","no-text":"no","arrow-end":"block","symbols":{"start":{"font-color":"black","element-color":"black","fill":"white"},"end":{"class":"end-element"}},"flowstate":{"past":{"fill":"#CCCCCC","font-size":12},"current":{"fill":"black","font-color":"white","font-weight":"bold"},"future":{"fill":"white"},"request":{"fill":"blue"},"invalid":{"fill":"#444444"},"approved":{"fill":"#58C4A3","font-size":12,"yes-text":"APPROVED","no-text":"n/a"},"rejected":{"fill":"#C45879","font-size":12,"yes-text":"n/a","no-text":"REJECTED"}}};return this.each(function(){var $this=$(this);var diagram=flowchart.parse($this.text());var settings=$.extend(true,defaults,options);$this.html("");diagram.drawSVG(this,settings)})}})(jQuery)})); -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/css/images/login_bgx.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/css/images/login_bgx.gif -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/css/images/m.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/css/images/m.png -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/css/images/thumb-default-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/css/images/thumb-default-small.png -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/ex/background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/ex/background.jpg -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/ex/detail.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/ex/detail.jpg -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/ex/index.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/ex/index.jpg -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/ex/markdown.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/ex/markdown.jpg -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/favicon.ico -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/image/avatar.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/image/avatar.jpg -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/image/error-img.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/image/error-img.png -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/image/fork_github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/image/fork_github.png -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/image/img-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/image/img-sprite.png -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/image/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/image/loading.gif -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/image/loading@2x.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/image/loading@2x.gif -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/image/loading@3x.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/image/loading@3x.gif -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/image/login_bgx.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/image/login_bgx.gif -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/image/login_m_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/image/login_m_bg.png -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/image/m.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/image/m.png -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/image/share_core_square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/image/share_core_square.jpg -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/image/social.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/image/social.png -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/image/thymeleaf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/image/thymeleaf.png -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/image/wechar.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MIYAOW/MI-S/7fd51fb1b8cec00a90d62672f3f98f5b11ccb264/mi-blog/src/main/resources/static/image/wechar.jpg -------------------------------------------------------------------------------- /mi-blog/src/main/resources/static/js/article-content.js: -------------------------------------------------------------------------------- 1 | $(function() { 2 | var testEditormdView; 3 | $('#main').addClass('loaded'); 4 | 5 | testEditormdView = editormd.markdownToHTML("article-content", { 6 | htmlDecode : "style,script, 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 38 | 39 | 40 |
主键标题内容状态来源创建时间操作
20 | 21 | 2016-10-14 10:41:50 30 | 31 | 32 | 35 | 36 | 37 |
41 | 42 | -------------------------------------------------------------------------------- /mi-blog/src/main/resources/templates/admin/flink/flinkTable.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 31 | 32 | 33 |
主键名称站点地址描述排序
24 | 27 | 30 |
34 | 35 | 40 | 41 |
42 | 43 | -------------------------------------------------------------------------------- /mi-blog/src/main/resources/templates/admin/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 |
7 |