├── .gitattributes ├── .mvn └── wrapper │ ├── maven-wrapper.jar │ └── maven-wrapper.properties ├── src ├── main │ ├── resources │ │ ├── static │ │ │ ├── plugins │ │ │ │ ├── bootstrap-fileinput │ │ │ │ │ ├── .gitignore │ │ │ │ │ ├── img │ │ │ │ │ │ ├── loading.gif │ │ │ │ │ │ └── loading-sm.gif │ │ │ │ │ ├── .github │ │ │ │ │ │ ├── PULL_REQUEST_TEMPLATE.md │ │ │ │ │ │ └── ISSUE_TEMPLATE.md │ │ │ │ │ └── js │ │ │ │ │ │ └── plugins │ │ │ │ │ │ └── canvas-to-blob.min.js │ │ │ │ ├── bootstrap-datetimepicker │ │ │ │ │ ├── .gitignore │ │ │ │ │ ├── .npmignore │ │ │ │ │ ├── .travis.yml │ │ │ │ │ ├── .gitattributes │ │ │ │ │ ├── .jshintrc │ │ │ │ │ └── js │ │ │ │ │ │ └── locales │ │ │ │ │ │ ├── bootstrap-datetimepicker.zh-CN.js │ │ │ │ │ │ └── bootstrap-datetimepicker.zh-TW.js │ │ │ │ ├── iCheck │ │ │ │ │ ├── flat │ │ │ │ │ │ ├── aero.png │ │ │ │ │ │ ├── blue.png │ │ │ │ │ │ ├── flat.png │ │ │ │ │ │ ├── grey.png │ │ │ │ │ │ ├── pink.png │ │ │ │ │ │ ├── red.png │ │ │ │ │ │ ├── aero@2x.png │ │ │ │ │ │ ├── blue@2x.png │ │ │ │ │ │ ├── flat@2x.png │ │ │ │ │ │ ├── green.png │ │ │ │ │ │ ├── grey@2x.png │ │ │ │ │ │ ├── orange.png │ │ │ │ │ │ ├── pink@2x.png │ │ │ │ │ │ ├── purple.png │ │ │ │ │ │ ├── red@2x.png │ │ │ │ │ │ ├── yellow.png │ │ │ │ │ │ ├── green@2x.png │ │ │ │ │ │ ├── orange@2x.png │ │ │ │ │ │ ├── purple@2x.png │ │ │ │ │ │ ├── yellow@2x.png │ │ │ │ │ │ ├── flat.css │ │ │ │ │ │ ├── red.css │ │ │ │ │ │ ├── aero.css │ │ │ │ │ │ ├── blue.css │ │ │ │ │ │ ├── grey.css │ │ │ │ │ │ ├── pink.css │ │ │ │ │ │ ├── green.css │ │ │ │ │ │ ├── orange.css │ │ │ │ │ │ ├── purple.css │ │ │ │ │ │ └── yellow.css │ │ │ │ │ ├── line │ │ │ │ │ │ ├── line.png │ │ │ │ │ │ └── line@2x.png │ │ │ │ │ ├── minimal │ │ │ │ │ │ ├── aero.png │ │ │ │ │ │ ├── blue.png │ │ │ │ │ │ ├── grey.png │ │ │ │ │ │ ├── pink.png │ │ │ │ │ │ ├── red.png │ │ │ │ │ │ ├── green.png │ │ │ │ │ │ ├── orange.png │ │ │ │ │ │ ├── purple.png │ │ │ │ │ │ ├── red@2x.png │ │ │ │ │ │ ├── yellow.png │ │ │ │ │ │ ├── aero@2x.png │ │ │ │ │ │ ├── blue@2x.png │ │ │ │ │ │ ├── green@2x.png │ │ │ │ │ │ ├── grey@2x.png │ │ │ │ │ │ ├── minimal.png │ │ │ │ │ │ ├── orange@2x.png │ │ │ │ │ │ ├── pink@2x.png │ │ │ │ │ │ ├── purple@2x.png │ │ │ │ │ │ ├── yellow@2x.png │ │ │ │ │ │ └── minimal@2x.png │ │ │ │ │ ├── square │ │ │ │ │ │ ├── aero.png │ │ │ │ │ │ ├── blue.png │ │ │ │ │ │ ├── green.png │ │ │ │ │ │ ├── grey.png │ │ │ │ │ │ ├── pink.png │ │ │ │ │ │ ├── red.png │ │ │ │ │ │ ├── aero@2x.png │ │ │ │ │ │ ├── blue@2x.png │ │ │ │ │ │ ├── grey@2x.png │ │ │ │ │ │ ├── orange.png │ │ │ │ │ │ ├── pink@2x.png │ │ │ │ │ │ ├── purple.png │ │ │ │ │ │ ├── red@2x.png │ │ │ │ │ │ ├── square.png │ │ │ │ │ │ ├── yellow.png │ │ │ │ │ │ ├── green@2x.png │ │ │ │ │ │ ├── orange@2x.png │ │ │ │ │ │ ├── purple@2x.png │ │ │ │ │ │ ├── square@2x.png │ │ │ │ │ │ ├── yellow@2x.png │ │ │ │ │ │ └── square.css │ │ │ │ │ ├── futurico │ │ │ │ │ │ ├── futurico.png │ │ │ │ │ │ ├── futurico@2x.png │ │ │ │ │ │ └── futurico.css │ │ │ │ │ └── polaris │ │ │ │ │ │ ├── polaris.png │ │ │ │ │ │ └── polaris@2x.png │ │ │ │ ├── layui │ │ │ │ │ ├── font │ │ │ │ │ │ ├── iconfont.eot │ │ │ │ │ │ ├── iconfont.ttf │ │ │ │ │ │ └── iconfont.woff │ │ │ │ │ ├── images │ │ │ │ │ │ └── face │ │ │ │ │ │ │ ├── 0.gif │ │ │ │ │ │ │ ├── 1.gif │ │ │ │ │ │ │ ├── 2.gif │ │ │ │ │ │ │ ├── 3.gif │ │ │ │ │ │ │ ├── 4.gif │ │ │ │ │ │ │ ├── 5.gif │ │ │ │ │ │ │ ├── 6.gif │ │ │ │ │ │ │ ├── 7.gif │ │ │ │ │ │ │ ├── 8.gif │ │ │ │ │ │ │ ├── 9.gif │ │ │ │ │ │ │ ├── 10.gif │ │ │ │ │ │ │ ├── 11.gif │ │ │ │ │ │ │ ├── 12.gif │ │ │ │ │ │ │ ├── 13.gif │ │ │ │ │ │ │ ├── 14.gif │ │ │ │ │ │ │ ├── 15.gif │ │ │ │ │ │ │ ├── 16.gif │ │ │ │ │ │ │ ├── 17.gif │ │ │ │ │ │ │ ├── 18.gif │ │ │ │ │ │ │ ├── 19.gif │ │ │ │ │ │ │ ├── 20.gif │ │ │ │ │ │ │ ├── 21.gif │ │ │ │ │ │ │ ├── 22.gif │ │ │ │ │ │ │ ├── 23.gif │ │ │ │ │ │ │ ├── 24.gif │ │ │ │ │ │ │ ├── 25.gif │ │ │ │ │ │ │ ├── 26.gif │ │ │ │ │ │ │ ├── 27.gif │ │ │ │ │ │ │ ├── 28.gif │ │ │ │ │ │ │ ├── 29.gif │ │ │ │ │ │ │ ├── 30.gif │ │ │ │ │ │ │ ├── 31.gif │ │ │ │ │ │ │ ├── 32.gif │ │ │ │ │ │ │ ├── 33.gif │ │ │ │ │ │ │ ├── 34.gif │ │ │ │ │ │ │ ├── 35.gif │ │ │ │ │ │ │ ├── 36.gif │ │ │ │ │ │ │ ├── 37.gif │ │ │ │ │ │ │ ├── 38.gif │ │ │ │ │ │ │ ├── 39.gif │ │ │ │ │ │ │ ├── 40.gif │ │ │ │ │ │ │ ├── 41.gif │ │ │ │ │ │ │ ├── 42.gif │ │ │ │ │ │ │ ├── 43.gif │ │ │ │ │ │ │ ├── 44.gif │ │ │ │ │ │ │ ├── 45.gif │ │ │ │ │ │ │ ├── 46.gif │ │ │ │ │ │ │ ├── 47.gif │ │ │ │ │ │ │ ├── 48.gif │ │ │ │ │ │ │ ├── 49.gif │ │ │ │ │ │ │ ├── 50.gif │ │ │ │ │ │ │ ├── 51.gif │ │ │ │ │ │ │ ├── 52.gif │ │ │ │ │ │ │ ├── 53.gif │ │ │ │ │ │ │ ├── 54.gif │ │ │ │ │ │ │ ├── 55.gif │ │ │ │ │ │ │ ├── 56.gif │ │ │ │ │ │ │ ├── 57.gif │ │ │ │ │ │ │ ├── 58.gif │ │ │ │ │ │ │ ├── 59.gif │ │ │ │ │ │ │ ├── 60.gif │ │ │ │ │ │ │ ├── 61.gif │ │ │ │ │ │ │ ├── 62.gif │ │ │ │ │ │ │ ├── 63.gif │ │ │ │ │ │ │ ├── 64.gif │ │ │ │ │ │ │ ├── 65.gif │ │ │ │ │ │ │ ├── 66.gif │ │ │ │ │ │ │ ├── 67.gif │ │ │ │ │ │ │ ├── 68.gif │ │ │ │ │ │ │ ├── 69.gif │ │ │ │ │ │ │ ├── 70.gif │ │ │ │ │ │ │ └── 71.gif │ │ │ │ │ ├── css │ │ │ │ │ │ └── modules │ │ │ │ │ │ │ ├── layer │ │ │ │ │ │ │ └── default │ │ │ │ │ │ │ │ ├── icon.png │ │ │ │ │ │ │ │ ├── icon-ext.png │ │ │ │ │ │ │ │ ├── loading-0.gif │ │ │ │ │ │ │ │ ├── loading-1.gif │ │ │ │ │ │ │ │ └── loading-2.gif │ │ │ │ │ │ │ └── code.css │ │ │ │ │ └── lay │ │ │ │ │ │ └── modules │ │ │ │ │ │ ├── code.js │ │ │ │ │ │ ├── laytpl.js │ │ │ │ │ │ └── util.js │ │ │ │ ├── font-awesome │ │ │ │ │ └── fonts │ │ │ │ │ │ ├── FontAwesome.otf │ │ │ │ │ │ ├── fontawesome-webfont.eot │ │ │ │ │ │ ├── fontawesome-webfont.ttf │ │ │ │ │ │ ├── fontawesome-webfont.woff │ │ │ │ │ │ └── fontawesome-webfont.woff2 │ │ │ │ ├── nice-validator-1.0.8 │ │ │ │ │ └── images │ │ │ │ │ │ ├── loading.gif │ │ │ │ │ │ ├── validator_simple.png │ │ │ │ │ │ └── validator_default.png │ │ │ │ ├── bootstrap │ │ │ │ │ ├── fonts │ │ │ │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ │ │ │ └── glyphicons-halflings-regular.woff2 │ │ │ │ │ └── js │ │ │ │ │ │ └── npm.js │ │ │ │ └── select2 │ │ │ │ │ └── i18n │ │ │ │ │ ├── zh-TW.js │ │ │ │ │ ├── zh-CN.js │ │ │ │ │ ├── az.js │ │ │ │ │ ├── fi.js │ │ │ │ │ ├── id.js │ │ │ │ │ ├── hu.js │ │ │ │ │ ├── tr.js │ │ │ │ │ ├── ko.js │ │ │ │ │ ├── nb.js │ │ │ │ │ ├── th.js │ │ │ │ │ ├── vi.js │ │ │ │ │ ├── is.js │ │ │ │ │ ├── de.js │ │ │ │ │ ├── et.js │ │ │ │ │ ├── hr.js │ │ │ │ │ ├── sv.js │ │ │ │ │ ├── bg.js │ │ │ │ │ ├── he.js │ │ │ │ │ ├── gl.js │ │ │ │ │ ├── da.js │ │ │ │ │ ├── fr.js │ │ │ │ │ ├── ro.js │ │ │ │ │ ├── en.js │ │ │ │ │ ├── fa.js │ │ │ │ │ ├── hi.js │ │ │ │ │ ├── mk.js │ │ │ │ │ ├── eu.js │ │ │ │ │ ├── pt-BR.js │ │ │ │ │ ├── pt.js │ │ │ │ │ ├── lv.js │ │ │ │ │ ├── es.js │ │ │ │ │ ├── lt.js │ │ │ │ │ ├── nl.js │ │ │ │ │ ├── ca.js │ │ │ │ │ ├── it.js │ │ │ │ │ ├── sr.js │ │ │ │ │ ├── pl.js │ │ │ │ │ ├── uk.js │ │ │ │ │ ├── ru.js │ │ │ │ │ ├── sk.js │ │ │ │ │ └── cs.js │ │ │ ├── favicon.ico │ │ │ ├── app │ │ │ │ ├── images │ │ │ │ │ ├── bg.jpg │ │ │ │ │ ├── delete.png │ │ │ │ │ ├── email.png │ │ │ │ │ ├── header.png │ │ │ │ │ ├── logo.png │ │ │ │ │ ├── name.png │ │ │ │ │ ├── password.png │ │ │ │ │ └── username.png │ │ │ │ ├── js │ │ │ │ │ ├── modules │ │ │ │ │ │ └── index.js │ │ │ │ │ └── x-layui.js │ │ │ │ └── css │ │ │ │ │ └── reset.css │ │ │ └── upload │ │ │ │ └── 2018-11-03 │ │ │ │ └── xt3urdeyvkgrq4nsd0uzbnlborompxlf.png │ │ ├── templates │ │ │ ├── u │ │ │ │ ├── testcase │ │ │ │ │ └── caseresult.html │ │ │ │ └── project │ │ │ │ │ ├── add.html │ │ │ │ │ └── edit.html │ │ │ ├── common │ │ │ │ ├── footer.html │ │ │ │ ├── layout_dl.html │ │ │ │ ├── layout.html │ │ │ │ ├── paginateBar.html │ │ │ │ └── head.html │ │ │ ├── index.html │ │ │ ├── system │ │ │ │ ├── role │ │ │ │ │ ├── users.html │ │ │ │ │ └── add.html │ │ │ │ ├── monitor │ │ │ │ │ └── list.html │ │ │ │ ├── dept │ │ │ │ │ ├── add.html │ │ │ │ │ └── edit.html │ │ │ │ └── menu │ │ │ │ │ └── edit.html │ │ │ └── error │ │ │ │ ├── 404.html │ │ │ │ ├── 500.html │ │ │ │ └── illegalAccess.html │ │ ├── logback.xml │ │ ├── mapper │ │ │ └── sys │ │ │ │ ├── SysDeptMapper.xml │ │ │ │ ├── SysUserRoleMapper.xml │ │ │ │ ├── ProjectMapper.xml │ │ │ │ ├── SysRoleMapper.xml │ │ │ │ ├── SysLogMapper.xml │ │ │ │ ├── SysSettingMapper.xml │ │ │ │ ├── SysRoleMenuMapper.xml │ │ │ │ ├── SysUserMapper.xml │ │ │ │ ├── TestcaseMapper.xml │ │ │ │ └── SysMenuMapper.xml │ │ ├── mybatis-config.xml │ │ └── application.yml │ └── java │ │ └── com │ │ └── luckin │ │ ├── common │ │ ├── config │ │ │ └── Config.java │ │ ├── anno │ │ │ └── Log.java │ │ ├── shiro │ │ │ ├── tag │ │ │ │ ├── LacksPermissionTag.java │ │ │ │ ├── HasRoleTag.java │ │ │ │ ├── HasPermissionTag.java │ │ │ │ ├── LacksRoleTag.java │ │ │ │ ├── RoleTag.java │ │ │ │ ├── ShiroTags.java │ │ │ │ ├── NotAuthenticatedTag.java │ │ │ │ ├── PermissionTag.java │ │ │ │ ├── SecureTag.java │ │ │ │ ├── GuestTag.java │ │ │ │ └── AuthenticatedTag.java │ │ │ └── ShiroTagFreeMarkerConfigurer.java │ │ ├── JsonpSupportAdvice.java │ │ ├── HttpHelper.java │ │ ├── enums │ │ │ └── Action.java │ │ ├── util │ │ │ ├── ValidateUtil.java │ │ │ ├── ShiroUtil.java │ │ │ ├── SpringUtil.java │ │ │ └── EhcacheHelper.java │ │ └── bean │ │ │ └── Rest.java │ │ ├── service │ │ ├── ISysRoleService.java │ │ ├── ISysDeptService.java │ │ ├── ProjectService.java │ │ ├── ISysSettingService.java │ │ ├── ISysUserRoleService.java │ │ ├── ISysLogService.java │ │ ├── impl │ │ │ ├── ProjectServiceImpl.java │ │ │ ├── SysRoleServiceImpl.java │ │ │ ├── SysDeptServiceImpl.java │ │ │ ├── SysSettingServiceImpl.java │ │ │ ├── SysUserRoleServiceImpl.java │ │ │ ├── SysLogServiceImpl.java │ │ │ └── TestcaseServiceImpl.java │ │ ├── ISysRoleMenuService.java │ │ ├── TestcaseService.java │ │ ├── ISysUserService.java │ │ └── ISysMenuService.java │ │ ├── mapper │ │ ├── SysLogMapper.java │ │ ├── SysRoleMapper.java │ │ ├── SysDeptMapper.java │ │ ├── SysSettingMapper.java │ │ ├── ProjectMapper.java │ │ ├── SysUserRoleMapper.java │ │ ├── SysRoleMenuMapper.java │ │ ├── SysMenuMapper.java │ │ ├── SysUserMapper.java │ │ └── TestcaseMapper.java │ │ ├── controller │ │ ├── IndexController.java │ │ ├── ErrorController.java │ │ └── system │ │ │ └── MonitorController.java │ │ ├── FreeMarkerConfig.java │ │ ├── MybatisPlusConfig.java │ │ ├── entity │ │ ├── vo │ │ │ ├── TreeMenu.java │ │ │ └── TreeMenuAllowAccess.java │ │ ├── SysRoleMenu.java │ │ ├── SysUserRole.java │ │ ├── SysDept.java │ │ └── Project.java │ │ ├── SpringbootAdminlteAdminApplication.java │ │ └── RestApiConfig.java └── test │ └── java │ └── com │ └── luckin │ └── SpringbootAdminlteAdminApplicationTests.java ├── .gitignore └── README.md /.gitattributes: -------------------------------------------------------------------------------- 1 | *.js linguist-language=java 2 | *.css linguist-language=java 3 | *.html linguist-language=java 4 | -------------------------------------------------------------------------------- /.mvn/wrapper/maven-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/.mvn/wrapper/maven-wrapper.jar -------------------------------------------------------------------------------- /src/main/resources/static/plugins/bootstrap-fileinput/.gitignore: -------------------------------------------------------------------------------- 1 | nuget/content/ 2 | nuget/bootstrap-fileinput.*.nupkg 3 | .DS_Store -------------------------------------------------------------------------------- /src/main/resources/static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/favicon.ico -------------------------------------------------------------------------------- /.mvn/wrapper/maven-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.5.3/apache-maven-3.5.3-bin.zip 2 | -------------------------------------------------------------------------------- /src/main/resources/static/app/images/bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/app/images/bg.jpg -------------------------------------------------------------------------------- /src/main/resources/static/app/images/delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/app/images/delete.png -------------------------------------------------------------------------------- /src/main/resources/static/app/images/email.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/app/images/email.png -------------------------------------------------------------------------------- /src/main/resources/static/app/images/header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/app/images/header.png -------------------------------------------------------------------------------- /src/main/resources/static/app/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/app/images/logo.png -------------------------------------------------------------------------------- /src/main/resources/static/app/images/name.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/app/images/name.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/bootstrap-datetimepicker/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | .idea 3 | *.iml 4 | atlassian-ide-plugin.xml 5 | yuicompressor-* 6 | -------------------------------------------------------------------------------- /src/main/resources/static/app/images/password.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/app/images/password.png -------------------------------------------------------------------------------- /src/main/resources/static/app/images/username.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/app/images/username.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/flat/aero.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/flat/aero.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/flat/blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/flat/blue.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/flat/flat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/flat/flat.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/flat/grey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/flat/grey.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/flat/pink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/flat/pink.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/flat/red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/flat/red.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/line/line.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/line/line.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/flat/aero@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/flat/aero@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/flat/blue@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/flat/blue@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/flat/flat@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/flat/flat@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/flat/green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/flat/green.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/flat/grey@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/flat/grey@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/flat/orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/flat/orange.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/flat/pink@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/flat/pink@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/flat/purple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/flat/purple.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/flat/red@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/flat/red@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/flat/yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/flat/yellow.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/line/line@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/line/line@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/minimal/aero.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/minimal/aero.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/minimal/blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/minimal/blue.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/minimal/grey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/minimal/grey.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/minimal/pink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/minimal/pink.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/minimal/red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/minimal/red.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/square/aero.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/square/aero.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/square/blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/square/blue.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/square/green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/square/green.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/square/grey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/square/grey.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/square/pink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/square/pink.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/square/red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/square/red.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/font/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/font/iconfont.eot -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/font/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/font/iconfont.ttf -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/0.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/1.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/2.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/3.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/4.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/4.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/5.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/5.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/6.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/6.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/7.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/7.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/8.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/8.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/9.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/9.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/flat/green@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/flat/green@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/flat/orange@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/flat/orange@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/flat/purple@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/flat/purple@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/flat/yellow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/flat/yellow@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/minimal/green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/minimal/green.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/minimal/orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/minimal/orange.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/minimal/purple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/minimal/purple.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/minimal/red@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/minimal/red@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/minimal/yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/minimal/yellow.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/square/aero@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/square/aero@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/square/blue@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/square/blue@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/square/grey@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/square/grey@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/square/orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/square/orange.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/square/pink@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/square/pink@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/square/purple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/square/purple.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/square/red@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/square/red@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/square/square.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/square/square.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/square/yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/square/yellow.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/font/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/font/iconfont.woff -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/10.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/10.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/11.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/11.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/12.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/12.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/13.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/13.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/14.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/14.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/15.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/15.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/16.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/16.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/17.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/17.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/18.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/18.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/19.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/19.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/20.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/20.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/21.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/21.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/22.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/22.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/23.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/23.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/24.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/24.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/25.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/25.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/26.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/26.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/27.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/27.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/28.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/28.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/29.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/29.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/30.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/30.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/31.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/31.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/32.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/32.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/33.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/33.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/34.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/34.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/35.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/35.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/36.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/36.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/37.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/37.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/38.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/38.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/39.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/39.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/40.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/40.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/41.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/41.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/42.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/42.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/43.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/43.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/44.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/44.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/45.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/45.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/46.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/46.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/47.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/47.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/48.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/48.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/49.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/49.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/50.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/50.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/51.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/51.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/52.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/52.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/53.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/53.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/54.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/54.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/55.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/55.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/56.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/56.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/57.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/57.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/58.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/58.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/59.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/59.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/60.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/60.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/61.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/61.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/62.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/62.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/63.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/63.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/64.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/64.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/65.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/65.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/66.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/66.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/67.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/67.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/68.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/68.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/69.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/69.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/70.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/70.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/images/face/71.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/images/face/71.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/futurico/futurico.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/futurico/futurico.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/minimal/aero@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/minimal/aero@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/minimal/blue@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/minimal/blue@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/minimal/green@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/minimal/green@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/minimal/grey@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/minimal/grey@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/minimal/minimal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/minimal/minimal.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/minimal/orange@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/minimal/orange@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/minimal/pink@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/minimal/pink@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/minimal/purple@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/minimal/purple@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/minimal/yellow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/minimal/yellow@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/polaris/polaris.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/polaris/polaris.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/square/green@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/square/green@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/square/orange@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/square/orange@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/square/purple@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/square/purple@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/square/square@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/square/square@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/square/yellow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/square/yellow@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/minimal/minimal@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/minimal/minimal@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/polaris/polaris@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/polaris/polaris@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/futurico/futurico@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/iCheck/futurico/futurico@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/bootstrap-fileinput/img/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/bootstrap-fileinput/img/loading.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/font-awesome/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/font-awesome/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /src/main/resources/static/plugins/bootstrap-fileinput/img/loading-sm.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/bootstrap-fileinput/img/loading-sm.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/bootstrap-datetimepicker/.npmignore: -------------------------------------------------------------------------------- 1 | # PHP Storm 2 | .idea 3 | *.iml 4 | atlassian-ide-plugin.xml 5 | yuicompressor-* 6 | build 7 | less 8 | sample* 9 | screenshot 10 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/css/modules/layer/default/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/css/modules/layer/default/icon.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/nice-validator-1.0.8/images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/nice-validator-1.0.8/images/loading.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/font-awesome/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/font-awesome/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /src/main/resources/static/plugins/font-awesome/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/font-awesome/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /src/main/resources/static/plugins/font-awesome/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/font-awesome/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /src/main/resources/static/plugins/bootstrap-datetimepicker/.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: false 2 | before_script: 3 | - cd ./tests 4 | - echo "new Date().toString();" | phantomjs 5 | script: phantomjs run-qunit.js tests.html 6 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/font-awesome/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/font-awesome/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/css/modules/layer/default/icon-ext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/css/modules/layer/default/icon-ext.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/css/modules/layer/default/loading-0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/css/modules/layer/default/loading-0.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/css/modules/layer/default/loading-1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/css/modules/layer/default/loading-1.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/css/modules/layer/default/loading-2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/layui/css/modules/layer/default/loading-2.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/bootstrap/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/bootstrap/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /src/main/resources/static/plugins/bootstrap/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/bootstrap/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /src/main/resources/static/plugins/nice-validator-1.0.8/images/validator_simple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/nice-validator-1.0.8/images/validator_simple.png -------------------------------------------------------------------------------- /src/main/resources/static/upload/2018-11-03/xt3urdeyvkgrq4nsd0uzbnlborompxlf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/upload/2018-11-03/xt3urdeyvkgrq4nsd0uzbnlborompxlf.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/bootstrap/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/bootstrap/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /src/main/resources/static/plugins/bootstrap/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/bootstrap/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /src/main/resources/static/plugins/nice-validator-1.0.8/images/validator_default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huangwnebin/AutoTestPlatform/HEAD/src/main/resources/static/plugins/nice-validator-1.0.8/images/validator_default.png -------------------------------------------------------------------------------- /src/main/resources/templates/u/testcase/caseresult.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | 5 | 6 |
${testcase.parameter}
7 |
8 | 9 | -------------------------------------------------------------------------------- /src/main/java/com/luckin/common/config/Config.java: -------------------------------------------------------------------------------- 1 | package com.luckin.common.config; 2 | 3 | /** 4 | * 全局静态配置 5 | * Created by Gaojun.Zhou 2017年4月8日 6 | */ 7 | public class Config { 8 | public static final String SSO_ENCODING = "UTF-8"; 9 | } -------------------------------------------------------------------------------- /src/main/java/com/luckin/service/ISysRoleService.java: -------------------------------------------------------------------------------- 1 | package com.luckin.service; 2 | 3 | import com.baomidou.mybatisplus.service.IService; 4 | import com.luckin.entity.SysRole; 5 | 6 | /** 7 | * 8 | * SysRole 表数据服务层接口 9 | * 10 | */ 11 | public interface ISysRoleService extends IService { 12 | 13 | 14 | } -------------------------------------------------------------------------------- /src/main/java/com/luckin/service/ISysDeptService.java: -------------------------------------------------------------------------------- 1 | package com.luckin.service; 2 | 3 | 4 | import com.baomidou.mybatisplus.service.IService; 5 | import com.luckin.entity.SysDept; 6 | 7 | /** 8 | * 9 | * SysDept 表数据服务层接口 10 | * 11 | */ 12 | public interface ISysDeptService extends IService { 13 | 14 | 15 | } -------------------------------------------------------------------------------- /src/main/java/com/luckin/service/ProjectService.java: -------------------------------------------------------------------------------- 1 | package com.luckin.service; 2 | 3 | 4 | import com.baomidou.mybatisplus.service.IService; 5 | import com.luckin.entity.Project; 6 | 7 | /** 8 | * 9 | * SysDept 表数据服务层接口 10 | * 11 | */ 12 | public interface ProjectService extends IService { 13 | 14 | 15 | } -------------------------------------------------------------------------------- /src/main/resources/templates/common/footer.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 | 7 | 8 | ${(bottomCopyright)!'Copyright © 2017 Company. All rights reserved.'} 9 |
-------------------------------------------------------------------------------- /src/main/resources/static/app/js/modules/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | 项目JS主入口 3 | 以依赖Layui的layer和form模块为例 4 | **/ 5 | layui.define(['layer', 'form'], function(exports){ 6 | var layer = layui.layer 7 | ,form = layui.form; 8 | 9 | //layer.msg('Hello World'); 10 | 11 | exports('index', {}); //注意,这里是模块输出的核心,模块名必须和use时的模块名一致 12 | }); -------------------------------------------------------------------------------- /src/main/java/com/luckin/common/anno/Log.java: -------------------------------------------------------------------------------- 1 | package com.luckin.common.anno; 2 | 3 | import java.lang.annotation.*; 4 | 5 | /** 6 | * 记录业务日志 7 | * @author Administrator 8 | * 9 | */ 10 | @Target(ElementType.METHOD) 11 | @Retention(RetentionPolicy.RUNTIME) 12 | @Documented 13 | public @interface Log { 14 | 15 | String value() ; 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/luckin/common/shiro/tag/LacksPermissionTag.java: -------------------------------------------------------------------------------- 1 | package com.luckin.common.shiro.tag; 2 | 3 | /** 4 | *

Equivalent to {@link org.apache.shiro.web.tags.LacksPermissionTag}

5 | */ 6 | public class LacksPermissionTag extends PermissionTag { 7 | protected boolean showTagBody(String p) { 8 | return !isPermitted(p); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/bootstrap-fileinput/.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ## Scope 2 | This pull request includes a 3 | 4 | - [ ] Bug fix 5 | - [ ] New feature 6 | - [ ] Translation 7 | 8 | ## Changes 9 | The following changes were made 10 | 11 | - 12 | - 13 | - 14 | 15 | ## Related Issues 16 | If this is related to an existing ticket, include a link to it as well. -------------------------------------------------------------------------------- /src/main/java/com/luckin/common/shiro/tag/HasRoleTag.java: -------------------------------------------------------------------------------- 1 | package com.luckin.common.shiro.tag; 2 | 3 | /** 4 | *

Equivalent to {@link org.apache.shiro.web.tags.HasRoleTag}

5 | */ 6 | public class HasRoleTag extends RoleTag { 7 | protected boolean showTagBody(String roleName) { 8 | return getSubject() != null && getSubject().hasRole(roleName); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /target/ 2 | !.mvn/wrapper/maven-wrapper.jar 3 | 4 | ### STS ### 5 | .apt_generated 6 | .classpath 7 | .factorypath 8 | .project 9 | .settings 10 | .springBeans 11 | .sts4-cache 12 | 13 | ### IntelliJ IDEA ### 14 | .idea 15 | *.iws 16 | *.iml 17 | *.ipr 18 | 19 | ### NetBeans ### 20 | /nbproject/private/ 21 | /build/ 22 | /nbbuild/ 23 | /dist/ 24 | /nbdist/ 25 | /.nb-gradle/ -------------------------------------------------------------------------------- /src/main/java/com/luckin/common/shiro/tag/HasPermissionTag.java: -------------------------------------------------------------------------------- 1 | package com.luckin.common.shiro.tag; 2 | 3 | /** 4 | *

Equivalent to {@link org.apache.shiro.web.tags.HasPermissionTag}

5 | * 6 | * @since 0.1 7 | */ 8 | public class HasPermissionTag extends PermissionTag { 9 | protected boolean showTagBody(String p) { 10 | return isPermitted(p); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/com/luckin/mapper/SysLogMapper.java: -------------------------------------------------------------------------------- 1 | package com.luckin.mapper; 2 | 3 | 4 | import com.baomidou.mybatisplus.mapper.BaseMapper; 5 | import com.luckin.entity.SysLog; 6 | import org.springframework.stereotype.Repository; 7 | 8 | /** 9 | *

10 | * 日志表 Mapper 接口 11 | *

12 | */ 13 | @Repository 14 | public interface SysLogMapper extends BaseMapper { 15 | 16 | } -------------------------------------------------------------------------------- /src/main/java/com/luckin/mapper/SysRoleMapper.java: -------------------------------------------------------------------------------- 1 | package com.luckin.mapper; 2 | 3 | import com.baomidou.mybatisplus.mapper.BaseMapper; 4 | import com.luckin.entity.SysRole; 5 | import org.springframework.stereotype.Repository; 6 | 7 | /** 8 | * 9 | * SysRole 表数据库控制层接口 10 | * 11 | */ 12 | @Repository 13 | public interface SysRoleMapper extends BaseMapper { 14 | 15 | 16 | } -------------------------------------------------------------------------------- /src/main/java/com/luckin/mapper/SysDeptMapper.java: -------------------------------------------------------------------------------- 1 | package com.luckin.mapper; 2 | 3 | import com.baomidou.mybatisplus.mapper.BaseMapper; 4 | import com.luckin.entity.SysDept; 5 | import org.springframework.stereotype.Repository; 6 | 7 | 8 | /** 9 | * 10 | * SysDept 表数据库控制层接口 11 | * 12 | */ 13 | @Repository 14 | public interface SysDeptMapper extends BaseMapper { 15 | 16 | 17 | } -------------------------------------------------------------------------------- /src/main/java/com/luckin/mapper/SysSettingMapper.java: -------------------------------------------------------------------------------- 1 | package com.luckin.mapper; 2 | 3 | import com.baomidou.mybatisplus.mapper.BaseMapper; 4 | import com.luckin.entity.SysSetting; 5 | import org.springframework.stereotype.Repository; 6 | 7 | 8 | /** 9 | * 10 | * SysSetting 表数据库控制层接口 11 | * 12 | */ 13 | @Repository 14 | public interface SysSettingMapper extends BaseMapper { 15 | 16 | 17 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # AutoTestPlatform 2 | 3 | AutoTestPlatformn是一个基于Springboot+AdminLTE+freemarker开发的自动化测试用例管理平台,目前只实现登陆、注册、用例管理、项目管理 4 | 后续会继续开发测试引擎,测试报告,邮件发送等模块; 5 | 该项目使用到的技术 6 | ## 前端技术: 7 | - Adminlte 2.4 8 | - JQuery 3.1.0 9 | - Bootstrap3.0 10 | ## 后端技术: 11 | - 核心框架:Spring Boot 2.0.1 12 | - 前端模板:adminLTE 13 | - 模板引擎:Freemark 14 | - 持久层框架:Mybatis-plus 15 | - 数据库连接池:Alibaba Druid 16 | - 权限控制:Shiro 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/main/java/com/luckin/service/ISysSettingService.java: -------------------------------------------------------------------------------- 1 | package com.luckin.service; 2 | 3 | 4 | import com.baomidou.mybatisplus.service.IService; 5 | import com.luckin.entity.SysSetting; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * 11 | * SysSetting 表数据服务层接口 12 | * 13 | */ 14 | public interface ISysSettingService extends IService { 15 | 16 | List findAll(); 17 | 18 | 19 | } -------------------------------------------------------------------------------- /src/main/java/com/luckin/common/shiro/tag/LacksRoleTag.java: -------------------------------------------------------------------------------- 1 | package com.luckin.common.shiro.tag; 2 | 3 | /** 4 | *

Equivalent to {@link org.apache.shiro.web.tags.LacksRoleTag}

5 | */ 6 | public class LacksRoleTag extends RoleTag { 7 | protected boolean showTagBody(String roleName) { 8 | boolean hasRole = getSubject() != null && getSubject().hasRole(roleName); 9 | return !hasRole; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/com/luckin/mapper/ProjectMapper.java: -------------------------------------------------------------------------------- 1 | package com.luckin.mapper; 2 | 3 | import com.baomidou.mybatisplus.mapper.BaseMapper; 4 | import com.luckin.entity.Project; 5 | import com.luckin.entity.SysDept; 6 | import org.springframework.stereotype.Repository; 7 | 8 | 9 | /** 10 | * 11 | * SysDept 表数据库控制层接口 12 | * 13 | */ 14 | @Repository 15 | public interface ProjectMapper extends BaseMapper { 16 | 17 | 18 | } -------------------------------------------------------------------------------- /src/main/resources/templates/common/layout_dl.html: -------------------------------------------------------------------------------- 1 | <#macro header> 2 | 3 | 4 | 5 | <#include "/common/head.html"> 6 | 7 | <#nested> 8 | 9 | 10 | 11 | <#macro body> 12 | <#nested> 13 | 14 | 15 | <#macro footer> 16 | <#include "/common/js.html"> 17 | <#nested> 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/test/java/com/luckin/SpringbootAdminlteAdminApplicationTests.java: -------------------------------------------------------------------------------- 1 | package com.luckin; 2 | 3 | import org.junit.Test; 4 | import org.junit.runner.RunWith; 5 | import org.springframework.boot.test.context.SpringBootTest; 6 | import org.springframework.test.context.junit4.SpringRunner; 7 | 8 | @RunWith(SpringRunner.class) 9 | @SpringBootTest 10 | public class SpringbootAdminlteAdminApplicationTests { 11 | 12 | @Test 13 | public void contextLoads() { 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/luckin/service/ISysUserRoleService.java: -------------------------------------------------------------------------------- 1 | package com.luckin.service; 2 | 3 | import com.baomidou.mybatisplus.service.IService; 4 | import com.luckin.entity.SysUserRole; 5 | 6 | import java.util.Set; 7 | 8 | 9 | /** 10 | * 11 | * SysUserRole 表数据服务层接口 12 | * 13 | */ 14 | public interface ISysUserRoleService extends IService { 15 | 16 | /** 17 | * 获取用户的角色 18 | * @param uid 19 | * @return 20 | */ 21 | Set findRolesByUid(String uid); 22 | } -------------------------------------------------------------------------------- /src/main/java/com/luckin/mapper/SysUserRoleMapper.java: -------------------------------------------------------------------------------- 1 | package com.luckin.mapper; 2 | 3 | import java.util.List; 4 | 5 | import com.baomidou.mybatisplus.mapper.BaseMapper; 6 | import com.luckin.entity.SysUserRole; 7 | import org.springframework.stereotype.Repository; 8 | 9 | /** 10 | * 11 | * SysUserRole 表数据库控制层接口 12 | * 13 | */ 14 | @Repository 15 | public interface SysUserRoleMapper extends BaseMapper { 16 | 17 | List selectPermissionByUid(String uid); 18 | 19 | } -------------------------------------------------------------------------------- /src/main/java/com/luckin/service/ISysLogService.java: -------------------------------------------------------------------------------- 1 | package com.luckin.service; 2 | 3 | 4 | import com.baomidou.mybatisplus.service.IService; 5 | import com.luckin.entity.SysLog; 6 | 7 | /** 8 | * 9 | * SysLog 表数据服务层接口 10 | * 11 | */ 12 | public interface ISysLogService extends IService { 13 | 14 | /** 15 | * 记录日志 16 | * @param title 17 | * @param uname 18 | * @param url 19 | * @param parms 20 | */ 21 | void insertLog(String title, String uname, String url, String parms); 22 | 23 | 24 | } -------------------------------------------------------------------------------- /src/main/resources/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 8 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/main/resources/templates/index.html: -------------------------------------------------------------------------------- 1 | <#include "/common/layout.html"> 2 | <@header> 3 | 4 | <@body> 5 |
6 | 7 |
8 |

9 | welocome 10 |

11 |
12 |
13 | 14 |
15 |
16 | 17 | 18 | <@footer> 19 | -------------------------------------------------------------------------------- /src/main/resources/mapper/sys/SysDeptMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/main/java/com/luckin/service/impl/ProjectServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.luckin.service.impl; 2 | 3 | import com.baomidou.mybatisplus.service.impl.ServiceImpl; 4 | import com.luckin.entity.Project; 5 | import com.luckin.mapper.ProjectMapper; 6 | import com.luckin.service.ProjectService; 7 | import org.springframework.stereotype.Service; 8 | 9 | 10 | /** 11 | * 12 | * Project 表数据服务层接口实现类 13 | * 14 | */ 15 | @Service 16 | public class ProjectServiceImpl extends ServiceImpl implements ProjectService { 17 | 18 | 19 | } -------------------------------------------------------------------------------- /src/main/resources/mapper/sys/SysUserRoleMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/main/java/com/luckin/service/impl/SysRoleServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.luckin.service.impl; 2 | 3 | import com.baomidou.mybatisplus.service.impl.ServiceImpl; 4 | import com.luckin.entity.SysRole; 5 | import com.luckin.mapper.SysRoleMapper; 6 | import com.luckin.service.ISysRoleService; 7 | import org.springframework.stereotype.Service; 8 | 9 | 10 | /** 11 | * 12 | * SysRole 表数据服务层接口实现类 13 | * 14 | */ 15 | @Service 16 | public class SysRoleServiceImpl extends ServiceImpl implements ISysRoleService { 17 | 18 | 19 | } -------------------------------------------------------------------------------- /src/main/java/com/luckin/common/JsonpSupportAdvice.java: -------------------------------------------------------------------------------- 1 | package com.luckin.common; 2 | import org.springframework.web.bind.annotation.ControllerAdvice; 3 | import org.springframework.web.servlet.mvc.method.annotation.AbstractJsonpResponseBodyAdvice; 4 | 5 | /** 6 | * JSONP支持,暂时用不到 7 | * @author Administrator 8 | * 9 | */ 10 | @ControllerAdvice 11 | public class JsonpSupportAdvice extends AbstractJsonpResponseBodyAdvice { 12 | public JsonpSupportAdvice() { 13 | //参数包含callback的时候 使用jsonp的反馈形式 14 | super("callback"); 15 | } 16 | } -------------------------------------------------------------------------------- /src/main/java/com/luckin/service/impl/SysDeptServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.luckin.service.impl; 2 | 3 | import com.baomidou.mybatisplus.service.impl.ServiceImpl; 4 | import com.luckin.entity.SysDept; 5 | 6 | import com.luckin.mapper.SysDeptMapper; 7 | import com.luckin.service.ISysDeptService; 8 | import org.springframework.stereotype.Service; 9 | 10 | 11 | /** 12 | * 13 | * SysDept 表数据服务层接口实现类 14 | * 15 | */ 16 | @Service 17 | public class SysDeptServiceImpl extends ServiceImpl implements ISysDeptService { 18 | 19 | 20 | } -------------------------------------------------------------------------------- /src/main/java/com/luckin/common/HttpHelper.java: -------------------------------------------------------------------------------- 1 | package com.luckin.common; 2 | 3 | import org.springframework.web.context.request.RequestContextHolder; 4 | import org.springframework.web.context.request.ServletRequestAttributes; 5 | 6 | import javax.servlet.http.HttpServletRequest; 7 | 8 | public class HttpHelper { 9 | 10 | /** 11 | * 获取 HttpServletRequest 12 | */ 13 | public static HttpServletRequest getHttpServletRequest() { 14 | return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/luckin/mapper/SysRoleMenuMapper.java: -------------------------------------------------------------------------------- 1 | package com.luckin.mapper; 2 | 3 | import java.util.List; 4 | 5 | import com.baomidou.mybatisplus.mapper.BaseMapper; 6 | import com.luckin.entity.SysRoleMenu; 7 | import org.springframework.stereotype.Repository; 8 | 9 | 10 | /** 11 | * 12 | * SysRoleMenu 表数据库控制层接口 13 | * 14 | */ 15 | @Repository 16 | public interface SysRoleMenuMapper extends BaseMapper { 17 | 18 | /** 19 | * 根据用户Id获取用户所在角色的权限 20 | */ 21 | public List selectRoleMenuIdsByUserId(String uid); 22 | 23 | } -------------------------------------------------------------------------------- /src/main/java/com/luckin/common/shiro/ShiroTagFreeMarkerConfigurer.java: -------------------------------------------------------------------------------- 1 | package com.luckin.common.shiro; 2 | 3 | /** 4 | * Created by Administrator on 2016/3/15. 5 | */ 6 | //public class ShiroTagFreeMarkerConfigurer extends FreeMarkerConfigurer { 7 | // 8 | // 9 | // @Override 10 | // public void afterPropertiesSet() throws IOException, TemplateException { 11 | // super.afterPropertiesSet(); 12 | // this.getConfiguration().setSharedVariable("shiro", new ShiroTags()); 13 | // } 14 | // 15 | //} 16 | 17 | public class ShiroTagFreeMarkerConfigurer{} 18 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/bootstrap/js/npm.js: -------------------------------------------------------------------------------- 1 | // This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment. 2 | require('../../js/transition.js') 3 | require('../../js/alert.js') 4 | require('../../js/button.js') 5 | require('../../js/carousel.js') 6 | require('../../js/collapse.js') 7 | require('../../js/dropdown.js') 8 | require('../../js/modal.js') 9 | require('../../js/tooltip.js') 10 | require('../../js/popover.js') 11 | require('../../js/scrollspy.js') 12 | require('../../js/tab.js') 13 | require('../../js/affix.js') -------------------------------------------------------------------------------- /src/main/java/com/luckin/common/enums/Action.java: -------------------------------------------------------------------------------- 1 | package com.luckin.common.enums; 2 | 3 | public enum Action { 4 | 5 | /** 正常(默认) */ 6 | Normal("0", "执行权限验证"), 7 | 8 | /** 跳过 */ 9 | Skip("1", "跳过权限验证"); 10 | 11 | /** 主键 */ 12 | private final String key; 13 | 14 | /** 描述 */ 15 | private final String desc; 16 | 17 | 18 | Action(final String key, final String desc) { 19 | this.key = key; 20 | this.desc = desc; 21 | } 22 | 23 | public String getKey() { 24 | return this.key; 25 | } 26 | 27 | public String getDesc() { 28 | return this.desc; 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/com/luckin/controller/IndexController.java: -------------------------------------------------------------------------------- 1 | package com.luckin.controller; 2 | 3 | import org.springframework.stereotype.Controller; 4 | import org.springframework.ui.Model; 5 | import org.springframework.web.bind.annotation.RequestMapping; 6 | /** 7 | * 首页控制器 8 | * @ClassName: IndexController 9 | * @author Gaojun.Zhou 10 | * @date 2016年12月8日 下午8:42:40 11 | * 12 | */ 13 | @Controller 14 | @RequestMapping("/") 15 | public class IndexController { 16 | 17 | @RequestMapping({"","/","index"}) 18 | public String index(Model model){ 19 | return "index"; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/com/luckin/mapper/SysMenuMapper.java: -------------------------------------------------------------------------------- 1 | package com.luckin.mapper; 2 | 3 | import java.util.List; 4 | 5 | import com.baomidou.mybatisplus.mapper.BaseMapper; 6 | import com.luckin.entity.SysMenu; 7 | import org.apache.ibatis.annotations.Param; 8 | import org.springframework.stereotype.Repository; 9 | 10 | 11 | /** 12 | * 13 | * SysMenu 表数据库控制层接口 14 | * 15 | */ 16 | @Repository 17 | public interface SysMenuMapper extends BaseMapper { 18 | 19 | List selectMenuIdsByuserId(String uid); 20 | 21 | List selectResourceByUid(@Param("uid") String uid); 22 | 23 | } -------------------------------------------------------------------------------- /src/main/resources/mapper/sys/ProjectMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/main/resources/templates/common/layout.html: -------------------------------------------------------------------------------- 1 | <#macro header> 2 | 3 | 4 | 5 | <#include "/common/head.html"> 6 | <#nested> 7 | 8 | 9 | 10 | <#macro body> 11 | 12 |
13 | <#include "/common/header.html"> 14 | <#include "/common/menu.html"> 15 | <#nested> 16 | <#include "/common/footer.html"> 17 |
18 |
19 | 20 | 21 | <#macro footer> 22 | <#include "/common/js.html"> 23 | <#nested> 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/main/java/com/luckin/service/ISysRoleMenuService.java: -------------------------------------------------------------------------------- 1 | package com.luckin.service; 2 | 3 | import com.baomidou.mybatisplus.service.IService; 4 | import com.luckin.entity.SysRoleMenu; 5 | 6 | import java.util.List; 7 | import java.util.Set; 8 | 9 | 10 | /** 11 | * 12 | * SysRoleMenu 表数据服务层接口 13 | * 14 | */ 15 | public interface ISysRoleMenuService extends IService { 16 | 17 | /** 18 | * 角色授权 19 | */ 20 | void addAuth(String roleId, String[] menuIds); 21 | 22 | /** 23 | * 获取指定角色的权限 24 | */ 25 | List selectByRole(String roleId); 26 | 27 | Set findMenusByUid(String id); 28 | 29 | 30 | } -------------------------------------------------------------------------------- /src/main/resources/templates/system/role/users.html: -------------------------------------------------------------------------------- 1 | <#include "/common/layout_dl.html"> 2 | <@header> 3 | 4 | <@body> 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | <#list users as user> 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
用户名描述创建时间状态
${(user.userName)!}${(user.userDesc)!'--'}${(user.createTime?string('yyyy/MM/dd HH:mm:ss'))!}<#if user.userState==1>启用<#else>禁用
21 | 22 | <@footer> 23 | 24 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/bootstrap-datetimepicker/.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | *.sln merge=union 7 | *.csproj merge=union 8 | *.vbproj merge=union 9 | *.fsproj merge=union 10 | *.dbproj merge=union 11 | 12 | # Standard to msysgit 13 | *.doc diff=astextplain 14 | *.DOC diff=astextplain 15 | *.docx diff=astextplain 16 | *.DOCX diff=astextplain 17 | *.dot diff=astextplain 18 | *.DOT diff=astextplain 19 | *.pdf diff=astextplain 20 | *.PDF diff=astextplain 21 | *.rtf diff=astextplain 22 | *.RTF diff=astextplain 23 | -------------------------------------------------------------------------------- /src/main/resources/mapper/sys/SysRoleMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/main/java/com/luckin/common/util/ValidateUtil.java: -------------------------------------------------------------------------------- 1 | package com.luckin.common.util; 2 | 3 | import org.springframework.validation.BindingResult; 4 | import org.springframework.validation.FieldError; 5 | 6 | import java.util.HashMap; 7 | import java.util.Map; 8 | 9 | public class ValidateUtil { 10 | 11 | public static Map toStringJson(BindingResult result){ 12 | 13 | Map map = new HashMap(); 14 | 15 | for(FieldError fieldError : result.getFieldErrors()){ 16 | map.put(fieldError.getField(), fieldError.getDefaultMessage()); 17 | } 18 | 19 | return map; 20 | 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/com/luckin/controller/ErrorController.java: -------------------------------------------------------------------------------- 1 | package com.luckin.controller; 2 | 3 | import org.springframework.stereotype.Controller; 4 | import org.springframework.ui.Model; 5 | import org.springframework.web.bind.annotation.PathVariable; 6 | import org.springframework.web.bind.annotation.RequestMapping; 7 | /** 8 | * 错误控制器 9 | * @author Gaojun.Zhou 10 | * @date 2016年12月14日 下午6:06:01 11 | */ 12 | @Controller 13 | @RequestMapping("/error") 14 | public class ErrorController { 15 | @RequestMapping(value ="/{code}") 16 | public String index(@PathVariable String code,Model model){ 17 | return "error/" + code; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/luckin/mapper/SysUserMapper.java: -------------------------------------------------------------------------------- 1 | package com.luckin.mapper; 2 | 3 | import java.util.List; 4 | import java.util.Map; 5 | 6 | import com.luckin.entity.SysUser; 7 | import org.apache.ibatis.annotations.Param; 8 | 9 | import com.baomidou.mybatisplus.mapper.BaseMapper; 10 | import com.baomidou.mybatisplus.plugins.Page; 11 | import org.springframework.stereotype.Repository; 12 | 13 | 14 | /** 15 | * 16 | * SysUser 表数据库控制层接口 17 | * 18 | */ 19 | @Repository 20 | public interface SysUserMapper extends BaseMapper { 21 | 22 | List> selectUserList(Page> page, @Param("search") String search); 23 | } -------------------------------------------------------------------------------- /src/main/java/com/luckin/mapper/TestcaseMapper.java: -------------------------------------------------------------------------------- 1 | package com.luckin.mapper; 2 | 3 | import com.baomidou.mybatisplus.mapper.BaseMapper; 4 | import com.baomidou.mybatisplus.plugins.Page; 5 | import com.luckin.entity.Testcase; 6 | import org.apache.ibatis.annotations.Param; 7 | import org.springframework.stereotype.Repository; 8 | 9 | import java.util.List; 10 | import java.util.Map; 11 | 12 | 13 | /** 14 | * 15 | * Testcase 表数据库控制层接口 16 | * 17 | */ 18 | @Repository 19 | public interface TestcaseMapper extends BaseMapper { 20 | 21 | List> selectTestcaseList(Page> page, @Param("search") String search); 22 | } -------------------------------------------------------------------------------- /src/main/resources/templates/error/404.html: -------------------------------------------------------------------------------- 1 | <#include "/common/layout.html"> 2 | <@header> 3 | 4 | <@body> 5 |
6 | 7 |
8 |
9 |
10 |

404, Page not found.

11 |

糟糕,您访问的页面不存在,您可以点击这里 返回首页或刷新页面重试! 12 |

13 |
14 |
15 |
16 |
17 | 18 | <@footer> 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/i18n/zh-TW.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/zh-TW",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="請刪掉"+t+"個字元";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="請再輸入"+t+"個字元";return n},loadingMore:function(){return"載入中…"},maximumSelected:function(e){var t="你只能選擇最多"+e.maximum+"項";return t},noResults:function(){return"沒有找到相符的項目"},searching:function(){return"搜尋中…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/mapper/sys/SysLogMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/main/resources/mapper/sys/SysSettingMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/main/resources/templates/error/500.html: -------------------------------------------------------------------------------- 1 | <#include "/common/layout.html"> 2 | <@header> 3 | 4 | <@body> 5 |
6 | 7 |
8 |
9 |
10 |

500, Server error.

11 |

糟糕,服务器异常,您可以点击这里 返回首页或刷新页面重试! 12 |

Error:${error!} 13 |

14 |
15 |
16 |
17 |
18 | 19 | <@footer> 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/main/resources/templates/error/illegalAccess.html: -------------------------------------------------------------------------------- 1 | <#include "/common/layout.html"> 2 | <@header> 3 | 4 | <@body> 5 |
6 | 7 |
8 |
9 |
10 |

illegalAccess

11 |

资源地址: ${url!}. 12 |

您没有访问权限,您可以点击这里 返回首页或刷新页面重试! 13 |

14 |
15 |
16 |
17 |
18 | 19 | <@footer> 20 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/i18n/zh-CN.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/zh-CN",[],function(){return{errorLoading:function(){return"无法载入结果。"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="请删除"+t+"个字符";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="请再输入至少"+t+"个字符";return n},loadingMore:function(){return"载入更多结果…"},maximumSelected:function(e){var t="最多只能选择"+e.maximum+"个项目";return t},noResults:function(){return"未找到结果"},searching:function(){return"搜索中…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/i18n/az.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/az",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return t+" simvol silin"},inputTooShort:function(e){var t=e.minimum-e.input.length;return t+" simvol daxil edin"},loadingMore:function(){return"Daha çox nəticə yüklənir…"},maximumSelected:function(e){return"Sadəcə "+e.maximum+" element seçə bilərsiniz"},noResults:function(){return"Nəticə tapılmadı"},searching:function(){return"Axtarılır…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/i18n/fi.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/fi",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return"Ole hyvä ja anna "+t+" merkkiä vähemmän"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Ole hyvä ja anna "+t+" merkkiä lisää"},loadingMore:function(){return"Ladataan lisää tuloksia…"},maximumSelected:function(e){return"Voit valita ainoastaan "+e.maximum+" kpl"},noResults:function(){return"Ei tuloksia"},searching:function(){}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/i18n/id.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/id",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return"Hapuskan "+t+" huruf"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Masukkan "+t+" huruf lagi"},loadingMore:function(){return"Mengambil data…"},maximumSelected:function(e){return"Anda hanya dapat memilih "+e.maximum+" pilihan"},noResults:function(){return"Tidak ada data yang sesuai"},searching:function(){return"Mencari…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/i18n/hu.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/hu",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return"Túl hosszú. "+t+" karakterrel több, mint kellene."},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Túl rövid. Még "+t+" karakter hiányzik."},loadingMore:function(){return"Töltés…"},maximumSelected:function(e){return"Csak "+e.maximum+" elemet lehet kiválasztani."},noResults:function(){return"Nincs találat."},searching:function(){return"Keresés…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/i18n/tr.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/tr",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n=t+" karakter daha girmelisiniz";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="En az "+t+" karakter daha girmelisiniz";return n},loadingMore:function(){return"Daha fazla…"},maximumSelected:function(e){var t="Sadece "+e.maximum+" seçim yapabilirsiniz";return t},noResults:function(){return"Sonuç bulunamadı"},searching:function(){return"Aranıyor…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/i18n/ko.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ko",[],function(){return{errorLoading:function(){return"결과를 불러올 수 없습니다."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="너무 깁니다. "+t+" 글자 지워주세요.";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="너무 짧습니다. "+t+" 글자 더 입력해주세요.";return n},loadingMore:function(){return"불러오는 중…"},maximumSelected:function(e){var t="최대 "+e.maximum+"개까지만 선택 가능합니다.";return t},noResults:function(){return"결과가 없습니다."},searching:function(){return"검색 중…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/i18n/nb.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/nb",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return"Vennligst fjern "+t+" tegn"},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vennligst skriv inn ";return t>1?n+=" flere tegn":n+=" tegn til",n},loadingMore:function(){return"Laster flere resultater…"},maximumSelected:function(e){return"Du kan velge maks "+e.maximum+" elementer"},noResults:function(){return"Ingen treff"},searching:function(){return"Søker…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/i18n/th.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/th",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="โปรดลบออก "+t+" ตัวอักษร";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="โปรดพิมพ์เพิ่มอีก "+t+" ตัวอักษร";return n},loadingMore:function(){return"กำลังค้นข้อมูลเพิ่ม…"},maximumSelected:function(e){var t="คุณสามารถเลือกได้ไม่เกิน "+e.maximum+" รายการ";return t},noResults:function(){return"ม่พบข้อมูล"},searching:function(){return"กำลังค้นข้อมูล…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/templates/system/monitor/list.html: -------------------------------------------------------------------------------- 1 | <#include "/common/layout.html"> 2 | <@header> 3 | 4 | <@body> 5 |
6 | 7 |
8 |

9 | 系统管理 > 系统监控 10 |

11 |
12 | 13 |
14 | 15 |
16 |
17 | 18 |
19 |
20 |
21 |
22 | 23 | <@footer> 24 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/bootstrap-datetimepicker/.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "bitwise": false, 3 | "camelcase": false, 4 | "curly": false, 5 | "eqeqeq": true, 6 | "es3": false, 7 | "forin": false, 8 | "freeze": false, 9 | "immed": false, 10 | "sub": true, 11 | "latedef": false, 12 | "newcap": false, 13 | "noarg": false, 14 | "node": true, 15 | "laxbreak": true, 16 | "noempty": true, 17 | "varstmt": false, 18 | "nonbsp": true, 19 | "nonew": false, 20 | "plusplus": false, 21 | "quotmark": "single", 22 | "undef": true, 23 | "unused": true, 24 | "esversion": 6, 25 | "strict": false, 26 | "trailing": true, 27 | "browser": false, 28 | "asi": true, 29 | "predef": ["window","document","jQuery","define"] 30 | } 31 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.zh-CN.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Simplified Chinese translation for bootstrap-datetimepicker 3 | * Yuan Cheung 4 | */ 5 | ;(function($){ 6 | $.fn.datetimepicker.dates['zh-CN'] = { 7 | days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"], 8 | daysShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六", "周日"], 9 | daysMin: ["日", "一", "二", "三", "四", "五", "六", "日"], 10 | months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], 11 | monthsShort: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], 12 | today: "今天", 13 | suffix: [], 14 | meridiem: ["上午", "下午"] 15 | }; 16 | }(jQuery)); 17 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.zh-TW.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Traditional Chinese translation for bootstrap-datetimepicker 3 | * Rung-Sheng Jang 4 | */ 5 | ;(function($){ 6 | $.fn.datetimepicker.dates['zh-TW'] = { 7 | days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"], 8 | daysShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六", "周日"], 9 | daysMin: ["日", "一", "二", "三", "四", "五", "六", "日"], 10 | months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], 11 | monthsShort: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], 12 | today: "今天", 13 | suffix: [], 14 | meridiem: ["上午", "下午"] 15 | }; 16 | }(jQuery)); 17 | -------------------------------------------------------------------------------- /src/main/java/com/luckin/service/TestcaseService.java: -------------------------------------------------------------------------------- 1 | package com.luckin.service; 2 | 3 | import com.baomidou.mybatisplus.plugins.Page; 4 | import com.baomidou.mybatisplus.service.IService; 5 | import com.luckin.entity.Testcase; 6 | 7 | import java.util.Map; 8 | 9 | 10 | /** 11 | * 12 | * testcase 表数据服务层接口 13 | * 14 | */ 15 | public interface TestcaseService extends IService { 16 | 17 | /** 18 | * 分页查询用例 19 | */ 20 | Page> selectTestcasePage(Page> page, String search); 21 | 22 | /** 23 | * 保存用例 24 | */ 25 | void insertTestcase(Testcase testcase); 26 | /** 27 | * 更新用例 28 | */ 29 | void updateTestcase(Testcase testcase); 30 | /** 31 | * 删除用例 32 | */ 33 | void delete(String id); 34 | //查询用例是否存在 35 | 36 | } -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/i18n/vi.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/vi",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vui lòng nhập ít hơn "+t+" ký tự";return t!=1&&(n+="s"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vui lòng nhập nhiều hơn "+t+' ký tự"';return n},loadingMore:function(){return"Đang lấy thêm kết quả…"},maximumSelected:function(e){var t="Chỉ có thể chọn được "+e.maximum+" lựa chọn";return t},noResults:function(){return"Không tìm thấy kết quả"},searching:function(){return"Đang tìm…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/java/com/luckin/service/ISysUserService.java: -------------------------------------------------------------------------------- 1 | package com.luckin.service; 2 | 3 | import java.util.Map; 4 | 5 | import com.baomidou.mybatisplus.plugins.Page; 6 | import com.baomidou.mybatisplus.service.IService; 7 | import com.luckin.entity.SysUser; 8 | 9 | 10 | /** 11 | * 12 | * SysUser 表数据服务层接口 13 | * 14 | */ 15 | public interface ISysUserService extends IService { 16 | 17 | /** 18 | * 分页查询用户 19 | */ 20 | Page> selectUserPage(Page> page, String search); 21 | 22 | /** 23 | * 保存用户 24 | */ 25 | void insertUser(SysUser user, String[] roleId); 26 | /** 27 | * 更新用户 28 | */ 29 | void updateUser(SysUser sysUser, String[] roleId); 30 | /** 31 | * 删除用户 32 | */ 33 | void delete(String id); 34 | 35 | 36 | } -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/i18n/is.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/is",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vinsamlegast styttið texta um "+t+" staf";return t<=1?n:n+"i"},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vinsamlegast skrifið "+t+" staf";return t>1&&(n+="i"),n+=" í viðbót",n},loadingMore:function(){return"Sæki fleiri niðurstöður…"},maximumSelected:function(e){return"Þú getur aðeins valið "+e.maximum+" atriði"},noResults:function(){return"Ekkert fannst"},searching:function(){return"Leita…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/java/com/luckin/FreeMarkerConfig.java: -------------------------------------------------------------------------------- 1 | package com.luckin; 2 | 3 | import com.luckin.common.shiro.tag.ShiroTags; 4 | 5 | import javax.annotation.PostConstruct; 6 | 7 | import org.springframework.beans.factory.annotation.Autowired; 8 | import org.springframework.context.annotation.Configuration; 9 | 10 | 11 | /** 12 | * 13 | * 配置测试 14 | * 15 | * 16 | * Created by luckin on 2018/4/14. 17 | */ 18 | @Configuration 19 | public class FreeMarkerConfig { 20 | 21 | @Autowired 22 | private freemarker.template.Configuration configuration; 23 | 24 | @PostConstruct 25 | public void setSharedVariable() { 26 | try { 27 | configuration.setSharedVariable("shiro", new ShiroTags()); 28 | } catch (Exception e) { 29 | e.printStackTrace(); 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/i18n/de.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/de",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return"Bitte "+t+" Zeichen weniger eingeben"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Bitte "+t+" Zeichen mehr eingeben"},loadingMore:function(){return"Lade mehr Ergebnisse…"},maximumSelected:function(e){var t="Sie können nur "+e.maximum+" Eintr";return e.maximum===1?t+="ag":t+="äge",t+=" auswählen",t},noResults:function(){return"Keine Übereinstimmungen gefunden"},searching:function(){return"Suche…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/i18n/et.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/et",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Sisesta "+t+" täht";return t!=1&&(n+="e"),n+=" vähem",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Sisesta "+t+" täht";return t!=1&&(n+="e"),n+=" rohkem",n},loadingMore:function(){return"Laen tulemusi…"},maximumSelected:function(e){var t="Saad vaid "+e.maximum+" tulemus";return e.maximum==1?t+="e":t+="t",t+=" valida",t},noResults:function(){return"Tulemused puuduvad"},searching:function(){return"Otsin…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/i18n/hr.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/hr",[],function(){function e(e){var t=" "+e+" znak";return e%10<5&&e%10>0&&(e%100<5||e%100>19)?e%10>1&&(t+="a"):t+="ova",t}return{inputTooLong:function(t){var n=t.input.length-t.maximum;return"Unesite "+e(n)},inputTooShort:function(t){var n=t.minimum-t.input.length;return"Unesite još "+e(n)},loadingMore:function(){return"Učitavanje rezultata…"},maximumSelected:function(e){return"Maksimalan broj odabranih stavki je "+e.maximum},noResults:function(){return"Nema rezultata"},searching:function(){return"Pretraga…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/i18n/sv.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/sv",[],function(){return{errorLoading:function(){return"Resultat kunde inte laddas."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vänligen sudda ut "+t+" tecken";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vänligen skriv in "+t+" eller fler tecken";return n},loadingMore:function(){return"Laddar fler resultat…"},maximumSelected:function(e){var t="Du kan max välja "+e.maximum+" element";return t},noResults:function(){return"Inga träffar"},searching:function(){return"Söker…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/java/com/luckin/controller/system/MonitorController.java: -------------------------------------------------------------------------------- 1 | package com.luckin.controller.system; 2 | 3 | import org.apache.shiro.authz.annotation.RequiresPermissions; 4 | import org.springframework.stereotype.Controller; 5 | import org.springframework.ui.Model; 6 | import org.springframework.web.bind.annotation.RequestMapping; 7 | 8 | import com.luckin.common.controller.SuperController; 9 | /** 10 | * 监控 11 | * @author Gaojun.Zhou 12 | * @date 2017年2月5日 下午3:38:19 13 | */ 14 | @Controller 15 | @RequestMapping("/system/monitor") 16 | public class MonitorController extends SuperController{ 17 | 18 | /** 19 | * 系统监控列表 20 | */ 21 | @RequiresPermissions("monitorList") 22 | @RequestMapping("/list") 23 | public String list(Model model){ 24 | return "system/monitor/list"; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/i18n/bg.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/bg",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Моля въведете с "+t+" по-малко символ";return t>1&&(n+="a"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Моля въведете още "+t+" символ";return t>1&&(n+="a"),n},loadingMore:function(){return"Зареждат се още…"},maximumSelected:function(e){var t="Можете да направите до "+e.maximum+" ";return e.maximum>1?t+="избора":t+="избор",t},noResults:function(){return"Няма намерени съвпадения"},searching:function(){return"Търсене…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/i18n/he.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/he",[],function(){return{errorLoading:function(){return"התוצאות לא נטענו בהלכה"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="נא למחוק "+t+" תווים";return t!=1&&(n+="s"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="נא להכניס "+t+" תווים או יותר";return n},loadingMore:function(){return"טען תוצאות נוספות…"},maximumSelected:function(e){var t="באפשרותך לבחור רק "+e.maximum+" פריטים";return e.maximum!=1&&(t+="s"),t},noResults:function(){return"לא נמצאו תוצאות"},searching:function(){return"מחפש…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/i18n/gl.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/gl",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Engada ";return t===1?n+="un carácter":n+=t+" caracteres",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Elimine ";return t===1?n+="un carácter":n+=t+" caracteres",n},loadingMore:function(){return"Cargando máis resultados…"},maximumSelected:function(e){var t="Só pode ";return e.maximum===1?t+="un elemento":t+=e.maximum+" elementos",t},noResults:function(){return"Non se atoparon resultados"},searching:function(){return"Buscando…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/i18n/da.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/da",[],function(){return{errorLoading:function(){return"The results could not be loaded."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Angiv venligst "+t+" tegn mindre";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Angiv venligst "+t+" tegn mere";return n},loadingMore:function(){return"Indlæser flere resultater…"},maximumSelected:function(e){var t="Du kan kun vælge "+e.maximum+" emne";return e.maximum!=1&&(t+="r"),t},noResults:function(){return"Ingen resultater fundet"},searching:function(){return"Søger…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/i18n/fr.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/fr",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Supprimez "+t+" caractère";return t!==1&&(n+="s"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Saisissez "+t+" caractère";return t!==1&&(n+="s"),n},loadingMore:function(){return"Chargement de résultats supplémentaires…"},maximumSelected:function(e){var t="Vous pouvez seulement sélectionner "+e.maximum+" élément";return e.maximum!==1&&(t+="s"),t},noResults:function(){return"Aucun résultat trouvé"},searching:function(){return"Recherche en cours…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/i18n/ro.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ro",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vă rugăm să introduceți mai puțin de "+t;return n+=" caracter",n!==1&&(n+="e"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vă rugăm să introduceți incă "+t;return n+=" caracter",n!==1&&(n+="e"),n},loadingMore:function(){return"Se încarcă…"},maximumSelected:function(e){var t="Aveți voie să selectați cel mult "+e.maximum;return t+=" element",t!==1&&(t+="e"),t},noResults:function(){return"Nu a fost găsit nimic"},searching:function(){return"Căutare…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/i18n/en.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/en",[],function(){return{errorLoading:function(){return"The results could not be loaded."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Please delete "+t+" character";return t!=1&&(n+="s"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Please enter "+t+" or more characters";return n},loadingMore:function(){return"Loading more results…"},maximumSelected:function(e){var t="You can only select "+e.maximum+" item";return e.maximum!=1&&(t+="s"),t},noResults:function(){return"No results found"},searching:function(){return"Searching…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/i18n/fa.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/fa",[],function(){return{errorLoading:function(){return"امکان بارگذاری نتایج وجود ندارد."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="لطفاً "+t+" کاراکتر را حذف نمایید";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="لطفاً تعداد "+t+" کاراکتر یا بیشتر وارد نمایید";return n},loadingMore:function(){return"در حال بارگذاری نتایج بیشتر..."},maximumSelected:function(e){var t="شما تنها می‌توانید "+e.maximum+" آیتم را انتخاب نمایید";return t},noResults:function(){return"هیچ نتیجه‌ای یافت نشد"},searching:function(){return"در حال جستجو..."}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/i18n/hi.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/hi",[],function(){return{errorLoading:function(){return"परिणामों को लोड नहीं किया जा सका।"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=t+" अक्षर को हटा दें";return t>1&&(n=t+" अक्षरों को हटा दें "),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="कृपया "+t+" या अधिक अक्षर दर्ज करें";return n},loadingMore:function(){return"अधिक परिणाम लोड हो रहे है..."},maximumSelected:function(e){var t="आप केवल "+e.maximum+" आइटम का चयन कर सकते हैं";return t},noResults:function(){return"कोई परिणाम नहीं मिला"},searching:function(){return"खोज रहा है..."}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/java/com/luckin/MybatisPlusConfig.java: -------------------------------------------------------------------------------- 1 | package com.luckin; 2 | 3 | import com.baomidou.mybatisplus.plugins.PaginationInterceptor; 4 | import org.mybatis.spring.annotation.MapperScan; 5 | import org.slf4j.Logger; 6 | import org.slf4j.LoggerFactory; 7 | import org.springframework.context.annotation.Bean; 8 | import org.springframework.context.annotation.Configuration; 9 | 10 | @Configuration 11 | @MapperScan("com.luckin.mapper*") 12 | public class MybatisPlusConfig { 13 | 14 | 15 | Logger logger = LoggerFactory.getLogger(MybatisPlusConfig.class.getSimpleName()); 16 | /** 17 | * mybatis-plus 分页插件 18 | */ 19 | 20 | @Bean 21 | public PaginationInterceptor paginationInterceptor(){ 22 | PaginationInterceptor page = new PaginationInterceptor(); 23 | page.setDialectType("mysql"); 24 | return page; 25 | } 26 | 27 | } -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/i18n/mk.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/mk",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Ве молиме внесете "+e.maximum+" помалку карактер";return e.maximum!==1&&(n+="и"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Ве молиме внесете уште "+e.maximum+" карактер";return e.maximum!==1&&(n+="и"),n},loadingMore:function(){return"Вчитување резултати…"},maximumSelected:function(e){var t="Можете да изберете само "+e.maximum+" ставк";return e.maximum===1?t+="а":t+="и",t},noResults:function(){return"Нема пронајдено совпаѓања"},searching:function(){return"Пребарување…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/i18n/eu.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/eu",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Idatzi ";return t==1?n+="karaktere bat":n+=t+" karaktere",n+=" gutxiago",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Idatzi ";return t==1?n+="karaktere bat":n+=t+" karaktere",n+=" gehiago",n},loadingMore:function(){return"Emaitza gehiago kargatzen…"},maximumSelected:function(e){return e.maximum===1?"Elementu bakarra hauta dezakezu":e.maximum+" elementu hauta ditzakezu soilik"},noResults:function(){return"Ez da bat datorrenik aurkitu"},searching:function(){return"Bilatzen…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/i18n/pt-BR.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/pt-BR",[],function(){return{errorLoading:function(){return"Os resultados não puderam ser carregados."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Apague "+t+" caracter";return t!=1&&(n+="es"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Digite "+t+" ou mais caracteres";return n},loadingMore:function(){return"Carregando mais resultados…"},maximumSelected:function(e){var t="Você só pode selecionar "+e.maximum+" ite";return e.maximum==1?t+="m":t+="ns",t},noResults:function(){return"Nenhum resultado encontrado"},searching:function(){return"Buscando…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/i18n/pt.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/pt",[],function(){return{errorLoading:function(){return"Os resultados não puderam ser carregados."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Por favor apague "+t+" ";return n+=t!=1?"caracteres":"carácter",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Introduza "+t+" ou mais caracteres";return n},loadingMore:function(){return"A carregar mais resultados…"},maximumSelected:function(e){var t="Apenas pode seleccionar "+e.maximum+" ";return t+=e.maximum!=1?"itens":"item",t},noResults:function(){return"Sem resultados"},searching:function(){return"A procurar…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/i18n/lv.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/lv",[],function(){function e(e,t,n,r){return e===11?t:e%10===1?n:r}return{inputTooLong:function(t){var n=t.input.length-t.maximum,r="Lūdzu ievadiet par "+n;return r+=" simbol"+e(n,"iem","u","iem"),r+" mazāk"},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Lūdzu ievadiet vēl "+n;return r+=" simbol"+e(n,"us","u","us"),r},loadingMore:function(){return"Datu ielāde…"},maximumSelected:function(t){var n="Jūs varat izvēlēties ne vairāk kā "+t.maximum;return n+=" element"+e(t.maximum,"us","u","us"),n},noResults:function(){return"Sakritību nav"},searching:function(){return"Meklēšana…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/i18n/es.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/es",[],function(){return{errorLoading:function(){return"La carga falló"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Por favor, elimine "+t+" car";return t==1?n+="ácter":n+="acteres",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Por favor, introduzca "+t+" car";return t==1?n+="ácter":n+="acteres",n},loadingMore:function(){return"Cargando más resultados…"},maximumSelected:function(e){var t="Sólo puede seleccionar "+e.maximum+" elemento";return e.maximum!=1&&(t+="s"),t},noResults:function(){return"No se encontraron resultados"},searching:function(){return"Buscando…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/i18n/lt.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/lt",[],function(){function e(e,t,n,r){return e%100>9&&e%100<21||e%10===0?e%10>1?n:r:t}return{inputTooLong:function(t){var n=t.input.length-t.maximum,r="Pašalinkite "+n+" simbol";return r+=e(n,"ių","ius","į"),r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Įrašykite dar "+n+" simbol";return r+=e(n,"ių","ius","į"),r},loadingMore:function(){return"Kraunama daugiau rezultatų…"},maximumSelected:function(t){var n="Jūs galite pasirinkti tik "+t.maximum+" element";return n+=e(t.maximum,"ų","us","ą"),n},noResults:function(){return"Atitikmenų nerasta"},searching:function(){return"Ieškoma…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/i18n/nl.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/nl",[],function(){return{errorLoading:function(){return"De resultaten konden niet worden geladen."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Gelieve "+t+" karakters te verwijderen";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Gelieve "+t+" of meer karakters in te voeren";return n},loadingMore:function(){return"Meer resultaten laden…"},maximumSelected:function(e){var t="Er kunnen maar "+e.maximum+" item";return e.maximum!=1&&(t+="s"),t+=" worden geselecteerd",t},noResults:function(){return"Geen resultaten gevonden…"},searching:function(){return"Zoeken…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/i18n/ca.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ca",[],function(){return{errorLoading:function(){return"La càrrega ha fallat"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Si us plau, elimina "+t+" car";return t==1?n+="àcter":n+="àcters",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Si us plau, introdueix "+t+" car";return t==1?n+="àcter":n+="àcters",n},loadingMore:function(){return"Carregant més resultats…"},maximumSelected:function(e){var t="Només es pot seleccionar "+e.maximum+" element";return e.maximum!=1&&(t+="s"),t},noResults:function(){return"No s'han trobat resultats"},searching:function(){return"Cercant…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/java/com/luckin/common/shiro/tag/RoleTag.java: -------------------------------------------------------------------------------- 1 | package com.luckin.common.shiro.tag; 2 | 3 | import freemarker.core.Environment; 4 | import freemarker.template.TemplateDirectiveBody; 5 | import freemarker.template.TemplateException; 6 | 7 | import java.io.IOException; 8 | import java.util.Map; 9 | 10 | /** 11 | *

Equivalent to {@link org.apache.shiro.web.tags.RoleTag}

12 | */ 13 | public abstract class RoleTag extends SecureTag { 14 | String getName(Map params) { 15 | return getParam(params, "name"); 16 | } 17 | 18 | @Override 19 | public void render(Environment env, Map params, TemplateDirectiveBody body) throws IOException, TemplateException { 20 | boolean show = showTagBody(getName(params)); 21 | if (show) { 22 | renderBody(env, body); 23 | } 24 | } 25 | 26 | protected abstract boolean showTagBody(String roleName); 27 | } -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/i18n/it.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/it",[],function(){return{errorLoading:function(){return"I risultati non possono essere caricati."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Per favore cancella "+t+" caratter";return t!==1?n+="i":n+="e",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Per favore inserisci "+t+" o più caratteri";return n},loadingMore:function(){return"Caricando più risultati…"},maximumSelected:function(e){var t="Puoi selezionare solo "+e.maximum+" element";return e.maximum!==1?t+="i":t+="o",t},noResults:function(){return"Nessun risultato trovato"},searching:function(){return"Sto cercando…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/i18n/sr.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/sr",[],function(){function e(e,t,n,r){return e%10==1&&e%100!=11?t:e%10>=2&&e%10<=4&&(e%100<12||e%100>14)?n:r}return{inputTooLong:function(t){var n=t.input.length-t.maximum,r="Obrišite "+n+" simbol";return r+=e(n,"","a","a"),r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Ukucajte bar još "+n+" simbol";return r+=e(n,"","a","a"),r},loadingMore:function(){return"Preuzimanje još rezultata…"},maximumSelected:function(t){var n="Možete izabrati samo "+t.maximum+" stavk";return n+=e(t.maximum,"u","e","i"),n},noResults:function(){return"Ništa nije pronađeno"},searching:function(){return"Pretraga…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/mapper/sys/SysRoleMenuMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/main/java/com/luckin/service/impl/SysSettingServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.luckin.service.impl; 2 | 3 | import java.util.List; 4 | 5 | import com.baomidou.mybatisplus.mapper.EntityWrapper; 6 | import com.baomidou.mybatisplus.service.impl.ServiceImpl; 7 | import com.luckin.entity.SysSetting; 8 | import com.luckin.mapper.SysSettingMapper; 9 | import com.luckin.service.ISysSettingService; 10 | import org.springframework.cache.annotation.Cacheable; 11 | import org.springframework.stereotype.Service; 12 | 13 | 14 | 15 | /** 16 | * 17 | * SysSetting 表数据服务层接口实现类 18 | * 19 | */ 20 | @Service 21 | public class SysSettingServiceImpl extends ServiceImpl implements ISysSettingService { 22 | 23 | @Cacheable(value = "settingCache") 24 | @Override 25 | public List findAll() { 26 | return this.selectList(new EntityWrapper().orderBy("sort",true)); 27 | } 28 | 29 | 30 | } -------------------------------------------------------------------------------- /src/main/resources/templates/system/dept/add.html: -------------------------------------------------------------------------------- 1 | <#include "/common/layout_dl.html"> 2 | <@header> 3 | 4 | <@body> 5 |
6 |
7 |
8 | 9 | 10 |
11 |
12 | 13 | 14 |
15 |
16 | 17 |
18 |
19 |
20 | 21 | <@footer> 22 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/i18n/pl.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/pl",[],function(){var e=["znak","znaki","znaków"],t=["element","elementy","elementów"],n=function(t,n){if(t===1)return n[0];if(t>1&&t<=4)return n[1];if(t>=5)return n[2]};return{errorLoading:function(){return"Nie można załadować wyników."},inputTooLong:function(t){var r=t.input.length-t.maximum;return"Usuń "+r+" "+n(r,e)},inputTooShort:function(t){var r=t.minimum-t.input.length;return"Podaj przynajmniej "+r+" "+n(r,e)},loadingMore:function(){return"Trwa ładowanie…"},maximumSelected:function(e){return"Możesz zaznaczyć tylko "+e.maximum+" "+n(e.maxiumum,t)},noResults:function(){return"Brak wyników"},searching:function(){return"Trwa wyszukiwanie…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/i18n/uk.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/uk",[],function(){function e(e,t,n,r){return e%100>10&&e%100<15?r:e%10===1?t:e%10>1&&e%10<5?n:r}return{errorLoading:function(){return"Неможливо завантажити результати"},inputTooLong:function(t){var n=t.input.length-t.maximum;return"Будь ласка, видаліть "+n+" "+e(t.maximum,"літеру","літери","літер")},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Будь ласка, введіть "+t+" або більше літер"},loadingMore:function(){return"Завантаження інших результатів…"},maximumSelected:function(t){return"Ви можете вибрати лише "+t.maximum+" "+e(t.maximum,"пункт","пункти","пунктів")},noResults:function(){return"Нічого не знайдено"},searching:function(){return"Пошук…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/i18n/ru.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ru",[],function(){function e(e,t,n,r){return e%10<5&&e%10>0&&e%100<5||e%100>20?e%10>1?n:t:r}return{errorLoading:function(){return"Невозможно загрузить результаты"},inputTooLong:function(t){var n=t.input.length-t.maximum,r="Пожалуйста, введите на "+n+" символ";return r+=e(n,"","a","ов"),r+=" меньше",r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Пожалуйста, введите еще хотя бы "+n+" символ";return r+=e(n,"","a","ов"),r},loadingMore:function(){return"Загрузка данных…"},maximumSelected:function(t){var n="Вы можете выбрать не более "+t.maximum+" элемент";return n+=e(t.maximum,"","a","ов"),n},noResults:function(){return"Совпадений не найдено"},searching:function(){return"Поиск…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/java/com/luckin/entity/vo/TreeMenu.java: -------------------------------------------------------------------------------- 1 | package com.luckin.entity.vo; 2 | 3 | import com.luckin.entity.SysMenu; 4 | 5 | import java.io.Serializable; 6 | import java.util.ArrayList; 7 | import java.util.List; 8 | 9 | /** 10 | * 菜单树 11 | * @author Gaojun.Zhou 12 | * @date 2016年12月26日 上午10:34:31 13 | */ 14 | public class TreeMenu implements Serializable{ 15 | 16 | /** 17 | * @Fields serialVersionUID : TODO() 18 | */ 19 | 20 | private static final long serialVersionUID = 1L; 21 | /** 22 | * 菜单 23 | */ 24 | private SysMenu sysMenu; 25 | /** 26 | * 子菜单 27 | */ 28 | private List children = new ArrayList(); 29 | 30 | public SysMenu getSysMenu() { 31 | return sysMenu; 32 | } 33 | 34 | public void setSysMenu(SysMenu sysMenu) { 35 | this.sysMenu = sysMenu; 36 | } 37 | 38 | public List getChildren() { 39 | return children; 40 | } 41 | 42 | public void setChildren(List children) { 43 | this.children = children; 44 | } 45 | 46 | 47 | } 48 | -------------------------------------------------------------------------------- /src/main/resources/templates/system/dept/edit.html: -------------------------------------------------------------------------------- 1 | <#include "/common/layout_dl.html"> 2 | <@header> 3 | 4 | <@body> 5 |
6 |
7 | 8 |
9 | 10 | 11 |
12 |
13 | 14 | 15 |
16 |
17 | 18 |
19 |
20 |
21 | 22 | <@footer> 23 | -------------------------------------------------------------------------------- /src/main/java/com/luckin/common/shiro/tag/ShiroTags.java: -------------------------------------------------------------------------------- 1 | package com.luckin.common.shiro.tag; 2 | 3 | import freemarker.template.SimpleHash; 4 | 5 | /** 6 | * Shortcut for injecting the tags into Freemarker 7 | * 8 | *

Usage: cfg.setSharedVeriable("shiro", new ShiroTags());

9 | */ 10 | public class ShiroTags extends SimpleHash { 11 | /** 12 | * 13 | */ 14 | private static final long serialVersionUID = 1L; 15 | 16 | @SuppressWarnings("deprecation") 17 | public ShiroTags() { 18 | put("authenticated", new AuthenticatedTag()); 19 | put("guest", new GuestTag()); 20 | put("hasAnyRoles", new HasAnyRolesTag()); 21 | put("hasPermission", new HasPermissionTag()); 22 | put("hasRole", new HasRoleTag()); 23 | put("lacksPermission", new LacksPermissionTag()); 24 | put("lacksRole", new LacksRoleTag()); 25 | put("notAuthenticated", new NotAuthenticatedTag()); 26 | put("principal", new PrincipalTag()); 27 | put("user", new UserTag()); 28 | } 29 | } -------------------------------------------------------------------------------- /src/main/java/com/luckin/service/ISysMenuService.java: -------------------------------------------------------------------------------- 1 | package com.luckin.service; 2 | 3 | import com.baomidou.mybatisplus.service.IService; 4 | import com.luckin.entity.SysMenu; 5 | import com.luckin.entity.vo.TreeMenu; 6 | import com.luckin.entity.vo.TreeMenuAllowAccess; 7 | 8 | import java.util.List; 9 | 10 | 11 | /** 12 | * 13 | * SysMenu 表数据服务层接口 14 | * 15 | */ 16 | public interface ISysMenuService extends IService { 17 | 18 | /** 19 | * 获取指定用户拥有的菜单 20 | */ 21 | List selectMenuIdsByuserId(String uid); 22 | /** 23 | * 获取指定用户的菜单 24 | * @param menuIds 当前用户所在角色拥有的权限ID集合 25 | * @param pid 菜单父ID 26 | */ 27 | List selectTreeMenuByMenuIdsAndPid(List menuIds, String pid); 28 | /** 29 | * 获取当前用户的菜单 30 | */ 31 | List selectTreeMenuByUserId(String uid); 32 | /** 33 | * 获取指定用户拥有权限 34 | * @param menuIds 该角色拥有的权限ID集合 35 | * @param pid 菜单父ID 36 | */ 37 | List selectTreeMenuAllowAccessByMenuIdsAndPid(List menuIds, String pid); 38 | 39 | } -------------------------------------------------------------------------------- /src/main/resources/templates/common/paginateBar.html: -------------------------------------------------------------------------------- 1 | <#macro paginate pageData actionUrl urlParas=""> 2 | 每页 条 9 | 显示 ${((pageData.current -1) * pageData.size + 1)!} - ${(pageData.current * pageData.size)!} 条 共 ${(pageData.getTotal())!} 条记录 10 | 15 | -------------------------------------------------------------------------------- /src/main/java/com/luckin/service/impl/SysUserRoleServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.luckin.service.impl; 2 | 3 | import java.util.HashSet; 4 | import java.util.List; 5 | import java.util.Set; 6 | 7 | import com.baomidou.mybatisplus.mapper.EntityWrapper; 8 | import com.baomidou.mybatisplus.service.impl.ServiceImpl; 9 | import com.luckin.entity.SysUserRole; 10 | import com.luckin.mapper.SysUserRoleMapper; 11 | import com.luckin.service.ISysUserRoleService; 12 | import org.springframework.stereotype.Service; 13 | 14 | 15 | 16 | /** 17 | * 18 | * SysUserRole 表数据服务层接口实现类 19 | * 20 | */ 21 | @Service 22 | public class SysUserRoleServiceImpl extends ServiceImpl implements ISysUserRoleService { 23 | 24 | @Override 25 | public Set findRolesByUid(String uid) { 26 | List list = this.selectList(new EntityWrapper().eq("userId", uid)); 27 | 28 | Set set = new HashSet(); 29 | for (SysUserRole ur : list) { 30 | set.add(ur.getRoleId()); 31 | } 32 | return set; 33 | } 34 | } -------------------------------------------------------------------------------- /src/main/java/com/luckin/SpringbootAdminlteAdminApplication.java: -------------------------------------------------------------------------------- 1 | package com.luckin; 2 | 3 | import com.luckin.common.util.SpringUtil; 4 | import org.mybatis.spring.annotation.MapperScan; 5 | import org.springframework.boot.SpringApplication; 6 | import org.springframework.boot.autoconfigure.SpringBootApplication; 7 | import org.springframework.boot.web.servlet.ServletListenerRegistrationBean; 8 | import org.springframework.context.annotation.Bean; 9 | 10 | @SpringBootApplication 11 | @MapperScan("com.luckin.mapper*") 12 | public class SpringbootAdminlteAdminApplication { 13 | 14 | @Bean 15 | public ServletListenerRegistrationBean servletListenerRegistrationBean(){ 16 | ServletListenerRegistrationBean servletListenerRegistrationBean = new ServletListenerRegistrationBean(); 17 | servletListenerRegistrationBean.setListener(new SpringUtil()); 18 | return servletListenerRegistrationBean; 19 | } 20 | 21 | public static void main(String[] args) { 22 | SpringApplication.run(SpringbootAdminlteAdminApplication.class, args); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/bootstrap-fileinput/js/plugins/canvas-to-blob.min.js: -------------------------------------------------------------------------------- 1 | !function(a){"use strict";var b=a.HTMLCanvasElement&&a.HTMLCanvasElement.prototype,c=a.Blob&&function(){try{return Boolean(new Blob)}catch(a){return!1}}(),d=c&&a.Uint8Array&&function(){try{return 100===new Blob([new Uint8Array(100)]).size}catch(a){return!1}}(),e=a.BlobBuilder||a.WebKitBlobBuilder||a.MozBlobBuilder||a.MSBlobBuilder,f=(c||e)&&a.atob&&a.ArrayBuffer&&a.Uint8Array&&function(a){var b,f,g,h,i,j;for(b=a.split(",")[0].indexOf("base64")>=0?atob(a.split(",")[1]):decodeURIComponent(a.split(",")[1]),f=new ArrayBuffer(b.length),g=new Uint8Array(f),h=0;h implements ISysLogService { 20 | 21 | public static final Logger logger = LoggerFactory.getLogger(SysLogServiceImpl.class); 22 | 23 | @Override 24 | public void insertLog(String title, String uname, String url, String parms) { 25 | SysLog sysLog =new SysLog(); 26 | sysLog.setCreateTime(new Date()); 27 | sysLog.setTitle(title); 28 | sysLog.setUserName(uname); 29 | sysLog.setUrl(url); 30 | sysLog.setParams(parms); 31 | super.insert(sysLog); 32 | logger.debug("记录日志:"+sysLog.toString()); 33 | } 34 | 35 | 36 | } -------------------------------------------------------------------------------- /src/main/resources/static/app/js/x-layui.js: -------------------------------------------------------------------------------- 1 | /*弹出层*/ 2 | /* 3 | 参数解释: 4 | title 标题 5 | url 请求的url 6 | id 需要操作的数据id 7 | w 弹出层宽度(缺省调默认值) 8 | h 弹出层高度(缺省调默认值) 9 | */ 10 | function x_admin_show(title,url,w,h){ 11 | if (title == null || title == '') { 12 | title=false; 13 | }; 14 | if (url == null || url == '') { 15 | url="404.html"; 16 | }; 17 | if (w == null || w == '') { 18 | w=800; 19 | }; 20 | if (h == null || h == '') { 21 | h=($(window).height()-50); 22 | }; 23 | layer.open({ 24 | type: 2, 25 | area: [w+'px', h +'px'], 26 | fix: false, //不固定 27 | maxmin: true, 28 | shadeClose: true, 29 | shade:0.4, 30 | title: title, 31 | content: url 32 | }); 33 | } 34 | 35 | /*关闭弹出框口*/ 36 | function x_admin_close(){ 37 | var index = parent.layer.getFrameIndex(window.name); 38 | parent.layer.close(index); 39 | } 40 | 41 | //弹窗 42 | $(".dialog").on('click',function(){ 43 | var me = this; 44 | var url = $(this).attr('data-url'); 45 | width=$(me).attr('data-width') || 800, 46 | height=$(me).attr('data-height') || 400, 47 | title = $(me).attr('data-title') || ''; 48 | x_admin_show(title,url,width,height); 49 | }); 50 | 51 | -------------------------------------------------------------------------------- /src/main/resources/mapper/sys/SysUserMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/i18n/sk.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/sk",[],function(){var e={2:function(e){return e?"dva":"dve"},3:function(){return"tri"},4:function(){return"štyri"}};return{inputTooLong:function(t){var n=t.input.length-t.maximum;return n==1?"Prosím, zadajte o jeden znak menej":n>=2&&n<=4?"Prosím, zadajte o "+e[n](!0)+" znaky menej":"Prosím, zadajte o "+n+" znakov menej"},inputTooShort:function(t){var n=t.minimum-t.input.length;return n==1?"Prosím, zadajte ešte jeden znak":n<=4?"Prosím, zadajte ešte ďalšie "+e[n](!0)+" znaky":"Prosím, zadajte ešte ďalších "+n+" znakov"},loadingMore:function(){return"Loading more results…"},maximumSelected:function(t){return t.maximum==1?"Môžete zvoliť len jednu položku":t.maximum>=2&&t.maximum<=4?"Môžete zvoliť najviac "+e[t.maximum](!1)+" položky":"Môžete zvoliť najviac "+t.maximum+" položiek"},noResults:function(){return"Nenašli sa žiadne položky"},searching:function(){return"Vyhľadávanie…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/i18n/cs.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/cs",[],function(){function e(e,t){switch(e){case 2:return t?"dva":"dvě";case 3:return"tři";case 4:return"čtyři"}return""}return{errorLoading:function(){return"Výsledky nemohly být načteny."},inputTooLong:function(t){var n=t.input.length-t.maximum;return n==1?"Prosím zadejte o jeden znak méně":n<=4?"Prosím zadejte o "+e(n,!0)+" znaky méně":"Prosím zadejte o "+n+" znaků méně"},inputTooShort:function(t){var n=t.minimum-t.input.length;return n==1?"Prosím zadejte ještě jeden znak":n<=4?"Prosím zadejte ještě další "+e(n,!0)+" znaky":"Prosím zadejte ještě dalších "+n+" znaků"},loadingMore:function(){return"Načítají se další výsledky…"},maximumSelected:function(t){var n=t.maximum;return n==1?"Můžete zvolit jen jednu položku":n<=4?"Můžete zvolit maximálně "+e(n,!1)+" položky":"Můžete zvolit maximálně "+n+" položek"},noResults:function(){return"Nenalezeny žádné položky"},searching:function(){return"Vyhledávání…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/lay/modules/code.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.1.2 MIT License By http://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var a=layui.$,l="http://www.layui.com/doc/modules/code.html";e("code",function(e){var t=[];e=e||{},e.elem=a(e.elem||".layui-code"),e.about=!("about"in e)||e.about,e.elem.each(function(){t.push(this)}),layui.each(t.reverse(),function(t,i){var c=a(i),o=c.html();(c.attr("lay-encode")||e.encode)&&(o=o.replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""")),c.html('
  1. '+o.replace(/[\r\t\n]+/g,"
  2. ")+"
"),c.find(">.layui-code-h3")[0]||c.prepend('

'+(c.attr("lay-title")||e.title||"code")+(e.about?'layui.code':"")+"

");var d=c.find(">.layui-code-ol");c.addClass("layui-box layui-code-view"),(c.attr("lay-skin")||e.skin)&&c.addClass("layui-code-"+(c.attr("lay-skin")||e.skin)),(d.find("li").length/100|0)>0&&d.css("margin-left",(d.find("li").length/100|0)+"px"),(c.attr("lay-height")||e.height)&&d.css("max-height",c.attr("lay-height")||e.height)})})}).addcss("modules/code.css","skincodecss"); -------------------------------------------------------------------------------- /src/main/resources/templates/u/project/add.html: -------------------------------------------------------------------------------- 1 | <#include "/common/layout_dl.html"> 2 | <@header> 3 | 4 | <@body> 5 |
6 |
7 |
8 | 9 | 10 |
11 |
12 | 13 | 14 |
15 |
16 | 17 | 18 |
19 |
20 | 21 |
22 |
23 |
24 | 25 | <@footer> 26 | -------------------------------------------------------------------------------- /src/main/resources/mapper/sys/TestcaseMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /src/main/java/com/luckin/RestApiConfig.java: -------------------------------------------------------------------------------- 1 | package com.luckin; 2 | 3 | import org.springframework.context.annotation.Bean; 4 | import org.springframework.context.annotation.Configuration; 5 | import springfox.documentation.builders.ApiInfoBuilder; 6 | import springfox.documentation.builders.PathSelectors; 7 | import springfox.documentation.builders.RequestHandlerSelectors; 8 | import springfox.documentation.service.ApiInfo; 9 | import springfox.documentation.service.Contact; 10 | import springfox.documentation.spi.DocumentationType; 11 | import springfox.documentation.spring.web.plugins.Docket; 12 | import springfox.documentation.swagger2.annotations.EnableSwagger2; 13 | 14 | @Configuration 15 | @EnableSwagger2 16 | public class RestApiConfig { 17 | 18 | 19 | @Bean 20 | public Docket createRestApi() { 21 | return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()) 22 | .select() 23 | .apis(RequestHandlerSelectors.basePackage("com.luckin")) 24 | .paths(PathSelectors.any()).build(); 25 | } 26 | 27 | private ApiInfo apiInfo() { 28 | return new ApiInfoBuilder().title("后台管理接口文档") 29 | .termsOfServiceUrl("https://github.com/lidong1665") 30 | .contact(new Contact("XXX有限公司", "", "")).version("1.0.0") 31 | .build(); 32 | } 33 | 34 | } -------------------------------------------------------------------------------- /src/main/resources/templates/common/head.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | ${(systemName)!'AdminLTE-admin'} 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/main/java/com/luckin/common/util/ShiroUtil.java: -------------------------------------------------------------------------------- 1 | package com.luckin.common.util; 2 | 3 | import com.luckin.entity.SysUser; 4 | import org.apache.shiro.SecurityUtils; 5 | import org.apache.shiro.crypto.hash.SimpleHash; 6 | import org.apache.shiro.subject.Subject; 7 | 8 | /** 9 | * Shiro工具类 10 | * @author jameszhou 11 | * 12 | */ 13 | public class ShiroUtil { 14 | 15 | /** 16 | * 密码加密 17 | * @param password 18 | * @param salt 19 | * @return 20 | */ 21 | public static String md51024Pwd(String password,Object salt){ 22 | return new SimpleHash("MD5", password, salt, 1024).toString(); 23 | } 24 | 25 | /** 26 | * 获取当前Session中的用户 27 | * @return 28 | */ 29 | public static SysUser getSessionUser(){ 30 | 31 | Subject subject = SecurityUtils.getSubject(); 32 | if(subject != null){ 33 | Object object = subject.getPrincipal(); 34 | if(object != null){ 35 | SysUser sysUser = (SysUser) object; 36 | return sysUser; 37 | } 38 | } 39 | return null; 40 | } 41 | 42 | /** 43 | * 获取当前用户ID 44 | * @return 45 | */ 46 | public static String getSessionUid(){ 47 | 48 | SysUser sysUser = getSessionUser(); 49 | 50 | if(sysUser != null){ 51 | 52 | return sysUser.getId(); 53 | } 54 | 55 | return null; 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /src/main/java/com/luckin/common/util/SpringUtil.java: -------------------------------------------------------------------------------- 1 | package com.luckin.common.util; 2 | 3 | import org.springframework.context.ApplicationContext; 4 | import org.springframework.web.context.WebApplicationContext; 5 | import org.springframework.web.context.support.WebApplicationContextUtils; 6 | 7 | import javax.servlet.ServletContextEvent; 8 | import javax.servlet.ServletContextListener; 9 | 10 | /** 11 | * Spring 工具类 12 | * @author gaojun.zhou 13 | * @date 2016年8月23日 14 | * 15 | */ 16 | 17 | public class SpringUtil implements ServletContextListener { 18 | 19 | private static WebApplicationContext springContext; 20 | 21 | public void contextInitialized(ServletContextEvent event) { 22 | springContext = WebApplicationContextUtils.getWebApplicationContext(event.getServletContext()); 23 | } 24 | 25 | public void contextDestroyed(ServletContextEvent event) { 26 | 27 | } 28 | 29 | public static ApplicationContext getApplicationContext() { 30 | return springContext; 31 | } 32 | 33 | public SpringUtil() { 34 | } 35 | 36 | 37 | public static T getBean(Class requiredType){ 38 | 39 | if(springContext == null){ 40 | 41 | throw new RuntimeException("springContext is null."); 42 | } 43 | return springContext.getBean(requiredType); 44 | } 45 | 46 | } 47 | -------------------------------------------------------------------------------- /src/main/resources/templates/u/project/edit.html: -------------------------------------------------------------------------------- 1 | <#include "/common/layout_dl.html"> 2 | <@header> 3 | 4 | <@body> 5 |
6 |
7 | 8 |
9 | 10 | 11 |
12 | 13 |
14 | 15 | 16 |
17 | 18 |
19 | 20 | 21 |
22 |
23 | 24 |
25 |
26 |
27 | 28 | <@footer> 29 | -------------------------------------------------------------------------------- /src/main/java/com/luckin/entity/vo/TreeMenuAllowAccess.java: -------------------------------------------------------------------------------- 1 | package com.luckin.entity.vo; 2 | 3 | import com.luckin.entity.SysMenu; 4 | 5 | import java.io.Serializable; 6 | import java.util.ArrayList; 7 | import java.util.List; 8 | 9 | 10 | /** 11 | * 菜单树+是否有权限表示 12 | * @author Gaojun.Zhou 13 | * @date 2016年12月26日 上午10:34:02 14 | */ 15 | public class TreeMenuAllowAccess implements Serializable{ 16 | 17 | /** 18 | * @Fields serialVersionUID : TODO() 19 | */ 20 | 21 | private static final long serialVersionUID = 1L; 22 | 23 | /** 24 | * 菜单 25 | */ 26 | private SysMenu sysMenu; 27 | /** 28 | * 是否允许访问 29 | */ 30 | private boolean allowAccess = false; 31 | /** 32 | * 子菜单 33 | */ 34 | private List children = new ArrayList(); 35 | 36 | public SysMenu getSysMenu() { 37 | return sysMenu; 38 | } 39 | public void setSysMenu(SysMenu sysMenu) { 40 | this.sysMenu = sysMenu; 41 | } 42 | public boolean isAllowAccess() { 43 | return allowAccess; 44 | } 45 | public void setAllowAccess(boolean allowAccess) { 46 | this.allowAccess = allowAccess; 47 | } 48 | public List getChildren() { 49 | return children; 50 | } 51 | public void setChildren(List children) { 52 | this.children = children; 53 | } 54 | 55 | } 56 | -------------------------------------------------------------------------------- /src/main/java/com/luckin/common/util/EhcacheHelper.java: -------------------------------------------------------------------------------- 1 | package com.luckin.common.util; 2 | 3 | import net.sf.ehcache.Cache; 4 | import net.sf.ehcache.CacheManager; 5 | import net.sf.ehcache.Element; 6 | 7 | 8 | /** 9 | *

10 | * ehcache 缓存工具类 11 | *

12 | *

13 | * cacheName在ehcache.xml中配置 14 | *

15 | * 16 | */ 17 | public class EhcacheHelper { 18 | 19 | public static CacheManager manager = CacheManager.create(); 20 | 21 | public static Object get(String cacheName, Object key) { 22 | Cache cache = manager.getCache(cacheName); 23 | if (cache != null) { 24 | Element element = cache.get(key); 25 | if (element != null) { 26 | return element.getObjectValue(); 27 | } 28 | } 29 | return null; 30 | } 31 | 32 | public static void put(String cacheName, Object key, Object value) { 33 | Cache cache = manager.getCache(cacheName); 34 | if (cache != null) { 35 | cache.put(new Element(key, value)); 36 | } 37 | } 38 | 39 | public static boolean remove(String cacheName, Object key) { 40 | Cache cache = manager.getCache(cacheName); 41 | if (cache != null) { 42 | return cache.remove(key); 43 | } 44 | return false; 45 | } 46 | 47 | public static void main(String[] args) { 48 | String key = "key"; 49 | EhcacheHelper.put("mytest", key, "hello"); 50 | System.out.println(EhcacheHelper.get("mytest", key)); 51 | } 52 | 53 | } 54 | -------------------------------------------------------------------------------- /src/main/java/com/luckin/common/shiro/tag/NotAuthenticatedTag.java: -------------------------------------------------------------------------------- 1 | package com.luckin.common.shiro.tag; 2 | 3 | import freemarker.core.Environment; 4 | import freemarker.log.Logger; 5 | import freemarker.template.TemplateDirectiveBody; 6 | import freemarker.template.TemplateException; 7 | 8 | import java.io.IOException; 9 | import java.util.Map; 10 | 11 | 12 | /** 13 | * Freemarker tag that renders the tag body only if the current user has not executed a successful authentication 14 | * attempt during their current session. 15 | * 16 | *

The logically opposite tag of this one is the {@link org.apache.shiro.web.tags.AuthenticatedTag}. 17 | * 18 | *

Equivalent to {@link org.apache.shiro.web.tags.NotAuthenticatedTag}

19 | */ 20 | public class NotAuthenticatedTag extends SecureTag { 21 | static final Logger log = Logger.getLogger("NotAuthenticatedTag"); 22 | 23 | @Override 24 | public void render(Environment env, Map params, TemplateDirectiveBody body) throws IOException, TemplateException { 25 | if (getSubject() == null || !getSubject().isAuthenticated()) { 26 | log.debug("Subject does not exist or is not authenticated. Tag body will be evaluated."); 27 | renderBody(env, body); 28 | } else { 29 | log.debug("Subject exists and is authenticated. Tag body will not be evaluated."); 30 | } 31 | } 32 | } -------------------------------------------------------------------------------- /src/main/java/com/luckin/entity/SysRoleMenu.java: -------------------------------------------------------------------------------- 1 | package com.luckin.entity; 2 | 3 | import com.baomidou.mybatisplus.activerecord.Model; 4 | import com.baomidou.mybatisplus.annotations.TableId; 5 | import com.baomidou.mybatisplus.annotations.TableName; 6 | import com.baomidou.mybatisplus.enums.IdType; 7 | 8 | import java.io.Serializable; 9 | 10 | 11 | /** 12 | *

13 | * 角色菜单关联表 14 | *

15 | * 16 | * @author GaoJun.Zhou 17 | * @since 2017-03-06 18 | */ 19 | @TableName("sys_role_menu") 20 | public class SysRoleMenu extends Model { 21 | 22 | private static final long serialVersionUID = 1L; 23 | 24 | /** 25 | * 主键 26 | */ 27 | @TableId(type=IdType.UUID) 28 | private String id; 29 | /** 30 | * 角色主键 31 | */ 32 | private String roleId; 33 | /** 34 | * 菜单主键 35 | */ 36 | private String menuId; 37 | 38 | 39 | public String getId() { 40 | return id; 41 | } 42 | 43 | public void setId(String id) { 44 | this.id = id; 45 | } 46 | 47 | public String getRoleId() { 48 | return roleId; 49 | } 50 | 51 | public void setRoleId(String roleId) { 52 | this.roleId = roleId; 53 | } 54 | 55 | public String getMenuId() { 56 | return menuId; 57 | } 58 | 59 | public void setMenuId(String menuId) { 60 | this.menuId = menuId; 61 | } 62 | 63 | @Override 64 | protected Serializable pkVal() { 65 | return this.id; 66 | } 67 | 68 | } 69 | -------------------------------------------------------------------------------- /src/main/java/com/luckin/entity/SysUserRole.java: -------------------------------------------------------------------------------- 1 | package com.luckin.entity; 2 | 3 | import java.io.Serializable; 4 | 5 | import com.baomidou.mybatisplus.activerecord.Model; 6 | import com.baomidou.mybatisplus.annotations.TableId; 7 | import com.baomidou.mybatisplus.annotations.TableName; 8 | import com.baomidou.mybatisplus.enums.IdType; 9 | 10 | 11 | /** 12 | *

13 | * 用户角色关联表 14 | *

15 | * 16 | * @author GaoJun.Zhou 17 | * @since 2017-03-06 18 | */ 19 | @TableName("sys_user_role") 20 | public class SysUserRole extends Model { 21 | 22 | private static final long serialVersionUID = 1L; 23 | 24 | /** 25 | * 主键 26 | */ 27 | @TableId(type=IdType.UUID) 28 | private String Id; 29 | /** 30 | * 用户主键 31 | */ 32 | private String userId; 33 | /** 34 | * 角色主键 35 | */ 36 | private String roleId; 37 | 38 | 39 | public String getId() { 40 | return Id; 41 | } 42 | 43 | public void setId(String Id) { 44 | this.Id = Id; 45 | } 46 | 47 | public String getUserId() { 48 | return userId; 49 | } 50 | 51 | public void setUserId(String userId) { 52 | this.userId = userId; 53 | } 54 | 55 | public String getRoleId() { 56 | return roleId; 57 | } 58 | 59 | public void setRoleId(String roleId) { 60 | this.roleId = roleId; 61 | } 62 | 63 | @Override 64 | protected Serializable pkVal() { 65 | return this.Id; 66 | } 67 | 68 | } 69 | -------------------------------------------------------------------------------- /src/main/java/com/luckin/entity/SysDept.java: -------------------------------------------------------------------------------- 1 | package com.luckin.entity; 2 | 3 | import com.baomidou.mybatisplus.activerecord.Model; 4 | import com.baomidou.mybatisplus.annotations.TableId; 5 | import com.baomidou.mybatisplus.annotations.TableName; 6 | import com.baomidou.mybatisplus.enums.IdType; 7 | 8 | import java.io.Serializable; 9 | 10 | 11 | /** 12 | *

13 | * 部门表 14 | *

15 | * 16 | * @author GaoJun.Zhou 17 | * @since 2017-03-06 18 | */ 19 | @TableName("sys_dept") 20 | public class SysDept extends Model { 21 | 22 | private static final long serialVersionUID = 1L; 23 | 24 | /** 25 | * 主键 26 | */ 27 | @TableId(type=IdType.UUID) 28 | private String id; 29 | /** 30 | * 部门名称 31 | */ 32 | private String deptName; 33 | /** 34 | * 描述 35 | */ 36 | private String deptDesc; 37 | 38 | 39 | public String getId() { 40 | return id; 41 | } 42 | 43 | public void setId(String id) { 44 | this.id = id; 45 | } 46 | 47 | public String getDeptName() { 48 | return deptName; 49 | } 50 | 51 | public void setDeptName(String deptName) { 52 | this.deptName = deptName; 53 | } 54 | 55 | public String getDeptDesc() { 56 | return deptDesc; 57 | } 58 | 59 | public void setDeptDesc(String deptDesc) { 60 | this.deptDesc = deptDesc; 61 | } 62 | 63 | @Override 64 | protected Serializable pkVal() { 65 | return this.id; 66 | } 67 | 68 | } 69 | -------------------------------------------------------------------------------- /src/main/java/com/luckin/common/shiro/tag/PermissionTag.java: -------------------------------------------------------------------------------- 1 | package com.luckin.common.shiro.tag; 2 | 3 | import freemarker.core.Environment; 4 | import freemarker.template.TemplateDirectiveBody; 5 | import freemarker.template.TemplateException; 6 | import freemarker.template.TemplateModelException; 7 | 8 | import java.io.IOException; 9 | import java.util.Map; 10 | 11 | /** 12 | *

Equivalent to {@link org.apache.shiro.web.tags.PermissionTag}

13 | */ 14 | public abstract class PermissionTag extends SecureTag { 15 | String getName(Map params) { 16 | return getParam(params, "name"); 17 | } 18 | 19 | @Override 20 | protected void verifyParameters(Map params) throws TemplateModelException { 21 | String permission = getName(params); 22 | 23 | if (permission == null || permission.length() == 0) { 24 | throw new TemplateModelException("The 'name' tag attribute must be set."); 25 | } 26 | } 27 | 28 | @Override 29 | public void render(Environment env, Map params, TemplateDirectiveBody body) throws IOException, TemplateException { 30 | String p = getName(params); 31 | 32 | boolean show = showTagBody(p); 33 | if (show) { 34 | renderBody(env, body); 35 | } 36 | } 37 | 38 | protected boolean isPermitted(String p) { 39 | return getSubject() != null && getSubject().isPermitted(p); 40 | } 41 | 42 | protected abstract boolean showTagBody(String p); 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/com/luckin/common/bean/Rest.java: -------------------------------------------------------------------------------- 1 | package com.luckin.common.bean; 2 | /** 3 | * @author GaoJun.Zhou 4 | * @Time:2017年9月6日 下午1:29:08 5 | * @version 1.0 6 | */ 7 | public class Rest { 8 | 9 | private long code = 0; 10 | 11 | private long count = 0; 12 | 13 | private Object data; 14 | 15 | private String msg; 16 | 17 | public long getCode() { 18 | return code; 19 | } 20 | 21 | public void setCode(long code) { 22 | this.code = code; 23 | } 24 | 25 | public long getCount() { 26 | return count; 27 | } 28 | 29 | public void setCount(long count) { 30 | this.count = count; 31 | } 32 | 33 | public Object getData() { 34 | return data; 35 | } 36 | 37 | public void setData(Object data) { 38 | this.data = data; 39 | } 40 | 41 | public String getMsg() { 42 | return msg; 43 | } 44 | 45 | public void setMsg(String msg) { 46 | this.msg = msg; 47 | } 48 | 49 | public Rest() { 50 | super(); 51 | } 52 | 53 | public Rest(long code, long count, Object data, String msg) { 54 | super(); 55 | this.code = code; 56 | this.count = count; 57 | this.data = data; 58 | this.msg = msg; 59 | } 60 | 61 | public static Rest ok(){ 62 | return new Rest(200,0,null,""); 63 | } 64 | 65 | public static Rest ok(String msg){ 66 | return new Rest(200,0,null,msg); 67 | } 68 | 69 | public static Rest okData(Object data){ 70 | return new Rest(200,0,data,"ok"); 71 | } 72 | 73 | public static Rest failure(String msg) { 74 | return new Rest(500,0,null,msg); 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /src/main/java/com/luckin/service/impl/TestcaseServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.luckin.service.impl; 2 | 3 | import com.baomidou.mybatisplus.plugins.Page; 4 | import com.baomidou.mybatisplus.service.impl.ServiceImpl; 5 | import com.luckin.entity.Testcase; 6 | import com.luckin.mapper.TestcaseMapper; 7 | import com.luckin.service.TestcaseService; 8 | import org.springframework.beans.factory.annotation.Autowired; 9 | import org.springframework.stereotype.Service; 10 | import java.util.Date; 11 | import java.util.Map; 12 | 13 | 14 | /** 15 | * 16 | * Testcase 表数据服务层接口实现类 17 | * 18 | */ 19 | @Service 20 | public class TestcaseServiceImpl extends ServiceImpl implements TestcaseService { 21 | 22 | @Autowired private TestcaseMapper testcaseMapper; 23 | 24 | @Override 25 | public void insertTestcase(Testcase testcase) { 26 | // TODO Auto-generated method stub 27 | testcase.setCreateTime(new Date()); 28 | //保存用户 29 | testcaseMapper.insert(testcase); 30 | } 31 | 32 | @Override 33 | public void updateTestcase(Testcase testcase) { 34 | // TODO Auto-generated method stub 35 | //更新用户 36 | testcaseMapper.updateById(testcase); 37 | } 38 | 39 | @Override 40 | public Page> selectTestcasePage(Page> page, String search) { 41 | // TODO Auto-generated method stub 42 | page.setRecords(baseMapper.selectTestcaseList(page, search)); 43 | return page; 44 | } 45 | 46 | @Override 47 | public void delete(String id) { 48 | // TODO Auto-generated method stub 49 | this.deleteById(id); 50 | } 51 | 52 | 53 | } -------------------------------------------------------------------------------- /src/main/java/com/luckin/common/shiro/tag/SecureTag.java: -------------------------------------------------------------------------------- 1 | package com.luckin.common.shiro.tag; 2 | 3 | import freemarker.core.Environment; 4 | import freemarker.template.*; 5 | import org.apache.shiro.SecurityUtils; 6 | import org.apache.shiro.subject.Subject; 7 | 8 | import java.io.IOException; 9 | import java.util.Map; 10 | 11 | /** 12 | *

Equivalent to {@link org.apache.shiro.web.tags.SecureTag}

13 | */ 14 | public abstract class SecureTag implements TemplateDirectiveModel { 15 | public void execute(Environment env, Map params, TemplateModel[] loopVars, TemplateDirectiveBody body) throws TemplateException, IOException { 16 | verifyParameters(params); 17 | render(env, params, body); 18 | } 19 | 20 | public abstract void render(Environment env, Map params, TemplateDirectiveBody body) throws IOException, TemplateException; 21 | 22 | protected String getParam(Map params, String name) { 23 | Object value = params.get(name); 24 | 25 | if (value instanceof SimpleScalar) { 26 | return ((SimpleScalar)value).getAsString(); 27 | } 28 | 29 | return null; 30 | } 31 | 32 | protected Subject getSubject() { 33 | return SecurityUtils.getSubject(); 34 | } 35 | 36 | protected void verifyParameters(Map params) throws TemplateModelException { 37 | } 38 | 39 | protected void renderBody(Environment env, TemplateDirectiveBody body) throws IOException, TemplateException { 40 | if (body != null) { 41 | body.render(env.getOut()); 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/main/resources/mybatis-config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /src/main/resources/static/app/css/reset.css: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | /* CSS Document */ 3 | /*Reset*/ 4 | *{box-sizing:content-box;} 5 | a:hover, a:focus{text-decoration:none;} 6 | body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,textarea,p,blockquote,th,td{margin:0;padding:0;} 7 | table{border-collapse:collapse;border-spacing:0;} 8 | body{-webkit-text-size-adjust:none;} 9 | fieldset,img{border:0;} 10 | img{ vertical-align: top; max-width: 100%; } 11 | address,caption,cite,code,dfn,em,th,var{font-style:normal;font-weight:normal;} 12 | ol,ul{list-style:none;} 13 | caption,th{text-align:left;} 14 | h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;} 15 | q:before,q:after{content:'';} 16 | abbr,acronym {border:0;} 17 | .clearfix:after{visibility:hidden;display: block;font-size:0;content:" ";clear:both;height:0;} 18 | * html .clearfix{ zoom: 1; } /* IE6 */ 19 | *:first-child+html .clearfix { zoom: 1; } /* IE7 */ 20 | .cli{ clear:both; font-size:0; height:0; overflow:hidden;display:block;} 21 | .lclear{clear:left;font-size:0;height:0;overflow:hidden;} 22 | .fl{float:left;} 23 | .fr{float:right;} 24 | 25 | /* ֹ 26 | iframe{nifm2:expression(this.src='about:blank',this.outerHTML='');} 27 | script{no2js:expression((this.src.toLowerCase().indexOf('http')==0)?document.close():'');} 28 | */ 29 | /* ıԼ˶ 30 | div{word-wrap: break-word;word-break: normal;} 31 | p{text-align:justify; text-justify:inter-ideograph;} 32 | */ 33 | /*general*/ 34 | body{font-size:12px;font-family:'微软雅黑',"宋体","Arial Narrow",Helvetica,sans-serif;color:#000;line-height:1.2;text-align:left;} 35 | a{color:#333;text-decoration:none;} 36 | -------------------------------------------------------------------------------- /src/main/resources/templates/system/menu/edit.html: -------------------------------------------------------------------------------- 1 | <#include "/common/layout_dl.html"> 2 | <@header> 3 | 4 | <@body> 5 |
6 | 7 |
8 |
9 | 10 | 12 |
13 |
14 | 15 | 16 |
17 |
18 | 19 | 20 |
21 |
22 | 23 | 24 |
25 |
26 | 27 | 取消 28 |
29 |
30 |
31 | 32 | <@footer> 33 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/flat/flat.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin flat skin, black 2 | ----------------------------------- */ 3 | .icheckbox_flat, 4 | .iradio_flat { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 20px; 11 | height: 20px; 12 | background: url(flat.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_flat { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_flat.checked { 21 | background-position: -22px 0; 22 | } 23 | .icheckbox_flat.disabled { 24 | background-position: -44px 0; 25 | cursor: default; 26 | } 27 | .icheckbox_flat.checked.disabled { 28 | background-position: -66px 0; 29 | } 30 | 31 | .iradio_flat { 32 | background-position: -88px 0; 33 | } 34 | .iradio_flat.checked { 35 | background-position: -110px 0; 36 | } 37 | .iradio_flat.disabled { 38 | background-position: -132px 0; 39 | cursor: default; 40 | } 41 | .iradio_flat.checked.disabled { 42 | background-position: -154px 0; 43 | } 44 | 45 | /* Retina support */ 46 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 47 | only screen and (-moz-min-device-pixel-ratio: 1.5), 48 | only screen and (-o-min-device-pixel-ratio: 3/2), 49 | only screen and (min-device-pixel-ratio: 1.5) { 50 | .icheckbox_flat, 51 | .iradio_flat { 52 | background-image: url(flat@2x.png); 53 | -webkit-background-size: 176px 22px; 54 | background-size: 176px 22px; 55 | } 56 | } -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/lay/modules/laytpl.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.1.2 MIT License By http://www.layui.com */ 2 | ;layui.define(function(e){"use strict";var r={open:"{{",close:"}}"},n={exp:function(e){return new RegExp(e,"g")},query:function(e,n,t){var o=["#([\\s\\S])+?","([^{#}])*?"][e||0];return c((n||"")+r.open+o+r.close+(t||""))},escape:function(e){return String(e||"").replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""")},error:function(e,r){var n="Laytpl Error:";return"object"==typeof console&&console.error(n+e+"\n"+(r||"")),n+e}},c=n.exp,t=function(e){this.tpl=e};t.pt=t.prototype,window.errors=0,t.pt.parse=function(e,t){var o=this,p=e,a=c("^"+r.open+"#",""),l=c(r.close+"$","");e=e.replace(/\s+|\r|\t|\n/g," ").replace(c(r.open+"#"),r.open+"# ").replace(c(r.close+"}"),"} "+r.close).replace(/\\/g,"\\\\").replace(/(?="|')/g,"\\").replace(n.query(),function(e){return e=e.replace(a,"").replace(l,""),'";'+e.replace(/\\/g,"")+';view+="'}).replace(n.query(1),function(e){var n='"+(';return e.replace(/\s/g,"")===r.open+r.close?"":(e=e.replace(c(r.open+"|"+r.close),""),/^=/.test(e)&&(e=e.replace(/^=/,""),n='"+_escape_('),n+e.replace(/\\/g,"")+')+"')}),e='"use strict";var view = "'+e+'";return view;';try{return o.cache=e=new Function("d, _escape_",e),e(t,n.escape)}catch(u){return delete o.cache,n.error(u,p)}},t.pt.render=function(e,r){var c,t=this;return e?(c=t.cache?t.cache(e,n.escape):t.parse(t.tpl,e),r?void r(c):c):n.error("no data")};var o=function(e){return"string"!=typeof e?n.error("Template not found"):new t(e)};o.config=function(e){e=e||{};for(var n in e)r[n]=e[n]},o.v="1.2.0",e("laytpl",o)}); -------------------------------------------------------------------------------- /src/main/resources/mapper/sys/SysMenuMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 29 | 30 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/bootstrap-fileinput/.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ## Prerequisites 2 | 3 | - [ ] I have searched for similar issues in both open and closed tickets and cannot find a duplicate. 4 | - [ ] The issue still exists against the latest `master` branch of bootstrap-fileinput. 5 | - [ ] This is not an usage question. I confirm having read the plugin [documentation](http://plugins.krajee.com/file-input) and [demos](http://plugins.krajee.com/file-input/demo). 6 | - [ ] This is not a general programming / coding question. (Those should be directed to the [webtips Q & A forum](http://webtips.krajee.com/questions)). 7 | - [ ] I have attempted to find the simplest possible steps to reproduce the issue. 8 | - [ ] I have included a failing test as a pull request (Optional). 9 | 10 | ## Steps to reproduce the issue 11 | 12 | 1. 13 | 2. 14 | 3. 15 | 16 | ## Expected behavior and actual behavior 17 | 18 | When I follow those steps, I see... 19 | 20 | I was expecting... 21 | 22 | ## Environment 23 | 24 | Browsers 25 | 26 | - [ ] Google Chrome 27 | - [ ] Mozilla Firefox 28 | - [ ] Internet Explorer 29 | - [ ] Safari 30 | 31 | Operating System 32 | 33 | - [ ] Windows 34 | - [ ] Mac OS X 35 | - [ ] Linux 36 | - [ ] Mobile 37 | 38 | Libraries 39 | 40 | - jQuery version: 41 | - bootstrap-fileinput version: 42 | 43 | ## Isolating the problem 44 | 45 | - [ ] This bug happens [on the plugin demos page](http://plugins.krajee.com/file-input/demo) 46 | - [ ] The bug happens consistently across all tested browsers 47 | - [ ] This bug happens when using bootstrap-fileinput without other plugins 48 | - [ ] I can reproduce this bug in [a jsbin](https://jsbin.com/) 49 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/flat/red.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Flat skin, red 2 | ----------------------------------- */ 3 | .icheckbox_flat-red, 4 | .iradio_flat-red { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 20px; 11 | height: 20px; 12 | background: url(red.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_flat-red { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_flat-red.checked { 21 | background-position: -22px 0; 22 | } 23 | .icheckbox_flat-red.disabled { 24 | background-position: -44px 0; 25 | cursor: default; 26 | } 27 | .icheckbox_flat-red.checked.disabled { 28 | background-position: -66px 0; 29 | } 30 | 31 | .iradio_flat-red { 32 | background-position: -88px 0; 33 | } 34 | .iradio_flat-red.checked { 35 | background-position: -110px 0; 36 | } 37 | .iradio_flat-red.disabled { 38 | background-position: -132px 0; 39 | cursor: default; 40 | } 41 | .iradio_flat-red.checked.disabled { 42 | background-position: -154px 0; 43 | } 44 | 45 | /* Retina support */ 46 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 47 | only screen and (-moz-min-device-pixel-ratio: 1.5), 48 | only screen and (-o-min-device-pixel-ratio: 3/2), 49 | only screen and (min-device-pixel-ratio: 1.5) { 50 | .icheckbox_flat-red, 51 | .iradio_flat-red { 52 | background-image: url(red@2x.png); 53 | -webkit-background-size: 176px 22px; 54 | background-size: 176px 22px; 55 | } 56 | } -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/flat/aero.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Flat skin, aero 2 | ----------------------------------- */ 3 | .icheckbox_flat-aero, 4 | .iradio_flat-aero { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 20px; 11 | height: 20px; 12 | background: url(aero.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_flat-aero { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_flat-aero.checked { 21 | background-position: -22px 0; 22 | } 23 | .icheckbox_flat-aero.disabled { 24 | background-position: -44px 0; 25 | cursor: default; 26 | } 27 | .icheckbox_flat-aero.checked.disabled { 28 | background-position: -66px 0; 29 | } 30 | 31 | .iradio_flat-aero { 32 | background-position: -88px 0; 33 | } 34 | .iradio_flat-aero.checked { 35 | background-position: -110px 0; 36 | } 37 | .iradio_flat-aero.disabled { 38 | background-position: -132px 0; 39 | cursor: default; 40 | } 41 | .iradio_flat-aero.checked.disabled { 42 | background-position: -154px 0; 43 | } 44 | 45 | /* Retina support */ 46 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 47 | only screen and (-moz-min-device-pixel-ratio: 1.5), 48 | only screen and (-o-min-device-pixel-ratio: 3/2), 49 | only screen and (min-device-pixel-ratio: 1.5) { 50 | .icheckbox_flat-aero, 51 | .iradio_flat-aero { 52 | background-image: url(aero@2x.png); 53 | -webkit-background-size: 176px 22px; 54 | background-size: 176px 22px; 55 | } 56 | } -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/flat/blue.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Flat skin, blue 2 | ----------------------------------- */ 3 | .icheckbox_flat-blue, 4 | .iradio_flat-blue { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 20px; 11 | height: 20px; 12 | background: url(blue.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_flat-blue { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_flat-blue.checked { 21 | background-position: -22px 0; 22 | } 23 | .icheckbox_flat-blue.disabled { 24 | background-position: -44px 0; 25 | cursor: default; 26 | } 27 | .icheckbox_flat-blue.checked.disabled { 28 | background-position: -66px 0; 29 | } 30 | 31 | .iradio_flat-blue { 32 | background-position: -88px 0; 33 | } 34 | .iradio_flat-blue.checked { 35 | background-position: -110px 0; 36 | } 37 | .iradio_flat-blue.disabled { 38 | background-position: -132px 0; 39 | cursor: default; 40 | } 41 | .iradio_flat-blue.checked.disabled { 42 | background-position: -154px 0; 43 | } 44 | 45 | /* Retina support */ 46 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 47 | only screen and (-moz-min-device-pixel-ratio: 1.5), 48 | only screen and (-o-min-device-pixel-ratio: 3/2), 49 | only screen and (min-device-pixel-ratio: 1.5) { 50 | .icheckbox_flat-blue, 51 | .iradio_flat-blue { 52 | background-image: url(blue@2x.png); 53 | -webkit-background-size: 176px 22px; 54 | background-size: 176px 22px; 55 | } 56 | } -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/flat/grey.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Flat skin, grey 2 | ----------------------------------- */ 3 | .icheckbox_flat-grey, 4 | .iradio_flat-grey { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 20px; 11 | height: 20px; 12 | background: url(grey.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_flat-grey { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_flat-grey.checked { 21 | background-position: -22px 0; 22 | } 23 | .icheckbox_flat-grey.disabled { 24 | background-position: -44px 0; 25 | cursor: default; 26 | } 27 | .icheckbox_flat-grey.checked.disabled { 28 | background-position: -66px 0; 29 | } 30 | 31 | .iradio_flat-grey { 32 | background-position: -88px 0; 33 | } 34 | .iradio_flat-grey.checked { 35 | background-position: -110px 0; 36 | } 37 | .iradio_flat-grey.disabled { 38 | background-position: -132px 0; 39 | cursor: default; 40 | } 41 | .iradio_flat-grey.checked.disabled { 42 | background-position: -154px 0; 43 | } 44 | 45 | /* Retina support */ 46 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 47 | only screen and (-moz-min-device-pixel-ratio: 1.5), 48 | only screen and (-o-min-device-pixel-ratio: 3/2), 49 | only screen and (min-device-pixel-ratio: 1.5) { 50 | .icheckbox_flat-grey, 51 | .iradio_flat-grey { 52 | background-image: url(grey@2x.png); 53 | -webkit-background-size: 176px 22px; 54 | background-size: 176px 22px; 55 | } 56 | } -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/flat/pink.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Flat skin, pink 2 | ----------------------------------- */ 3 | .icheckbox_flat-pink, 4 | .iradio_flat-pink { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 20px; 11 | height: 20px; 12 | background: url(pink.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_flat-pink { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_flat-pink.checked { 21 | background-position: -22px 0; 22 | } 23 | .icheckbox_flat-pink.disabled { 24 | background-position: -44px 0; 25 | cursor: default; 26 | } 27 | .icheckbox_flat-pink.checked.disabled { 28 | background-position: -66px 0; 29 | } 30 | 31 | .iradio_flat-pink { 32 | background-position: -88px 0; 33 | } 34 | .iradio_flat-pink.checked { 35 | background-position: -110px 0; 36 | } 37 | .iradio_flat-pink.disabled { 38 | background-position: -132px 0; 39 | cursor: default; 40 | } 41 | .iradio_flat-pink.checked.disabled { 42 | background-position: -154px 0; 43 | } 44 | 45 | /* Retina support */ 46 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 47 | only screen and (-moz-min-device-pixel-ratio: 1.5), 48 | only screen and (-o-min-device-pixel-ratio: 3/2), 49 | only screen and (min-device-pixel-ratio: 1.5) { 50 | .icheckbox_flat-pink, 51 | .iradio_flat-pink { 52 | background-image: url(pink@2x.png); 53 | -webkit-background-size: 176px 22px; 54 | background-size: 176px 22px; 55 | } 56 | } -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/futurico/futurico.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Futurico skin 2 | ----------------------------------- */ 3 | .icheckbox_futurico, 4 | .iradio_futurico { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 16px; 11 | height: 17px; 12 | background: url(futurico.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_futurico { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_futurico.checked { 21 | background-position: -18px 0; 22 | } 23 | .icheckbox_futurico.disabled { 24 | background-position: -36px 0; 25 | cursor: default; 26 | } 27 | .icheckbox_futurico.checked.disabled { 28 | background-position: -54px 0; 29 | } 30 | 31 | .iradio_futurico { 32 | background-position: -72px 0; 33 | } 34 | .iradio_futurico.checked { 35 | background-position: -90px 0; 36 | } 37 | .iradio_futurico.disabled { 38 | background-position: -108px 0; 39 | cursor: default; 40 | } 41 | .iradio_futurico.checked.disabled { 42 | background-position: -126px 0; 43 | } 44 | 45 | /* Retina support */ 46 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 47 | only screen and (-moz-min-device-pixel-ratio: 1.5), 48 | only screen and (-o-min-device-pixel-ratio: 3/2), 49 | only screen and (min-device-pixel-ratio: 1.5) { 50 | .icheckbox_futurico, 51 | .iradio_futurico { 52 | background-image: url(futurico@2x.png); 53 | -webkit-background-size: 144px 19px; 54 | background-size: 144px 19px; 55 | } 56 | } -------------------------------------------------------------------------------- /src/main/java/com/luckin/entity/Project.java: -------------------------------------------------------------------------------- 1 | package com.luckin.entity; 2 | 3 | import com.baomidou.mybatisplus.activerecord.Model; 4 | import com.baomidou.mybatisplus.annotations.TableId; 5 | import com.baomidou.mybatisplus.annotations.TableName; 6 | import com.baomidou.mybatisplus.enums.IdType; 7 | 8 | import java.io.Serializable; 9 | 10 | 11 | /** 12 | *

13 | * 项目表 14 | *

15 | * 16 | * @author GaoJun.Zhou 17 | * @since 2017-03-06 18 | */ 19 | @TableName("project") 20 | public class Project extends Model { 21 | 22 | private static final long serialVersionUID = 1L; 23 | 24 | /** 25 | * 主键 26 | */ 27 | @TableId(type=IdType.UUID) 28 | private String id; 29 | /** 30 | * 项目名称 31 | */ 32 | private String projectName; 33 | 34 | /** 35 | * 项目host 36 | */ 37 | private String projectHost; 38 | 39 | /** 40 | * 描述 41 | */ 42 | private String projectDesc; 43 | 44 | 45 | public String getId() { 46 | return id; 47 | } 48 | 49 | public void setId(String id) { 50 | this.id = id; 51 | } 52 | 53 | public String getProjectName() { 54 | return projectName; 55 | } 56 | 57 | public void setProjectName(String projectName) { 58 | this.projectName = projectName; 59 | } 60 | public String getProjectHost() { 61 | return projectHost; 62 | } 63 | 64 | public void setProjectHost(String projectHost) { 65 | this.projectHost = projectHost; 66 | } 67 | public String getProjectDesc() { 68 | return projectDesc; 69 | } 70 | 71 | public void setProjectDesc(String projectDesc) { 72 | this.projectDesc = projectDesc; 73 | } 74 | 75 | 76 | 77 | @Override 78 | protected Serializable pkVal() { 79 | return this.id; 80 | } 81 | 82 | } 83 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/flat/green.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Flat skin, green 2 | ----------------------------------- */ 3 | .icheckbox_flat-green, 4 | .iradio_flat-green { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 20px; 11 | height: 20px; 12 | background: url(green.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_flat-green { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_flat-green.checked { 21 | background-position: -22px 0; 22 | } 23 | .icheckbox_flat-green.disabled { 24 | background-position: -44px 0; 25 | cursor: default; 26 | } 27 | .icheckbox_flat-green.checked.disabled { 28 | background-position: -66px 0; 29 | } 30 | 31 | .iradio_flat-green { 32 | background-position: -88px 0; 33 | } 34 | .iradio_flat-green.checked { 35 | background-position: -110px 0; 36 | } 37 | .iradio_flat-green.disabled { 38 | background-position: -132px 0; 39 | cursor: default; 40 | } 41 | .iradio_flat-green.checked.disabled { 42 | background-position: -154px 0; 43 | } 44 | 45 | /* Retina support */ 46 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 47 | only screen and (-moz-min-device-pixel-ratio: 1.5), 48 | only screen and (-o-min-device-pixel-ratio: 3/2), 49 | only screen and (min-device-pixel-ratio: 1.5) { 50 | .icheckbox_flat-green, 51 | .iradio_flat-green { 52 | background-image: url(green@2x.png); 53 | -webkit-background-size: 176px 22px; 54 | background-size: 176px 22px; 55 | } 56 | } -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/flat/orange.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Flat skin, orange 2 | ----------------------------------- */ 3 | .icheckbox_flat-orange, 4 | .iradio_flat-orange { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 20px; 11 | height: 20px; 12 | background: url(orange.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_flat-orange { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_flat-orange.checked { 21 | background-position: -22px 0; 22 | } 23 | .icheckbox_flat-orange.disabled { 24 | background-position: -44px 0; 25 | cursor: default; 26 | } 27 | .icheckbox_flat-orange.checked.disabled { 28 | background-position: -66px 0; 29 | } 30 | 31 | .iradio_flat-orange { 32 | background-position: -88px 0; 33 | } 34 | .iradio_flat-orange.checked { 35 | background-position: -110px 0; 36 | } 37 | .iradio_flat-orange.disabled { 38 | background-position: -132px 0; 39 | cursor: default; 40 | } 41 | .iradio_flat-orange.checked.disabled { 42 | background-position: -154px 0; 43 | } 44 | 45 | /* Retina support */ 46 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 47 | only screen and (-moz-min-device-pixel-ratio: 1.5), 48 | only screen and (-o-min-device-pixel-ratio: 3/2), 49 | only screen and (min-device-pixel-ratio: 1.5) { 50 | .icheckbox_flat-orange, 51 | .iradio_flat-orange { 52 | background-image: url(orange@2x.png); 53 | -webkit-background-size: 176px 22px; 54 | background-size: 176px 22px; 55 | } 56 | } -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/flat/purple.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Flat skin, purple 2 | ----------------------------------- */ 3 | .icheckbox_flat-purple, 4 | .iradio_flat-purple { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 20px; 11 | height: 20px; 12 | background: url(purple.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_flat-purple { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_flat-purple.checked { 21 | background-position: -22px 0; 22 | } 23 | .icheckbox_flat-purple.disabled { 24 | background-position: -44px 0; 25 | cursor: default; 26 | } 27 | .icheckbox_flat-purple.checked.disabled { 28 | background-position: -66px 0; 29 | } 30 | 31 | .iradio_flat-purple { 32 | background-position: -88px 0; 33 | } 34 | .iradio_flat-purple.checked { 35 | background-position: -110px 0; 36 | } 37 | .iradio_flat-purple.disabled { 38 | background-position: -132px 0; 39 | cursor: default; 40 | } 41 | .iradio_flat-purple.checked.disabled { 42 | background-position: -154px 0; 43 | } 44 | 45 | /* Retina support */ 46 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 47 | only screen and (-moz-min-device-pixel-ratio: 1.5), 48 | only screen and (-o-min-device-pixel-ratio: 3/2), 49 | only screen and (min-device-pixel-ratio: 1.5) { 50 | .icheckbox_flat-purple, 51 | .iradio_flat-purple { 52 | background-image: url(purple@2x.png); 53 | -webkit-background-size: 176px 22px; 54 | background-size: 176px 22px; 55 | } 56 | } -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/flat/yellow.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Flat skin, yellow 2 | ----------------------------------- */ 3 | .icheckbox_flat-yellow, 4 | .iradio_flat-yellow { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 20px; 11 | height: 20px; 12 | background: url(yellow.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_flat-yellow { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_flat-yellow.checked { 21 | background-position: -22px 0; 22 | } 23 | .icheckbox_flat-yellow.disabled { 24 | background-position: -44px 0; 25 | cursor: default; 26 | } 27 | .icheckbox_flat-yellow.checked.disabled { 28 | background-position: -66px 0; 29 | } 30 | 31 | .iradio_flat-yellow { 32 | background-position: -88px 0; 33 | } 34 | .iradio_flat-yellow.checked { 35 | background-position: -110px 0; 36 | } 37 | .iradio_flat-yellow.disabled { 38 | background-position: -132px 0; 39 | cursor: default; 40 | } 41 | .iradio_flat-yellow.checked.disabled { 42 | background-position: -154px 0; 43 | } 44 | 45 | /* Retina support */ 46 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 47 | only screen and (-moz-min-device-pixel-ratio: 1.5), 48 | only screen and (-o-min-device-pixel-ratio: 3/2), 49 | only screen and (min-device-pixel-ratio: 1.5) { 50 | .icheckbox_flat-yellow, 51 | .iradio_flat-yellow { 52 | background-image: url(yellow@2x.png); 53 | -webkit-background-size: 176px 22px; 54 | background-size: 176px 22px; 55 | } 56 | } -------------------------------------------------------------------------------- /src/main/resources/static/plugins/layui/lay/modules/util.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.1.2 MIT License By http://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var o=layui.$,t={fixbar:function(e){var t,a,i="layui-fixbar",l="layui-fixbar-top",r=o(document),c=o("body");e=o.extend({showHeight:200},e),e.bar1=e.bar1===!0?"":e.bar1,e.bar2=e.bar2===!0?"":e.bar2,e.bgcolor=e.bgcolor?"background-color:"+e.bgcolor:"";var n=[e.bar1,e.bar2,""],u=o(['
    ',e.bar1?'
  • '+n[0]+"
  • ":"",e.bar2?'
  • '+n[1]+"
  • ":"",'
  • '+n[2]+"
  • ","
"].join("")),s=u.find("."+l),b=function(){var o=r.scrollTop();o>=e.showHeight?t||(s.show(),t=1):t&&(s.hide(),t=0)};o("."+i)[0]||("object"==typeof e.css&&u.css(e.css),c.append(u),b(),u.find("li").on("click",function(){var t=o(this),a=t.attr("lay-type");"top"===a&&o("html,body").animate({scrollTop:0},200),e.click&&e.click.call(this,a)}),r.on("scroll",function(){clearTimeout(a),a=setTimeout(function(){b()},100)}))},countdown:function(e,o,t){var a=this,i="function"==typeof o,l=new Date(e).getTime(),r=new Date(!o||i?(new Date).getTime():o).getTime(),c=l-r,n=[Math.floor(c/864e5),Math.floor(c/36e5)%24,Math.floor(c/6e4)%60,Math.floor(c/1e3)%60];i&&(t=o);var u=setTimeout(function(){a.countdown(e,r+1e3,t)},1e3);return t&&t(c>0?n:[0,0,0,0],o,u),c<=0&&clearTimeout(u),u},timeAgo:function(e,o){var t=(new Date).getTime()-new Date(e).getTime();return t>2592e6?(t=new Date(e).toLocaleString(),o&&(t=t.replace(/\s[\S]+$/g,"")),t):t>=864e5?(t/1e3/60/60/24|0)+"天前":t>=36e5?(t/1e3/60/60|0)+"小时前":t>=18e4?(t/1e3/60|0)+"分钟前":t<0?"未来":"刚刚"}};e("util",t)}); -------------------------------------------------------------------------------- /src/main/resources/templates/system/role/add.html: -------------------------------------------------------------------------------- 1 | <#include "/common/layout_dl.html"> 2 | <@header> 3 | 4 | <@body> 5 |
6 |
7 |
8 | 9 |
10 | 11 |
12 |
13 |
14 | 15 |
16 | 17 |
18 |
19 |
20 | 21 |
22 | 25 | 28 |
29 |
30 |
31 | 32 |
33 | 34 | 取消 35 |
36 |
37 |
38 |
39 | 40 | <@footer> 41 | -------------------------------------------------------------------------------- /src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 9999 3 | 4 | spring: 5 | datasource: 6 | druid: 7 | type : com.alibaba.druid.pool.DruidDataSource 8 | url : jdbc:mysql://localhost/demo?characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2b8 9 | username: root 10 | password : admin 11 | driverClassName : com.mysql.jdbc.Driver 12 | initialSize: 5 13 | minIdle: 5 14 | maxActive: 20 15 | maxWait: 60000 16 | timeBetweenEvictionRunsMillis: 60000 17 | minEvictableIdleTimeMillis: 300000 18 | validationQuery: SELECT 1 FROM DUAL 19 | testWhileIdle: true 20 | testOnBorrow: false 21 | testOnReturn: false 22 | poolPreparedStatements: true 23 | maxPoolPreparedStatementPerConnectionSize: 20 24 | connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 25 | freemarker: 26 | prefix: .html 27 | content-type: text/html 28 | expose-spring-macro-helpers: false 29 | expose-session-attributes: false 30 | expose-request-attributes: false 31 | templateLoaderPath : classpath:/templates/ 32 | settings: 33 | classic_compatible: true 34 | template_update_delay: 0 35 | default_encoding: UTF-8 36 | number_format: 0 37 | datetime_format: 0.########## 38 | template_exception_handler: ignore 39 | #mybatis 40 | mybatis-plus: 41 | mapper-locations: classpath:/mapper/*/*Mapper.xml 42 | #实体扫描,多个package用逗号或者分号分隔 43 | typeAliasesPackage: com.luckin.entity 44 | -------------------------------------------------------------------------------- /src/main/java/com/luckin/common/shiro/tag/GuestTag.java: -------------------------------------------------------------------------------- 1 | package com.luckin.common.shiro.tag; 2 | 3 | import freemarker.core.Environment; 4 | import freemarker.log.Logger; 5 | import freemarker.template.TemplateDirectiveBody; 6 | import freemarker.template.TemplateException; 7 | 8 | import java.io.IOException; 9 | import java.util.Map; 10 | 11 | 12 | /** 13 | * JSP tag that renders the tag body if the current user is not known to the system, either because they 14 | * haven't logged in yet, or because they have no 'RememberMe' identity. 15 | * 16 | *

The logically opposite tag of this one is the {@link UserTag}. Please read that class's JavaDoc as it explains 17 | * more about the differences between Authenticated/Unauthenticated and User/Guest semantic differences. 18 | * 19 | *

Equivalent to {@link org.apache.shiro.web.tags.GuestTag}

20 | * 21 | * @since 0.9 22 | */ 23 | public class GuestTag extends SecureTag { 24 | private static final Logger log = Logger.getLogger("AuthenticatedTag"); 25 | 26 | @Override 27 | public void render(Environment env, Map params, TemplateDirectiveBody body) throws IOException, TemplateException { 28 | if (getSubject() == null || getSubject().getPrincipal() == null) { 29 | if (log.isDebugEnabled()) { 30 | log.debug("Subject does not exist or does not have a known identity (aka 'principal'). " + 31 | "Tag body will be evaluated."); 32 | } 33 | 34 | renderBody(env, body); 35 | } else { 36 | if (log.isDebugEnabled()) { 37 | log.debug("Subject exists or has a known identity (aka 'principal'). " + 38 | "Tag body will not be evaluated."); 39 | } 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/com/luckin/common/shiro/tag/AuthenticatedTag.java: -------------------------------------------------------------------------------- 1 | package com.luckin.common.shiro.tag; 2 | 3 | import freemarker.core.Environment; 4 | import freemarker.log.Logger; 5 | import freemarker.template.TemplateDirectiveBody; 6 | import freemarker.template.TemplateException; 7 | 8 | import java.io.IOException; 9 | import java.util.Map; 10 | 11 | 12 | /** 13 | * JSP tag that renders the tag body only if the current user has executed a successful authentication attempt 14 | * during their current session. 15 | * 16 | *

This is more restrictive than the {@link UserTag}, which only 17 | * ensures the current user is known to the system, either via a current login or from Remember Me services, 18 | * which only makes the assumption that the current user is who they say they are, and does not guarantee it like 19 | * this tag does. 20 | * 21 | *

The logically opposite tag of this one is the {@link NotAuthenticatedTag} 22 | * 23 | *

Equivalent to {@link org.apache.shiro.web.tags.AuthenticatedTag}

24 | * 25 | * @since 0.2 26 | */ 27 | public class AuthenticatedTag extends SecureTag { 28 | private static final Logger log = Logger.getLogger("AuthenticatedTag"); 29 | 30 | @Override 31 | public void render(Environment env, Map params, TemplateDirectiveBody body) throws IOException, TemplateException { 32 | if (getSubject() != null && getSubject().isAuthenticated()) { 33 | if (log.isDebugEnabled()) { 34 | log.debug("Subject exists and is authenticated. Tag body will be evaluated."); 35 | } 36 | 37 | renderBody(env, body); 38 | } else { 39 | if (log.isDebugEnabled()) { 40 | log.debug("Subject does not exist or is not authenticated. Tag body will not be evaluated."); 41 | } 42 | } 43 | } 44 | } -------------------------------------------------------------------------------- /src/main/resources/static/plugins/iCheck/square/square.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Square skin, black 2 | ----------------------------------- */ 3 | .icheckbox_square, 4 | .iradio_square { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 22px; 11 | height: 22px; 12 | background: url(square.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_square { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_square.hover { 21 | background-position: -24px 0; 22 | } 23 | .icheckbox_square.checked { 24 | background-position: -48px 0; 25 | } 26 | .icheckbox_square.disabled { 27 | background-position: -72px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_square.checked.disabled { 31 | background-position: -96px 0; 32 | } 33 | 34 | .iradio_square { 35 | background-position: -120px 0; 36 | } 37 | .iradio_square.hover { 38 | background-position: -144px 0; 39 | } 40 | .iradio_square.checked { 41 | background-position: -168px 0; 42 | } 43 | .iradio_square.disabled { 44 | background-position: -192px 0; 45 | cursor: default; 46 | } 47 | .iradio_square.checked.disabled { 48 | background-position: -216px 0; 49 | } 50 | 51 | /* Retina support */ 52 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 53 | only screen and (-moz-min-device-pixel-ratio: 1.5), 54 | only screen and (-o-min-device-pixel-ratio: 3/2), 55 | only screen and (min-device-pixel-ratio: 1.5) { 56 | .icheckbox_square, 57 | .iradio_square { 58 | background-image: url(square@2x.png); 59 | -webkit-background-size: 240px 24px; 60 | background-size: 240px 24px; 61 | } 62 | } --------------------------------------------------------------------------------