├── README.md ├── doc ├── 1.png ├── 2.png ├── 3.png ├── 4.png ├── 5.png ├── 6.png └── 7.png └── report ├── app ├── api │ ├── assert.go │ └── user.go ├── dao │ ├── api_key.go │ ├── assets_computer.go │ ├── assets_manager.go │ ├── assets_reports.go │ ├── assets_type.go │ ├── assets_users.go │ ├── assets_web.go │ ├── internal │ │ ├── api_key.go │ │ ├── assets_computer.go │ │ ├── assets_manager.go │ │ ├── assets_reports.go │ │ ├── assets_type.go │ │ ├── assets_users.go │ │ ├── assets_web.go │ │ ├── intranet_ports.go │ │ ├── public_ports.go │ │ ├── user_ip.go │ │ ├── user_log.go │ │ ├── user_operation.go │ │ └── users.go │ ├── intranet_ports.go │ ├── public_ports.go │ ├── user_ip.go │ ├── user_log.go │ ├── user_operation.go │ └── users.go ├── model │ ├── api_key.go │ ├── assets_computer.go │ ├── assets_manager.go │ ├── assets_reports.go │ ├── assets_type.go │ ├── assets_users.go │ ├── assets_web.go │ ├── context.go │ ├── internal │ │ ├── api_key.go │ │ ├── assets_computer.go │ │ ├── assets_manager.go │ │ ├── assets_reports.go │ │ ├── assets_type.go │ │ ├── assets_users.go │ │ ├── assets_web.go │ │ ├── intranet_ports.go │ │ ├── public_ports.go │ │ ├── user_ip.go │ │ ├── user_log.go │ │ ├── user_operation.go │ │ └── users.go │ ├── intranet_ports.go │ ├── menu.go │ ├── public_ports.go │ ├── user_ip.go │ ├── user_log.go │ ├── user_operation.go │ └── users.go └── service │ ├── assets.go │ ├── middleware.go │ └── user.go ├── boot └── boot.go ├── config └── config.toml ├── document └── assets.sql ├── go.mod ├── go.sum ├── library ├── logger │ └── logger.go └── response │ └── response.go ├── main.go ├── public ├── css │ ├── layuimini.css │ ├── public.css │ └── themes │ │ └── default.css ├── html │ ├── assets │ │ ├── manager.html │ │ ├── managerAdd.html │ │ ├── pc.html │ │ ├── pcAdd.html │ │ ├── pcEdit.html │ │ ├── pcShow.html │ │ ├── report.html │ │ ├── reportEdit.html │ │ ├── type.html │ │ ├── typeAdd.html │ │ ├── typeEditing.html │ │ ├── web.html │ │ ├── webAdd.html │ │ ├── webEdit.html │ │ ├── webReportAdd.html │ │ └── webShow.html │ ├── home │ │ └── home.html │ └── users │ │ ├── add.html │ │ ├── index.html │ │ ├── login.html │ │ ├── login_log.html │ │ ├── manager.html │ │ ├── operation.html │ │ ├── password.html │ │ ├── setting.html │ │ └── userip.html ├── images │ ├── favicon.ico │ ├── icon-login.png │ ├── loginbg.png │ └── logo.png ├── js │ ├── lay-config.js │ └── lay-module │ │ ├── echarts │ │ ├── echarts.js │ │ └── echartsTheme.js │ │ ├── iconPicker │ │ └── iconPickerFa.js │ │ ├── layarea │ │ └── layarea.js │ │ ├── layuimini │ │ ├── miniAdmin.js │ │ ├── miniMenu.js │ │ ├── miniTab.js │ │ ├── miniTheme.js │ │ └── miniTongji.js │ │ ├── step-lay │ │ ├── step.css │ │ └── step.js │ │ ├── tableSelect │ │ └── tableSelect.js │ │ ├── treetable-lay │ │ ├── treetable.css │ │ └── treetable.js │ │ └── wangEditor │ │ ├── fonts │ │ └── w-e-icon.woff │ │ ├── wangEditor.css │ │ ├── wangEditor.js │ │ ├── wangEditor.min.css │ │ ├── wangEditor.min.js │ │ └── wangEditor.min.js.map ├── lib │ ├── font-awesome-4.7.0 │ │ ├── HELP-US-OUT.txt │ │ ├── css │ │ │ ├── font-awesome.css │ │ │ └── font-awesome.min.css │ │ ├── fonts │ │ │ ├── FontAwesome.otf │ │ │ ├── fontawesome-webfont.eot │ │ │ ├── fontawesome-webfont.svg │ │ │ ├── fontawesome-webfont.ttf │ │ │ ├── fontawesome-webfont.woff │ │ │ └── fontawesome-webfont.woff2 │ │ ├── less │ │ │ ├── animated.less │ │ │ ├── bordered-pulled.less │ │ │ ├── core.less │ │ │ ├── fixed-width.less │ │ │ ├── font-awesome.less │ │ │ ├── icons.less │ │ │ ├── larger.less │ │ │ ├── list.less │ │ │ ├── mixins.less │ │ │ ├── path.less │ │ │ ├── rotated-flipped.less │ │ │ ├── screen-reader.less │ │ │ ├── stacked.less │ │ │ └── variables.less │ │ └── scss │ │ │ ├── _animated.scss │ │ │ ├── _bordered-pulled.scss │ │ │ ├── _core.scss │ │ │ ├── _fixed-width.scss │ │ │ ├── _icons.scss │ │ │ ├── _larger.scss │ │ │ ├── _list.scss │ │ │ ├── _mixins.scss │ │ │ ├── _path.scss │ │ │ ├── _rotated-flipped.scss │ │ │ ├── _screen-reader.scss │ │ │ ├── _stacked.scss │ │ │ ├── _variables.scss │ │ │ └── font-awesome.scss │ ├── fonts │ │ ├── glyphicons-halflings-regular.ttf │ │ ├── glyphicons-halflings-regular.woff │ │ └── glyphicons-halflings-regular.woff2 │ ├── jq-module │ │ ├── jquery.particleground.min.js │ │ ├── paigusu.min.js │ │ └── zyupload │ │ │ ├── zyupload-1.0.0.min.css │ │ │ └── zyupload-1.0.0.min.js │ ├── jquery-3.4.1 │ │ └── jquery-3.4.1.min.js │ ├── json-viewer │ │ ├── bootstrap.min.css │ │ ├── img │ │ │ └── jsoneditor-icons.svg │ │ ├── jsoneditor.min.css │ │ └── jsoneditor.min.js │ └── layui-v2.5.5 │ │ ├── css │ │ ├── layui.css │ │ ├── layui.mobile.css │ │ └── modules │ │ │ ├── code.css │ │ │ ├── laydate │ │ │ └── default │ │ │ │ └── laydate.css │ │ │ └── layer │ │ │ └── default │ │ │ ├── icon-ext.png │ │ │ ├── icon.png │ │ │ ├── layer.css │ │ │ ├── loading-0.gif │ │ │ ├── loading-1.gif │ │ │ └── loading-2.gif │ │ ├── font │ │ ├── iconfont.eot │ │ ├── iconfont.svg │ │ ├── iconfont.ttf │ │ ├── iconfont.woff │ │ └── iconfont.woff2 │ │ ├── images │ │ └── face │ │ │ ├── 0.gif │ │ │ ├── 1.gif │ │ │ ├── 10.gif │ │ │ ├── 11.gif │ │ │ ├── 12.gif │ │ │ ├── 13.gif │ │ │ ├── 14.gif │ │ │ ├── 15.gif │ │ │ ├── 16.gif │ │ │ ├── 17.gif │ │ │ ├── 18.gif │ │ │ ├── 19.gif │ │ │ ├── 2.gif │ │ │ ├── 20.gif │ │ │ ├── 21.gif │ │ │ ├── 22.gif │ │ │ ├── 23.gif │ │ │ ├── 24.gif │ │ │ ├── 25.gif │ │ │ ├── 26.gif │ │ │ ├── 27.gif │ │ │ ├── 28.gif │ │ │ ├── 29.gif │ │ │ ├── 3.gif │ │ │ ├── 30.gif │ │ │ ├── 31.gif │ │ │ ├── 32.gif │ │ │ ├── 33.gif │ │ │ ├── 34.gif │ │ │ ├── 35.gif │ │ │ ├── 36.gif │ │ │ ├── 37.gif │ │ │ ├── 38.gif │ │ │ ├── 39.gif │ │ │ ├── 4.gif │ │ │ ├── 40.gif │ │ │ ├── 41.gif │ │ │ ├── 42.gif │ │ │ ├── 43.gif │ │ │ ├── 44.gif │ │ │ ├── 45.gif │ │ │ ├── 46.gif │ │ │ ├── 47.gif │ │ │ ├── 48.gif │ │ │ ├── 49.gif │ │ │ ├── 5.gif │ │ │ ├── 50.gif │ │ │ ├── 51.gif │ │ │ ├── 52.gif │ │ │ ├── 53.gif │ │ │ ├── 54.gif │ │ │ ├── 55.gif │ │ │ ├── 56.gif │ │ │ ├── 57.gif │ │ │ ├── 58.gif │ │ │ ├── 59.gif │ │ │ ├── 6.gif │ │ │ ├── 60.gif │ │ │ ├── 61.gif │ │ │ ├── 62.gif │ │ │ ├── 63.gif │ │ │ ├── 64.gif │ │ │ ├── 65.gif │ │ │ ├── 66.gif │ │ │ ├── 67.gif │ │ │ ├── 68.gif │ │ │ ├── 69.gif │ │ │ ├── 7.gif │ │ │ ├── 70.gif │ │ │ ├── 71.gif │ │ │ ├── 8.gif │ │ │ └── 9.gif │ │ ├── lay │ │ └── modules │ │ │ ├── carousel.js │ │ │ ├── code.js │ │ │ ├── colorpicker.js │ │ │ ├── element.js │ │ │ ├── flow.js │ │ │ ├── form.js │ │ │ ├── jquery.js │ │ │ ├── laydate.js │ │ │ ├── layedit.js │ │ │ ├── layer.js │ │ │ ├── laypage.js │ │ │ ├── laytpl.js │ │ │ ├── mobile.js │ │ │ ├── rate.js │ │ │ ├── slider.js │ │ │ ├── table.js │ │ │ ├── transfer.js │ │ │ ├── tree.js │ │ │ ├── upload.js │ │ │ └── util.js │ │ ├── layui.all.js │ │ └── layui.js └── upload │ ├── assetsImg │ ├── a3bc003776e02653fd8b7033183177c8.png │ └── da805d8d62cd3d3ceb18806074e8752d.png │ └── report │ ├── 1f207fd5b9aedd6967c8ed322e9d1cd0.png │ └── b7bda203fcc969f2f8f2df92945094a4.png └── router └── router.go /README.md: -------------------------------------------------------------------------------- 1 | ### 项目开发初衷 2 | 3 | > 作为乙方渗透测试工程师,随着时间的推移,所提交的渗透测试报告大量增加,原来都是以文件目录形式保存渗透测试报告,但是存在诸多不便之处,故写了此脚本方便报告的管理。主要希望改进以下不便之处: 4 | 5 | - 漏洞整改管理:管理还有哪些漏洞未整改 6 | 7 | - 漏洞可视化:本周、本月等时间段漏洞情况、安全管理员属下漏洞情况等 8 | 9 | - 渗透测试报告统一管理:快速查询 10 | 11 | - 等等等 12 | 13 | ### 项目使用 14 | 15 | ``` 16 | 1、创建mysql数据库名为assets(可自定义),格式为UTF-8,导入document/assets.sql文件 17 | 18 | 2、修改配置文件:config/config.toml,填入相应的mysql数据库信息 19 | 20 | 2、运行assets程序即可(默认用户名密码:admin/admin888@A)或者自行go build编译 21 | 22 | linux: 23 | 前台运行:./assets 24 | 后台运行:nohup ./assets > web.log 2>&1 & 25 | 26 | 浏览器访问配置文件里的web地址即可 27 | ``` 28 | 29 | 30 | 31 | ### 示例 32 | 33 | > 不做详情解释了 34 | 35 | #### 使用步骤 36 | 37 | > 主要分为资产管理和业务系统模块,请先填写安全管理员和主机资产模块信息,终端资产可忽略 38 | 39 | ![index](https://github.com/CTF-MissFeng/report/blob/main/doc/1.png) 40 | 41 | > 添加安全管理员信息 42 | 43 | ![index](https://github.com/CTF-MissFeng/report/blob/main/doc/2.png) 44 | 45 | > 添加主机资产信息 46 | 47 | ![index](https://github.com/CTF-MissFeng/report/blob/main/doc/3.png) 48 | 49 | > 当添加完主机资产后,可在业务系统添加主机资产对应的业务系统信息以及添加对应业务系统漏洞信息等 50 | 51 | ![index](https://github.com/CTF-MissFeng/report/blob/main/doc/4.png) 52 | 53 | ![index](https://github.com/CTF-MissFeng/report/blob/main/doc/5.png) 54 | 55 | ![index](https://github.com/CTF-MissFeng/report/blob/main/doc/7.png) 56 | 57 | >漏洞管理 58 | 59 | ![index](https://github.com/CTF-MissFeng/report/blob/main/doc/6.png) 60 | -------------------------------------------------------------------------------- /doc/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/doc/1.png -------------------------------------------------------------------------------- /doc/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/doc/2.png -------------------------------------------------------------------------------- /doc/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/doc/3.png -------------------------------------------------------------------------------- /doc/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/doc/4.png -------------------------------------------------------------------------------- /doc/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/doc/5.png -------------------------------------------------------------------------------- /doc/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/doc/6.png -------------------------------------------------------------------------------- /doc/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/doc/7.png -------------------------------------------------------------------------------- /report/app/api/user.go: -------------------------------------------------------------------------------- 1 | package api 2 | 3 | import ( 4 | "fmt" 5 | 6 | "assets/app/model" 7 | "assets/app/service" 8 | "assets/library/response" 9 | 10 | "github.com/gogf/gf/net/ghttp" 11 | ) 12 | 13 | var Users = new(apiUser) 14 | 15 | type apiUser struct{} 16 | 17 | // Login 用户登录接口 18 | func (a *apiUser) Login(r *ghttp.Request) { 19 | var data *model.RequestUsersLogin 20 | if err := r.Parse(&data); err != nil { 21 | response.JsonExit(r, 201, err.Error()) 22 | } 23 | if err := service.User.Login(r.Context(), data, r.GetRemoteIp(), r.GetHeader("User-Agent")); err != nil { 24 | response.JsonExit(r, 202, err.Error()) 25 | }else { 26 | response.JsonExit(r, 200, "ok") 27 | } 28 | } 29 | 30 | // Register 添加用户接口 31 | func (a *apiUser) Register(r *ghttp.Request) { 32 | service.User.IsUserAdmin(r,r.Context()) 33 | var data *model.RequestUsersRegister 34 | if err := r.Parse(&data); err != nil { 35 | response.JsonExit(r, 201, err.Error()) 36 | } 37 | if err := service.User.Register(data); err != nil{ 38 | response.JsonExit(r, 202, err.Error()) 39 | }else{ 40 | service.User.UserAddOperation(r.Context(), r.GetRemoteIp(), "添加用户", fmt.Sprintf("添加[%s]用户", data.Username)) 41 | response.JsonExit(r, 200, "ok") 42 | } 43 | } 44 | 45 | // UserInfo 获取用户信息接口 46 | func (a *apiUser) UserInfo(r *ghttp.Request) { 47 | response.JsonExit(r, 200, "ok", service.User.UserInfo(r.Context())) 48 | } 49 | 50 | // UserDel 删除用户接口 51 | func (a *apiUser) UserDel(r *ghttp.Request){ 52 | service.User.IsUserAdmin(r,r.Context()) 53 | var data *model.RequestUserDel 54 | if err := r.Parse(&data); err != nil{ 55 | response.JsonExit(r, 201, err.Error()) 56 | } 57 | if err := service.User.UserDel(data); err != nil{ 58 | response.JsonExit(r, 202, err.Error()) 59 | }else{ 60 | service.User.UserAddOperation(r.Context(), r.GetRemoteIp(), "删除用户", fmt.Sprintf("删除[%s]用户", data.Username)) 61 | response.JsonExit(r, 200, "ok") 62 | } 63 | } 64 | 65 | // ChangePassword 用户修改密码接口 66 | func (a *apiUser) ChangePassword(r *ghttp.Request){ 67 | var data *model.RequestUserChangePassword 68 | if err := r.Parse(&data); err != nil{ 69 | response.JsonExit(r, 201, err.Error()) 70 | } 71 | if err:= service.User.ChangePassword(r.Context(), data); err != nil{ 72 | response.JsonExit(r, 202, err.Error()) 73 | }else{ 74 | service.User.UserAddOperation(r.Context(), r.GetRemoteIp(), "密码修改", "修改成功") 75 | response.JsonExit(r, 200, "ok") 76 | } 77 | } 78 | 79 | // SetUserInfo 用户修改资料接口 80 | func (a *apiUser) SetUserInfo(r *ghttp.Request){ 81 | var data *model.RequestUserSetInfo 82 | if err := r.Parse(&data); err != nil{ 83 | response.JsonExit(r, 201, err.Error()) 84 | } 85 | if err:= service.User.SetUserInfo(r.Context(), data); err != nil{ 86 | response.JsonExit(r, 202, err.Error()) 87 | }else{ 88 | service.User.UserAddOperation(r.Context(), r.GetRemoteIp(), "资料修改", fmt.Sprintf("成功修改 [%s]", data.NickName)) 89 | response.JsonExit(r, 200, "ok") 90 | } 91 | } 92 | 93 | // LoginOut 用户注销接口 94 | func (a *apiUser) LoginOut(r *ghttp.Request) { 95 | service.User.UserAddOperation(r.Context(), r.GetRemoteIp(), "注销用户", "注销成功") 96 | if err := service.User.LoginOut(r.Context()); err != nil { 97 | response.JsonExit(r, 201, err.Error()) 98 | } 99 | response.JsonExit(r, 200, "ok") 100 | } 101 | 102 | // SearchUser 用户管理模糊查询分页接口 103 | func (a *apiUser) SearchUser(r *ghttp.Request){ 104 | r.Response.WriteJson(service.User.SearchUser(r.GetInt("page"), r.GetInt("limit"), r.Get("searchParams"))) 105 | } 106 | 107 | // SearchUserLockIp ip锁定详情分页接口 108 | func (a *apiUser) SearchUserLockIp(r *ghttp.Request){ 109 | r.Response.WriteJson(service.User.SearchUserLockIp(r.GetInt("page"), r.GetInt("limit"))) 110 | } 111 | 112 | // UserLockIpRest 解锁ip接口 113 | func (a *apiUser) UserLockIpRest(r *ghttp.Request){ 114 | service.User.IsUserAdmin(r,r.Context()) 115 | var data *model.RequestUserLockIp 116 | if err := r.Parse(&data); err != nil{ 117 | response.JsonExit(r, 201, err.Error()) 118 | } 119 | if err := service.User.UserLockIpRest(data); err != nil{ 120 | response.JsonExit(r, 202, err.Error()) 121 | }else{ 122 | service.User.UserAddOperation(r.Context(), r.GetRemoteIp(), "解锁IP", fmt.Sprintf("解锁[%s]", data.Ip)) 123 | response.JsonExit(r, 200, "ok") 124 | } 125 | } 126 | 127 | // SearchUserLoginLogs 登录日志管理模糊查询分页接口 128 | func (a *apiUser) SearchUserLoginLogs(r *ghttp.Request){ 129 | r.Response.WriteJson(service.User.SearchUserLoginLogs(r.GetInt("page"), r.GetInt("limit"), r.Get("searchParams"))) 130 | } 131 | 132 | // SearchUserOperation 用户操作日志模糊查询分页接口 133 | func (a *apiUser) SearchUserOperation(r *ghttp.Request){ 134 | r.Response.WriteJson(service.User.SearchUserOperation(r.GetInt("page"), r.GetInt("limit"), r.Get("searchParams"))) 135 | } 136 | 137 | // OperationEmpty 清空用户操作日志 138 | func (a *apiUser) OperationEmpty(r *ghttp.Request){ 139 | service.User.IsUserAdmin(r,r.Context()) 140 | err := service.User.OperationEmpty() 141 | if err != nil{ 142 | response.JsonExit(r, 201, err.Error()) 143 | } 144 | service.User.UserAddOperation(r.Context(), r.GetRemoteIp(), "操作日志", "清空用户操作日志") 145 | response.JsonExit(r, 200, "ok") 146 | } 147 | 148 | // Menu 菜单接口 149 | func (a *apiUser) Menu(r *ghttp.Request) { 150 | r.Response.WriteJson(model.ModuleInit()) 151 | } -------------------------------------------------------------------------------- /report/app/dao/api_key.go: -------------------------------------------------------------------------------- 1 | // ============================================================================ 2 | // This is auto-generated by gf cli tool only once. Fill this file as you wish. 3 | // ============================================================================ 4 | 5 | package dao 6 | 7 | import ( 8 | "assets/app/dao/internal" 9 | ) 10 | 11 | // apiKeyDao is the manager for logic model data accessing 12 | // and custom defined data operations functions management. You can define 13 | // methods on it to extend its functionality as you wish. 14 | type apiKeyDao struct { 15 | internal.ApiKeyDao 16 | } 17 | 18 | var ( 19 | // ApiKey is globally public accessible object for table api_key operations. 20 | ApiKey = apiKeyDao{ 21 | internal.ApiKey, 22 | } 23 | ) 24 | 25 | // Fill with you ideas below. 26 | -------------------------------------------------------------------------------- /report/app/dao/assets_computer.go: -------------------------------------------------------------------------------- 1 | // ============================================================================ 2 | // This is auto-generated by gf cli tool only once. Fill this file as you wish. 3 | // ============================================================================ 4 | 5 | package dao 6 | 7 | import ( 8 | "assets/app/dao/internal" 9 | ) 10 | 11 | // assetsComputerDao is the manager for logic model data accessing 12 | // and custom defined data operations functions management. You can define 13 | // methods on it to extend its functionality as you wish. 14 | type assetsComputerDao struct { 15 | internal.AssetsComputerDao 16 | } 17 | 18 | var ( 19 | // AssetsComputer is globally public accessible object for table assets_computer operations. 20 | AssetsComputer = assetsComputerDao{ 21 | internal.AssetsComputer, 22 | } 23 | ) 24 | 25 | // Fill with you ideas below. 26 | -------------------------------------------------------------------------------- /report/app/dao/assets_manager.go: -------------------------------------------------------------------------------- 1 | // ============================================================================ 2 | // This is auto-generated by gf cli tool only once. Fill this file as you wish. 3 | // ============================================================================ 4 | 5 | package dao 6 | 7 | import ( 8 | "assets/app/dao/internal" 9 | ) 10 | 11 | // assetsManagerDao is the manager for logic model data accessing 12 | // and custom defined data operations functions management. You can define 13 | // methods on it to extend its functionality as you wish. 14 | type assetsManagerDao struct { 15 | internal.AssetsManagerDao 16 | } 17 | 18 | var ( 19 | // AssetsManager is globally public accessible object for table assets_manager operations. 20 | AssetsManager = assetsManagerDao{ 21 | internal.AssetsManager, 22 | } 23 | ) 24 | 25 | // Fill with you ideas below. 26 | -------------------------------------------------------------------------------- /report/app/dao/assets_reports.go: -------------------------------------------------------------------------------- 1 | // ============================================================================ 2 | // This is auto-generated by gf cli tool only once. Fill this file as you wish. 3 | // ============================================================================ 4 | 5 | package dao 6 | 7 | import ( 8 | "assets/app/dao/internal" 9 | ) 10 | 11 | // assetsReportsDao is the manager for logic model data accessing 12 | // and custom defined data operations functions management. You can define 13 | // methods on it to extend its functionality as you wish. 14 | type assetsReportsDao struct { 15 | internal.AssetsReportsDao 16 | } 17 | 18 | var ( 19 | // AssetsReports is globally public accessible object for table assets_reports operations. 20 | AssetsReports = assetsReportsDao{ 21 | internal.AssetsReports, 22 | } 23 | ) 24 | 25 | // Fill with you ideas below. 26 | -------------------------------------------------------------------------------- /report/app/dao/assets_type.go: -------------------------------------------------------------------------------- 1 | // ============================================================================ 2 | // This is auto-generated by gf cli tool only once. Fill this file as you wish. 3 | // ============================================================================ 4 | 5 | package dao 6 | 7 | import ( 8 | "assets/app/dao/internal" 9 | ) 10 | 11 | // assetsTypeDao is the manager for logic model data accessing 12 | // and custom defined data operations functions management. You can define 13 | // methods on it to extend its functionality as you wish. 14 | type assetsTypeDao struct { 15 | internal.AssetsTypeDao 16 | } 17 | 18 | var ( 19 | // AssetsType is globally public accessible object for table assets_type operations. 20 | AssetsType = assetsTypeDao{ 21 | internal.AssetsType, 22 | } 23 | ) 24 | 25 | // Fill with you ideas below. 26 | -------------------------------------------------------------------------------- /report/app/dao/assets_users.go: -------------------------------------------------------------------------------- 1 | // ============================================================================ 2 | // This is auto-generated by gf cli tool only once. Fill this file as you wish. 3 | // ============================================================================ 4 | 5 | package dao 6 | 7 | import ( 8 | "assets/app/dao/internal" 9 | ) 10 | 11 | // assetsUsersDao is the manager for logic model data accessing 12 | // and custom defined data operations functions management. You can define 13 | // methods on it to extend its functionality as you wish. 14 | type assetsUsersDao struct { 15 | internal.AssetsUsersDao 16 | } 17 | 18 | var ( 19 | // AssetsUsers is globally public accessible object for table assets_users operations. 20 | AssetsUsers = assetsUsersDao{ 21 | internal.AssetsUsers, 22 | } 23 | ) 24 | 25 | // Fill with you ideas below. 26 | -------------------------------------------------------------------------------- /report/app/dao/assets_web.go: -------------------------------------------------------------------------------- 1 | // ============================================================================ 2 | // This is auto-generated by gf cli tool only once. Fill this file as you wish. 3 | // ============================================================================ 4 | 5 | package dao 6 | 7 | import ( 8 | "assets/app/dao/internal" 9 | ) 10 | 11 | // assetsWebDao is the manager for logic model data accessing 12 | // and custom defined data operations functions management. You can define 13 | // methods on it to extend its functionality as you wish. 14 | type assetsWebDao struct { 15 | internal.AssetsWebDao 16 | } 17 | 18 | var ( 19 | // AssetsWeb is globally public accessible object for table assets_web operations. 20 | AssetsWeb = assetsWebDao{ 21 | internal.AssetsWeb, 22 | } 23 | ) 24 | 25 | // Fill with you ideas below. 26 | -------------------------------------------------------------------------------- /report/app/dao/intranet_ports.go: -------------------------------------------------------------------------------- 1 | // ============================================================================ 2 | // This is auto-generated by gf cli tool only once. Fill this file as you wish. 3 | // ============================================================================ 4 | 5 | package dao 6 | 7 | import ( 8 | "assets/app/dao/internal" 9 | ) 10 | 11 | // intranetPortsDao is the manager for logic model data accessing 12 | // and custom defined data operations functions management. You can define 13 | // methods on it to extend its functionality as you wish. 14 | type intranetPortsDao struct { 15 | internal.IntranetPortsDao 16 | } 17 | 18 | var ( 19 | // IntranetPorts is globally public accessible object for table intranet_ports operations. 20 | IntranetPorts = intranetPortsDao{ 21 | internal.IntranetPorts, 22 | } 23 | ) 24 | 25 | // Fill with you ideas below. 26 | -------------------------------------------------------------------------------- /report/app/dao/public_ports.go: -------------------------------------------------------------------------------- 1 | // ============================================================================ 2 | // This is auto-generated by gf cli tool only once. Fill this file as you wish. 3 | // ============================================================================ 4 | 5 | package dao 6 | 7 | import ( 8 | "assets/app/dao/internal" 9 | ) 10 | 11 | // publicPortsDao is the manager for logic model data accessing 12 | // and custom defined data operations functions management. You can define 13 | // methods on it to extend its functionality as you wish. 14 | type publicPortsDao struct { 15 | internal.PublicPortsDao 16 | } 17 | 18 | var ( 19 | // PublicPorts is globally public accessible object for table public_ports operations. 20 | PublicPorts = publicPortsDao{ 21 | internal.PublicPorts, 22 | } 23 | ) 24 | 25 | // Fill with you ideas below. 26 | -------------------------------------------------------------------------------- /report/app/dao/user_ip.go: -------------------------------------------------------------------------------- 1 | // ============================================================================ 2 | // This is auto-generated by gf cli tool only once. Fill this file as you wish. 3 | // ============================================================================ 4 | 5 | package dao 6 | 7 | import ( 8 | "assets/app/dao/internal" 9 | ) 10 | 11 | // userIpDao is the manager for logic model data accessing 12 | // and custom defined data operations functions management. You can define 13 | // methods on it to extend its functionality as you wish. 14 | type userIpDao struct { 15 | internal.UserIpDao 16 | } 17 | 18 | var ( 19 | // UserIp is globally public accessible object for table user_ip operations. 20 | UserIp = userIpDao{ 21 | internal.UserIp, 22 | } 23 | ) 24 | 25 | // Fill with you ideas below. 26 | -------------------------------------------------------------------------------- /report/app/dao/user_log.go: -------------------------------------------------------------------------------- 1 | // ============================================================================ 2 | // This is auto-generated by gf cli tool only once. Fill this file as you wish. 3 | // ============================================================================ 4 | 5 | package dao 6 | 7 | import ( 8 | "assets/app/dao/internal" 9 | ) 10 | 11 | // userLogDao is the manager for logic model data accessing 12 | // and custom defined data operations functions management. You can define 13 | // methods on it to extend its functionality as you wish. 14 | type userLogDao struct { 15 | internal.UserLogDao 16 | } 17 | 18 | var ( 19 | // UserLog is globally public accessible object for table user_log operations. 20 | UserLog = userLogDao{ 21 | internal.UserLog, 22 | } 23 | ) 24 | 25 | // Fill with you ideas below. 26 | -------------------------------------------------------------------------------- /report/app/dao/user_operation.go: -------------------------------------------------------------------------------- 1 | // ============================================================================ 2 | // This is auto-generated by gf cli tool only once. Fill this file as you wish. 3 | // ============================================================================ 4 | 5 | package dao 6 | 7 | import ( 8 | "assets/app/dao/internal" 9 | ) 10 | 11 | // userOperationDao is the manager for logic model data accessing 12 | // and custom defined data operations functions management. You can define 13 | // methods on it to extend its functionality as you wish. 14 | type userOperationDao struct { 15 | internal.UserOperationDao 16 | } 17 | 18 | var ( 19 | // UserOperation is globally public accessible object for table user_operation operations. 20 | UserOperation = userOperationDao{ 21 | internal.UserOperation, 22 | } 23 | ) 24 | 25 | // Fill with you ideas below. 26 | -------------------------------------------------------------------------------- /report/app/dao/users.go: -------------------------------------------------------------------------------- 1 | // ============================================================================ 2 | // This is auto-generated by gf cli tool only once. Fill this file as you wish. 3 | // ============================================================================ 4 | 5 | package dao 6 | 7 | import ( 8 | "assets/app/dao/internal" 9 | ) 10 | 11 | // usersDao is the manager for logic model data accessing 12 | // and custom defined data operations functions management. You can define 13 | // methods on it to extend its functionality as you wish. 14 | type usersDao struct { 15 | internal.UsersDao 16 | } 17 | 18 | var ( 19 | // Users is globally public accessible object for table users operations. 20 | Users = usersDao{ 21 | internal.Users, 22 | } 23 | ) 24 | 25 | // Fill with you ideas below. 26 | -------------------------------------------------------------------------------- /report/app/model/api_key.go: -------------------------------------------------------------------------------- 1 | // ========================================================================== 2 | // This is auto-generated by gf cli tool. Fill this file as you wish. 3 | // ========================================================================== 4 | 5 | package model 6 | 7 | import ( 8 | "assets/app/model/internal" 9 | ) 10 | 11 | // ApiKey is the golang structure for table api_key. 12 | type ApiKey internal.ApiKey 13 | 14 | // Fill with you ideas below. 15 | -------------------------------------------------------------------------------- /report/app/model/assets_computer.go: -------------------------------------------------------------------------------- 1 | // ========================================================================== 2 | // This is auto-generated by gf cli tool. Fill this file as you wish. 3 | // ========================================================================== 4 | 5 | package model 6 | 7 | import ( 8 | "assets/app/model/internal" 9 | ) 10 | 11 | // AssetsComputer is the golang structure for table assets_computer. 12 | type AssetsComputer internal.AssetsComputer 13 | 14 | // Fill with you ideas below. 15 | 16 | // ResponseAssetsPcDepartmentGroup 终端资产 返回部门组信息 17 | type ResponseAssetsPcDepartmentGroup struct{ 18 | Code int `json:"code"` 19 | Msg string `json:"msg"` 20 | Count int64 `json:"count"` 21 | Data []ResponseAssetsPcDepartmentGroupInfo `json:"data"` 22 | } 23 | 24 | // ResponseAssetsPcDepartmentGroupInfo 终端资产 返回部门详细信息 25 | type ResponseAssetsPcDepartmentGroupInfo struct{ 26 | ID int `json:"id"` 27 | Department string `json:"department"` 28 | } 29 | 30 | // ResponseAssetsPcDepartmentSubGroup 终端资产 返回二级部门组信息 31 | type ResponseAssetsPcDepartmentSubGroup struct{ 32 | Code int `json:"code"` 33 | Msg string `json:"msg"` 34 | Count int64 `json:"count"` 35 | Data []ResponseAssetsPcDepartmentSubGroupInfo `json:"data"` 36 | } 37 | 38 | // ResponseAssetsPcDepartmentSubGroupInfo 终端资产 返回二级部门详细信息 39 | type ResponseAssetsPcDepartmentSubGroupInfo struct{ 40 | ID int `json:"id"` 41 | DepartmentSub string `json:"department_sub"` 42 | } 43 | 44 | // ResponseAssetsPc 终端资产管理 模糊分页查询返回数据所需信息 45 | type ResponseAssetsPc struct{ 46 | Code int `json:"code"` 47 | Msg string `json:"msg"` 48 | Count int64 `json:"count"` 49 | Data []*ResponseAssetsPcInfo `json:"data"` 50 | } 51 | 52 | // ResponseAssetsPcInfo 终端资产管理 模糊分页查询返回数据所需详细信息 53 | type ResponseAssetsPcInfo struct{ 54 | ID1 uint `json:"id1"` 55 | *AssetsComputer 56 | } 57 | 58 | // RequestAssetsPcAdd 添加终端资产所需信息 59 | type RequestAssetsPcAdd struct{ 60 | FlagId string 61 | Department string 62 | DepartmentSub string 63 | PersonName string `v:"required#员工姓名不能为空"` 64 | WorkNumber string 65 | ComputerType string 66 | ComputerName string 67 | Address string 68 | SecretLevel string 69 | InternetFlag string 70 | FileCopyFlag string 71 | EmailFlag string 72 | VpnFlag string 73 | PdmFlag string 74 | Remarks string 75 | } -------------------------------------------------------------------------------- /report/app/model/assets_manager.go: -------------------------------------------------------------------------------- 1 | // ========================================================================== 2 | // This is auto-generated by gf cli tool. Fill this file as you wish. 3 | // ========================================================================== 4 | 5 | package model 6 | 7 | import ( 8 | "assets/app/model/internal" 9 | "github.com/gogf/gf/os/gtime" 10 | ) 11 | 12 | // AssetsManager is the golang structure for table assets_manager. 13 | type AssetsManager internal.AssetsManager 14 | 15 | // Fill with you ideas below. 16 | 17 | // RequestAssetsManagerAdd 添加安全管理员所需信息 18 | type RequestAssetsManagerAdd struct { 19 | ManagerName string `v:"required#安全管理员不能为空"` 20 | } 21 | 22 | // RsponseManager 安全管理员 模糊分页查询返回数据所需信息 23 | type RsponseManager struct{ 24 | Code int `json:"code"` 25 | Msg string `json:"msg"` 26 | Count int64 `json:"count"` 27 | Data []RsponseManagerInfo `json:"data"` 28 | } 29 | 30 | // RsponseManagerInfo 安全管理 模糊分页查询返回数据所需详细信息 31 | type RsponseManagerInfo struct{ 32 | Id int `json:"id"` 33 | ManagerName string `json:"manager_name"` 34 | WebCount int `json:"web_count"` 35 | LevelNoCount int `json:"level_no_count"` 36 | LevelYesCount int `json:"level_yes_count"` 37 | LevelCount int `json:"level_count"` 38 | CusTime *gtime.Time `json:"cus_time"` 39 | } 40 | 41 | // ResponseAssetsManagerNameGroup 安全管理员Group分组 42 | type ResponseAssetsManagerNameGroup struct{ 43 | Code int `json:"code"` 44 | Msg string `json:"msg"` 45 | Count int64 `json:"count"` 46 | Data []ResponseAssetsManagerNameGroupInfo `json:"data"` 47 | } 48 | 49 | // ResponseAssetsManagerNameGroupInfo 安全管理员Group分组详细信息 50 | type ResponseAssetsManagerNameGroupInfo struct{ 51 | ID int `json:"id"` 52 | ManagerName string `json:"manager_name"` 53 | } -------------------------------------------------------------------------------- /report/app/model/assets_reports.go: -------------------------------------------------------------------------------- 1 | // ========================================================================== 2 | // This is auto-generated by gf cli tool. Fill this file as you wish. 3 | // ========================================================================== 4 | 5 | package model 6 | 7 | import ( 8 | "assets/app/model/internal" 9 | ) 10 | 11 | // AssetsReports is the golang structure for table assets_reports. 12 | type AssetsReports internal.AssetsReports 13 | 14 | // Fill with you ideas below. 15 | 16 | // ResponseAssetsWebReport 渗透测试报告 模糊分页查询返回数据所需信息 17 | type ResponseAssetsWebReport struct{ 18 | Code int `json:"code"` 19 | Msg string `json:"msg"` 20 | Count int64 `json:"count"` 21 | Data []*AssetsReports `json:"data"` 22 | } 23 | 24 | // ResponseAssetsReportLevelNameGroup 渗透测试报告漏洞类型Group分组 25 | type ResponseAssetsReportLevelNameGroup struct{ 26 | Code int `json:"code"` 27 | Msg string `json:"msg"` 28 | Count int64 `json:"count"` 29 | Data []ResponseAssetsReportLevelNameGroupInfo `json:"data"` 30 | } 31 | 32 | // ResponseAssetsReportLevelNameGroupInfo 渗透测试报告漏洞类型Group分组详情 33 | type ResponseAssetsReportLevelNameGroupInfo struct{ 34 | ID int `json:"id"` 35 | LevelName string `json:"level_name"` 36 | } 37 | 38 | // ResponseAssetsReport 渗透测试报告 模糊分页查询返回数据所需信息 39 | type ResponseAssetsReport struct{ 40 | Code int `json:"code"` 41 | Msg string `json:"msg"` 42 | Count int64 `json:"count"` 43 | Data []*ResponseAssetsReportInfo `json:"data"` 44 | } 45 | 46 | // ResponseAssetsReportInfo 渗透测试报告 模糊分页查询返回数据所需详细信息 47 | type ResponseAssetsReportInfo struct{ 48 | ID1 uint `json:"id1"` 49 | *AssetsReports 50 | } 51 | 52 | // RequestReport 漏洞报告修改 53 | type RequestReport struct { 54 | LevelName string `v:"required#漏洞名称不能为空" json:"level_name"` 55 | Level string `v:"required|integer|min:1|max:3#漏洞等级不能空|漏洞等级只能为整数|漏洞等级参数值错误,最小为1|漏洞等级参数值错误,最大为3" json:"level"` 56 | LevelStatus string `v:"required|integer|min:1|max:3#漏洞整改状态不能空|漏洞整改状态只能为整数|漏洞整改状态参数值错误,最小为1|漏洞整改状态参数值错误,最大为3" json:"level_status"` 57 | ReportId string `v:"required|integer#漏洞ID不能空#漏洞ID只能为整数"` 58 | } 59 | 60 | 61 | // ResponseTongjiInfo 主页统计数据 62 | type ResponseTongjiInfo struct{ 63 | WebCount int `json:"web_count"` // web业务资系统数量 64 | LevelCount int `json:"level_count"` // 漏洞总数 65 | LevelYesCount int `json:"level_yes_count"` // 已整改漏洞数 66 | LevelNoCount int `json:"level_no_count"` // 未整改数 67 | } 68 | 69 | // ResponseEchartsInfo Echarts统计数据返回所需信息 70 | type ResponseEchartsInfo struct{ 71 | Code int `json:"code"` 72 | Msg string `json:"msg"` 73 | Data []UResponseEchartsInfoManagerLevel `json:"data"` 74 | Data1 []UResponseEchartsInfoLevel `json:"data1"` 75 | Data2 []UResponseEchartsInfoAssetsName `json:"data2"` 76 | Data3 []UResponseEchartsInfoAssetsName `json:"data3"` 77 | Data4 []UResponseEchartsInfoLevel `json:"data4"` 78 | } 79 | 80 | // UResponseEchartsInfoManagerLevel Echarts统计数据返回所需data信息 安全管理人员漏洞情况 81 | type UResponseEchartsInfoManagerLevel struct{ 82 | ManagerName string `json:"name"` 83 | Number int `json:"value"` 84 | } 85 | 86 | // UResponseEchartsInfoLevel Echarts统计数据返回所需data信息 漏洞类型情况 87 | type UResponseEchartsInfoLevel struct{ 88 | LevelName string `json:"name"` 89 | Number int `json:"value"` 90 | } 91 | 92 | // UResponseEchartsInfoAssetsName Echarts统计数据返回所需data信息 漏洞类型情况 93 | type UResponseEchartsInfoAssetsName struct{ 94 | AssetsName string `json:"name"` 95 | Number int `json:"value"` 96 | } 97 | 98 | 99 | -------------------------------------------------------------------------------- /report/app/model/assets_type.go: -------------------------------------------------------------------------------- 1 | // ========================================================================== 2 | // This is auto-generated by gf cli tool. Fill this file as you wish. 3 | // ========================================================================== 4 | 5 | package model 6 | 7 | import ( 8 | "assets/app/model/internal" 9 | ) 10 | 11 | // AssetsType is the golang structure for table assets_type. 12 | type AssetsType internal.AssetsType 13 | 14 | // Fill with you ideas below. 15 | 16 | // ResponseAssetsTypeGroup 主机资产 返回厂商组信息 17 | type ResponseAssetsTypeGroup struct{ 18 | Code int `json:"code"` 19 | Msg string `json:"msg"` 20 | Count int64 `json:"count"` 21 | Data []ResponseAssetsTypeGroupInfo `json:"data"` 22 | } 23 | 24 | // ResponseAssetsTypeGroupInfo 主机资产 返回厂商详细信息 25 | type ResponseAssetsTypeGroupInfo struct{ 26 | ID int `json:"id"` 27 | TypeName string `json:"type_name"` 28 | } 29 | 30 | // ResponseAssetsTypeAttributionGroup 主机资产 返回应用系统组信息 31 | type ResponseAssetsTypeAttributionGroup struct{ 32 | Code int `json:"code"` 33 | Msg string `json:"msg"` 34 | Count int64 `json:"count"` 35 | Data []ResponseAssetsTypeAttributionGroupInfo `json:"data"` 36 | } 37 | 38 | // ResponseAssetsTypeAttributionGroupInfo 主机资产 返回应用系统组详细信息 39 | type ResponseAssetsTypeAttributionGroupInfo struct{ 40 | ID int `json:"id"` 41 | Attribution string `json:"attribution"` 42 | } 43 | 44 | // ResponseAssetsTypeDepartmentGroup 主机资产 返回部门组信息 45 | type ResponseAssetsTypeDepartmentGroup struct{ 46 | Code int `json:"code"` 47 | Msg string `json:"msg"` 48 | Count int64 `json:"count"` 49 | Data []ResponseAssetsTypeDepartmentGroupInfo `json:"data"` 50 | } 51 | 52 | // ResponseAssetsTypeDepartmentGroupInfo 主机资产 返回部门组详细信息 53 | type ResponseAssetsTypeDepartmentGroupInfo struct{ 54 | ID int `json:"id"` 55 | Department string `json:"department"` 56 | } 57 | 58 | // ResponseType 主机资产管理 模糊分页查询返回数据所需信息 59 | type ResponseType struct{ 60 | Code int `json:"code"` 61 | Msg string `json:"msg"` 62 | Count int64 `json:"count"` 63 | Data []*ResponseTypeInfo `json:"data"` 64 | } 65 | 66 | // ResponseTypeInfo 主机资产管理 模糊分页查询返回数据所需详细信息 67 | type ResponseTypeInfo struct{ 68 | ID1 uint `json:"id1"` 69 | *AssetsType 70 | } 71 | 72 | // RequestAssetsTypeAdd 添加主机资产所需信息 73 | type RequestAssetsTypeAdd struct{ 74 | TypeName string `v:"required#厂商不能为空"` 75 | AttriBution string `v:"required#应用系统名不能为空"` 76 | Department string 77 | SubDomain string 78 | IntranetIp string 79 | PublicIp string 80 | AssetsUserName string 81 | TypeID string 82 | } 83 | 84 | // RequestAssetsTypeDelete 删除主机资产信息 85 | type RequestAssetsTypeDelete struct { 86 | ID string `v:"required|integer#ID标识不能为空|ID值必须为整数"` 87 | } -------------------------------------------------------------------------------- /report/app/model/assets_users.go: -------------------------------------------------------------------------------- 1 | // ========================================================================== 2 | // This is auto-generated by gf cli tool. Fill this file as you wish. 3 | // ========================================================================== 4 | 5 | package model 6 | 7 | import ( 8 | "assets/app/model/internal" 9 | ) 10 | 11 | // AssetsUsers is the golang structure for table assets_users. 12 | type AssetsUsers internal.AssetsUsers 13 | 14 | // Fill with you ideas below. 15 | 16 | // ResponseAssetsPcUserInfo 终端资产 返回用户终端和员工信息 17 | type ResponseAssetsPcUserInfo struct{ 18 | Users *AssetsUsers `json:"users"` 19 | Computer *AssetsComputer `json:"computer"` 20 | } -------------------------------------------------------------------------------- /report/app/model/assets_web.go: -------------------------------------------------------------------------------- 1 | // ========================================================================== 2 | // This is auto-generated by gf cli tool. Fill this file as you wish. 3 | // ========================================================================== 4 | 5 | package model 6 | 7 | import ( 8 | "assets/app/model/internal" 9 | ) 10 | 11 | // AssetsWeb is the golang structure for table assets_web. 12 | type AssetsWeb internal.AssetsWeb 13 | 14 | // Fill with you ideas below. 15 | 16 | // ResponseAssetsWebAssetsNameGroup Web应用资产业务系统名Group分组 17 | type ResponseAssetsWebAssetsNameGroup struct{ 18 | Code int `json:"code"` 19 | Msg string `json:"msg"` 20 | Count int64 `json:"count"` 21 | Data []ResponseAssetsWebAssetsNameGroupInfo `json:"data"` 22 | } 23 | 24 | // ResponseAssetsWebAssetsNameGroupInfo Web应用资产业务系统名Group分组详情 25 | type ResponseAssetsWebAssetsNameGroupInfo struct{ 26 | ID int `json:"id"` 27 | AssetsName string `json:"assets_name"` 28 | } 29 | 30 | // ResponseAssetsWeb 业务系统管理 模糊分页查询返回数据所需信息 31 | type ResponseAssetsWeb struct{ 32 | Code int `json:"code"` 33 | Msg string `json:"msg"` 34 | Count int64 `json:"count"` 35 | Data []*ResponseAssetsWebInfo `json:"data"` 36 | } 37 | 38 | // ResponseAssetsWebInfo 业务系统管理 模糊分页查询返回数据所需详细信息 39 | type ResponseAssetsWebInfo struct{ 40 | ID1 uint `json:"id1"` 41 | *AssetsWeb 42 | LevelCount int `json:"level_count"` 43 | LevelNoCount int `json:"level_no_count"` 44 | LevelInfo string `json:"level_info"` 45 | Data []ResponseAssetsWebInfoImgsrcInfo `json:"data"` 46 | } 47 | 48 | // ResponseAssetsWebInfoImgsrcInfo 业务系统管理 截图URL 49 | type ResponseAssetsWebInfoImgsrcInfo struct{ 50 | Src string `json:"src"` 51 | } 52 | 53 | // ResponseAssetsWebInfoLevelInfo 业务系统管理 漏洞等级统计 54 | type ResponseAssetsWebInfoLevelInfo struct{ 55 | Level int `json:"level"` 56 | } 57 | 58 | // RequestAssetsWebAdd 添加业务系统资产所需信息 59 | type RequestAssetsWebAdd struct{ 60 | Fid string 61 | Attribution string `v:"required#应用系统名不能为空"` 62 | ManagerName string `v:"required#安全管理员不能为空"` 63 | AssetsName string `v:"required#业务系统名不能为空"` 64 | Urls string `v:"required#Url不能为空"` 65 | Fingerprint string 66 | Webserver string 67 | ScreenshotsPath string 68 | Remarks string 69 | FileName string `orm:"file_name" json:"file_name"` 70 | } -------------------------------------------------------------------------------- /report/app/model/context.go: -------------------------------------------------------------------------------- 1 | package model 2 | 3 | import "github.com/gogf/gf/net/ghttp" 4 | 5 | const ( 6 | // ContextKey 上下文变量存储键名 7 | ContextKey = "ContextKey" 8 | ) 9 | 10 | // Context 请求上下文结构 11 | type Context struct { 12 | Session *ghttp.Session // 当前Session管理对象 13 | User *ContextUser // 上下文用户信息 14 | } 15 | 16 | // ContextUser 请求上下文中的用户信息 17 | type ContextUser struct { 18 | Id int // 用户ID 19 | UserName string // 用户账号 20 | Email string // 用户邮箱 21 | } -------------------------------------------------------------------------------- /report/app/model/internal/api_key.go: -------------------------------------------------------------------------------- 1 | // ========================================================================== 2 | // This is auto-generated by gf cli tool. DO NOT EDIT THIS FILE MANUALLY. 3 | // ========================================================================== 4 | 5 | package internal 6 | 7 | import ( 8 | "github.com/gogf/gf/os/gtime" 9 | ) 10 | 11 | // ApiKey is the golang structure for table api_key. 12 | type ApiKey struct { 13 | Id uint `orm:"id,primary" json:"id"` // 14 | ApiKey string `orm:"api_key,unique" json:"api_key"` // 15 | ApiValue string `orm:"api_value" json:"api_value"` // 16 | CreateAt *gtime.Time `orm:"create_at" json:"create_at"` // 17 | } 18 | -------------------------------------------------------------------------------- /report/app/model/internal/assets_computer.go: -------------------------------------------------------------------------------- 1 | // ========================================================================== 2 | // This is auto-generated by gf cli tool. DO NOT EDIT THIS FILE MANUALLY. 3 | // ========================================================================== 4 | 5 | package internal 6 | 7 | import ( 8 | "github.com/gogf/gf/os/gtime" 9 | ) 10 | 11 | // AssetsComputer is the golang structure for table assets_computer. 12 | type AssetsComputer struct { 13 | Id uint `orm:"id,primary" json:"id"` // 14 | Department string `orm:"department" json:"department"` // 15 | DepartmentSub string `orm:"department_sub" json:"department_sub"` // 16 | PersonName string `orm:"person_name" json:"person_name"` // 17 | WorkNumber string `orm:"work_number" json:"work_number"` // 18 | ComputerType string `orm:"computer_type" json:"computer_type"` // 19 | ComputerName string `orm:"computer_name" json:"computer_name"` // 20 | SecretLevel string `orm:"secret_level" json:"secret_level"` // 21 | Address string `orm:"address" json:"address"` // 22 | InternetFlag string `orm:"internet_flag" json:"internet_flag"` // 23 | FileCopyFlag string `orm:"file_copy_flag" json:"file_copy_flag"` // 24 | EmailFlag string `orm:"email_flag" json:"email_flag"` // 25 | VpnFlag string `orm:"vpn_flag" json:"vpn_flag"` // 26 | PdmFlag string `orm:"pdm_flag" json:"pdm_flag"` // 27 | Remarks string `orm:"remarks" json:"remarks"` // 28 | CreateAt *gtime.Time `orm:"create_at" json:"create_at"` // 29 | } 30 | -------------------------------------------------------------------------------- /report/app/model/internal/assets_manager.go: -------------------------------------------------------------------------------- 1 | // ========================================================================== 2 | // This is auto-generated by gf cli tool. DO NOT EDIT THIS FILE MANUALLY. 3 | // ========================================================================== 4 | 5 | package internal 6 | 7 | import ( 8 | "github.com/gogf/gf/os/gtime" 9 | ) 10 | 11 | // AssetsManager is the golang structure for table assets_manager. 12 | type AssetsManager struct { 13 | Id uint `orm:"id,primary" json:"id"` // 14 | ManagerName string `orm:"manager_name,unique" json:"manager_name"` // 15 | CreateAt *gtime.Time `orm:"create_at" json:"create_at"` // 16 | } 17 | -------------------------------------------------------------------------------- /report/app/model/internal/assets_reports.go: -------------------------------------------------------------------------------- 1 | // ========================================================================== 2 | // This is auto-generated by gf cli tool. DO NOT EDIT THIS FILE MANUALLY. 3 | // ========================================================================== 4 | 5 | package internal 6 | 7 | import ( 8 | "github.com/gogf/gf/os/gtime" 9 | ) 10 | 11 | // AssetsReports is the golang structure for table assets_reports. 12 | type AssetsReports struct { 13 | Id uint `orm:"id,primary" json:"id"` // 14 | Attribution string `orm:"attribution" json:"attribution"` // 15 | ManagerName string `orm:"manager_name" json:"manager_name"` // 16 | AssetsName string `orm:"assets_name" json:"assets_name"` // 17 | Level int `orm:"level" json:"level"` // 18 | LevelName string `orm:"level_name" json:"level_name"` // 19 | LevelStatus int `orm:"level_status" json:"level_status"` // 20 | FilePath string `orm:"file_path" json:"file_path"` // 21 | FileDate *gtime.Time `orm:"file_date" json:"file_date"` // 22 | CreateAt *gtime.Time `orm:"create_at" json:"create_at"` // 23 | } 24 | -------------------------------------------------------------------------------- /report/app/model/internal/assets_type.go: -------------------------------------------------------------------------------- 1 | // ========================================================================== 2 | // This is auto-generated by gf cli tool. DO NOT EDIT THIS FILE MANUALLY. 3 | // ========================================================================== 4 | 5 | package internal 6 | 7 | import ( 8 | "github.com/gogf/gf/os/gtime" 9 | ) 10 | 11 | // AssetsType is the golang structure for table assets_type. 12 | type AssetsType struct { 13 | Id uint `orm:"id,primary" json:"id"` // 14 | TypeName string `orm:"type_name" json:"type_name"` // 15 | Attribution string `orm:"attribution,unique" json:"attribution"` // 16 | Department string `orm:"department" json:"department"` // 17 | AssetsUsername string `orm:"assets_username" json:"assets_username"` // 18 | Subdomain string `orm:"subdomain" json:"subdomain"` // 19 | IntranetIp string `orm:"intranet_ip" json:"intranet_ip"` // 20 | PublicIp string `orm:"public_ip" json:"public_ip"` // 21 | CreateAt *gtime.Time `orm:"create_at" json:"create_at"` // 22 | } 23 | -------------------------------------------------------------------------------- /report/app/model/internal/assets_users.go: -------------------------------------------------------------------------------- 1 | // ========================================================================== 2 | // This is auto-generated by gf cli tool. DO NOT EDIT THIS FILE MANUALLY. 3 | // ========================================================================== 4 | 5 | package internal 6 | 7 | import ( 8 | "github.com/gogf/gf/os/gtime" 9 | ) 10 | 11 | // AssetsUsers is the golang structure for table assets_users. 12 | type AssetsUsers struct { 13 | Id uint `orm:"id,primary" json:"id"` // 14 | WorkNumber string `orm:"work_number" json:"work_number"` // 15 | IdCard string `orm:"id_card" json:"id_card"` // 16 | Phone string `orm:"phone" json:"phone"` // 17 | Department string `orm:"department" json:"department"` // 18 | WorkerType string `orm:"worker_type" json:"worker_type"` // 19 | Sex string `orm:"sex" json:"sex"` // 20 | EntryReason string `orm:"entry_reason" json:"entry_reason"` // 21 | EntryDate string `orm:"entry_date" json:"entry_date"` // 22 | PortName string `orm:"port_name" json:"port_name"` // 23 | UserId string `orm:"user_id" json:"user_id"` // 24 | CreateAt *gtime.Time `orm:"create_at" json:"create_at"` // 25 | } 26 | -------------------------------------------------------------------------------- /report/app/model/internal/assets_web.go: -------------------------------------------------------------------------------- 1 | // ========================================================================== 2 | // This is auto-generated by gf cli tool. DO NOT EDIT THIS FILE MANUALLY. 3 | // ========================================================================== 4 | 5 | package internal 6 | 7 | import ( 8 | "github.com/gogf/gf/os/gtime" 9 | ) 10 | 11 | // AssetsWeb is the golang structure for table assets_web. 12 | type AssetsWeb struct { 13 | Id uint `orm:"id,primary" json:"id"` // 14 | Attribution string `orm:"attribution" json:"attribution"` // 15 | ManagerName string `orm:"manager_name" json:"manager_name"` // 16 | AssetsName string `orm:"assets_name,unique" json:"assets_name"` // 17 | Urls string `orm:"urls" json:"urls"` // 18 | Fingerprint string `orm:"fingerprint" json:"fingerprint"` // 19 | Webserver string `orm:"webserver" json:"webserver"` // 20 | ScreenshotsPath string `orm:"screenshots_path" json:"screenshots_path"` // 21 | Remarks string `orm:"remarks" json:"remarks"` // 22 | FileName string `orm:"file_name" json:"file_name"` // 23 | CreateAt *gtime.Time `orm:"create_at" json:"create_at"` // 24 | } 25 | -------------------------------------------------------------------------------- /report/app/model/internal/intranet_ports.go: -------------------------------------------------------------------------------- 1 | // ========================================================================== 2 | // This is auto-generated by gf cli tool. DO NOT EDIT THIS FILE MANUALLY. 3 | // ========================================================================== 4 | 5 | package internal 6 | 7 | import ( 8 | "github.com/gogf/gf/os/gtime" 9 | ) 10 | 11 | // IntranetPorts is the golang structure for table intranet_ports. 12 | type IntranetPorts struct { 13 | Id uint `orm:"id,primary" json:"id"` // 14 | Ip string `orm:"ip" json:"ip"` // 15 | Port int `orm:"port" json:"port"` // 16 | Service string `orm:"service" json:"service"` // 17 | Version string `orm:"version" json:"version"` // 18 | CreateAt *gtime.Time `orm:"create_at" json:"create_at"` // 19 | } 20 | -------------------------------------------------------------------------------- /report/app/model/internal/public_ports.go: -------------------------------------------------------------------------------- 1 | // ========================================================================== 2 | // This is auto-generated by gf cli tool. DO NOT EDIT THIS FILE MANUALLY. 3 | // ========================================================================== 4 | 5 | package internal 6 | 7 | import ( 8 | "github.com/gogf/gf/os/gtime" 9 | ) 10 | 11 | // PublicPorts is the golang structure for table public_ports. 12 | type PublicPorts struct { 13 | Id uint `orm:"id,primary" json:"id"` // 14 | Ip string `orm:"ip" json:"ip"` // 15 | Port int `orm:"port" json:"port"` // 16 | Service string `orm:"service" json:"service"` // 17 | Version string `orm:"version" json:"version"` // 18 | CreateAt *gtime.Time `orm:"create_at" json:"create_at"` // 19 | } 20 | -------------------------------------------------------------------------------- /report/app/model/internal/user_ip.go: -------------------------------------------------------------------------------- 1 | // ========================================================================== 2 | // This is auto-generated by gf cli tool. DO NOT EDIT THIS FILE MANUALLY. 3 | // ========================================================================== 4 | 5 | package internal 6 | 7 | import ( 8 | "github.com/gogf/gf/os/gtime" 9 | ) 10 | 11 | // UserIp is the golang structure for table user_ip. 12 | type UserIp struct { 13 | Id uint `orm:"id,primary" json:"id"` // 14 | Ip string `orm:"ip,unique" json:"ip"` // 15 | LockCount int `orm:"lock_count" json:"lock_count"` // 16 | CreateAt *gtime.Time `orm:"create_at" json:"create_at"` // 17 | } 18 | -------------------------------------------------------------------------------- /report/app/model/internal/user_log.go: -------------------------------------------------------------------------------- 1 | // ========================================================================== 2 | // This is auto-generated by gf cli tool. DO NOT EDIT THIS FILE MANUALLY. 3 | // ========================================================================== 4 | 5 | package internal 6 | 7 | import ( 8 | "github.com/gogf/gf/os/gtime" 9 | ) 10 | 11 | // UserLog is the golang structure for table user_log. 12 | type UserLog struct { 13 | Id uint `orm:"id,primary" json:"id"` // 14 | Username string `orm:"username" json:"username"` // 15 | Ip string `orm:"ip" json:"ip"` // 16 | UserAgent string `orm:"user_agent" json:"user_agent"` // 17 | CreateAt *gtime.Time `orm:"create_at" json:"create_at"` // 18 | } 19 | -------------------------------------------------------------------------------- /report/app/model/internal/user_operation.go: -------------------------------------------------------------------------------- 1 | // ========================================================================== 2 | // This is auto-generated by gf cli tool. DO NOT EDIT THIS FILE MANUALLY. 3 | // ========================================================================== 4 | 5 | package internal 6 | 7 | import ( 8 | "github.com/gogf/gf/os/gtime" 9 | ) 10 | 11 | // UserOperation is the golang structure for table user_operation. 12 | type UserOperation struct { 13 | Id uint `orm:"id,primary" json:"id"` // 14 | Username string `orm:"username" json:"username"` // 15 | Ip string `orm:"ip" json:"ip"` // 16 | Theme string `orm:"theme" json:"theme"` // 17 | Content string `orm:"content" json:"content"` // 18 | CreateAt *gtime.Time `orm:"create_at" json:"create_at"` // 19 | } 20 | -------------------------------------------------------------------------------- /report/app/model/internal/users.go: -------------------------------------------------------------------------------- 1 | // ========================================================================== 2 | // This is auto-generated by gf cli tool. DO NOT EDIT THIS FILE MANUALLY. 3 | // ========================================================================== 4 | 5 | package internal 6 | 7 | import ( 8 | "github.com/gogf/gf/os/gtime" 9 | ) 10 | 11 | // Users is the golang structure for table users. 12 | type Users struct { 13 | Id uint `orm:"id,primary" json:"id"` // 14 | Username string `orm:"username,unique" json:"username"` // 15 | Password string `orm:"password" json:"password"` // 16 | NickName string `orm:"nick_name" json:"nick_name"` // 17 | Phone string `orm:"phone" json:"phone"` // 18 | Email string `orm:"email" json:"email"` // 19 | Remark string `orm:"remark" json:"remark"` // 20 | CreateAt *gtime.Time `orm:"create_at" json:"create_at"` // 21 | } 22 | -------------------------------------------------------------------------------- /report/app/model/intranet_ports.go: -------------------------------------------------------------------------------- 1 | // ========================================================================== 2 | // This is auto-generated by gf cli tool. Fill this file as you wish. 3 | // ========================================================================== 4 | 5 | package model 6 | 7 | import ( 8 | "assets/app/model/internal" 9 | ) 10 | 11 | // IntranetPorts is the golang structure for table intranet_ports. 12 | type IntranetPorts internal.IntranetPorts 13 | 14 | // Fill with you ideas below. 15 | -------------------------------------------------------------------------------- /report/app/model/menu.go: -------------------------------------------------------------------------------- 1 | package model 2 | 3 | // FrameRoute 框架模块路由所需信息 4 | type FrameRoute struct{ 5 | HomeInfo ModuleRoute `json:"homeInfo"` 6 | LogoInfo ModuleRoute `json:"logoInfo"` 7 | MenuInfo []SonModuleRoute `json:"menuInfo"` 8 | } 9 | 10 | // ModuleRoute 主框架描述信息 11 | type ModuleRoute struct{ 12 | Title string `json:"title"` 13 | Image string `json:"image"` 14 | Href string `json:"href"` 15 | } 16 | 17 | // SonModuleRoute 主框架模块路由 18 | type SonModuleRoute struct{ 19 | Title string `json:"title"` 20 | Icon string `json:"icon"` 21 | Href string `json:"href"` 22 | Target string `json:"target"` 23 | Child []SonModuleRoute `json:"child"` 24 | } 25 | 26 | // ModuleInit 生成模块路由 27 | func ModuleInit()FrameRoute{ 28 | frameRoute := FrameRoute{} 29 | frameRoute.HomeInfo = ModuleRoute{ 30 | Title: "首页", 31 | Href : "tongji", 32 | } 33 | frameRoute.LogoInfo = ModuleRoute{ 34 | Title:"资产", 35 | Image:"/images/logo.png", 36 | } 37 | frameRoute.MenuInfo = []SonModuleRoute{ 38 | AssetsMenu(), 39 | userMenu(), 40 | 41 | } 42 | return frameRoute 43 | } 44 | 45 | // user菜单 46 | func userMenu()SonModuleRoute{ 47 | return SonModuleRoute{ 48 | Title:"后台管理", 49 | Icon:"fa fa-cog", 50 | Target:"_self", 51 | Child:[]SonModuleRoute{ 52 | SonModuleRoute{ 53 | Title:"用户管理", 54 | Icon:"fa fa-users", 55 | Target:"_self", 56 | Child:[]SonModuleRoute{ 57 | SonModuleRoute{ 58 | Title:"用户管理", 59 | Icon:"fa fa-user", 60 | Target:"_self", 61 | Href: "user/manager", 62 | }, 63 | SonModuleRoute{ 64 | Title:"IP锁定管理", 65 | Icon:"fa fa-unlock-alt", 66 | Target:"_self", 67 | Href: "user/userip", 68 | }, 69 | }, 70 | }, 71 | SonModuleRoute{ 72 | Title:"日志管理", 73 | Icon:"fa fa-book", 74 | Target:"_self", 75 | Child:[]SonModuleRoute{ 76 | SonModuleRoute{ 77 | Title:"登录日志", 78 | Icon:"fa fa-calendar", 79 | Target:"_self", 80 | Href: "user/loginlog", 81 | }, 82 | SonModuleRoute{ 83 | Title:"操作日志", 84 | Icon:"fa fa-calendar-o", 85 | Target:"_self", 86 | Href: "user/operation", 87 | }, 88 | }, 89 | }, 90 | }, 91 | } 92 | } 93 | 94 | // AssetsMenu 资产管理菜单 95 | func AssetsMenu()SonModuleRoute{ 96 | return SonModuleRoute{ 97 | Title:"资产管理", 98 | Icon:"fa fa-archive", 99 | Target:"_self", 100 | Child:[]SonModuleRoute{ 101 | SonModuleRoute{ 102 | Title:"资产管理", 103 | Icon:"fa fa-dashboard", 104 | Target:"_self", 105 | Child:[]SonModuleRoute{ 106 | SonModuleRoute{ 107 | Title:"安全管理员", 108 | Icon:"fa fa-users", 109 | Target:"_self", 110 | Href: "assets/manager", 111 | }, 112 | SonModuleRoute{ 113 | Title:"主机资产", 114 | Icon:"fa fa-jsfiddle", 115 | Target:"_self", 116 | Href: "assets/type", 117 | }, 118 | SonModuleRoute{ 119 | Title:"终端资产", 120 | Icon:"fa fa-desktop", 121 | Target:"_self", 122 | Href: "assets/pc", 123 | }, 124 | }, 125 | }, 126 | SonModuleRoute{ 127 | Title:"业务系统", 128 | Icon:"fa fa-dashboard", 129 | Target:"_self", 130 | Child:[]SonModuleRoute{ 131 | SonModuleRoute{ 132 | Title:"业务系统", 133 | Icon:"fa fa-globe", 134 | Target:"_self", 135 | Href: "assets/web", 136 | }, 137 | SonModuleRoute{ 138 | Title:"渗透测试报告", 139 | Icon:"fa fa-user-secret", 140 | Target:"_self", 141 | Href: "assets/report", 142 | }, 143 | }, 144 | }, 145 | }, 146 | } 147 | } 148 | 149 | -------------------------------------------------------------------------------- /report/app/model/public_ports.go: -------------------------------------------------------------------------------- 1 | // ========================================================================== 2 | // This is auto-generated by gf cli tool. Fill this file as you wish. 3 | // ========================================================================== 4 | 5 | package model 6 | 7 | import ( 8 | "assets/app/model/internal" 9 | ) 10 | 11 | // PublicPorts is the golang structure for table public_ports. 12 | type PublicPorts internal.PublicPorts 13 | 14 | // Fill with you ideas below. 15 | -------------------------------------------------------------------------------- /report/app/model/user_ip.go: -------------------------------------------------------------------------------- 1 | // ========================================================================== 2 | // This is auto-generated by gf cli tool. Fill this file as you wish. 3 | // ========================================================================== 4 | 5 | package model 6 | 7 | import ( 8 | "assets/app/model/internal" 9 | ) 10 | 11 | // UserIp is the golang structure for table user_ip. 12 | type UserIp internal.UserIp 13 | 14 | // Fill with you ideas below. 15 | -------------------------------------------------------------------------------- /report/app/model/user_log.go: -------------------------------------------------------------------------------- 1 | // ========================================================================== 2 | // This is auto-generated by gf cli tool. Fill this file as you wish. 3 | // ========================================================================== 4 | 5 | package model 6 | 7 | import ( 8 | "assets/app/model/internal" 9 | ) 10 | 11 | // UserLog is the golang structure for table user_log. 12 | type UserLog internal.UserLog 13 | 14 | // Fill with you ideas below. 15 | -------------------------------------------------------------------------------- /report/app/model/user_operation.go: -------------------------------------------------------------------------------- 1 | // ========================================================================== 2 | // This is auto-generated by gf cli tool. Fill this file as you wish. 3 | // ========================================================================== 4 | 5 | package model 6 | 7 | import ( 8 | "assets/app/model/internal" 9 | ) 10 | 11 | // UserOperation is the golang structure for table user_operation. 12 | type UserOperation internal.UserOperation 13 | 14 | // Fill with you ideas below. 15 | -------------------------------------------------------------------------------- /report/app/model/users.go: -------------------------------------------------------------------------------- 1 | // ========================================================================== 2 | // This is auto-generated by gf cli tool. Fill this file as you wish. 3 | // ========================================================================== 4 | 5 | package model 6 | 7 | import ( 8 | "assets/app/model/internal" 9 | ) 10 | 11 | type Users internal.Users 12 | 13 | // RequestUsersLogin 登录请求参数 14 | type RequestUsersLogin struct { 15 | Username string `v:"required|length:4,20#账号不能为空|账号长度应当在:min到:max之间"` 16 | Password string `v:"required|length:6,20|password3#密码不能为空|密码长度应当在:min到:max之间|密码应包含大小写数字及特殊符号"` 17 | } 18 | 19 | // RequestUsersRegister 添加用户请求参数 20 | type RequestUsersRegister struct{ 21 | Username string `v:"required|length:4,20#账号不能为空|账号长度应当在:min到:max之间"` 22 | Password string `v:"required|length:6,20|password3#密码不能为空|密码长度应当在:min到:max之间|密码应包含大小写数字及特殊符号"` 23 | NickName string `v:"required#昵称不能为空"` 24 | Phone string `v:"required|phone#手机号不能为空|手机号格式不正确"` 25 | Email string `v:"required|email#邮箱不能为空|邮箱格式不正确"` 26 | Remark string `v:"required#个性签名不能为空"` 27 | } 28 | 29 | // RequestUserDel 删除用户所需信息 30 | type RequestUserDel struct{ 31 | Username string `v:"required|length:4,20#账号不能为空|账号长度应当在:min到:max之间"` 32 | } 33 | 34 | // RequestUserChangePassword 修改密码所需信息 35 | type RequestUserChangePassword struct { 36 | Password string `v:"required|length:6,20|password3|different:Password1#密码不能为空|密码长度应当在:min到:max之间|密码应包含大小写数字及特殊符号|新密码不能和旧密码一致"` 37 | Password1 string `v:"required|length:6,20|password3#密码不能为空|密码长度应当在:min到:max之间|密码应包含大小写数字及特殊符号"` 38 | Password2 string `v:"required|length:6,20|password3|same:Password2#密码不能为空|密码长度应当在:min到:max之间|密码应包含大小写数字及特殊符号|两次密码输入不相等"` 39 | } 40 | 41 | // RequestUserSetInfo 用户修改资料所需信息 42 | type RequestUserSetInfo struct { 43 | NickName string `v:"required#昵称不能为空"` 44 | Phone string `v:"required|phone#手机号不能为空|手机号格式不正确"` 45 | Email string `v:"required|email#邮箱不能为空|邮箱格式不正确"` 46 | Remark string `v:"required#个性签名不能为空"` 47 | } 48 | 49 | // ResponeUserManager 用户管理 模糊分页查询返回数据所需信息 50 | type ResponeUserManager struct{ 51 | Code int `json:"code"` 52 | Msg string `json:"msg"` 53 | Count int64 `json:"count"` 54 | Data [] *Users `json:"data"` 55 | } 56 | 57 | // ResponeUserIpLockIp IP锁定管理 模糊分页查询返回数据所需信息 58 | type ResponeUserIpLockIp struct{ 59 | Code int `json:"code"` 60 | Msg string `json:"msg"` 61 | Count int64 `json:"count"` 62 | Data [] *UserIp `json:"data"` 63 | } 64 | 65 | // RequestUserLockIp 解锁IP所需信息 66 | type RequestUserLockIp struct{ 67 | Ip string `v:"required|ip#需要解锁的IP不能为空|IP格式不正确"` 68 | } 69 | 70 | // ResponeUserOperationLogins 用户登录日志管理 模糊分页查询返回数据所需信息 71 | type ResponeUserOperationLogins struct{ 72 | Code int `json:"code"` 73 | Msg string `json:"msg"` 74 | Count int64 `json:"count"` 75 | Data [] *UserLog `json:"data"` 76 | } 77 | 78 | // ResponeUserOperationLogs 用户操作日志管理 模糊分页查询返回数据所需信息 79 | type ResponeUserOperationLogs struct{ 80 | Code int `json:"code"` 81 | Msg string `json:"msg"` 82 | Count int64 `json:"count"` 83 | Data [] *UserOperation `json:"data"` 84 | } 85 | -------------------------------------------------------------------------------- /report/app/service/middleware.go: -------------------------------------------------------------------------------- 1 | package service 2 | 3 | import ( 4 | "context" 5 | 6 | "assets/app/model" 7 | 8 | "github.com/gogf/gf/frame/g" 9 | "github.com/gogf/gf/net/ghttp" 10 | ) 11 | 12 | const ( 13 | sessionKeyUser = "ChangAn" 14 | ) 15 | 16 | // Middleware 中间件管理服务 17 | var Middleware = new(serviceMiddleware) 18 | 19 | // Session Session管理服务 20 | var Session = new(serviceSession) 21 | 22 | // Context 上下文管理服务 23 | var Context = new(serviceContext) 24 | 25 | type serviceMiddleware struct{} 26 | 27 | type serviceSession struct{} 28 | 29 | type serviceContext struct{} 30 | 31 | // Ctx 自定义上下文对象 32 | func (s *serviceMiddleware) Ctx(r *ghttp.Request) { 33 | // 初始化,务必最开始执行 34 | customCtx := &model.Context{ 35 | Session: r.Session, 36 | } 37 | Context.Init(r, customCtx) 38 | if user := Session.GetUser(r.Context()); user != nil { 39 | customCtx.User = &model.ContextUser{ 40 | Id: int(user.Id), 41 | UserName: user.Username, 42 | Email: user.Email, 43 | } 44 | } 45 | // 执行下一步请求逻辑 46 | r.Middleware.Next() 47 | } 48 | 49 | // Auth 鉴权中间件,只有登录成功之后才能通过 50 | func (s *serviceMiddleware) Auth(r *ghttp.Request) { 51 | if User.IsSignedIn(r.Context()) { 52 | r.Middleware.Next() 53 | } else { 54 | r.Response.WriteJsonExit(g.Map{"code": 403, "msg":"非法访问", "data":""}) 55 | } 56 | } 57 | 58 | // SetUser 设置用户Session. 59 | func (s *serviceSession) SetUser(ctx context.Context, user *model.Users) error { 60 | return Context.Get(ctx).Session.Set(sessionKeyUser, user) 61 | } 62 | 63 | // GetUser 获取当前登录的用户信息对象,如果用户未登录返回nil。 64 | func (s *serviceSession) GetUser(ctx context.Context) *model.Users { 65 | customCtx := Context.Get(ctx) 66 | if customCtx != nil { 67 | if v := customCtx.Session.GetVar(sessionKeyUser); !v.IsNil() { 68 | var user *model.Users 69 | _ = v.Struct(&user) 70 | return user 71 | } 72 | } 73 | return nil 74 | } 75 | 76 | // RemoveUser 删除用户Session。 77 | func (s *serviceSession) RemoveUser(ctx context.Context) error { 78 | customCtx := Context.Get(ctx) 79 | if customCtx != nil { 80 | return customCtx.Session.Remove(sessionKeyUser) 81 | } 82 | return nil 83 | } 84 | 85 | // Init 初始化上下文对象指针到上下文对象中,以便后续的请求流程中可以修改。 86 | func (s *serviceContext) Init(r *ghttp.Request, customCtx *model.Context) { 87 | r.SetCtxVar(model.ContextKey, customCtx) 88 | } 89 | 90 | // Get 获得上下文变量,如果没有设置,那么返回nil 91 | func (s *serviceContext) Get(ctx context.Context) *model.Context { 92 | value := ctx.Value(model.ContextKey) 93 | if value == nil { 94 | return nil 95 | } 96 | if localCtx, ok := value.(*model.Context); ok { 97 | return localCtx 98 | } 99 | return nil 100 | } 101 | 102 | // SetUser 将上下文信息设置到上下文请求中,注意是完整覆盖 103 | func (s *serviceContext) SetUser(ctx context.Context, ctxUser *model.ContextUser) { 104 | s.Get(ctx).User = ctxUser 105 | } -------------------------------------------------------------------------------- /report/boot/boot.go: -------------------------------------------------------------------------------- 1 | package boot 2 | 3 | import ( 4 | "github.com/gogf/gf/os/gfile" 5 | "time" 6 | 7 | "assets/app/dao" 8 | "assets/app/model" 9 | "assets/library/logger" 10 | 11 | _ "assets/library/logger" 12 | 13 | "github.com/gogf/gf/frame/g" 14 | "github.com/gogf/gf/net/ghttp" 15 | "golang.org/x/crypto/bcrypt" 16 | ) 17 | 18 | // init 初始化Web 19 | func init() { 20 | server := g.Server() 21 | if err := server.SetConfigWithMap(g.Map{ 22 | "address": g.Cfg().Get("server.Address"), // web服务器监听地址 23 | "serverAgent": "assetr", // web服务器server信息 24 | "serverRoot": "public", // 静态文件服务的目录根路径 25 | "SessionMaxAge": 300 * time.Minute, // session最大超时时间 26 | "SessionIdName": "assert", // session会话ID名称 27 | "SessionCookieOutput": true, // 指定是否将会话ID自动输出到cookie 28 | }); err != nil{ 29 | logger.WebLog.Fatalf("web服务器配置有误,程序运行失败:%s", err.Error()) 30 | } 31 | 32 | // 静态文件路由设置 33 | server.SetRewriteMap(g.MapStrStr{ 34 | "/" : "./html/users/login.html", 35 | "/home": "./html/users/index.html", 36 | "/user/manager": "./html/users/manager.html", 37 | "/user/userip": "./html/users/userip.html", 38 | "/user/loginlog": "./html/users/login_log.html", 39 | "/user/operation": "./html/users/operation.html", 40 | "/user/manager/add": "./html/users/add.html", 41 | "/user/setting": "./html/users/setting.html", 42 | "/user/password": "./html/users/password.html", 43 | 44 | "/assets/manager": "./html/assets/manager.html", 45 | "/assets/manager/add": "./html/assets/managerAdd.html", 46 | "/assets/type": "./html/assets/type.html", 47 | "/assets/type/add": "./html/assets/typeAdd.html", 48 | "/assets/type/edit": "./html/assets/typeEditing.html", 49 | "/assets/pc": "./html/assets/pc.html", 50 | "/assets/pc/add": "./html/assets/pcAdd.html", 51 | "/assets/pc/edit": "./html/assets/pcEdit.html", 52 | "/assets/pc/show": "./html/assets/pcShow.html", 53 | 54 | "/assets/web": "./html/assets/web.html", 55 | "/assets/web/add": "./html/assets/webAdd.html", 56 | "/assets/web/report/add": "./html/assets/webReportAdd.html", 57 | "/assets/web/edit": "./html/assets/webEdit.html", 58 | "/assets/web/show": "./html/assets/webShow.html", 59 | 60 | "/assets/report": "./html/assets/report.html", 61 | "/assets/report/edit": "./html/assets/reportEdit.html", 62 | 63 | "/tongji" :"./html/home/home.html", 64 | }) 65 | 66 | //自定义403、404等 67 | server.BindStatusHandler(404, func(r *ghttp.Request){ 68 | r.Response.RedirectTo("/") 69 | }) 70 | server.BindStatusHandler(403, func(r *ghttp.Request){ 71 | r.Response.RedirectTo("/") 72 | }) 73 | 74 | // 创建用户 75 | createAdmin() 76 | 77 | // 创建所需目录 78 | createDir() 79 | } 80 | 81 | // createAdmin 创建默认admin账户 82 | func createAdmin(){ 83 | if i, err := dao.Users.FindCount("username=?", "admin"); err != nil{ 84 | logger.WebLog.Warningf("[创建默认账户] 查询数据库错误:%s", err.Error()) 85 | return 86 | }else if i != 0{ 87 | return 88 | }else{ 89 | passwd,err := bcrypt.GenerateFromPassword([]byte("admin888@A"), bcrypt.DefaultCost) 90 | if err != nil { 91 | logger.WebLog.Warningf("[创建默认账户] 加密密码错误:%s", err.Error()) 92 | return 93 | }else{ 94 | users := model.RequestUsersRegister{} 95 | users.Username = "admin" 96 | users.Password = string(passwd) 97 | users.NickName = "管理员" 98 | users.Email = "admin@qq.com" 99 | users.Phone = "13888888888" 100 | users.Remark = "管理员账户" 101 | if _, err := dao.Users.Insert(users); err != nil { 102 | logger.WebLog.Warningf("[创建默认账户] 数据库错误:%s", err.Error()) 103 | return 104 | }else{ 105 | logger.WebLog.Warningf("[创建默认账户成功] 用户名:admin 密码:admin888@A") 106 | } 107 | } 108 | } 109 | } 110 | 111 | // createDir 创建程序所需目录 112 | func createDir(){ 113 | if !gfile.Exists("./upload/tmp"){ 114 | gfile.Mkdir("./upload/tmp") 115 | } 116 | if !gfile.Exists("./public/upload/assetsImg"){ 117 | gfile.Mkdir("./public/upload/assetsImg") 118 | } 119 | if !gfile.Exists("./public/upload/assetsFile"){ 120 | gfile.Mkdir("./public/upload/assetsFile") 121 | } 122 | if !gfile.Exists("./public/upload/report"){ 123 | gfile.Mkdir("./public/upload/report") 124 | } 125 | } 126 | -------------------------------------------------------------------------------- /report/config/config.toml: -------------------------------------------------------------------------------- 1 | [server] 2 | Address = "127.0.0.1:8081" 3 | ClientMaxBodySize = "20m" # 客户端文件上传最大大小 4 | 5 | [database] 6 | [[database.default]] 7 | type = "mysql" 8 | link = "root:123456@tcp(127.0.0.1:3306)/assets" 9 | debug = "false" 10 | 11 | [gfcli] 12 | [[gfcli.gen.dao]] 13 | link = "mysql:root:123456@tcp(127.0.0.1:3306)/assets" 14 | jsonCase = "Snake" -------------------------------------------------------------------------------- /report/document/assets.sql: -------------------------------------------------------------------------------- 1 | /*用户users表*/ 2 | CREATE TABLE users 3 | ( 4 | id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, 5 | username varchar(20) NOT NULL UNIQUE, 6 | password varchar(200) NOT NULL, 7 | nick_name varchar(100), 8 | phone varchar(20), 9 | email varchar(100), 10 | remark text, 11 | create_at timestamp 12 | ); 13 | 14 | /*用户登录ip锁定表*/ 15 | CREATE TABLE user_ip 16 | ( 17 | id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, 18 | ip varchar(50) NOT NULL UNIQUE, 19 | lock_count int, 20 | create_at timestamp 21 | ); 22 | 23 | /*用户登录日志表*/ 24 | CREATE TABLE user_log 25 | ( 26 | id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, 27 | username varchar(20) NOT NULL, 28 | ip varchar(50) NOT NULL, 29 | user_agent text, 30 | create_at timestamp 31 | ); 32 | 33 | /*用户操作记录表*/ 34 | CREATE TABLE user_operation 35 | ( 36 | id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, 37 | username varchar(20) NOT NULL, 38 | ip varchar(50) NOT NULL, 39 | theme varchar(200) NOT NULL, 40 | content text NOT NULL, 41 | create_at timestamp 42 | ); 43 | 44 | /*终端信息表*/ 45 | CREATE TABLE assets_computer 46 | ( 47 | id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, 48 | department varchar(200), # 员工所属部门 49 | department_sub varchar(200), # 员工所属二级部门 50 | person_name varchar(50), # 员工姓名 51 | work_number varchar(50), # 工号 52 | computer_type varchar(100), # 计算机类型 53 | computer_name varchar(100), # 计算机名 54 | secret_level varchar(100), # 涉密级别 55 | address varchar(50), # 计算机ip地址或mac地址 56 | internet_flag varchar(20), # 互联网权限 57 | file_copy_flag varchar(20), # 文件拷贝权限 58 | email_flag varchar(20), # 外网邮件权限 59 | vpn_flag varchar(20), # VPN权限 60 | pdm_flag varchar(20), # 61 | remarks text, # 备注 62 | create_at timestamp 63 | ); 64 | 65 | /*员工信息表*/ 66 | CREATE TABLE assets_users 67 | ( 68 | id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, 69 | work_number varchar(30), 70 | id_card varchar(30), 71 | phone varchar(30), # 手机号 72 | department varchar(500), # 部门 73 | worker_type varchar(50), # 员工类型 74 | sex varchar(5), # 性别 75 | entry_reason varchar(20), # 入职途径 76 | entry_date varchar(20), # 入职时间 77 | port_name varchar(100), # 职位 78 | user_id varchar(100), 79 | create_at timestamp 80 | ); 81 | 82 | /*安全管理员表*/ 83 | CREATE TABLE assets_manager 84 | ( 85 | id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, 86 | manager_name varchar(20) NOT NULL UNIQUE, 87 | create_at timestamp 88 | ); 89 | 90 | /*主机资产表*/ 91 | CREATE TABLE assets_type 92 | ( 93 | id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, 94 | type_name varchar(100) NOT NULL, # 厂商 95 | attribution varchar(500) UNIQUE, # 应用系统 xx系统 96 | department varchar(200), # 资产对应部门 97 | assets_username varchar(100), # 资产对应管理员 98 | subdomain text, # 子域名 99 | intranet_ip varchar(500), # 业务系统对应内网ip地址 可多个 100 | public_ip varchar(500), # 业务系统对应公网地址 可多个 101 | create_at timestamp 102 | ); 103 | 104 | /*业务系统资产表*/ 105 | CREATE TABLE assets_web 106 | ( 107 | id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, 108 | attribution varchar(500), # 应用系统 xx系统 109 | manager_name varchar(30) NOT NULL, # 安全管理员 110 | assets_name varchar(500) NOT NULL UNIQUE, # 业务系统名 唯一 111 | urls text NOT NULL, # 业务系统URL地址 112 | fingerprint text, # 业务系统指纹:框架、开发语言、通用应用程序等 113 | webserver text, # web服务器类型:tomcat、apache、nginx等 114 | screenshots_path varchar(100), # 业务系统截图地址 115 | remarks text, # 备注:业务管理员/联系方式/测试账户 116 | file_name varchar(100), # 业务系统资产附件/拓扑图 117 | create_at timestamp 118 | ); 119 | 120 | /*渗透测试报告表*/ 121 | CREATE TABLE assets_reports 122 | ( 123 | id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, 124 | attribution varchar(500), # 应用系统 xx系统 125 | manager_name varchar(20) NOT NULL, # 安全管理员 126 | assets_name varchar(200) NOT NULL, # 业务系统名 唯一 与web资产表关联 127 | level integer NOT NULL,# 漏洞等级-1高2中3低 128 | level_name varchar(500) NOT NULL, # 漏洞名称 129 | level_status integer NOT NULL, # 漏洞修复状态-1已整改2未整改3已临时关闭 130 | file_path varchar(100), # 渗透测试报告保存地址 131 | file_date DATE, # 渗透测试编写时间 132 | create_at timestamp 133 | ); -------------------------------------------------------------------------------- /report/go.mod: -------------------------------------------------------------------------------- 1 | module assets 2 | 3 | require ( 4 | github.com/360EntSecGroup-Skylar/excelize/v2 v2.4.0 5 | github.com/gogf/gf v1.16.1 6 | github.com/mattn/go-sqlite3 v1.14.7 // indirect 7 | golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a 8 | golang.org/x/net v0.0.0-20210525063256-abc453219eb5 // indirect 9 | ) 10 | 11 | go 1.16 12 | -------------------------------------------------------------------------------- /report/library/logger/logger.go: -------------------------------------------------------------------------------- 1 | package logger 2 | 3 | import ( 4 | "github.com/gogf/gf/os/glog" 5 | ) 6 | 7 | var WebLog *glog.Logger 8 | 9 | // init 初始化web日志 10 | func init() { 11 | logs := glog.New() 12 | logs.SetPath("logs") 13 | logs.SetLevelStr("all") 14 | WebLog = logs 15 | } -------------------------------------------------------------------------------- /report/library/response/response.go: -------------------------------------------------------------------------------- 1 | package response 2 | 3 | import "github.com/gogf/gf/net/ghttp" 4 | 5 | // 返回通用JSON数据结构 6 | type JsonResponse struct { 7 | Code int `json:"code"` // 错误码((0:成功, 1:失败, >1:错误码)) 8 | Message string `json:"msg"` // 提示信息 9 | Data interface{} `json:"data"` // 返回数据(业务接口定义具体数据结构) 10 | } 11 | 12 | // 标准返回结果数据结构封装。 13 | func Json(r *ghttp.Request, code int, message string, data ...interface{}) { 14 | responseData := interface{}(nil) 15 | if len(data) > 0 { 16 | responseData = data[0] 17 | } 18 | r.Response.WriteJson(JsonResponse{ 19 | Code: code, 20 | Message: message, 21 | Data: responseData, 22 | }) 23 | } 24 | 25 | // 返回JSON数据并退出当前HTTP执行函数。 26 | func JsonExit(r *ghttp.Request, err int, msg string, data ...interface{}) { 27 | Json(r, err, msg, data...) 28 | r.Exit() 29 | } -------------------------------------------------------------------------------- /report/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | _ "assets/boot" 5 | _ "assets/router" 6 | 7 | "github.com/gogf/gf/frame/g" 8 | ) 9 | 10 | func main() { 11 | g.Server().Run() 12 | } 13 | -------------------------------------------------------------------------------- /report/public/css/public.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 15px 15px 15px 15px; 3 | background: #f2f2f2; 4 | } 5 | 6 | .layuimini-container { 7 | border: 1px solid #f2f2f2; 8 | border-radius: 5px; 9 | background-color: #ffffff 10 | } 11 | 12 | .layuimini-main { 13 | margin: 10px 10px 10px 10px; 14 | } 15 | 16 | /**必填红点 */ 17 | .layuimini-form > .layui-form-item > .required:after { 18 | content: '*'; 19 | color: red; 20 | position: absolute; 21 | margin-left: 4px; 22 | font-weight: bold; 23 | line-height: 1.8em; 24 | top: 6px; 25 | right: 5px; 26 | } 27 | 28 | .layuimini-form > .layui-form-item > .layui-form-label { 29 | width: 120px !important; 30 | } 31 | 32 | .layuimini-form > .layui-form-item > .layui-input-block { 33 | margin-left: 150px !important; 34 | } 35 | 36 | .layuimini-form > .layui-form-item > .layui-input-block > tip { 37 | display: inline-block; 38 | margin-top: 10px; 39 | line-height: 10px; 40 | font-size: 10px; 41 | color: #a29c9c; 42 | } 43 | 44 | /**搜索框*/ 45 | .layuimini-container .table-search-fieldset { 46 | margin: 0; 47 | border: 1px solid #e6e6e6; 48 | padding: 10px 20px 5px 20px; 49 | color: #6b6b6b; 50 | } 51 | 52 | /**自定义滚动条样式 */ 53 | ::-webkit-scrollbar { 54 | width: 6px; 55 | height: 6px 56 | } 57 | 58 | ::-webkit-scrollbar-track { 59 | background-color: transparent; 60 | -webkit-border-radius: 2em; 61 | -moz-border-radius: 2em; 62 | border-radius: 2em; 63 | } 64 | 65 | ::-webkit-scrollbar-thumb { 66 | background-color: #9c9da0; 67 | -webkit-border-radius: 2em; 68 | -moz-border-radius: 2em; 69 | border-radius: 2em 70 | } 71 | -------------------------------------------------------------------------------- /report/public/css/themes/default.css: -------------------------------------------------------------------------------- 1 | /*头部右侧背景色 headerRightBg */ 2 | .layui-layout-admin .layui-header { 3 | background-color: #ffffff !important; 4 | } 5 | 6 | /*头部右侧选中背景色 headerRightBgThis */ 7 | .layui-layout-admin .layui-header .layuimini-header-content > ul > .layui-nav-item.layui-this, .layuimini-tool i:hover { 8 | background-color: #e4e4e4 !important; 9 | } 10 | 11 | /*头部右侧字体颜色 headerRightColor */ 12 | .layui-layout-admin .layui-header .layui-nav .layui-nav-item a { 13 | color: rgba(107, 107, 107, 0.7); 14 | } 15 | 16 | /**头部右侧下拉字体颜色 headerRightChildColor */ 17 | .layui-layout-admin .layui-header .layui-nav .layui-nav-item .layui-nav-child a { 18 | color: rgba(107, 107, 107, 0.7) !important; 19 | } 20 | 21 | /*头部右侧鼠标选中 headerRightColorThis */ 22 | .layui-header .layuimini-menu-header-pc.layui-nav .layui-nav-item a:hover, .layui-header .layuimini-header-menu.layuimini-pc-show.layui-nav .layui-this a { 23 | color: #565656 !important; 24 | } 25 | 26 | /*头部右侧更多下拉颜色 headerRightNavMore */ 27 | .layui-header .layui-nav .layui-nav-more { 28 | border-top-color: rgba(160, 160, 160, 0.7) !important; 29 | } 30 | 31 | /*头部右侧更多下拉颜色 headerRightNavMore */ 32 | .layui-header .layui-nav .layui-nav-mored, .layui-header .layui-nav-itemed > a .layui-nav-more { 33 | border-color: transparent transparent rgba(160, 160, 160, 0.7) !important; 34 | } 35 | 36 | /**头部右侧更多下拉配置色 headerRightNavMoreBg headerRightNavMoreColor */ 37 | .layui-header .layui-nav .layui-nav-child dd.layui-this a, .layui-header .layui-nav-child dd.layui-this, .layui-layout-admin .layui-header .layui-nav .layui-nav-item .layui-nav-child .layui-this a { 38 | background-color: #1E9FFF !important; 39 | color: #ffffff !important; 40 | } 41 | 42 | /*头部缩放按钮样式 headerRightToolColor */ 43 | .layui-layout-admin .layui-header .layuimini-tool i { 44 | color: #565656; 45 | } 46 | 47 | /*logo背景颜色 headerLogoBg */ 48 | .layui-layout-admin .layuimini-logo { 49 | background-color: #192027 !important; 50 | } 51 | 52 | /*logo字体颜色 headerLogoColor */ 53 | .layui-layout-admin .layuimini-logo h1 { 54 | color: rgb(191, 187, 187); 55 | } 56 | 57 | /*左侧菜单更多下拉样式 leftMenuNavMore */ 58 | .layuimini-menu-left .layui-nav .layui-nav-more, .layuimini-menu-left-zoom.layui-nav .layui-nav-more { 59 | border-top-color: rgb(191, 187, 187); 60 | } 61 | 62 | /*左侧菜单更多下拉样式 leftMenuNavMore */ 63 | .layuimini-menu-left .layui-nav .layui-nav-mored, .layuimini-menu-left .layui-nav-itemed > a .layui-nav-more, .layuimini-menu-left-zoom.layui-nav .layui-nav-mored, .layuimini-menu-left-zoom.layui-nav-itemed > a .layui-nav-more { 64 | border-color: transparent transparent rgb(191, 187, 187) !important; 65 | } 66 | 67 | /*左侧菜单背景 leftMenuBg */ 68 | .layui-side.layui-bg-black, .layui-side.layui-bg-black > .layuimini-menu-left > ul, .layuimini-menu-left-zoom > ul { 69 | background-color: #28333E !important; 70 | } 71 | 72 | /*左侧菜单选中背景 leftMenuBgThis */ 73 | .layuimini-menu-left .layui-nav-tree .layui-this, .layuimini-menu-left .layui-nav-tree .layui-this > a, .layuimini-menu-left .layui-nav-tree .layui-nav-child dd.layui-this, .layuimini-menu-left .layui-nav-tree .layui-nav-child dd.layui-this a, .layuimini-menu-left-zoom.layui-nav-tree .layui-this, .layuimini-menu-left-zoom.layui-nav-tree .layui-this > a, .layuimini-menu-left-zoom.layui-nav-tree .layui-nav-child dd.layui-this, .layuimini-menu-left-zoom.layui-nav-tree .layui-nav-child dd.layui-this a { 74 | background-color: #1E9FFF !important 75 | } 76 | 77 | /*左侧菜单子菜单背景 leftMenuChildBg */ 78 | .layuimini-menu-left .layui-nav-itemed > .layui-nav-child { 79 | background-color: #0c0f13 !important; 80 | } 81 | 82 | /*左侧菜单字体颜色 leftMenuColor */ 83 | .layuimini-menu-left .layui-nav .layui-nav-item a, .layuimini-menu-left-zoom.layui-nav .layui-nav-item a { 84 | color: rgb(191, 187, 187) !important; 85 | } 86 | 87 | /*左侧菜单选中字体颜色 leftMenuColorThis */ 88 | .layuimini-menu-left .layui-nav .layui-nav-item a:hover, .layuimini-menu-left .layui-nav .layui-this a, .layuimini-menu-left-zoom.layui-nav .layui-nav-item a:hover, .layuimini-menu-left-zoom.layui-nav .layui-this a { 89 | color: #ffffff !important; 90 | } 91 | 92 | /**tab选项卡选中颜色 tabActiveColor */ 93 | .layuimini-tab .layui-tab-title .layui-this .layuimini-tab-active { 94 | background-color: #1e9fff; 95 | } 96 | -------------------------------------------------------------------------------- /report/public/html/assets/managerAdd.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 添加安全管理员 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 |
15 | 16 |
17 |
18 | 19 |
20 | 22 | 添加重复安全管理员会失败 23 |
24 |
25 |
26 |
27 | 28 |
29 |
30 |
31 | 32 |
33 |
34 | 35 | 74 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /report/public/html/assets/reportEdit.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 漏洞修改 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 |
15 | 16 |
17 | 18 |
19 | 20 |
21 | 22 | 23 |
24 |
25 | 26 |
27 | 28 |
29 | 34 |
35 |
36 | 37 |
38 | 39 |
40 | 45 |
46 |
47 | 48 |
49 |
50 | 51 |
52 |
53 |
54 |
55 |
56 | 57 | 143 | 144 | 145 | 146 | -------------------------------------------------------------------------------- /report/public/html/users/add.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 添加用户 6 | 7 | 8 | 9 | 10 | 11 | 16 | 17 | 18 |
19 |
20 | 21 |
22 | 24 | 用户名不能为admin内置账户 25 |
26 |
27 |
28 | 29 |
30 | 33 |
34 |
35 |
36 | 37 |
38 | 40 |
41 |
42 |
43 | 44 |
45 | 47 |
48 |
49 |
50 | 51 |
52 | 54 |
55 |
56 |
57 | 58 |
59 | 60 |
61 |
62 | 63 |
64 |
65 | 66 |
67 |
68 |
69 | 70 | 71 | 127 | 128 | -------------------------------------------------------------------------------- /report/public/html/users/login_log.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 用户登录日志 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 |
15 | 16 |
17 | 搜索信息 18 |
19 |
20 |
21 |
22 | 23 |
24 | 25 |
26 |
27 |
28 | 29 |
30 | 31 |
32 |
33 |
34 | 38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 | 47 | 48 | 117 | 118 | 119 | -------------------------------------------------------------------------------- /report/public/html/users/operation.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 用户操作日志 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 |
15 | 16 |
17 | 搜索信息 18 |
19 |
20 |
21 |
22 | 23 |
24 | 25 |
26 |
27 |
28 | 29 |
30 | 31 |
32 |
33 |
34 | 35 |
36 | 37 |
38 |
39 |
40 | 44 |
45 |
46 |
47 |
48 |
49 | 54 |
55 |
56 |
57 | 58 | 59 | 136 | 137 | 138 | -------------------------------------------------------------------------------- /report/public/html/users/password.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 修改密码 6 | 7 | 8 | 9 | 10 | 11 | 18 | 19 | 20 |
21 |
22 | 23 |
24 |
25 | 26 |
27 | 30 |
31 |
32 | 33 |
34 | 35 |
36 | 39 |
40 |
41 |
42 | 43 |
44 | 46 |
47 |
48 | 49 |
50 |
51 | 52 |
53 |
54 |
55 |
56 |
57 | 58 | 59 | 106 | 107 | -------------------------------------------------------------------------------- /report/public/html/users/setting.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 基本资料 6 | 7 | 8 | 9 | 10 | 11 | 18 | 19 | 20 |
21 |
22 | 23 |
24 |
25 | 26 |
27 | 28 |
29 |
30 |
31 | 32 |
33 | 34 |
35 |
36 |
37 | 38 |
39 | 41 |
42 |
43 |
44 | 45 |
46 | 48 |
49 |
50 |
51 | 52 |
53 | 54 |
55 |
56 | 57 |
58 |
59 | 60 |
61 |
62 |
63 |
64 |
65 | 66 | 67 | 131 | 132 | -------------------------------------------------------------------------------- /report/public/html/users/userip.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IP锁定管理 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 |
15 | 18 |
19 | 22 |
23 |
24 | 25 | 26 | 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /report/public/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/images/favicon.ico -------------------------------------------------------------------------------- /report/public/images/icon-login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/images/icon-login.png -------------------------------------------------------------------------------- /report/public/images/loginbg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/images/loginbg.png -------------------------------------------------------------------------------- /report/public/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/images/logo.png -------------------------------------------------------------------------------- /report/public/js/lay-config.js: -------------------------------------------------------------------------------- 1 | /** 2 | * date:2019/08/16 3 | * author:Mr.Chung 4 | * description:此处放layui自定义扩展 5 | * version:2.0.4 6 | */ 7 | 8 | window.rootPath = (function (src) { 9 | src = document.scripts[document.scripts.length - 1].src; 10 | return src.substring(0, src.lastIndexOf("/") + 1); 11 | })(); 12 | 13 | layui.config({ 14 | base: rootPath + "lay-module/", 15 | version: true 16 | }).extend({ 17 | miniAdmin: "layuimini/miniAdmin", // layuimini后台扩展 18 | miniMenu: "layuimini/miniMenu", // layuimini菜单扩展 19 | miniTab: "layuimini/miniTab", // layuimini tab扩展 20 | miniTheme: "layuimini/miniTheme", // layuimini 主题扩展 21 | miniTongji: "layuimini/miniTongji", // layuimini 统计扩展 22 | step: 'step-lay/step', // 分步表单扩展 23 | treetable: 'treetable-lay/treetable', //table树形扩展 24 | tableSelect: 'tableSelect/tableSelect', // table选择扩展 25 | iconPickerFa: 'iconPicker/iconPickerFa', // fa图标选择扩展 26 | echarts: 'echarts/echarts', // echarts图表扩展 27 | echartsTheme: 'echarts/echartsTheme', // echarts图表主题扩展 28 | wangEditor: 'wangEditor/wangEditor', // wangEditor富文本扩展 29 | layarea: 'layarea/layarea', // 省市县区三级联动下拉选择器 30 | }); 31 | -------------------------------------------------------------------------------- /report/public/js/lay-module/layuimini/miniTongji.js: -------------------------------------------------------------------------------- 1 | /** 2 | * date:2020/03/01 3 | * author:Mr.Chung 4 | * version:2.0 5 | * description:layuimini 统计框架扩展 6 | */ 7 | layui.define(["jquery"], function (exports) { 8 | var $ = layui.$; 9 | 10 | var miniTongji = { 11 | 12 | /** 13 | * 初始化 14 | * @param options 15 | */ 16 | render: function (options) { 17 | options.specific = options.specific || false; 18 | options.domains = options.domains || []; 19 | var domain = window.location.hostname; 20 | if (options.specific === false || (options.specific === true && options.domains.indexOf(domain) >=0)) { 21 | miniTongji.listen(); 22 | } 23 | }, 24 | 25 | /** 26 | * 监听统计代码 27 | */ 28 | listen: function () { 29 | var _hmt = _hmt || []; 30 | (function () { 31 | var hm = document.createElement("script"); 32 | hm.src = "https://hm.baidu.com/hm.js?d97abf6d61c21d773f97835defbdef4e"; 33 | var s = document.getElementsByTagName("script")[0]; 34 | s.parentNode.insertBefore(hm, s); 35 | })(); 36 | } 37 | }; 38 | 39 | exports("miniTongji", miniTongji); 40 | }); -------------------------------------------------------------------------------- /report/public/js/lay-module/step-lay/step.css: -------------------------------------------------------------------------------- 1 | .lay-step { 2 | font-size: 0; 3 | width: 400px; 4 | margin: 0 auto; 5 | max-width: 100%; 6 | padding-left: 200px; 7 | } 8 | 9 | .step-item { 10 | display: inline-block; 11 | line-height: 26px; 12 | position: relative; 13 | font-size: 14px; 14 | } 15 | 16 | .step-item-tail { 17 | width: 100%; 18 | padding: 0 10px; 19 | position: absolute; 20 | left: 0; 21 | top: 13px; 22 | } 23 | 24 | .step-item-tail i { 25 | display: inline-block; 26 | width: 100%; 27 | height: 1px; 28 | vertical-align: top; 29 | background: #c2c2c2; 30 | position: relative; 31 | } 32 | 33 | .step-item-tail .step-item-tail-done { 34 | background: #009688; 35 | } 36 | 37 | .step-item-head { 38 | position: relative; 39 | display: inline-block; 40 | height: 26px; 41 | width: 26px; 42 | text-align: center; 43 | vertical-align: top; 44 | color: #009688; 45 | border: 1px solid #009688; 46 | border-radius: 50%; 47 | background: #ffffff; 48 | } 49 | 50 | .step-item-head.step-item-head-active { 51 | background: #009688; 52 | color: #ffffff; 53 | } 54 | 55 | .step-item-main { 56 | display: block; 57 | position: relative; 58 | margin-left: -50%; 59 | margin-right: 50%; 60 | padding-left: 26px; 61 | text-align: center; 62 | } 63 | 64 | .step-item-main-title { 65 | font-weight: bolder; 66 | color: #555555; 67 | } 68 | 69 | .step-item-main-desc { 70 | color: #aaaaaa; 71 | } 72 | 73 | .lay-step + [carousel-item]:before { 74 | display: none; 75 | } 76 | 77 | .lay-step + [carousel-item] > * { 78 | background-color: transparent; 79 | } -------------------------------------------------------------------------------- /report/public/js/lay-module/step-lay/step.js: -------------------------------------------------------------------------------- 1 | layui.define(['layer', 'carousel'], function (exports) { 2 | var $ = layui.jquery; 3 | var layer = layui.layer; 4 | var carousel = layui.carousel; 5 | 6 | // 添加步骤条dom节点 7 | var renderDom = function (elem, stepItems, postion) { 8 | var stepDiv = '
'; 9 | for (var i = 0; i < stepItems.length; i++) { 10 | stepDiv += '
'; 11 | // 线 12 | if (i < (stepItems.length - 1)) { 13 | if (i < postion) { 14 | stepDiv += '
'; 15 | } else { 16 | stepDiv += '
'; 17 | } 18 | } 19 | 20 | // 数字 21 | var number = stepItems[i].number; 22 | if (!number) { 23 | number = i + 1; 24 | } 25 | if (i == postion) { 26 | stepDiv += '
' + number + '
'; 27 | } else if (i < postion) { 28 | stepDiv += '
'; 29 | } else { 30 | stepDiv += '
' + number + '
'; 31 | } 32 | 33 | // 标题和描述 34 | var title = stepItems[i].title; 35 | var desc = stepItems[i].desc; 36 | if (title || desc) { 37 | stepDiv += '
'; 38 | if (title) { 39 | stepDiv += '
' + title + '
'; 40 | } 41 | if (desc) { 42 | stepDiv += '
' + desc + '
'; 43 | } 44 | stepDiv += '
'; 45 | } 46 | stepDiv += '
'; 47 | } 48 | stepDiv += '
'; 49 | 50 | $(elem).prepend(stepDiv); 51 | 52 | // 计算每一个条目的宽度 53 | var bfb = 100 / stepItems.length; 54 | $('.step-item').css('width', bfb + '%'); 55 | }; 56 | 57 | var step = { 58 | // 渲染步骤条 59 | render: function (param) { 60 | param.indicator = 'none'; // 不显示指示器 61 | param.arrow = 'always'; // 始终显示箭头 62 | param.autoplay = false; // 关闭自动播放 63 | if (!param.stepWidth) { 64 | param.stepWidth = '400px'; 65 | } 66 | 67 | // 渲染轮播图 68 | carousel.render(param); 69 | 70 | // 渲染步骤条 71 | var stepItems = param.stepItems; 72 | renderDom(param.elem, stepItems, 0); 73 | $('.lay-step').css('width', param.stepWidth); 74 | 75 | //监听轮播切换事件 76 | carousel.on('change(' + param.filter + ')', function (obj) { 77 | $(param.elem).find('.lay-step').remove(); 78 | renderDom(param.elem, stepItems, obj.index); 79 | $('.lay-step').css('width', param.stepWidth); 80 | }); 81 | 82 | // 隐藏左右箭头按钮 83 | $(param.elem).find('.layui-carousel-arrow').css('display', 'none'); 84 | 85 | // 去掉轮播图的背景颜色 86 | $(param.elem).css('background-color', 'transparent'); 87 | }, 88 | // 下一步 89 | next: function (elem) { 90 | $(elem).find('.layui-carousel-arrow[lay-type=add]').trigger('click'); 91 | }, 92 | // 上一步 93 | pre: function (elem) { 94 | $(elem).find('.layui-carousel-arrow[lay-type=sub]').trigger('click'); 95 | } 96 | }; 97 | 98 | layui.link(layui.cache.base + 'step-lay/step.css'); 99 | 100 | exports('step', step); 101 | }); 102 | -------------------------------------------------------------------------------- /report/public/js/lay-module/treetable-lay/treetable.css: -------------------------------------------------------------------------------- 1 | .treeTable-empty { 2 | width: 20px; 3 | display: inline-block; 4 | } 5 | 6 | .treeTable-icon { 7 | cursor: pointer; 8 | } 9 | 10 | .treeTable-icon .layui-icon-triangle-d:before { 11 | content: "\e623"; 12 | } 13 | 14 | .treeTable-icon.open .layui-icon-triangle-d:before { 15 | content: "\e625"; 16 | background-color: transparent; 17 | } 18 | 19 | -------------------------------------------------------------------------------- /report/public/js/lay-module/wangEditor/fonts/w-e-icon.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/js/lay-module/wangEditor/fonts/w-e-icon.woff -------------------------------------------------------------------------------- /report/public/lib/font-awesome-4.7.0/HELP-US-OUT.txt: -------------------------------------------------------------------------------- 1 | I hope you love Font Awesome. If you've found it useful, please do me a favor and check out my latest project, 2 | Fort Awesome (https://fortawesome.com). It makes it easy to put the perfect icons on your website. Choose from our awesome, 3 | comprehensive icon sets or copy and paste your own. 4 | 5 | Please. Check it out. 6 | 7 | -Dave Gandy 8 | -------------------------------------------------------------------------------- /report/public/lib/font-awesome-4.7.0/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/font-awesome-4.7.0/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /report/public/lib/font-awesome-4.7.0/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/font-awesome-4.7.0/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /report/public/lib/font-awesome-4.7.0/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/font-awesome-4.7.0/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /report/public/lib/font-awesome-4.7.0/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/font-awesome-4.7.0/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /report/public/lib/font-awesome-4.7.0/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/font-awesome-4.7.0/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /report/public/lib/font-awesome-4.7.0/less/animated.less: -------------------------------------------------------------------------------- 1 | // Animated Icons 2 | // -------------------------- 3 | 4 | .@{fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | .@{fa-css-prefix}-pulse { 10 | -webkit-animation: fa-spin 1s infinite steps(8); 11 | animation: fa-spin 1s infinite steps(8); 12 | } 13 | 14 | @-webkit-keyframes fa-spin { 15 | 0% { 16 | -webkit-transform: rotate(0deg); 17 | transform: rotate(0deg); 18 | } 19 | 100% { 20 | -webkit-transform: rotate(359deg); 21 | transform: rotate(359deg); 22 | } 23 | } 24 | 25 | @keyframes fa-spin { 26 | 0% { 27 | -webkit-transform: rotate(0deg); 28 | transform: rotate(0deg); 29 | } 30 | 100% { 31 | -webkit-transform: rotate(359deg); 32 | transform: rotate(359deg); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /report/public/lib/font-awesome-4.7.0/less/bordered-pulled.less: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em @fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .@{fa-css-prefix}-pull-left { float: left; } 11 | .@{fa-css-prefix}-pull-right { float: right; } 12 | 13 | .@{fa-css-prefix} { 14 | &.@{fa-css-prefix}-pull-left { margin-right: .3em; } 15 | &.@{fa-css-prefix}-pull-right { margin-left: .3em; } 16 | } 17 | 18 | /* Deprecated as of 4.4.0 */ 19 | .pull-right { float: right; } 20 | .pull-left { float: left; } 21 | 22 | .@{fa-css-prefix} { 23 | &.pull-left { margin-right: .3em; } 24 | &.pull-right { margin-left: .3em; } 25 | } 26 | -------------------------------------------------------------------------------- /report/public/lib/font-awesome-4.7.0/less/core.less: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /report/public/lib/font-awesome-4.7.0/less/fixed-width.less: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .@{fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /report/public/lib/font-awesome-4.7.0/less/font-awesome.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables.less"; 7 | @import "mixins.less"; 8 | @import "path.less"; 9 | @import "core.less"; 10 | @import "larger.less"; 11 | @import "fixed-width.less"; 12 | @import "list.less"; 13 | @import "bordered-pulled.less"; 14 | @import "animated.less"; 15 | @import "rotated-flipped.less"; 16 | @import "stacked.less"; 17 | @import "icons.less"; 18 | @import "screen-reader.less"; 19 | -------------------------------------------------------------------------------- /report/public/lib/font-awesome-4.7.0/less/larger.less: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .@{fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .@{fa-css-prefix}-2x { font-size: 2em; } 11 | .@{fa-css-prefix}-3x { font-size: 3em; } 12 | .@{fa-css-prefix}-4x { font-size: 4em; } 13 | .@{fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /report/public/lib/font-awesome-4.7.0/less/list.less: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: @fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .@{fa-css-prefix}-li { 11 | position: absolute; 12 | left: -@fa-li-width; 13 | width: @fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.@{fa-css-prefix}-lg { 17 | left: (-@fa-li-width + (4em / 14)); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /report/public/lib/font-awesome-4.7.0/less/mixins.less: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | .fa-icon() { 5 | display: inline-block; 6 | font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | 14 | .fa-icon-rotate(@degrees, @rotation) { 15 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation})"; 16 | -webkit-transform: rotate(@degrees); 17 | -ms-transform: rotate(@degrees); 18 | transform: rotate(@degrees); 19 | } 20 | 21 | .fa-icon-flip(@horiz, @vert, @rotation) { 22 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation}, mirror=1)"; 23 | -webkit-transform: scale(@horiz, @vert); 24 | -ms-transform: scale(@horiz, @vert); 25 | transform: scale(@horiz, @vert); 26 | } 27 | 28 | 29 | // Only display content to screen readers. A la Bootstrap 4. 30 | // 31 | // See: http://a11yproject.com/posts/how-to-hide-content/ 32 | 33 | .sr-only() { 34 | position: absolute; 35 | width: 1px; 36 | height: 1px; 37 | padding: 0; 38 | margin: -1px; 39 | overflow: hidden; 40 | clip: rect(0,0,0,0); 41 | border: 0; 42 | } 43 | 44 | // Use in conjunction with .sr-only to only display content when it's focused. 45 | // 46 | // Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 47 | // 48 | // Credit: HTML5 Boilerplate 49 | 50 | .sr-only-focusable() { 51 | &:active, 52 | &:focus { 53 | position: static; 54 | width: auto; 55 | height: auto; 56 | margin: 0; 57 | overflow: visible; 58 | clip: auto; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /report/public/lib/font-awesome-4.7.0/less/path.less: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}'); 7 | src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'), 8 | url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'), 9 | url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'), 10 | url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'), 11 | url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg'); 12 | // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | -------------------------------------------------------------------------------- /report/public/lib/font-awesome-4.7.0/less/rotated-flipped.less: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); } 5 | .@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); } 6 | .@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); } 7 | 8 | .@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); } 9 | .@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .@{fa-css-prefix}-rotate-90, 15 | :root .@{fa-css-prefix}-rotate-180, 16 | :root .@{fa-css-prefix}-rotate-270, 17 | :root .@{fa-css-prefix}-flip-horizontal, 18 | :root .@{fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /report/public/lib/font-awesome-4.7.0/less/screen-reader.less: -------------------------------------------------------------------------------- 1 | // Screen Readers 2 | // ------------------------- 3 | 4 | .sr-only { .sr-only(); } 5 | .sr-only-focusable { .sr-only-focusable(); } 6 | -------------------------------------------------------------------------------- /report/public/lib/font-awesome-4.7.0/less/stacked.less: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .@{fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .@{fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .@{fa-css-prefix}-inverse { color: @fa-inverse; } 21 | -------------------------------------------------------------------------------- /report/public/lib/font-awesome-4.7.0/scss/_animated.scss: -------------------------------------------------------------------------------- 1 | // Spinning Icons 2 | // -------------------------- 3 | 4 | .#{$fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | .#{$fa-css-prefix}-pulse { 10 | -webkit-animation: fa-spin 1s infinite steps(8); 11 | animation: fa-spin 1s infinite steps(8); 12 | } 13 | 14 | @-webkit-keyframes fa-spin { 15 | 0% { 16 | -webkit-transform: rotate(0deg); 17 | transform: rotate(0deg); 18 | } 19 | 100% { 20 | -webkit-transform: rotate(359deg); 21 | transform: rotate(359deg); 22 | } 23 | } 24 | 25 | @keyframes fa-spin { 26 | 0% { 27 | -webkit-transform: rotate(0deg); 28 | transform: rotate(0deg); 29 | } 30 | 100% { 31 | -webkit-transform: rotate(359deg); 32 | transform: rotate(359deg); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /report/public/lib/font-awesome-4.7.0/scss/_bordered-pulled.scss: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em $fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .#{$fa-css-prefix}-pull-left { float: left; } 11 | .#{$fa-css-prefix}-pull-right { float: right; } 12 | 13 | .#{$fa-css-prefix} { 14 | &.#{$fa-css-prefix}-pull-left { margin-right: .3em; } 15 | &.#{$fa-css-prefix}-pull-right { margin-left: .3em; } 16 | } 17 | 18 | /* Deprecated as of 4.4.0 */ 19 | .pull-right { float: right; } 20 | .pull-left { float: left; } 21 | 22 | .#{$fa-css-prefix} { 23 | &.pull-left { margin-right: .3em; } 24 | &.pull-right { margin-left: .3em; } 25 | } 26 | -------------------------------------------------------------------------------- /report/public/lib/font-awesome-4.7.0/scss/_core.scss: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /report/public/lib/font-awesome-4.7.0/scss/_fixed-width.scss: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .#{$fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /report/public/lib/font-awesome-4.7.0/scss/_larger.scss: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .#{$fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .#{$fa-css-prefix}-2x { font-size: 2em; } 11 | .#{$fa-css-prefix}-3x { font-size: 3em; } 12 | .#{$fa-css-prefix}-4x { font-size: 4em; } 13 | .#{$fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /report/public/lib/font-awesome-4.7.0/scss/_list.scss: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: $fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .#{$fa-css-prefix}-li { 11 | position: absolute; 12 | left: -$fa-li-width; 13 | width: $fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.#{$fa-css-prefix}-lg { 17 | left: -$fa-li-width + (4em / 14); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /report/public/lib/font-awesome-4.7.0/scss/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | @mixin fa-icon() { 5 | display: inline-block; 6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | 14 | @mixin fa-icon-rotate($degrees, $rotation) { 15 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})"; 16 | -webkit-transform: rotate($degrees); 17 | -ms-transform: rotate($degrees); 18 | transform: rotate($degrees); 19 | } 20 | 21 | @mixin fa-icon-flip($horiz, $vert, $rotation) { 22 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)"; 23 | -webkit-transform: scale($horiz, $vert); 24 | -ms-transform: scale($horiz, $vert); 25 | transform: scale($horiz, $vert); 26 | } 27 | 28 | 29 | // Only display content to screen readers. A la Bootstrap 4. 30 | // 31 | // See: http://a11yproject.com/posts/how-to-hide-content/ 32 | 33 | @mixin sr-only { 34 | position: absolute; 35 | width: 1px; 36 | height: 1px; 37 | padding: 0; 38 | margin: -1px; 39 | overflow: hidden; 40 | clip: rect(0,0,0,0); 41 | border: 0; 42 | } 43 | 44 | // Use in conjunction with .sr-only to only display content when it's focused. 45 | // 46 | // Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 47 | // 48 | // Credit: HTML5 Boilerplate 49 | 50 | @mixin sr-only-focusable { 51 | &:active, 52 | &:focus { 53 | position: static; 54 | width: auto; 55 | height: auto; 56 | margin: 0; 57 | overflow: visible; 58 | clip: auto; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /report/public/lib/font-awesome-4.7.0/scss/_path.scss: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}'); 7 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'), 8 | url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'), 9 | url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'), 10 | url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'), 11 | url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg'); 12 | // src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | -------------------------------------------------------------------------------- /report/public/lib/font-awesome-4.7.0/scss/_rotated-flipped.scss: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } 5 | .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } 6 | .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } 7 | 8 | .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } 9 | .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .#{$fa-css-prefix}-rotate-90, 15 | :root .#{$fa-css-prefix}-rotate-180, 16 | :root .#{$fa-css-prefix}-rotate-270, 17 | :root .#{$fa-css-prefix}-flip-horizontal, 18 | :root .#{$fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /report/public/lib/font-awesome-4.7.0/scss/_screen-reader.scss: -------------------------------------------------------------------------------- 1 | // Screen Readers 2 | // ------------------------- 3 | 4 | .sr-only { @include sr-only(); } 5 | .sr-only-focusable { @include sr-only-focusable(); } 6 | -------------------------------------------------------------------------------- /report/public/lib/font-awesome-4.7.0/scss/_stacked.scss: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .#{$fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .#{$fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .#{$fa-css-prefix}-inverse { color: $fa-inverse; } 21 | -------------------------------------------------------------------------------- /report/public/lib/font-awesome-4.7.0/scss/font-awesome.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables"; 7 | @import "mixins"; 8 | @import "path"; 9 | @import "core"; 10 | @import "larger"; 11 | @import "fixed-width"; 12 | @import "list"; 13 | @import "bordered-pulled"; 14 | @import "animated"; 15 | @import "rotated-flipped"; 16 | @import "stacked"; 17 | @import "icons"; 18 | @import "screen-reader"; 19 | -------------------------------------------------------------------------------- /report/public/lib/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /report/public/lib/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /report/public/lib/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/css/modules/code.css: -------------------------------------------------------------------------------- 1 | /** layui-v2.5.5 MIT License By https://www.layui.com */ 2 | html #layuicss-skincodecss{display:none;position:absolute;width:1989px}.layui-code-h3,.layui-code-view{position:relative;font-size:12px}.layui-code-view{display:block;margin:10px 0;padding:0;border:1px solid #e2e2e2;border-left-width:6px;background-color:#F2F2F2;color:#333;font-family:Courier New}.layui-code-h3{padding:0 10px;height:32px;line-height:32px;border-bottom:1px solid #e2e2e2}.layui-code-h3 a{position:absolute;right:10px;top:0;color:#999}.layui-code-view .layui-code-ol{position:relative;overflow:auto}.layui-code-view .layui-code-ol li{position:relative;margin-left:45px;line-height:20px;padding:0 5px;border-left:1px solid #e2e2e2;list-style-type:decimal-leading-zero;*list-style-type:decimal;background-color:#fff}.layui-code-view pre{margin:0}.layui-code-notepad{border:1px solid #0C0C0C;border-left-color:#3F3F3F;background-color:#0C0C0C;color:#C2BE9E}.layui-code-notepad .layui-code-h3{border-bottom:none}.layui-code-notepad .layui-code-ol li{background-color:#3F3F3F;border-left:none} -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/css/modules/layer/default/icon-ext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/css/modules/layer/default/icon-ext.png -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/css/modules/layer/default/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/css/modules/layer/default/icon.png -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/css/modules/layer/default/loading-0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/css/modules/layer/default/loading-0.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/css/modules/layer/default/loading-1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/css/modules/layer/default/loading-1.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/css/modules/layer/default/loading-2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/css/modules/layer/default/loading-2.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/font/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/font/iconfont.eot -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/font/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/font/iconfont.ttf -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/font/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/font/iconfont.woff -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/font/iconfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/font/iconfont.woff2 -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/0.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/1.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/10.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/10.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/11.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/11.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/12.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/12.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/13.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/13.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/14.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/14.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/15.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/15.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/16.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/16.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/17.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/17.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/18.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/18.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/19.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/19.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/2.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/20.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/20.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/21.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/21.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/22.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/22.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/23.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/23.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/24.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/24.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/25.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/25.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/26.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/26.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/27.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/27.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/28.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/28.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/29.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/29.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/3.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/30.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/30.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/31.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/31.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/32.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/32.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/33.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/33.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/34.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/34.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/35.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/35.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/36.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/36.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/37.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/37.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/38.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/38.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/39.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/39.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/4.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/4.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/40.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/40.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/41.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/41.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/42.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/42.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/43.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/43.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/44.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/44.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/45.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/45.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/46.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/46.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/47.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/47.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/48.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/48.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/49.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/49.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/5.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/5.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/50.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/50.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/51.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/51.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/52.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/52.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/53.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/53.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/54.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/54.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/55.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/55.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/56.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/56.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/57.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/57.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/58.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/58.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/59.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/59.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/6.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/6.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/60.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/60.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/61.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/61.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/62.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/62.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/63.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/63.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/64.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/64.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/65.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/65.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/66.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/66.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/67.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/67.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/68.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/68.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/69.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/69.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/7.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/7.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/70.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/70.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/71.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/71.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/8.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/8.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/images/face/9.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTF-MissFeng/report/55b96d02b5e860cbfc02e091fa54755cd4344fe9/report/public/lib/layui-v2.5.5/images/face/9.gif -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/lay/modules/carousel.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.5.5 MIT License By https://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var i=layui.$,n=(layui.hint(),layui.device(),{config:{},set:function(e){var n=this;return n.config=i.extend({},n.config,e),n},on:function(e,i){return layui.onevent.call(this,t,e,i)}}),t="carousel",a="layui-this",l=">*[carousel-item]>*",o="layui-carousel-left",r="layui-carousel-right",d="layui-carousel-prev",s="layui-carousel-next",u="layui-carousel-arrow",c="layui-carousel-ind",m=function(e){var t=this;t.config=i.extend({},t.config,n.config,e),t.render()};m.prototype.config={width:"600px",height:"280px",full:!1,arrow:"hover",indicator:"inside",autoplay:!0,interval:3e3,anim:"",trigger:"click",index:0},m.prototype.render=function(){var e=this,n=e.config;n.elem=i(n.elem),n.elem[0]&&(e.elemItem=n.elem.find(l),n.index<0&&(n.index=0),n.index>=e.elemItem.length&&(n.index=e.elemItem.length-1),n.interval<800&&(n.interval=800),n.full?n.elem.css({position:"fixed",width:"100%",height:"100%",zIndex:9999}):n.elem.css({width:n.width,height:n.height}),n.elem.attr("lay-anim",n.anim),e.elemItem.eq(n.index).addClass(a),e.elemItem.length<=1||(e.indicator(),e.arrow(),e.autoplay(),e.events()))},m.prototype.reload=function(e){var n=this;clearInterval(n.timer),n.config=i.extend({},n.config,e),n.render()},m.prototype.prevIndex=function(){var e=this,i=e.config,n=i.index-1;return n<0&&(n=e.elemItem.length-1),n},m.prototype.nextIndex=function(){var e=this,i=e.config,n=i.index+1;return n>=e.elemItem.length&&(n=0),n},m.prototype.addIndex=function(e){var i=this,n=i.config;e=e||1,n.index=n.index+e,n.index>=i.elemItem.length&&(n.index=0)},m.prototype.subIndex=function(e){var i=this,n=i.config;e=e||1,n.index=n.index-e,n.index<0&&(n.index=i.elemItem.length-1)},m.prototype.autoplay=function(){var e=this,i=e.config;i.autoplay&&(clearInterval(e.timer),e.timer=setInterval(function(){e.slide()},i.interval))},m.prototype.arrow=function(){var e=this,n=e.config,t=i(['",'"].join(""));n.elem.attr("lay-arrow",n.arrow),n.elem.find("."+u)[0]&&n.elem.find("."+u).remove(),n.elem.append(t),t.on("click",function(){var n=i(this),t=n.attr("lay-type");e.slide(t)})},m.prototype.indicator=function(){var e=this,n=e.config,t=e.elemInd=i(['
"].join(""));n.elem.attr("lay-indicator",n.indicator),n.elem.find("."+c)[0]&&n.elem.find("."+c).remove(),n.elem.append(t),"updown"===n.anim&&t.css("margin-top",-(t.height()/2)),t.find("li").on("hover"===n.trigger?"mouseover":n.trigger,function(){var t=i(this),a=t.index();a>n.index?e.slide("add",a-n.index):a/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"); -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/lay/modules/flow.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.5.5 MIT License By https://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var l=layui.$,o=function(e){},t='';o.prototype.load=function(e){var o,i,n,r,a=this,c=0;e=e||{};var f=l(e.elem);if(f[0]){var m=l(e.scrollElem||document),u=e.mb||50,s=!("isAuto"in e)||e.isAuto,v=e.end||"没有更多了",y=e.scrollElem&&e.scrollElem!==document,d="加载更多",h=l('
'+d+"
");f.find(".layui-flow-more")[0]||f.append(h);var p=function(e,t){e=l(e),h.before(e),t=0==t||null,t?h.html(v):h.find("a").html(d),i=t,o=null,n&&n()},g=function(){o=!0,h.find("a").html(t),"function"==typeof e.done&&e.done(++c,p)};if(g(),h.find("a").on("click",function(){l(this);i||o||g()}),e.isLazyimg)var n=a.lazyimg({elem:e.elem+" img",scrollElem:e.scrollElem});return s?(m.on("scroll",function(){var e=l(this),t=e.scrollTop();r&&clearTimeout(r),i||(r=setTimeout(function(){var i=y?e.height():l(window).height(),n=y?e.prop("scrollHeight"):document.documentElement.scrollHeight;n-t-i<=u&&(o||g())},100))}),a):a}},o.prototype.lazyimg=function(e){var o,t=this,i=0;e=e||{};var n=l(e.scrollElem||document),r=e.elem||"img",a=e.scrollElem&&e.scrollElem!==document,c=function(e,l){var o=n.scrollTop(),r=o+l,c=a?function(){return e.offset().top-n.offset().top+o}():e.offset().top;if(c>=o&&c<=r&&!e.attr("src")){var m=e.attr("lay-src");layui.img(m,function(){var l=t.lazyimg.elem.eq(i);e.attr("src",m).removeAttr("lay-src"),l[0]&&f(l),i++})}},f=function(e,o){var f=a?(o||n).height():l(window).height(),m=n.scrollTop(),u=m+f;if(t.lazyimg.elem=l(r),e)c(e,f);else for(var s=0;su)break}};if(f(),!o){var m;n.on("scroll",function(){var e=l(this);m&&clearTimeout(m),m=setTimeout(function(){f(null,e)},50)}),o=!0}return f},e("flow",new o)}); -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/lay/modules/laypage.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.5.5 MIT License By https://www.layui.com */ 2 | ;layui.define(function(e){"use strict";var a=document,t="getElementById",n="getElementsByTagName",i="laypage",r="layui-disabled",u=function(e){var a=this;a.config=e||{},a.config.index=++s.index,a.render(!0)};u.prototype.type=function(){var e=this.config;if("object"==typeof e.elem)return void 0===e.elem.length?2:3},u.prototype.view=function(){var e=this,a=e.config,t=a.groups="groups"in a?0|a.groups:5;a.layout="object"==typeof a.layout?a.layout:["prev","page","next"],a.count=0|a.count,a.curr=0|a.curr||1,a.limits="object"==typeof a.limits?a.limits:[10,20,30,40,50],a.limit=0|a.limit||10,a.pages=Math.ceil(a.count/a.limit)||1,a.curr>a.pages&&(a.curr=a.pages),t<0?t=1:t>a.pages&&(t=a.pages),a.prev="prev"in a?a.prev:"上一页",a.next="next"in a?a.next:"下一页";var n=a.pages>t?Math.ceil((a.curr+(t>1?1:0))/(t>0?t:1)):1,i={prev:function(){return a.prev?''+a.prev+"":""}(),page:function(){var e=[];if(a.count<1)return"";n>1&&a.first!==!1&&0!==t&&e.push(''+(a.first||1)+"");var i=Math.floor((t-1)/2),r=n>1?a.curr-i:1,u=n>1?function(){var e=a.curr+(t-i-1);return e>a.pages?a.pages:e}():t;for(u-r2&&e.push('');r<=u;r++)r===a.curr?e.push('"+r+""):e.push(''+r+"");return a.pages>t&&a.pages>u&&a.last!==!1&&(u+1…'),0!==t&&e.push(''+(a.last||a.pages)+"")),e.join("")}(),next:function(){return a.next?''+a.next+"":""}(),count:'共 '+a.count+" 条",limit:function(){var e=['"}(),refresh:['','',""].join(""),skip:function(){return['到第','','页',""].join("")}()};return['
',function(){var e=[];return layui.each(a.layout,function(a,t){i[t]&&e.push(i[t])}),e.join("")}(),"
"].join("")},u.prototype.jump=function(e,a){if(e){var t=this,i=t.config,r=e.children,u=e[n]("button")[0],l=e[n]("input")[0],p=e[n]("select")[0],c=function(){var e=0|l.value.replace(/\s|\D/g,"");e&&(i.curr=e,t.render())};if(a)return c();for(var o=0,y=r.length;oi.pages||(i.curr=e,t.render())});p&&s.on(p,"change",function(){var e=this.value;i.curr*e>i.count&&(i.curr=Math.ceil(i.count/e)),i.limit=e,t.render()}),u&&s.on(u,"click",function(){c()})}},u.prototype.skip=function(e){if(e){var a=this,t=e[n]("input")[0];t&&s.on(t,"keyup",function(t){var n=this.value,i=t.keyCode;/^(37|38|39|40)$/.test(i)||(/\D/.test(n)&&(this.value=n.replace(/\D/,"")),13===i&&a.jump(e,!0))})}},u.prototype.render=function(e){var n=this,i=n.config,r=n.type(),u=n.view();2===r?i.elem&&(i.elem.innerHTML=u):3===r?i.elem.html(u):a[t](i.elem)&&(a[t](i.elem).innerHTML=u),i.jump&&i.jump(i,e);var s=a[t]("layui-laypage-"+i.index);n.jump(s),i.hash&&!e&&(location.hash="!"+i.hash+"="+i.curr),n.skip(s)};var s={render:function(e){var a=new u(e);return a.index},index:layui.laypage?layui.laypage.index+1e4:0,on:function(e,a,t){return e.attachEvent?e.attachEvent("on"+a,function(a){a.target=a.srcElement,t.call(e,a)}):e.addEventListener(a,t,!1),this}};e(i,s)}); -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/lay/modules/laytpl.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.5.5 MIT License By https://www.layui.com */ 2 | ;layui.define(function(e){"use strict";var r={open:"{{",close:"}}"},c={exp:function(e){return new RegExp(e,"g")},query:function(e,c,t){var o=["#([\\s\\S])+?","([^{#}])*?"][e||0];return n((c||"")+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 c="Laytpl Error:";return"object"==typeof console&&console.error(c+e+"\n"+(r||"")),c+e}},n=c.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=n("^"+r.open+"#",""),l=n(r.close+"$","");e=e.replace(/\s+|\r|\t|\n/g," ").replace(n(r.open+"#"),r.open+"# ").replace(n(r.close+"}"),"} "+r.close).replace(/\\/g,"\\\\").replace(n(r.open+"!(.+?)!"+r.close),function(e){return e=e.replace(n("^"+r.open+"!"),"").replace(n("!"+r.close),"").replace(n(r.open+"|"+r.close),function(e){return e.replace(/(.)/g,"\\$1")})}).replace(/(?="|')/g,"\\").replace(c.query(),function(e){return e=e.replace(a,"").replace(l,""),'";'+e.replace(/\\/g,"")+';view+="'}).replace(c.query(1),function(e){var c='"+(';return e.replace(/\s/g,"")===r.open+r.close?"":(e=e.replace(n(r.open+"|"+r.close),""),/^=/.test(e)&&(e=e.replace(/^=/,""),c='"+_escape_('),c+e.replace(/\\/g,"")+')+"')}),e='"use strict";var view = "'+e+'";return view;';try{return o.cache=e=new Function("d, _escape_",e),e(t,c.escape)}catch(u){return delete o.cache,c.error(u,p)}},t.pt.render=function(e,r){var n,t=this;return e?(n=t.cache?t.cache(e,c.escape):t.parse(t.tpl,e),r?void r(n):n):c.error("no data")};var o=function(e){return"string"!=typeof e?c.error("Template not found"):new t(e)};o.config=function(e){e=e||{};for(var c in e)r[c]=e[c]},o.v="1.2.0",e("laytpl",o)}); -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/lay/modules/rate.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.5.5 MIT License By https://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var a=layui.jquery,i={config:{},index:layui.rate?layui.rate.index+1e4:0,set:function(e){var i=this;return i.config=a.extend({},i.config,e),i},on:function(e,a){return layui.onevent.call(this,n,e,a)}},l=function(){var e=this,a=e.config;return{setvalue:function(a){e.setvalue.call(e,a)},config:a}},n="rate",t="layui-rate",o="layui-icon-rate",s="layui-icon-rate-solid",u="layui-icon-rate-half",r="layui-icon-rate-solid layui-icon-rate-half",c="layui-icon-rate-solid layui-icon-rate",f="layui-icon-rate layui-icon-rate-half",v=function(e){var l=this;l.index=++i.index,l.config=a.extend({},l.config,i.config,e),l.render()};v.prototype.config={length:5,text:!1,readonly:!1,half:!1,value:0,theme:""},v.prototype.render=function(){var e=this,i=e.config,l=i.theme?'style="color: '+i.theme+';"':"";i.elem=a(i.elem),parseInt(i.value)!==i.value&&(i.half||(i.value=Math.ceil(i.value)-i.value<.5?Math.ceil(i.value):Math.floor(i.value)));for(var n='
    ",u=1;u<=i.length;u++){var r='
  • ";i.half&&parseInt(i.value)!==i.value&&u==Math.ceil(i.value)?n=n+'
  • ":n+=r}n+="
"+(i.text?''+i.value+"星":"")+"";var c=i.elem,f=c.next("."+t);f[0]&&f.remove(),e.elemTemp=a(n),i.span=e.elemTemp.next("span"),i.setText&&i.setText(i.value),c.html(e.elemTemp),c.addClass("layui-inline"),i.readonly||e.action()},v.prototype.setvalue=function(e){var a=this,i=a.config;i.value=e,a.render()},v.prototype.action=function(){var e=this,i=e.config,l=e.elemTemp,n=l.find("i").width();l.children("li").each(function(e){var t=e+1,v=a(this);v.on("click",function(e){if(i.value=t,i.half){var o=e.pageX-a(this).offset().left;o<=n/2&&(i.value=i.value-.5)}i.text&&l.next("span").text(i.value+"星"),i.choose&&i.choose(i.value),i.setText&&i.setText(i.value)}),v.on("mousemove",function(e){if(l.find("i").each(function(){a(this).addClass(o).removeClass(r)}),l.find("i:lt("+t+")").each(function(){a(this).addClass(s).removeClass(f)}),i.half){var c=e.pageX-a(this).offset().left;c<=n/2&&v.children("i").addClass(u).removeClass(s)}}),v.on("mouseleave",function(){l.find("i").each(function(){a(this).addClass(o).removeClass(r)}),l.find("i:lt("+Math.floor(i.value)+")").each(function(){a(this).addClass(s).removeClass(f)}),i.half&&parseInt(i.value)!==i.value&&l.children("li:eq("+Math.floor(i.value)+")").children("i").addClass(u).removeClass(c)})})},v.prototype.events=function(){var e=this;e.config},i.render=function(e){var a=new v(e);return l.call(a)},e(n,i)}); -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/lay/modules/slider.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.5.5 MIT License By https://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var i=layui.jquery,t={config:{},index:layui.slider?layui.slider.index+1e4:0,set:function(e){var t=this;return t.config=i.extend({},t.config,e),t},on:function(e,i){return layui.onevent.call(this,n,e,i)}},a=function(){var e=this,i=e.config;return{setValue:function(i,t){return e.slide("set",i,t||0)},config:i}},n="slider",l="layui-disabled",s="layui-slider",r="layui-slider-bar",o="layui-slider-wrap",u="layui-slider-wrap-btn",d="layui-slider-tips",v="layui-slider-input",c="layui-slider-input-txt",m="layui-slider-input-btn",p="layui-slider-hover",f=function(e){var a=this;a.index=++t.index,a.config=i.extend({},a.config,t.config,e),a.render()};f.prototype.config={type:"default",min:0,max:100,value:0,step:1,showstep:!1,tips:!0,input:!1,range:!1,height:200,disabled:!1,theme:"#009688"},f.prototype.render=function(){var e=this,t=e.config;if(t.step<1&&(t.step=1),t.maxt.min?a:t.min,t.value[1]=n>t.min?n:t.min,t.value[0]=t.value[0]>t.max?t.max:t.value[0],t.value[1]=t.value[1]>t.max?t.max:t.value[1];var r=Math.floor((t.value[0]-t.min)/(t.max-t.min)*100),v=Math.floor((t.value[1]-t.min)/(t.max-t.min)*100),m=v-r+"%";r+="%",v+="%"}else{"object"==typeof t.value&&(t.value=Math.min.apply(null,t.value)),t.valuet.max&&(t.value=t.max);var m=Math.floor((t.value-t.min)/(t.max-t.min)*100)+"%"}var p=t.disabled?"#c2c2c2":t.theme,f='
'+(t.tips?'
':"")+'
'+(t.range?'
':"")+"
",h=i(t.elem),y=h.next("."+s);if(y[0]&&y.remove(),e.elemTemp=i(f),t.range?(e.elemTemp.find("."+o).eq(0).data("value",t.value[0]),e.elemTemp.find("."+o).eq(1).data("value",t.value[1])):e.elemTemp.find("."+o).data("value",t.value),h.html(e.elemTemp),"vertical"===t.type&&e.elemTemp.height(t.height+"px"),t.showstep){for(var g=(t.max-t.min)/t.step,b="",x=1;x')}e.elemTemp.append(b)}if(t.input&&!t.range){var w=i('
');h.css("position","relative"),h.append(w),h.find("."+c).children("input").val(t.value),"vertical"===t.type?w.css({left:0,top:-48}):e.elemTemp.css("margin-right",w.outerWidth()+15)}t.disabled?(e.elemTemp.addClass(l),e.elemTemp.find("."+u).addClass(l)):e.slide(),e.elemTemp.find("."+u).on("mouseover",function(){var a="vertical"===t.type?t.height:e.elemTemp[0].offsetWidth,n=e.elemTemp.find("."+o),l="vertical"===t.type?a-i(this).parent()[0].offsetTop-n.height():i(this).parent()[0].offsetLeft,s=l/a*100,r=i(this).parent().data("value"),u=t.setTips?t.setTips(r):r;e.elemTemp.find("."+d).html(u),"vertical"===t.type?e.elemTemp.find("."+d).css({bottom:s+"%","margin-bottom":"20px",display:"inline-block"}):e.elemTemp.find("."+d).css({left:s+"%",display:"inline-block"})}).on("mouseout",function(){e.elemTemp.find("."+d).css("display","none")})},f.prototype.slide=function(e,t,a){var n=this,l=n.config,s=n.elemTemp,f=function(){return"vertical"===l.type?l.height:s[0].offsetWidth},h=s.find("."+o),y=s.next("."+v),g=y.children("."+c).children("input").val(),b=100/((l.max-l.min)/Math.ceil(l.step)),x=function(e,i){e=Math.ceil(e)*b>100?Math.ceil(e)*b:Math.round(e)*b,e=e>100?100:e,h.eq(i).css("vertical"===l.type?"bottom":"left",e+"%");var t=T(h[0].offsetLeft),a=l.range?T(h[1].offsetLeft):0;"vertical"===l.type?(s.find("."+d).css({bottom:e+"%","margin-bottom":"20px"}),t=T(f()-h[0].offsetTop-h.height()),a=l.range?T(f()-h[1].offsetTop-h.height()):0):s.find("."+d).css("left",e+"%"),t=t>100?100:t,a=a>100?100:a;var n=Math.min(t,a),o=Math.abs(t-a);"vertical"===l.type?s.find("."+r).css({height:o+"%",bottom:n+"%"}):s.find("."+r).css({width:o+"%",left:n+"%"});var u=l.min+Math.round((l.max-l.min)*e/100);if(g=u,y.children("."+c).children("input").val(g),h.eq(i).data("value",u),u=l.setTips?l.setTips(u):u,s.find("."+d).html(u),l.range){var v=[h.eq(0).data("value"),h.eq(1).data("value")];v[0]>v[1]&&v.reverse()}l.change&&l.change(l.range?v:u)},T=function(e){var i=e/f()*100/b,t=Math.round(i)*b;return e==f()&&(t=Math.ceil(i)*b),t},w=i(['
f()&&(r=f());var o=r/f()*100/b;x(o,e),t.addClass(p),s.find("."+d).show(),i.preventDefault()},o=function(){t.removeClass(p),s.find("."+d).hide()};M(r,o)})}),s.on("click",function(e){var t=i("."+u);if(!t.is(event.target)&&0===t.has(event.target).length&&t.length){var a,n="vertical"===l.type?f()-e.clientY+i(this).offset().top:e.clientX-i(this).offset().left;n<0&&(n=0),n>f()&&(n=f());var s=n/f()*100/b;a=l.range?"vertical"===l.type?Math.abs(n-parseInt(i(h[0]).css("bottom")))>Math.abs(n-parseInt(i(h[1]).css("bottom")))?1:0:Math.abs(n-h[0].offsetLeft)>Math.abs(n-h[1].offsetLeft)?1:0:0,x(s,a),e.preventDefault()}}),y.hover(function(){var e=i(this);e.children("."+m).fadeIn("fast")},function(){var e=i(this);e.children("."+m).fadeOut("fast")}),y.children("."+m).children("i").each(function(e){i(this).on("click",function(){g=1==e?g-l.stepl.max?l.max:Number(g)+l.step;var i=(g-l.min)/(l.max-l.min)*100/b;x(i,0)})});var q=function(){var e=this.value;e=isNaN(e)?0:e,e=el.max?l.max:e,this.value=e;var i=(e-l.min)/(l.max-l.min)*100/b;x(i,0)};y.children("."+c).children("input").on("keydown",function(e){13===e.keyCode&&(e.preventDefault(),q.call(this))}).on("change",q)},f.prototype.events=function(){var e=this;e.config},t.render=function(e){var i=new f(e);return a.call(i)},e(n,t)}); -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/lay/modules/transfer.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.5.5 MIT License By https://www.layui.com */ 2 | ;layui.define(["laytpl","form"],function(e){"use strict";var a=layui.$,t=layui.laytpl,n=layui.form,i="transfer",l={config:{},index:layui[i]?layui[i].index+1e4:0,set:function(e){var t=this;return t.config=a.extend({},t.config,e),t},on:function(e,a){return layui.onevent.call(this,i,e,a)}},r=function(){var e=this,a=e.config,t=a.id||e.index;return r.that[t]=e,r.config[t]=a,{config:a,reload:function(a){e.reload.call(e,a)},getData:function(){return e.getData.call(e)}}},c="layui-hide",o="layui-btn-disabled",d="layui-none",s="layui-transfer-box",u="layui-transfer-header",h="layui-transfer-search",f="layui-transfer-active",y="layui-transfer-data",p=function(e){return e=e||{},['
','
','","
","{{# if(d.data.showSearch){ }}",'","{{# } }}",'
    ',"
    "].join("")},v=['
    ',p({index:0,checkAllName:"layTransferLeftCheckAll"}),'
    ','",'","
    ",p({index:1,checkAllName:"layTransferRightCheckAll"}),"
    "].join(""),x=function(e){var t=this;t.index=++l.index,t.config=a.extend({},t.config,l.config,e),t.render()};x.prototype.config={title:["列表一","列表二"],width:200,height:360,data:[],value:[],showSearch:!1,id:"",text:{none:"无数据",searchNone:"无匹配数据"}},x.prototype.reload=function(e){var t=this;layui.each(e,function(e,a){a.constructor===Array&&delete t.config[e]}),t.config=a.extend(!0,{},t.config,e),t.render()},x.prototype.render=function(){var e=this,n=e.config,i=e.elem=a(t(v).render({data:n,index:e.index})),l=n.elem=a(n.elem);l[0]&&(n.data=n.data||[],n.value=n.value||[],e.key=n.id||e.index,l.html(e.elem),e.layBox=e.elem.find("."+s),e.layHeader=e.elem.find("."+u),e.laySearch=e.elem.find("."+h),e.layData=i.find("."+y),e.layBtn=i.find("."+f+" .layui-btn"),e.layBox.css({width:n.width,height:n.height}),e.layData.css({height:function(){return n.height-e.layHeader.outerHeight()-e.laySearch.outerHeight()-2}()}),e.renderData(),e.events())},x.prototype.renderData=function(){var e=this,a=(e.config,[{checkName:"layTransferLeftCheck",views:[]},{checkName:"layTransferRightCheck",views:[]}]);e.parseData(function(e){var t=e.selected?1:0,n=["
  • ",'',"
  • "].join("");a[t].views.push(n),delete e.selected}),e.layData.eq(0).html(a[0].views.join("")),e.layData.eq(1).html(a[1].views.join("")),e.renderCheckBtn()},x.prototype.renderForm=function(e){n.render(e,"LAY-transfer-"+this.index)},x.prototype.renderCheckBtn=function(e){var t=this,n=t.config;e=e||{},t.layBox.each(function(i){var l=a(this),r=l.find("."+y),d=l.find("."+u).find('input[type="checkbox"]'),s=r.find('input[type="checkbox"]'),h=0,f=!1;if(s.each(function(){var e=a(this).data("hide");(this.checked||this.disabled||e)&&h++,this.checked&&!e&&(f=!0)}),d.prop("checked",f&&h===s.length),t.layBtn.eq(i)[f?"removeClass":"addClass"](o),!e.stopNone){var p=r.children("li:not(."+c+")").length;t.noneView(r,p?"":n.text.none)}}),t.renderForm("checkbox")},x.prototype.noneView=function(e,t){var n=a('

    '+(t||"")+"

    ");e.find("."+d)[0]&&e.find("."+d).remove(),t.replace(/\s/g,"")&&e.append(n)},x.prototype.setValue=function(){var e=this,t=e.config,n=[];return e.layBox.eq(1).find("."+y+' input[type="checkbox"]').each(function(){var e=a(this).data("hide");e||n.push(this.value)}),t.value=n,e},x.prototype.parseData=function(e){var t=this,n=t.config,i=[];return layui.each(n.data,function(t,l){l=("function"==typeof n.parseData?n.parseData(l):l)||l,i.push(l=a.extend({},l)),layui.each(n.value,function(e,a){a==l.value&&(l.selected=!0)}),e&&e(l)}),n.data=i,t},x.prototype.getData=function(e){var a=this,t=a.config,n=[];return a.setValue(),layui.each(e||t.value,function(e,a){layui.each(t.data,function(e,t){delete t.selected,a==t.value&&n.push(t)})}),n},x.prototype.events=function(){var e=this,t=e.config;e.elem.on("click",'input[lay-filter="layTransferCheckbox"]+',function(){var t=a(this).prev(),n=t[0].checked,i=t.parents("."+s).eq(0).find("."+y);t[0].disabled||("all"===t.attr("lay-type")&&i.find('input[type="checkbox"]').each(function(){this.disabled||(this.checked=n)}),e.renderCheckBtn({stopNone:!0}))}),e.layBtn.on("click",function(){var n=a(this),i=n.data("index"),l=e.layBox.eq(i),r=[];if(!n.hasClass(o)){e.layBox.eq(i).each(function(t){var n=a(this),i=n.find("."+y);i.children("li").each(function(){var t=a(this),n=t.find('input[type="checkbox"]'),i=n.data("hide");n[0].checked&&!i&&(n[0].checked=!1,l.siblings("."+s).find("."+y).append(t.clone()),t.remove(),r.push(n[0].value)),e.setValue()})}),e.renderCheckBtn();var c=l.siblings("."+s).find("."+h+" input");""===c.val()||c.trigger("keyup"),t.onchange&&t.onchange(e.getData(r),i)}}),e.laySearch.find("input").on("keyup",function(){var n=this.value,i=a(this).parents("."+h).eq(0).siblings("."+y),l=i.children("li");l.each(function(){var e=a(this),t=e.find('input[type="checkbox"]'),i=t[0].title.indexOf(n)!==-1;e[i?"removeClass":"addClass"](c),t.data("hide",!i)}),e.renderCheckBtn();var r=l.length===i.children("li."+c).length;e.noneView(i,r?t.text.searchNone:"")})},r.that={},r.config={},l.reload=function(e,a){var t=r.that[e];return t.reload(a),r.call(t)},l.getData=function(e){var a=r.that[e];return a.getData()},l.render=function(e){var a=new x(e);return r.call(a)},e(i,l)}); -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/lay/modules/util.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.5.5 MIT License By https://www.layui.com */ 2 | ;layui.define("jquery",function(t){"use strict";var e=layui.$,i={fixbar:function(t){var i,n,a="layui-fixbar",o="layui-fixbar-top",r=e(document),l=e("body");t=e.extend({showHeight:200},t),t.bar1=t.bar1===!0?"":t.bar1,t.bar2=t.bar2===!0?"":t.bar2,t.bgcolor=t.bgcolor?"background-color:"+t.bgcolor:"";var c=[t.bar1,t.bar2,""],g=e(['
      ',t.bar1?'
    • '+c[0]+"
    • ":"",t.bar2?'
    • '+c[1]+"
    • ":"",'
    • '+c[2]+"
    • ","
    "].join("")),s=g.find("."+o),u=function(){var e=r.scrollTop();e>=t.showHeight?i||(s.show(),i=1):i&&(s.hide(),i=0)};e("."+a)[0]||("object"==typeof t.css&&g.css(t.css),l.append(g),u(),g.find("li").on("click",function(){var i=e(this),n=i.attr("lay-type");"top"===n&&e("html,body").animate({scrollTop:0},200),t.click&&t.click.call(this,n)}),r.on("scroll",function(){clearTimeout(n),n=setTimeout(function(){u()},100)}))},countdown:function(t,e,i){var n=this,a="function"==typeof e,o=new Date(t).getTime(),r=new Date(!e||a?(new Date).getTime():e).getTime(),l=o-r,c=[Math.floor(l/864e5),Math.floor(l/36e5)%24,Math.floor(l/6e4)%60,Math.floor(l/1e3)%60];a&&(i=e);var g=setTimeout(function(){n.countdown(t,r+1e3,i)},1e3);return i&&i(l>0?c:[0,0,0,0],e,g),l<=0&&clearTimeout(g),g},timeAgo:function(t,e){var i=this,n=[[],[]],a=(new Date).getTime()-new Date(t).getTime();return a>6912e5?(a=new Date(t),n[0][0]=i.digit(a.getFullYear(),4),n[0][1]=i.digit(a.getMonth()+1),n[0][2]=i.digit(a.getDate()),e||(n[1][0]=i.digit(a.getHours()),n[1][1]=i.digit(a.getMinutes()),n[1][2]=i.digit(a.getSeconds())),n[0].join("-")+" "+n[1].join(":")):a>=864e5?(a/1e3/60/60/24|0)+"天前":a>=36e5?(a/1e3/60/60|0)+"小时前":a>=12e4?(a/1e3/60|0)+"分钟前":a<0?"未来":"刚刚"},digit:function(t,e){var i="";t=String(t),e=e||2;for(var n=t.length;n/g,">").replace(/'/g,"'").replace(/"/g,""")},event:function(t,n,a){n=i.event[t]=e.extend(!0,i.event[t],n)||{},e("body").on(a||"click","*["+t+"]",function(){var i=e(this),a=i.attr(t);n[a]&&n[a].call(this,i)})}};!function(t,e,i){"$:nomunge";function n(){a=e[l](function(){o.each(function(){var e=t(this),i=e.width(),n=e.height(),a=t.data(this,g);(i!==a.w||n!==a.h)&&e.trigger(c,[a.w=i,a.h=n])}),n()},r[s])}var a,o=t([]),r=t.resize=t.extend(t.resize,{}),l="setTimeout",c="resize",g=c+"-special-event",s="delay",u="throttleWindow";r[s]=250,r[u]=!0,t.event.special[c]={setup:function(){if(!r[u]&&this[l])return!1;var e=t(this);o=o.add(e),t.data(this,g,{w:e.width(),h:e.height()}),1===o.length&&n()},teardown:function(){if(!r[u]&&this[l])return!1;var e=t(this);o=o.not(e),e.removeData(g),o.length||clearTimeout(a)},add:function(e){function n(e,n,o){var r=t(this),l=t.data(this,g)||{};l.w=n!==i?n:r.width(),l.h=o!==i?o:r.height(),a.apply(this,arguments)}if(!r[u]&&this[l])return!1;var a;return t.isFunction(e)?(a=e,n):(a=e.handler,void(e.handler=n))}}}(e,window),t("util",i)}); -------------------------------------------------------------------------------- /report/public/lib/layui-v2.5.5/layui.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.5.5 MIT License By https://www.layui.com */ 2 | ;!function(e){"use strict";var t=document,o={modules:{},status:{},timeout:10,event:{}},n=function(){this.v="2.5.5"},r=function(){var e=t.currentScript?t.currentScript.src:function(){for(var e,o=t.scripts,n=o.length-1,r=n;r>0;r--)if("interactive"===o[r].readyState){e=o[r].src;break}return e||o[n].src}();return e.substring(0,e.lastIndexOf("/")+1)}(),i=function(t){e.console&&console.error&&console.error("Layui hint: "+t)},a="undefined"!=typeof opera&&"[object Opera]"===opera.toString(),u={layer:"modules/layer",laydate:"modules/laydate",laypage:"modules/laypage",laytpl:"modules/laytpl",layim:"modules/layim",layedit:"modules/layedit",form:"modules/form",upload:"modules/upload",transfer:"modules/transfer",tree:"modules/tree",table:"modules/table",element:"modules/element",rate:"modules/rate",colorpicker:"modules/colorpicker",slider:"modules/slider",carousel:"modules/carousel",flow:"modules/flow",util:"modules/util",code:"modules/code",jquery:"modules/jquery",mobile:"modules/mobile","layui.all":"../layui.all"};n.prototype.cache=o,n.prototype.define=function(e,t){var n=this,r="function"==typeof e,i=function(){var e=function(e,t){layui[e]=t,o.status[e]=!0};return"function"==typeof t&&t(function(n,r){e(n,r),o.callback[n]=function(){t(e)}}),this};return r&&(t=e,e=[]),!layui["layui.all"]&&layui["layui.mobile"]?i.call(n):(n.use(e,i),n)},n.prototype.use=function(e,n,l){function s(e,t){var n="PLaySTATION 3"===navigator.platform?/^complete$/:/^(complete|loaded)$/;("load"===e.type||n.test((e.currentTarget||e.srcElement).readyState))&&(o.modules[f]=t,d.removeChild(v),function r(){return++m>1e3*o.timeout/4?i(f+" is not a valid module"):void(o.status[f]?c():setTimeout(r,4))}())}function c(){l.push(layui[f]),e.length>1?y.use(e.slice(1),n,l):"function"==typeof n&&n.apply(layui,l)}var y=this,p=o.dir=o.dir?o.dir:r,d=t.getElementsByTagName("head")[0];e="string"==typeof e?[e]:e,window.jQuery&&jQuery.fn.on&&(y.each(e,function(t,o){"jquery"===o&&e.splice(t,1)}),layui.jquery=layui.$=jQuery);var f=e[0],m=0;if(l=l||[],o.host=o.host||(p.match(/\/\/([\s\S]+?)\//)||["//"+location.host+"/"])[0],0===e.length||layui["layui.all"]&&u[f]||!layui["layui.all"]&&layui["layui.mobile"]&&u[f])return c(),y;if(o.modules[f])!function g(){return++m>1e3*o.timeout/4?i(f+" is not a valid module"):void("string"==typeof o.modules[f]&&o.status[f]?c():setTimeout(g,4))}();else{var v=t.createElement("script"),h=(u[f]?p+"lay/":/^\{\/\}/.test(y.modules[f])?"":o.base||"")+(y.modules[f]||f)+".js";h=h.replace(/^\{\/\}/,""),v.async=!0,v.charset="utf-8",v.src=h+function(){var e=o.version===!0?o.v||(new Date).getTime():o.version||"";return e?"?v="+e:""}(),d.appendChild(v),!v.attachEvent||v.attachEvent.toString&&v.attachEvent.toString().indexOf("[native code")<0||a?v.addEventListener("load",function(e){s(e,h)},!1):v.attachEvent("onreadystatechange",function(e){s(e,h)}),o.modules[f]=h}return y},n.prototype.getStyle=function(t,o){var n=t.currentStyle?t.currentStyle:e.getComputedStyle(t,null);return n[n.getPropertyValue?"getPropertyValue":"getAttribute"](o)},n.prototype.link=function(e,n,r){var a=this,u=t.createElement("link"),l=t.getElementsByTagName("head")[0];"string"==typeof n&&(r=n);var s=(r||e).replace(/\.|\//g,""),c=u.id="layuicss-"+s,y=0;return u.rel="stylesheet",u.href=e+(o.debug?"?v="+(new Date).getTime():""),u.media="all",t.getElementById(c)||l.appendChild(u),"function"!=typeof n?a:(function p(){return++y>1e3*o.timeout/100?i(e+" timeout"):void(1989===parseInt(a.getStyle(t.getElementById(c),"width"))?function(){n()}():setTimeout(p,100))}(),a)},o.callback={},n.prototype.factory=function(e){if(layui[e])return"function"==typeof o.callback[e]?o.callback[e]:null},n.prototype.addcss=function(e,t,n){return layui.link(o.dir+"css/"+e,t,n)},n.prototype.img=function(e,t,o){var n=new Image;return n.src=e,n.complete?t(n):(n.onload=function(){n.onload=null,"function"==typeof t&&t(n)},void(n.onerror=function(e){n.onerror=null,"function"==typeof o&&o(e)}))},n.prototype.config=function(e){e=e||{};for(var t in e)o[t]=e[t];return this},n.prototype.modules=function(){var e={};for(var t in u)e[t]=u[t];return e}(),n.prototype.extend=function(e){var t=this;e=e||{};for(var o in e)t[o]||t.modules[o]?i("模块名 "+o+" 已被占用"):t.modules[o]=e[o];return t},n.prototype.router=function(e){var t=this,e=e||location.hash,o={path:[],search:{},hash:(e.match(/[^#](#.*$)/)||[])[1]||""};return/^#\//.test(e)?(e=e.replace(/^#\//,""),o.href="/"+e,e=e.replace(/([^#])(#.*$)/,"$1").split("/")||[],t.each(e,function(e,t){/^\w+=/.test(t)?function(){t=t.split("="),o.search[t[0]]=t[1]}():o.path.push(t)}),o):o},n.prototype.data=function(t,o,n){if(t=t||"layui",n=n||localStorage,e.JSON&&e.JSON.parse){if(null===o)return delete n[t];o="object"==typeof o?o:{key:o};try{var r=JSON.parse(n[t])}catch(i){var r={}}return"value"in o&&(r[o.key]=o.value),o.remove&&delete r[o.key],n[t]=JSON.stringify(r),o.key?r[o.key]:r}},n.prototype.sessionData=function(e,t){return this.data(e,t,sessionStorage)},n.prototype.device=function(t){var o=navigator.userAgent.toLowerCase(),n=function(e){var t=new RegExp(e+"/([^\\s\\_\\-]+)");return e=(o.match(t)||[])[1],e||!1},r={os:function(){return/windows/.test(o)?"windows":/linux/.test(o)?"linux":/iphone|ipod|ipad|ios/.test(o)?"ios":/mac/.test(o)?"mac":void 0}(),ie:function(){return!!(e.ActiveXObject||"ActiveXObject"in e)&&((o.match(/msie\s(\d+)/)||[])[1]||"11")}(),weixin:n("micromessenger")};return t&&!r[t]&&(r[t]=n(t)),r.android=/android/.test(o),r.ios="ios"===r.os,r},n.prototype.hint=function(){return{error:i}},n.prototype.each=function(e,t){var o,n=this;if("function"!=typeof t)return n;if(e=e||[],e.constructor===Object){for(o in e)if(t.call(e[o],o,e[o]))break}else for(o=0;oi?1:r