├── .gitattributes ├── .gitignore ├── LICENSE ├── README.md └── ant.mgr ├── Configuration └── Configuration │ ├── ConfigHelper.cs │ ├── Configuration.csproj │ └── GlobalSetting.cs ├── DBModels └── DBModels │ ├── DbContext.cs │ ├── DbModel.csproj │ ├── DbModels.cs │ ├── LinqToDBEntity.cs │ ├── ant.mssql.json │ ├── ant.mysqldb.json │ ├── mysql初始化表.sql │ └── sqlserver2012初始化.sql ├── Infrastructure └── Infrastructure │ ├── CodeGen │ ├── CrudTemplete │ │ ├── Controller.tpl │ │ ├── IRespository.tpl │ │ ├── Respository.tpl │ │ ├── ServiceModel.tpl │ │ ├── View.cshtml.tpl │ │ └── ViewModel.tpl │ └── GeneratorCodeHelper.cs │ ├── Excel │ ├── ExcelAttributes.cs │ └── ExcelHelper.cs │ ├── Infrastructure.csproj │ ├── Logging │ └── LogHelper.cs │ ├── StaticExt │ ├── BigInteger.cs │ ├── CodingUtils.cs │ └── ObjectExtensions.cs │ ├── View │ └── IViewRenderService.cs │ └── Web │ ├── HtmlParse.cs │ ├── HttpContext.cs │ └── WebUtils.cs ├── Mapping └── Mapping │ ├── AutoMapper.cs │ ├── IHaveCustomMappings.cs │ ├── IMapFrom{T}.cs │ ├── IMapTo{T}.cs │ ├── Mapping.csproj │ └── QueryableExtensions.cs ├── Repository └── Repository │ ├── AdminInterface │ ├── IAccountRespository.cs │ ├── ICommonRespository.cs │ ├── IMenuRespository.cs │ ├── IRepository.cs │ └── IRoleRespository.cs │ ├── AdminRepository │ ├── AccountRespository.cs │ ├── BaseRepository.cs │ ├── CommonRespository.cs │ ├── MenuRespository.cs │ └── RoleRespository.cs │ ├── Interceptors │ └── TransactionPointcut.cs │ ├── Repository.csproj │ ├── Tip.Designer.cs │ └── Tip.resx ├── ServicesModel └── ServicesModel │ ├── Admin │ ├── ActionSM.cs │ ├── CommonSM.cs │ ├── SystemMenuSM.cs │ ├── Token.cs │ └── UserSM.cs │ └── ServicesModel.csproj ├── ViewModels └── ViewModels │ ├── Admin │ ├── AccountVm.cs │ ├── AddMenuVm.cs │ ├── CommonVm.cs │ ├── Reuqest.cs │ ├── RoleVm.cs │ └── UserVm.cs │ ├── Condition │ ├── ConditionBase.cs │ └── SearchConditionInfo.cs │ ├── Result │ ├── ResultConfig.cs │ ├── ResultJsonBase.cs │ ├── ResultJsonInfo.cs │ ├── ResultJsonNoDataInfo.cs │ ├── SearchResult.cs │ └── SearchResultDic.cs │ └── ViewModels.csproj ├── ant.mgr.sln └── mgr.core ├── App_Start ├── Attribute.cs ├── CustomViewEngine.cs ├── MVCFile.cs └── ViewRenderService.cs ├── Areas └── Admin │ ├── Controllers │ ├── AccountController.cs │ ├── BaseController.cs │ ├── CommonController.cs │ ├── ErrorController.cs │ ├── HomeController.cs │ └── RoleController.cs │ ├── Filter │ ├── AuthorizeFilterAttribute.cs │ ├── BaseFilterAttribute.cs │ ├── FileDownloadAttribute.cs │ ├── GlobalExceptionFilter.cs │ └── ModelBinderProvider.cs │ └── Views │ ├── Account │ ├── Login.cshtml │ ├── UserDetail.cshtml │ └── UserList.cshtml │ ├── Common │ ├── CodeGen.cshtml │ └── SQL.cshtml │ ├── Error │ ├── Http403.cshtml │ ├── Http404.cshtml │ └── Http4041.cshtml │ ├── Home │ ├── Index.cshtml │ └── MenuList.cshtml │ └── Role │ ├── RoleAction.cshtml │ └── RoleList.cshtml ├── Controllers └── HomeController.cs ├── Program.cs ├── Properties └── launchSettings.json ├── Startup.cs ├── Views ├── Shared │ ├── Error.cshtml │ ├── NotSupport.cshtml │ ├── _HomeLayout.cshtml │ ├── _Layout.cshtml │ └── _Loading.cshtml └── _ViewImports.cshtml ├── Web.config ├── ant.mgr.core.csproj ├── appsettings.Development.json ├── appsettings.json ├── nlog.config └── wwwroot ├── css ├── ace │ ├── ace-responsive.min.css │ ├── ace-skins.min.css │ ├── ace.min.css │ ├── chosen-sprite.png │ ├── chosen-sprite@2x.png │ └── font-awesome.min.css ├── animate.css ├── bootstrap-rtl.css ├── bootstrap.min.css ├── font-awesome.css ├── font-awesome.min.css ├── fonts │ ├── ionicons.svg │ ├── ionicons.ttf │ └── ionicons.woff ├── iview.css ├── loading.css ├── login.css ├── patterns │ ├── header-profile-skin-1.png │ ├── header-profile-skin-3.png │ ├── header-profile.png │ └── shattered.png ├── plugins │ ├── bootstrap-table │ │ └── bootstrap-table.min.css │ ├── dataTables │ │ ├── bootstrap-editable.css │ │ └── dataTables.bootstrap.css │ ├── images │ │ ├── sort_asc.png │ │ ├── sort_desc.png │ │ ├── sprite-skin-flat.png │ │ ├── spritemap.png │ │ └── spritemap@2x.png │ ├── img │ │ ├── clear.png │ │ └── loading.gif │ ├── jQueryUI │ │ ├── images │ │ │ ├── ui-bg_diagonals-thick_18_b81900_40x40.png │ │ │ ├── ui-bg_diagonals-thick_20_666666_40x40.png │ │ │ ├── ui-bg_flat_0_aaaaaa_40x100.png │ │ │ ├── ui-bg_flat_10_000000_40x100.png │ │ │ ├── ui-bg_flat_75_ffffff_40x100.png │ │ │ ├── ui-bg_glass_100_f6f6f6_1x400.png │ │ │ ├── ui-bg_glass_100_fdf5ce_1x400.png │ │ │ ├── ui-bg_glass_65_ffffff_1x400.png │ │ │ ├── ui-bg_gloss-wave_35_f6a828_500x100.png │ │ │ ├── ui-bg_highlight-soft_100_eeeeee_1x100.png │ │ │ ├── ui-bg_highlight-soft_75_ffe45c_1x100.png │ │ │ ├── ui-icons_222222_256x240.png │ │ │ ├── ui-icons_228ef1_256x240.png │ │ │ ├── ui-icons_454545_256x240.png │ │ │ ├── ui-icons_888888_256x240.png │ │ │ ├── ui-icons_ef8c08_256x240.png │ │ │ ├── ui-icons_ffd27a_256x240.png │ │ │ └── ui-icons_ffffff_256x240.png │ │ ├── jquery-ui-1.10.4.custom.min.css │ │ └── jquery-ui.css │ ├── sql │ │ └── sql.css │ ├── steps │ │ └── jquery.steps.css │ ├── sweetalert │ │ └── sweetalert.css │ └── switchery │ │ └── switchery.css └── style.css ├── favicon.ico ├── fonts ├── FontAwesome.otf ├── fontawesome-webfont.eot ├── fontawesome-webfont.svg ├── fontawesome-webfont.ttf ├── fontawesome-webfont.woff ├── fontawesome-webfont.woff2 ├── glyphicons-halflings-regular.eot ├── glyphicons-halflings-regular.svg ├── glyphicons-halflings-regular.ttf ├── glyphicons-halflings-regular.woff └── glyphicons-halflings-regular.woff2 ├── img ├── 403.png ├── Status_Offline.png ├── back.jpg ├── bg.png ├── browser.png ├── browser.psd ├── fullscreen_alt.png ├── fullscreen_exit.png ├── icons.png ├── join.gif ├── joinbottom.gif ├── loading-upload.gif ├── locked.png ├── progress.png ├── sort_both.png ├── sql_formater.png ├── user.png └── webuploader.png └── js ├── auth.js ├── authlazy.js ├── bootstrap.min.js ├── contabs.js ├── content.js ├── fuzzysearch.js ├── hplus.js ├── jquery-ui-1.10.4.min.js ├── jquery-ui.custom.min.js ├── jquery.base64.min.js ├── jquery.fileDownload.js ├── jquery.min.js ├── jquery.min.map ├── jquery.ztree.exhide.js ├── monkey-run.js ├── plugins ├── bootstrap-fileinput │ ├── css │ │ ├── fileinput.css │ │ └── fileinput.min.css │ ├── fileinput.js │ ├── fileinput.min.js │ ├── img │ │ ├── loading-sm.gif │ │ └── loading.gif │ ├── locales │ │ └── zh.js │ ├── sass │ │ └── fileinput.scss │ └── themes │ │ ├── fa │ │ └── theme.js │ │ └── gly │ │ └── theme.js ├── bootstrap-table │ ├── bootstrap-editable.js │ ├── bootstrap-table-editable.min.js │ ├── bootstrap-table-mobile.min.js │ ├── bootstrap-table.js │ ├── bootstrap-table.min.js │ └── locale │ │ ├── bootstrap-table-zh-CN.js │ │ └── bootstrap-table-zh-CN.min.js ├── clearjs │ ├── jquery.bootstrap-pureClearButton.min.js │ └── jquery.input-clear.js ├── datetimepicker │ ├── bootstrap-datetimepicker.css │ ├── bootstrap-datetimepicker.js │ ├── bootstrap-datetimepicker.min.css │ ├── bootstrap-datetimepicker.min.js │ └── locales │ │ └── bootstrap-datetimepicker.zh-CN.js ├── img │ ├── filter.png │ ├── sortDown.png │ ├── sortNone.png │ └── sortUp.png ├── jquery-ui │ ├── jquery-ui.min.js │ └── jqueryui.js ├── layer │ ├── extend │ │ └── layer.ext.js │ ├── laydate │ │ ├── laydate.js │ │ ├── need │ │ │ └── laydate.css │ │ └── skins │ │ │ └── default │ │ │ ├── icon.png │ │ │ └── laydate.css │ ├── laydatev5.0.85 │ │ ├── laydate.js │ │ └── theme │ │ │ └── default │ │ │ ├── font │ │ │ ├── iconfont.eot │ │ │ ├── iconfont.svg │ │ │ ├── iconfont.ttf │ │ │ └── iconfont.woff │ │ │ └── laydate.css │ ├── layer.min.js │ ├── layim │ │ ├── data │ │ │ ├── chatlog.json │ │ │ ├── friend.json │ │ │ ├── group.json │ │ │ └── groups.json │ │ ├── layim.css │ │ ├── layim.js │ │ └── loading.gif │ └── skin │ │ ├── default │ │ ├── icon-ext.png │ │ ├── icon.png │ │ ├── icon_ext.png │ │ ├── loading-0.gif │ │ ├── loading-1.gif │ │ ├── loading-2.gif │ │ ├── textbg.png │ │ ├── xubox_ico0.png │ │ ├── xubox_loading0.gif │ │ ├── xubox_loading1.gif │ │ ├── xubox_loading2.gif │ │ ├── xubox_loading3.gif │ │ └── xubox_title0.png │ │ ├── layer.css │ │ ├── layer.ext.css │ │ └── moon │ │ ├── default.png │ │ └── style.css ├── metisMenu │ └── jquery.metisMenu.js ├── moment │ └── moment-with-locales.min.js ├── select2 │ ├── select2-bootstrap.css │ ├── select2-spinner.gif │ ├── select2.css │ ├── select2.js │ ├── select2.min.js │ ├── select2.png │ ├── select2_locale_zh-CN.js │ └── select2x2.png ├── slimscroll │ └── jquery.slimscroll.min.js ├── sql │ └── sql.all.js ├── staps │ └── jquery.steps.min.js ├── sweetalert │ ├── sweetalert2.css │ ├── sweetalert2.js │ ├── sweetalert2.min.css │ └── sweetalert2.min.js ├── switchery │ └── switchery.js ├── tipped-4.4.1-light │ ├── css │ │ └── tipped │ │ │ └── tipped.css │ └── js │ │ └── tipped │ │ ├── tipped.js │ │ └── tipped_new.js └── zTree │ └── 3.5 │ ├── jquery.ztree.all.js │ ├── jquery.ztree.all.min.js │ ├── metroStyle │ ├── img │ │ ├── 1_close.png │ │ ├── 1_open.png │ │ ├── line_conn.png │ │ ├── loading.gif │ │ ├── metro.gif │ │ └── metro.png │ └── metroStyle.css │ └── zTreeStyle │ ├── img │ ├── diy │ │ ├── 1_close.png │ │ ├── 1_open.png │ │ ├── 2.png │ │ ├── 3.png │ │ ├── 4.png │ │ ├── 5.png │ │ ├── 6.png │ │ ├── 7.png │ │ ├── 8.png │ │ └── 9.png │ ├── line_conn.gif │ ├── loading.gif │ ├── zTreeStandard.gif │ └── zTreeStandard.png │ └── zTreeStyle.css ├── underscore-1.8.2.js ├── vue.min.js ├── vue.min1.0.js └── whenReady.js /.gitattributes: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Set default behavior to automatically normalize line endings. 3 | ############################################################################### 4 | * text=auto 5 | 6 | ############################################################################### 7 | # Set default behavior for command prompt diff. 8 | # 9 | # This is need for earlier builds of msysgit that does not have it on by 10 | # default for csharp files. 11 | # Note: This is only used by command line 12 | ############################################################################### 13 | #*.cs diff=csharp 14 | 15 | ############################################################################### 16 | # Set the merge driver for project and solution files 17 | # 18 | # Merging from the command prompt will add diff markers to the files if there 19 | # are conflicts (Merging from VS is not affected by the settings below, in VS 20 | # the diff markers are never inserted). Diff markers may cause the following 21 | # file extensions to fail to load in VS. An alternative would be to treat 22 | # these files as binary and thus will always conflict and require user 23 | # intervention with every merge. To do so, just uncomment the entries below 24 | ############################################################################### 25 | #*.sln merge=binary 26 | #*.csproj merge=binary 27 | #*.vbproj merge=binary 28 | #*.vcxproj merge=binary 29 | #*.vcproj merge=binary 30 | #*.dbproj merge=binary 31 | #*.fsproj merge=binary 32 | #*.lsproj merge=binary 33 | #*.wixproj merge=binary 34 | #*.modelproj merge=binary 35 | #*.sqlproj merge=binary 36 | #*.wwaproj merge=binary 37 | 38 | ############################################################################### 39 | # behavior for image files 40 | # 41 | # image files are treated as binary by default. 42 | ############################################################################### 43 | #*.jpg binary 44 | #*.png binary 45 | #*.gif binary 46 | 47 | ############################################################################### 48 | # diff behavior for common document formats 49 | # 50 | # Convert binary document formats to text before diffing them. This feature 51 | # is only available from the command line. Turn it on by uncommenting the 52 | # entries below. 53 | ############################################################################### 54 | #*.doc diff=astextplain 55 | #*.DOC diff=astextplain 56 | #*.docx diff=astextplain 57 | #*.DOCX diff=astextplain 58 | #*.dot diff=astextplain 59 | #*.DOT diff=astextplain 60 | #*.pdf diff=astextplain 61 | #*.PDF diff=astextplain 62 | #*.rtf diff=astextplain 63 | #*.RTF diff=astextplain 64 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | 4 | # User-specific files 5 | *.suo 6 | *.user 7 | *.sln.docstates 8 | .vs/ 9 | .idea/ 10 | #Auto Generate files 11 | __ConfigTemp/ 12 | 13 | # Build results 14 | 15 | [Dd]ebug/ 16 | [Rr]elease/ 17 | x64/ 18 | build/ 19 | [Bb]in/ 20 | [Oo]bj/ 21 | 22 | # Enable "build/" folder in the NuGet Packages folder since NuGet packages use it for MSBuild targets 23 | !packages/*/build/ 24 | 25 | # MSTest test Results 26 | [Tt]est[Rr]esult*/ 27 | [Bb]uild[Ll]og.* 28 | 29 | *_i.c 30 | *_p.c 31 | *.ilk 32 | *.meta 33 | *.obj 34 | *.pch 35 | *.pdb 36 | *.pgc 37 | *.pgd 38 | *.rsp 39 | *.sbr 40 | *.tlb 41 | *.tli 42 | *.tlh 43 | *.tmp 44 | *.tmp_proj 45 | *.log 46 | *.vspscc 47 | *.vssscc 48 | .builds 49 | *.pidb 50 | *.log 51 | *.scc 52 | *.config 53 | 54 | # Visual C++ cache files 55 | ipch/ 56 | *.aps 57 | *.ncb 58 | *.opensdf 59 | *.sdf 60 | *.cachefile 61 | 62 | # Visual Studio profiler 63 | *.psess 64 | *.vsp 65 | *.vspx 66 | 67 | # Guidance Automation Toolkit 68 | *.gpState 69 | 70 | # ReSharper is a .NET coding add-in 71 | _ReSharper*/ 72 | *.[Rr]e[Ss]harper 73 | 74 | # TeamCity is a build add-in 75 | _TeamCity* 76 | 77 | # DotCover is a Code Coverage Tool 78 | *.dotCover 79 | 80 | # NCrunch 81 | *.ncrunch* 82 | .*crunch*.local.xml 83 | 84 | # Installshield output folder 85 | [Ee]xpress/ 86 | 87 | # DocProject is a documentation generator add-in 88 | DocProject/buildhelp/ 89 | DocProject/Help/*.HxT 90 | DocProject/Help/*.HxC 91 | DocProject/Help/*.hhc 92 | DocProject/Help/*.hhk 93 | DocProject/Help/*.hhp 94 | DocProject/Help/Html2 95 | DocProject/Help/html 96 | 97 | # Click-Once directory 98 | publish/ 99 | 100 | # Publish Web Output 101 | *.Publish.xml 102 | 103 | # NuGet Packages Directory 104 | ## TODO: If you have NuGet Package Restore enabled, uncomment the next line 105 | #packages/ 106 | 107 | # Windows Azure Build Output 108 | csx 109 | *.build.csdef 110 | 111 | # Windows Store app package directory 112 | AppPackages/ 113 | 114 | # Others 115 | sql/ 116 | *.Cache 117 | ClientBin/ 118 | [Ss]tyle[Cc]op.* 119 | ~$* 120 | *~ 121 | *.dbmdl 122 | *.[Pp]ublish.xml 123 | *.pfx 124 | *.publishsettings 125 | 126 | # RIA/Silverlight projects 127 | Generated_Code/ 128 | 129 | # Backup & report files from converting an old project file to a newer 130 | # Visual Studio version. Backup files are not needed, because we have git ;-) 131 | _UpgradeReport_Files/ 132 | Backup*/ 133 | UpgradeLog*.XML 134 | UpgradeLog*.htm 135 | 136 | # SQL Server files 137 | App_Data/*.mdf 138 | App_Data/*.ldf 139 | 140 | 141 | #LightSwitch generated files 142 | GeneratedArtifacts/ 143 | _Pvt_Extensions/ 144 | ModelManifest.xml 145 | 146 | # ========================= 147 | # Windows detritus 148 | # ========================= 149 | 150 | # Windows image file caches 151 | Thumbs.db 152 | ehthumbs.db 153 | 154 | # Folder config file 155 | Desktop.ini 156 | 157 | # Recycle Bin used on file shares 158 | $RECYCLE.BIN/ 159 | 160 | # Mac desktop service store files 161 | .DS_Store 162 | /CloudBagOffline/packages 163 | /CloudBagOffline/CloudBag.HermesControl 164 | ant.mgr/mgr.core/AntDeploy.json 165 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # AntMgr 4 | 基于netcore2.0 mvc 开发的 快速搭建具有如下特色的后台管理系统 5 | 最新版已升级到net6.0 6 | 7 | # 特色: 8 | 1. 用户管理 9 | 2. 菜单管理 10 | 3. 角色管理 11 | 4. 权限管理[精确到按钮]) 12 | 5. 代码生成器(一键生成CRUD前后端代码 增+删+改+查【分页】导入+导出) 13 | 6. SQL工具(智能字段提示) 14 | 7. 约定大于配置,开发简单效率高,权限配置友好不复杂 15 | 8. 支持mysql和sqlserver两种数据库。切换数据库不用改任何代码 16 | 17 | 角色支持遗传,比如 :共有ABCD四个功能权限,分配了 A B 2个权限给 超级管理员角色的用户,支持让超级管理员用户还能自己创建角色。但是只能选择 A B 2个。无法看到 C D! 18 | 19 | # 遇到问题可有加群咨询 20 | ![image](https://images4.c-ctrip.com/target/zb0k16000000yztm18B20.png) 21 | 22 | # 如何使用 wiki:https://github.com/yuzd/AntMgr/wiki 23 | 代码克隆到本地 用vs2017或以上版本 打开工程。 24 | 25 | ### 项目结构如下: 26 | 27 | ![image](https://images4.c-ctrip.com/target/zb0315000000yq3me600A.png) 28 | ![image](https://images4.c-ctrip.com/target/zb0u15000000yoc9r273B.png) 29 | 30 | ### 找到DbModel下面的初始化db脚本 31 | - mysql数据库的初始化脚本 32 | - sqlserver数据库的初始化脚本(我测试用的是2012) 33 | 34 | ![image](https://images4.c-ctrip.com/target/zb0m16000000z3fk4624C.png) 35 | 36 | ### 以下教程采用的是mysql数据库,如果您是用MSSQL的话请看wiki里面有专门介绍注意点。 37 | 38 | 里面包含4张表的schema和初始化数据,你可以新建一个db,也可以导入到你现有的db 39 | 40 | 1. system_users 系统用户表 41 | 2. system_menu 系统菜单表 42 | 3. system_role 系统角色表 43 | 4. system_page_action 按钮权限表 44 | 45 | 46 | 47 | ![image](https://images4.c-ctrip.com/target/zb0b15000000yqrkk687D.png) 48 | 49 | 50 | ### 导入db成功后在项目配置文件里面修改成正确的db链接字符串 51 | 52 | ![image](https://images4.c-ctrip.com/target/zb0o15000000yn8889DA6.png) 53 | 54 | 55 | ### F5启动应用 会进入登录页面 56 | 57 | ![image](https://images4.c-ctrip.com/target/zb0915000000yqsrzD697.png) 58 | 59 | 如果是按照上面初始化db脚本的话 60 | 初始化的登录名 zdyu 密码 123456 61 | 62 | 63 | 登录成功如下图: 64 | 65 | ### 首页 66 | ![image](https://images4.c-ctrip.com/target/zb081e000001fgemwEB45.png) 67 | 68 | 69 | ### 菜单管理 70 | ![image](https://images4.c-ctrip.com/target/zb0h1e000001fhsa4146E.png) 71 | 72 | ### 权限管理 73 | ![image](https://images4.c-ctrip.com/target/zb0h1e000001fhsarEC6C.png) 74 | 75 | ### 角色管理 76 | ![image](https://images4.c-ctrip.com/target/zb0c1e000001fiuw76AD4.png) 77 | ![image](https://images4.c-ctrip.com/target/zb0f1e000001fg8ec6A05.png) 78 | 79 | ### 系统用户 80 | ![image](https://images4.c-ctrip.com/target/zb091e000001fim7m7EF4.png) 81 | 82 | ### 代码自动生成 83 | ![image](https://images4.c-ctrip.com/target/zb081e000001fgeq1EC8F.png) 84 | ![image](https://images4.c-ctrip.com/target/zb0d1e000001feqhn5B6D.png) 85 | 86 | ### SQL工具(智能字段提示,写sql再也不用担心忘记字段名称了) 87 | ![image](https://images4.c-ctrip.com/target/zb0v1e000001fr9j98114.png) 88 | 89 | 90 | ### 权限如何设计的 91 | - 一个菜单(system_menu)对应一个view页面【1:1】 92 | - 一个用户(system_user)只能有一个角色(system_role)【1:1】 93 | - 一个角色(system_role)可以配置多个菜单权限(view页面) 94 | 和view页面里面的功能模块(ru按钮) 【1:N】 95 | - 每个菜单(view页面)下的功能模块(如按钮)配置实际该功能用到的接口【1:N】 96 | 97 | ### 约定>配置 权限设计其实很简单 98 | 权限主要拦截器代码实现在: 99 | ![image](https://images4.c-ctrip.com/target/zb0c15000000yr2jg2D37.png) 100 | 101 | 用户登录态是记录在cookie的 默认的keyName:cbeid 102 | 可以在这个里面更改 103 | ![image](https://images4.c-ctrip.com/target/zb0t15000000yoh6fE3C8.png) 104 | 105 | 106 | #### 约定一 107 | 具有权限拦截的Controller类上面统一打上[API("controller作用描述")] 方法上面打上 [API("方法作用描述")] 108 | 109 | #### 约定二 110 | 111 | 在页面里面写需要权限控制的按钮的时候 112 | 113 | ``` 114 | 115 | 116 | ``` 117 | 118 | 标签名称 | 含义 119 | ---|--- 120 | action-id | 表示这个权限按钮的id 在当前view唯一 121 | action-name | 权限按钮的作用描述 122 | display | 默认使用 none 隐藏 123 | class | 必须有 authorization 124 | 125 | 只要遵守如上2个约定开发好页面和controller后,按照如下步骤进行配置权限 126 | 127 | 1. 在菜单管理加入新增的页面 128 | 2. 在权限管理配置功能按钮对应用到的接口 129 | 3. 在角色管理修改对应的角色 130 | 131 | 132 | ### 其他说明 133 | 134 | 后台用到了的Orm框架: 135 | 136 | https://github.com/yuzd/AntData.ORM 137 | 138 | 配合ORM框架的vs一键生成dbmodel 插件 [wiki有插件使用教程](https://github.com/yuzd/AntMgr/wiki/4-Dbmodels%E6%8F%92%E4%BB%B6%E7%9B%B8%E5%85%B3): 139 | 140 | https://marketplace.visualstudio.com/items?itemName=nainaigu.AntDataVS 141 | 142 | 配合ORM框架的rider一键生成dbmodel 插件 [wiki有插件使用教程](https://github.com/yuzd/AntMgr/wiki/4-Dbmodels%E6%8F%92%E4%BB%B6%E7%9B%B8%E5%85%B3): 143 | 144 | https://plugins.jetbrains.com/plugin/14033 145 | 146 | 147 | ### WIKI有更详细的教程 148 | https://github.com/yuzd/AntMgr/wiki 149 | -------------------------------------------------------------------------------- /ant.mgr/Configuration/Configuration/ConfigHelper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Configuration; 3 | using Microsoft.Extensions.Configuration; 4 | 5 | namespace Configuration 6 | { 7 | public static class ConfigHelper 8 | { 9 | private static readonly IConfigurationRoot Configuration; 10 | static ConfigHelper() 11 | { 12 | Configuration = new ConfigurationBuilder() 13 | .SetBasePath(AppDomain.CurrentDomain.BaseDirectory) 14 | .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) 15 | .Build(); 16 | 17 | } 18 | public static T GetConfig(string key, T defaultValue) 19 | { 20 | try 21 | { 22 | var result = Configuration[key]; 23 | return (T)Convert.ChangeType(result, typeof(T)); 24 | } 25 | catch (Exception) 26 | { 27 | if (defaultValue != null) 28 | { 29 | return defaultValue; 30 | } 31 | return default(T); 32 | } 33 | } 34 | 35 | public static T GetConfig(string key) 36 | { 37 | try 38 | { 39 | var result = Configuration[key]; 40 | return (T)Convert.ChangeType(result, typeof(T)); 41 | } 42 | catch (Exception) 43 | { 44 | throw new Exception(string.Format("没有在配置文件中的appSettings中找到{0}的配置,请检查配置文件配置!", key)); 45 | } 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /ant.mgr/Configuration/Configuration/Configuration.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | net8.0 5 | 6 | 7 | 8 | 1701;1702;1591 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /ant.mgr/Configuration/Configuration/GlobalSetting.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | 5 | namespace Configuration 6 | { 7 | public class GlobalSetting 8 | { 9 | 10 | /// 11 | /// 当前登陆用户的Eid 12 | /// 13 | public static string CurrentLoginUserGuid = "cbeid"; 14 | /// 15 | /// 带有权限的MenuTid 16 | /// 17 | public static string CurrentMenu = "cbmenu"; 18 | 19 | 20 | #region 上帝模式 21 | 22 | public static List GoldList 23 | { 24 | get 25 | { 26 | var result = new List(); 27 | var list = ConfigHelper.GetConfig("GoldList", string.Empty) 28 | .Split(new string[] { "],[" }, StringSplitOptions.None).ToList(); 29 | foreach (var li in list) 30 | { 31 | result.Add(li.Replace("]", "").Replace("[", "").ToLower()); 32 | } 33 | return result; 34 | } 35 | } 36 | #endregion 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /ant.mgr/DBModels/DBModels/DbModel.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net8.0 5 | DbModel 6 | DbModel 7 | true 8 | 9 | 10 | 11 | 1701;1702;1591 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | Always 22 | PreserveNewest 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | Never 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /ant.mgr/DBModels/DBModels/LinqToDBEntity.cs: -------------------------------------------------------------------------------- 1 | namespace DbModel 2 | { 3 | public class LinqToDBEntity 4 | { 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /ant.mgr/DBModels/DBModels/ant.mssql.json: -------------------------------------------------------------------------------- 1 | { 2 | "NamespaceName": "DbModel", //必填:设置生成代码的命名空间 3 | 4 | "BaseEntityClass": "LinqToDBEntity", //生成的DTo继父类class名称 (必填 代码生成的时候会用到) 5 | 6 | "DataContextName": "AntEntity", //自定义生成的数据库Entity的name( 如果不填会有默认值为db的名称+Entitys) 7 | 8 | "EntitySuffix": "", //自定义生成的每张表对应class的后缀 例如统一加一个 "DTO" 9 | 10 | "AssociationPrefix": "", //定义生成外键的字段名称的前缀 例如 “FK_” 11 | 12 | "AssociationAppendByFieldName": true, //定义生成外键的字段名称是否根据增加 "By" + 他的字段名称 13 | 14 | "GenerateAssociations": true, //是否生成外键 15 | 16 | "ConnectionString": "Server=.\\;Database=antmgr;Trusted_Connection=True;Enlist=False;", //DB链接字符串 17 | 18 | "OutFileName": "DbModels", //生成的cs文件名称 19 | 20 | "PerClassPerFile": false, //每一个class生成一个独立的cs文件 如果这个为true就会忽略OutFileName参数值 21 | 22 | "TableFilter": [], //指定要生成class的表,如果为空代表不限制 23 | 24 | "SetFkList": [ //逻辑(非物理,不提倡物理建外键) 25 | //格式: A表名称,A表字段,B表名称,B表字段,外键关系(OneToOne,OneToMany,ManyToOne) 例如 "good_category,GoodTid,goods,Tid,OneToOne" 26 | ], 27 | "UsingList": [ //设置Using 28 | 29 | ], 30 | "SetColumnTypeList": [ //自定义设置属性的类型 格式为 table.filedName=xxxxxx 例如:"person.Gender=GenderEnum" 31 | 32 | ], 33 | "DateTimeDefaultValue": "DateTime.Now" //如果datetime类型是非空有默认值的 可以在这里设置默认值 34 | } -------------------------------------------------------------------------------- /ant.mgr/DBModels/DBModels/ant.mysqldb.json: -------------------------------------------------------------------------------- 1 | { 2 | "NamespaceName": "DbModel", //必填:设置生成代码的命名空间 3 | 4 | "BaseEntityClass": "LinqToDBEntity", //生成的DTo继父类class名称 (必填 代码生成的时候会用到) 5 | 6 | "DataContextName": "AntEntity", //自定义生成的数据库Entity的name( 如果不填会有默认值为db的名称+Entitys) 7 | 8 | "EntitySuffix": "", //自定义生成的每张表对应class的后缀 例如统一加一个 "DTO" 9 | 10 | "AssociationPrefix": "", //定义生成外键的字段名称的前缀 例如 “FK_” 11 | 12 | "AssociationAppendByFieldName": true, //定义生成外键的字段名称是否根据增加 "By" + 他的字段名称 13 | 14 | "GenerateAssociations": true, //是否生成外键 15 | 16 | "ConnectionString": "Server=localhost;Port=3306;Database=antmgr;Uid=root;Pwd=123456;charset=utf8;SslMode=none", //DB链接字符串 17 | 18 | "OutFileName": "DbModels", //生成的cs文件名称 19 | 20 | "PerClassPerFile": false, //每一个class生成一个独立的cs文件 如果这个为true就会忽略OutFileName参数值 21 | 22 | "TableFilter": [], //指定要生成class的表,如果为空代表不限制 23 | 24 | "SetFkList": [ //逻辑(非物理,不提倡物理建外键) 25 | //格式: A表名称,A表字段,B表名称,B表字段,外键关系(OneToOne,OneToMany,ManyToOne) 例如 "good_category,GoodTid,goods,Tid,OneToOne" 26 | ], 27 | "UsingList": [ //设置Using 28 | 29 | ], 30 | "SetColumnTypeList": [ //自定义设置属性的类型 格式为 table.filedName=xxxxxx 例如:"person.Gender=GenderEnum" 31 | 32 | ], 33 | "DateTimeDefaultValue": "DateTime.Now" //如果datetime类型是非空有默认值的 可以在这里设置默认值 34 | } -------------------------------------------------------------------------------- /ant.mgr/DBModels/DBModels/sqlserver2012初始化.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/DBModels/DBModels/sqlserver2012初始化.sql -------------------------------------------------------------------------------- /ant.mgr/Infrastructure/Infrastructure/CodeGen/CrudTemplete/IRespository.tpl: -------------------------------------------------------------------------------- 1 | using ViewModels.Reuqest; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.IO; 5 | using System.Threading.Tasks; 6 | using DbModel; 7 | using ServicesModel; 8 | 9 | namespace Repository.Interface 10 | { 11 | 12 | /// 13 | /// {{ModelName}}接口 14 | /// 15 | public interface I{{ModelClassName}}Respository : IRepository<{{ModelClassName}}> 16 | { 17 | /// 18 | /// 获取{{ModelName}}列表 19 | /// 20 | Task>> Get{{ModelClassName}}List({{ModelClassName}}Vm model); 21 | 22 | /// 23 | /// 添加或修改{{ModelName}} 24 | /// 25 | string Add{{ModelClassName}}({{ModelClassName}} model); 26 | 27 | /// 28 | /// 删除{{ModelName}} 29 | /// 30 | Task Del{{ModelClassName}}(long tid); 31 | 32 | /// 33 | /// 下载导入{{ModelName}}的Excel模板 34 | /// 35 | Tuple ExcelTemplete(); 36 | 37 | /// 38 | /// 根据{{ModelName}}的Excel模板导入 39 | /// 40 | Tuple UseTransactionUpload(Stream inputFileStream, string userName); 41 | 42 | /// 43 | /// 导出{{ModelName}}的Excel 44 | /// 45 | Task> Export({{ModelClassName}}Vm model); 46 | } 47 | } -------------------------------------------------------------------------------- /ant.mgr/Infrastructure/Infrastructure/CodeGen/CrudTemplete/ServiceModel.tpl: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using DbModel; 7 | using Infrastructure.Excel; 8 | 9 | namespace ServicesModel 10 | { 11 | 12 | //如果要导出excel的第一列:标题是对应的中文 可以增加 ExcelClass 标签 (中文名称,对应的dbmodel的属性名称,排序值[越小越在前面]) 13 | {% for field in ModelFields %} 14 | [ExcelClass("{{field.Comment}}", Column = "{{field.Name}}", OrderRule = {{forloop.index}})] 15 | {% endfor %} 16 | public class {{ModelClassName}}SM : {{ModelClassName}} 17 | { 18 | 19 | //也可以增加自定义列 并打上 ExcelField 标签 (中文名称,排序值) 20 | //[ExcelField("中文名称", OrderRule = 10)] 21 | //public string Other { get; set; } 22 | 23 | } 24 | 25 | 26 | } 27 | -------------------------------------------------------------------------------- /ant.mgr/Infrastructure/Infrastructure/CodeGen/CrudTemplete/ViewModel.tpl: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using ViewModels.Condition; 7 | 8 | namespace ViewModels.Reuqest 9 | { 10 | 11 | public class {{ModelClassName}}Vm : ConditionBase 12 | { 13 | 14 | //在这里写入筛选条件 15 | //public string XXX { get; set; } 16 | } 17 | 18 | 19 | } 20 | -------------------------------------------------------------------------------- /ant.mgr/Infrastructure/Infrastructure/Excel/ExcelAttributes.cs: -------------------------------------------------------------------------------- 1 |  2 | using System; 3 | using System.Collections.Generic; 4 | using System.Text; 5 | 6 | namespace Infrastructure.Excel 7 | { 8 | /// 9 | /// 实体类生成特性 10 | /// 可以控制显示中文名 11 | /// 12 | [AttributeUsage( 13 | AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Class | AttributeTargets.Interface, 14 | AllowMultiple = false, Inherited = true)] 15 | public class ExcelFieldAttribute : Attribute 16 | { 17 | /// 18 | /// 显示中文名 19 | /// 20 | public string Name { get; set; } 21 | 22 | /// 23 | /// 排序 24 | /// 25 | public int OrderRule { get; set; } 26 | 27 | 28 | public ExcelFieldAttribute(string name) 29 | { 30 | Name = name; 31 | } 32 | } 33 | 34 | [AttributeUsage( 35 | AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Class | AttributeTargets.Interface, 36 | AllowMultiple = true, Inherited = true)] 37 | public class ExcelClassAttribute : Attribute 38 | { 39 | /// 40 | /// 显示中文名 41 | /// 42 | public string Name { get; set; } 43 | 44 | /// 45 | /// 排序 46 | /// 47 | public int OrderRule { get; set; } 48 | 49 | /// 50 | /// 列名称 51 | /// 52 | public string Column { get; set; } 53 | 54 | 55 | public ExcelClassAttribute(string name) 56 | { 57 | Name = name; 58 | } 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /ant.mgr/Infrastructure/Infrastructure/Infrastructure.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net8.0 5 | 6 | 7 | 8 | 1701;1702;1591 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 | -------------------------------------------------------------------------------- /ant.mgr/Infrastructure/Infrastructure/StaticExt/CodingUtils.cs: -------------------------------------------------------------------------------- 1 | //----------------------------------------------------------------------- 2 | // 3 | // Copyright (C) Company. All Rights Reserved. 4 | // 5 | // nainaigu 6 | // 7 | //----------------------------------------------------------------------- 8 | 9 | using System; 10 | using System.Security.Cryptography; 11 | using System.Text; 12 | 13 | 14 | namespace Infrastructure.StaticExt 15 | { 16 | 17 | public class CodingUtils 18 | { 19 | 20 | 21 | 22 | /// 23 | /// MD5函数 24 | /// 25 | /// 原始字符串 26 | /// MD5结果 27 | public static string MD5(string str) 28 | { 29 | byte[] b = Encoding.UTF8.GetBytes(str); 30 | using var md5 = System.Security.Cryptography.MD5.Create(); 31 | b = md5.ComputeHash(b); 32 | string ret = string.Empty; 33 | for (int i = 0; i < b.Length; i++) 34 | { 35 | ret += b[i].ToString("x").PadLeft(2, '0'); 36 | } 37 | return ret; 38 | } 39 | 40 | #region AES 41 | 42 | /// 43 | /// AES加密 44 | /// 45 | /// 46 | /// 47 | public static string AesEncrypt(string toEncrypt) 48 | { 49 | if (string.IsNullOrEmpty(toEncrypt)) 50 | { 51 | return string.Empty; 52 | } 53 | try 54 | { 55 | byte[] keyArray = Encoding.UTF8.GetBytes(@"7BF45189A0ED4BD6BE7936EFD11169E7"); 56 | 57 | byte[] toEncryptArray = Encoding.UTF8.GetBytes(toEncrypt); 58 | 59 | 60 | using var rDel = Aes.Create(); 61 | rDel.Key = keyArray; 62 | rDel.Mode = CipherMode.ECB; 63 | rDel.Padding = PaddingMode.PKCS7; 64 | 65 | ICryptoTransform cTransform = rDel.CreateEncryptor(); 66 | byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); 67 | 68 | return Convert.ToBase64String(resultArray, 0, resultArray.Length); 69 | } 70 | catch 71 | { 72 | return string.Empty; 73 | } 74 | } 75 | 76 | /// 77 | /// AES解密 78 | /// 79 | /// 80 | /// 81 | public static string AesDecrypt(string toDecrypt) 82 | { 83 | if (string.IsNullOrEmpty(toDecrypt)) 84 | { 85 | return string.Empty; 86 | } 87 | try 88 | { 89 | 90 | byte[] keyArray = Encoding.UTF8.GetBytes(@"7BF45189A0ED4BD6BE7936EFD11169E7"); 91 | 92 | byte[] toEncryptArray = Convert.FromBase64String(toDecrypt); 93 | 94 | using var rDel = Aes.Create(); 95 | rDel.Key = keyArray; 96 | rDel.Mode = CipherMode.ECB; 97 | rDel.Padding = PaddingMode.PKCS7; 98 | 99 | 100 | ICryptoTransform cTransform = rDel.CreateDecryptor(); 101 | byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); 102 | 103 | return UTF8Encoding.UTF8.GetString(resultArray); 104 | } 105 | catch 106 | { 107 | return string.Empty; 108 | } 109 | } 110 | 111 | #endregion 112 | 113 | 114 | 115 | 116 | } 117 | } -------------------------------------------------------------------------------- /ant.mgr/Infrastructure/Infrastructure/StaticExt/ObjectExtensions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Concurrent; 3 | using System.Collections.Generic; 4 | using System.ComponentModel; 5 | using System.Data; 6 | using System.IO; 7 | using System.Linq; 8 | using System.Runtime.Serialization.Formatters.Binary; 9 | using System.Security.Cryptography; 10 | using System.Text; 11 | using System.Text.RegularExpressions; 12 | using System.Threading.Tasks; 13 | 14 | namespace Infrastructure.StaticExt 15 | { 16 | /// 17 | /// 对象扩展方法 18 | /// 19 | public static class ObjectExtensions 20 | { 21 | /// 22 | /// 判断字符串中是否包含中文 23 | /// 24 | /// 25 | /// 26 | public static bool ContainChinese(this string input) 27 | { 28 | string pattern = "[\u4e00-\u9fbb]"; 29 | return Regex.IsMatch(input, pattern); 30 | } 31 | 32 | public static string DecodeBase64(this string str) 33 | { 34 | try 35 | { 36 | byte[] data = Convert.FromBase64String(str); 37 | return Encoding.UTF8.GetString(data); 38 | } 39 | catch (Exception) 40 | { 41 | return string.Empty; 42 | } 43 | } 44 | 45 | 46 | /// 47 | /// 把Dictionary 加在string 48 | /// 49 | /// 50 | /// 51 | /// 52 | public static string AppendDic(this string value, Dictionary addition) 53 | { 54 | if (addition == null) return value; 55 | value += Environment.NewLine + " [Tags]" + Environment.NewLine; 56 | foreach (KeyValuePair item in addition) 57 | { 58 | value += " {Key:" + item.Key + ",Value:" + item.Value + "}" + Environment.NewLine; 59 | } 60 | return value; 61 | } 62 | 63 | 64 | 65 | /// 66 | /// 将流读取成字节组。 67 | /// 68 | /// 流。 69 | /// 字节组。 70 | public static byte[] ReadBytes(this Stream stream) 71 | { 72 | if (!stream.CanRead) 73 | throw new NotSupportedException(stream + "不支持读取。"); 74 | 75 | Action trySeekBegin = () => 76 | { 77 | if (!stream.CanSeek) 78 | return; 79 | 80 | stream.Seek(0, SeekOrigin.Begin); 81 | }; 82 | 83 | trySeekBegin(); 84 | 85 | var list = new List(stream.CanSeek ? (stream.Length > int.MaxValue ? int.MaxValue : (int)stream.Length) : 300); 86 | 87 | int b; 88 | 89 | while ((b = stream.ReadByte()) != -1) 90 | list.Add((byte)b); 91 | 92 | trySeekBegin(); 93 | 94 | return list.ToArray(); 95 | } 96 | 97 | 98 | 99 | 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /ant.mgr/Infrastructure/Infrastructure/View/IViewRenderService.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using System.Threading.Tasks; 5 | 6 | namespace Infrastructure.View 7 | { 8 | public interface IViewRenderService 9 | { 10 | Task RenderToStringAsync(string viewName, object model); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /ant.mgr/Infrastructure/Infrastructure/Web/HtmlParse.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using DotLiquid.Tags; 7 | using HtmlAgilityPack; 8 | 9 | namespace Infrastructure.Web 10 | { 11 | public static class HtmlParse 12 | { 13 | /// 14 | /// 解析Html 获取 指定name的attribute 和对应的 value 15 | /// 16 | /// 17 | /// 18 | /// 19 | /// 默认找input 20 | /// 21 | public static Dictionary GetValueAndNameByClass(this string body,string name,string value,string className) 22 | { 23 | var result = new Dictionary(); 24 | if (string.IsNullOrEmpty(body)) 25 | { 26 | return result; 27 | } 28 | var htmlDoc = new HtmlDocument(); 29 | htmlDoc.LoadHtml(body); 30 | 31 | var htmlBody = htmlDoc.DocumentNode.SelectNodes($"//*[contains(@class,'{className}')]"); 32 | if (htmlBody == null) return result; 33 | foreach (var item in htmlBody) 34 | { 35 | var namevalueDefault = item.Attributes.FirstOrDefault(r => r.Name.Equals(name)); 36 | if (namevalueDefault != null) 37 | { 38 | var valueDefault = item.Attributes.FirstOrDefault(r => r.Name.Equals(value)); 39 | if (valueDefault != null) 40 | { 41 | if (result.ContainsKey(namevalueDefault.Value)) 42 | { 43 | result[namevalueDefault.Value] = valueDefault.Value; 44 | } 45 | else 46 | { 47 | result.Add(namevalueDefault.Value, valueDefault.Value); 48 | } 49 | } 50 | } 51 | } 52 | return result; 53 | } 54 | 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /ant.mgr/Infrastructure/Infrastructure/Web/HttpContext.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using Autofac; 5 | using Microsoft.AspNetCore.Http; 6 | 7 | namespace Infrastructure.Web 8 | { 9 | public static class HttpContext 10 | { 11 | public static ILifetimeScope ServiceProvider; 12 | public static Microsoft.AspNetCore.Http.HttpContext Current 13 | { 14 | get 15 | { 16 | IHttpContextAccessor factory = ServiceProvider.Resolve(typeof(IHttpContextAccessor)) as IHttpContextAccessor; 17 | Microsoft.AspNetCore.Http.HttpContext context = factory?.HttpContext; 18 | return context; 19 | } 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /ant.mgr/Mapping/Mapping/IHaveCustomMappings.cs: -------------------------------------------------------------------------------- 1 | //----------------------------------------------------------------------- 2 | // 3 | // Copyright (C) Company. All Rights Reserved. 4 | // 5 | // nainaigu 6 | // 7 | //----------------------------------------------------------------------- 8 | 9 | using AutoMapper; 10 | 11 | namespace Mapping 12 | { 13 | public interface IHaveCustomMappings 14 | { 15 | void CreateMappings(IMapperConfigurationExpression configuration); 16 | } 17 | } -------------------------------------------------------------------------------- /ant.mgr/Mapping/Mapping/IMapFrom{T}.cs: -------------------------------------------------------------------------------- 1 | //----------------------------------------------------------------------- 2 | // 3 | // Copyright (C) Company. All Rights Reserved. 4 | // 5 | // nainaigu 6 | // 7 | //----------------------------------------------------------------------- 8 | namespace Mapping 9 | { 10 | public interface IMapFrom 11 | where T : class 12 | { 13 | } 14 | } -------------------------------------------------------------------------------- /ant.mgr/Mapping/Mapping/IMapTo{T}.cs: -------------------------------------------------------------------------------- 1 | //----------------------------------------------------------------------- 2 | // 3 | // Copyright (C) Company. All Rights Reserved. 4 | // 5 | // nainaigu 6 | // 7 | //----------------------------------------------------------------------- 8 | namespace Mapping 9 | { 10 | public interface IMapTo 11 | where T : class 12 | { 13 | } 14 | } -------------------------------------------------------------------------------- /ant.mgr/Mapping/Mapping/Mapping.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | net8.0 5 | 6 | 7 | 8 | 1701;1702;1591 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /ant.mgr/Mapping/Mapping/QueryableExtensions.cs: -------------------------------------------------------------------------------- 1 | using AutoMapper; 2 | using AutoMapper.QueryableExtensions; 3 | using System; 4 | using System.Collections.Generic; 5 | using System.Linq; 6 | using System.Linq.Expressions; 7 | using DbModel; 8 | 9 | namespace Mapping 10 | { 11 | public static class QueryableExtensions 12 | { 13 | public static IQueryable MappperTo(this IQueryable source, params Expression>[] membersToExpand) 14 | { 15 | return source.ProjectTo(AutoMapper.Configuration, membersToExpand); 16 | } 17 | 18 | public static List MappperList(this IEnumerable source) 19 | { 20 | return AutoMapper.Configuration.CreateMapper().Map, List>(source); 21 | } 22 | 23 | public static TDestination MappperTo(this LinqToDBEntity source) 24 | { 25 | return AutoMapper.Configuration.CreateMapper().Map(source); 26 | } 27 | 28 | public static TDestination MappperTo(this LinqToDBEntity source, Action options) 29 | { 30 | return AutoMapper.Configuration.CreateMapper().Map(source, options); 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /ant.mgr/Repository/Repository/AdminInterface/IAccountRespository.cs: -------------------------------------------------------------------------------- 1 | //----------------------------------------------------------------------- 2 | // 3 | // Copyright (C) Company. All Rights Reserved. 4 | // 5 | // nainaigu 6 | // 7 | //----------------------------------------------------------------------- 8 | 9 | using DbModel; 10 | using ServicesModel; 11 | using ViewModels.Reuqest; 12 | 13 | namespace Repository.Interface 14 | { 15 | using System; 16 | using System.Collections.Generic; 17 | using System.Linq; 18 | using System.Text; 19 | using System.Threading.Tasks; 20 | 21 | 22 | /// 23 | /// 系统用户 24 | /// 25 | public interface IAccountRespository : IRepository 26 | { 27 | /// 28 | /// 登录 29 | /// 30 | /// 31 | /// 32 | Task> LogOn(LogOnVM info); 33 | /// 34 | /// 获取用户列表 35 | /// 36 | /// 37 | /// 38 | /// 39 | Task>> GetUserList(AccountVm model,Token user); 40 | /// 41 | /// 给用户赋予角色 42 | /// 43 | /// 44 | /// 45 | Task> UserAddRole(UserAddRoleVm info); 46 | /// 47 | /// 禁用用户 48 | /// 49 | /// 50 | /// 51 | Task> UserDelete(long userTid); 52 | /// 53 | /// 更改用户的属性 54 | /// 55 | /// 56 | /// 57 | Task> ChangeField(ChangeFieldVm info); 58 | /// 59 | /// 手动添加用户 60 | /// 61 | /// 62 | /// 63 | /// 64 | Task> UserAdd(SystemUsers info,Token user); 65 | 66 | /// 67 | /// 获取系统用户信息 68 | /// 69 | /// 70 | /// 71 | Task GetUserInfo(Token user); 72 | 73 | /// 74 | /// 更新个人信息 75 | /// 76 | /// 77 | /// 78 | Task UpdateUserInfo(SystemUsers user); 79 | 80 | /// 81 | /// 更新密码 82 | /// 83 | /// 84 | /// 85 | Task UpdatePwd(UpdatePwdVm user); 86 | } 87 | } -------------------------------------------------------------------------------- /ant.mgr/Repository/Repository/AdminInterface/ICommonRespository.cs: -------------------------------------------------------------------------------- 1 | //----------------------------------------------------------------------- 2 | // 3 | // Copyright (C) Company. All Rights Reserved. 4 | // 5 | // nainaigu 6 | // 7 | //----------------------------------------------------------------------- 8 | 9 | using System; 10 | using System.Data; 11 | using System.IO; 12 | using System.Threading.Tasks; 13 | using DbModel; 14 | using ServicesModel; 15 | using ViewModels.Reuqest; 16 | 17 | namespace Repository.Interface 18 | { 19 | using System.Collections.Generic; 20 | 21 | 22 | /// 23 | /// 公共处理 24 | /// 25 | public interface ICommonRespository : IRepository 26 | { 27 | 28 | /// 29 | /// 查询sql 30 | /// 31 | /// 32 | /// 33 | /// 34 | DataTable SelectSqlExcute(string db,string sql); 35 | 36 | /// 37 | /// 执行sql 38 | /// 39 | /// 40 | /// 41 | /// 42 | Tuple SQLExcute(string db, string sql); 43 | 44 | /// 45 | /// 获取所有的Table和Columns 46 | /// 47 | /// 48 | string GetDbTablesAndColumns(string dbName); 49 | 50 | /// 51 | /// 获取所有的表 52 | /// 53 | /// 54 | List GetDbTables(); 55 | 56 | /// 57 | /// 获取表下面所有的字段 58 | /// 59 | /// 60 | /// 61 | /// 62 | List GetDbTablesColumns(string dbName,string tableName); 63 | 64 | /// 65 | /// 自动生成代码 66 | /// 67 | /// 68 | /// 69 | byte[] CodeGen(CodeGenVm model); 70 | 71 | /// 72 | /// 获取所有的db 73 | /// 74 | /// 75 | List GetDbs(); 76 | } 77 | } -------------------------------------------------------------------------------- /ant.mgr/Repository/Repository/AdminInterface/IMenuRespository.cs: -------------------------------------------------------------------------------- 1 | //----------------------------------------------------------------------- 2 | // 3 | // Copyright (C) Company. All Rights Reserved. 4 | // 5 | // nainaigu 6 | // 7 | //----------------------------------------------------------------------- 8 | 9 | using DbModel; 10 | using ServicesModel; 11 | using ViewModels.Reuqest; 12 | 13 | namespace Repository.Interface 14 | { 15 | using System.Collections.Generic; 16 | 17 | 18 | /// 19 | /// 菜单处理 20 | /// 21 | public interface IMenuRespository : IRepository 22 | { 23 | /// 24 | /// 禁用某菜单 25 | /// 26 | /// 27 | /// 28 | string DisableMenu(long menuTid); 29 | /// 30 | /// 加载menuTree 31 | /// 32 | /// 33 | /// 34 | SystemMenuSM GetCurrentMenu(long menuTid); 35 | /// 36 | /// 更新某个菜单的信息 37 | /// 38 | /// 39 | /// 40 | string UpdateMenu(AddMenuVm model); 41 | /// 42 | /// 新增Menu 43 | /// 44 | /// 45 | /// 46 | string AddMenu(AddMenuVm model); 47 | /// 48 | /// 获取子菜单 49 | /// 50 | /// 51 | /// 52 | List GetSubMenus(long menuTid); 53 | /// 54 | /// 获取所有父菜单 55 | /// 56 | /// 57 | List GetAllParentMenus(); 58 | /// 59 | /// 获取当前用户的所有的菜单 60 | /// 61 | /// 62 | /// 63 | /// 64 | /// 65 | List GetAllRightsMenus(string eid, string menuRights, bool isGod = false); 66 | /// 67 | /// 是否有对当前Url访问的权限 68 | /// 69 | /// 70 | /// 71 | /// 72 | long HaveMenuPermission(string currentUrl, string menuRights); 73 | /// 74 | /// 查看是否有操作权限 75 | /// 76 | /// 77 | /// 78 | /// 79 | /// 80 | /// 81 | bool HaveActionPermission(long menuTid, long roleTid, string controlname, string actionName); 82 | /// 83 | /// 加载menuTree 84 | /// 85 | /// 86 | /// 87 | /// 88 | /// 89 | List GetMenuTree(long roleId, Token userToken, long roleSencondeID = 0); 90 | } 91 | } -------------------------------------------------------------------------------- /ant.mgr/Repository/Repository/AdminInterface/IRoleRespository.cs: -------------------------------------------------------------------------------- 1 | //----------------------------------------------------------------------- 2 | // 3 | // Copyright (C) Company. All Rights Reserved. 4 | // 5 | // nainaigu 6 | // 7 | //----------------------------------------------------------------------- 8 | 9 | using DbModel; 10 | using ServicesModel; 11 | using ViewModels.Reuqest; 12 | 13 | namespace Repository.Interface 14 | { 15 | using System; 16 | using System.Collections.Generic; 17 | using System.Threading.Tasks; 18 | 19 | 20 | /// 21 | /// 角色权限管理 22 | /// 23 | public interface IRoleRespository : IRepository 24 | { 25 | /// 26 | /// 获取角色列表 27 | /// 28 | /// 29 | /// 30 | /// 31 | Task>> GetList(RoleVm model, Token eid); 32 | /// 33 | /// 新增Role 34 | /// 35 | /// 36 | /// 37 | /// 38 | Task UseTransactionAddRole(AddRoleVm role, Token uid); 39 | /// 40 | /// 获取所有的角色 41 | /// 42 | /// 43 | /// 44 | Task> GetAllRoleList(Token uid); 45 | /// 46 | /// 获取当前页面的action集合 47 | /// 48 | /// 49 | /// 50 | /// 51 | /// 52 | Task GetSystemUserActions(string eid, long RoleTid, long currentMenuTid); 53 | /// 54 | /// 页面与接口关联 55 | /// 56 | /// 57 | /// 58 | Task UseTransactionAddRoleActions(RoleAction model); 59 | /// 60 | /// 权限与接口关联配置 获取某一个菜单的某一个功能配置的接口列表 61 | /// 62 | /// 63 | /// 64 | Task> GetRoleActions(RoleAction model); 65 | /// 66 | /// 删除角色 67 | /// 68 | /// 69 | /// 70 | /// 71 | Task DeleteRole(long tid, Token user); 72 | } 73 | } -------------------------------------------------------------------------------- /ant.mgr/Repository/Repository/Interceptors/TransactionPointcut.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Transactions; 3 | using System.Threading.Tasks; 4 | using Autofac.Annotation; 5 | using NLog; 6 | 7 | 8 | namespace Repository.Interceptors 9 | { 10 | [AttributeUsage(AttributeTargets.Class|AttributeTargets.Method)] 11 | public class EnableTransactionScope:Attribute 12 | { 13 | public EnableTransactionScope() 14 | { 15 | 16 | } 17 | 18 | public EnableTransactionScope(int scopeTimeout) 19 | { 20 | this.ScopeTimeout = scopeTimeout; 21 | } 22 | 23 | public EnableTransactionScope(TransactionScopeOption scopeType) 24 | { 25 | this.TransactionScopeOption = scopeType; 26 | } 27 | 28 | public EnableTransactionScope(int scopeTimeout,TransactionScopeOption scopeType) 29 | { 30 | this.ScopeTimeout = scopeTimeout; 31 | this.TransactionScopeOption = scopeType; 32 | } 33 | 34 | /// 35 | /// 单位是秒 36 | /// 37 | public int ScopeTimeout { get; set; } 38 | 39 | /// 40 | /// 类型 41 | /// 默认类型为:Required 当外层有事物则用该事物 没有的话就创建 42 | /// RequiresNew 的话是不管外层有没有事物都会创建一个新事物 43 | /// Suppress 不参与任何事务 44 | /// 45 | public TransactionScopeOption TransactionScopeOption { get; set; } = TransactionScopeOption.Required; 46 | } 47 | 48 | /// 49 | /// 事物切面,所有是Respository结尾的容器对象的方法上打了EnableTransactionScope的会走进事物 开头的方法都会走进这个切面 50 | /// 51 | [Pointcut(Class = "*Respository",AttributeType = typeof(EnableTransactionScope))] 52 | public class TransactionPointcut 53 | { 54 | private static readonly Logger logger = LogManager.GetCurrentClassLogger(); 55 | 56 | 57 | /// 58 | /// 事物环绕拦截器 59 | /// 60 | /// 61 | [Around] 62 | public async Task RunWithTransaction(AspectContext aspectContext,AspectDelegate next, EnableTransactionScope option) 63 | { 64 | logger.Debug($"start transactionScope on `{aspectContext.TargetMethod.DeclaringType?.FullName + "." + aspectContext.TargetMethod.Name}`"); 65 | 66 | var timeOut = option.ScopeTimeout; 67 | if (timeOut < 1) 68 | { 69 | timeOut = 30 * 60;//默认设置半小时 70 | } 71 | using (var scope = new TransactionScope(option.TransactionScopeOption,TimeSpan.FromSeconds(timeOut), TransactionScopeAsyncFlowOption.Enabled)) 72 | { 73 | await next(aspectContext); 74 | 75 | if (Transaction.Current.TransactionInformation.Status == TransactionStatus.Active) 76 | { 77 | scope.Complete(); 78 | logger.Debug($"submit transactionScope on `{aspectContext.TargetMethod.DeclaringType?.FullName + "." + aspectContext.TargetMethod.Name}`"); 79 | } 80 | } 81 | } 82 | } 83 | } -------------------------------------------------------------------------------- /ant.mgr/Repository/Repository/Repository.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net8.0 5 | 6 | 7 | 8 | 1701;1702;1591 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | True 23 | True 24 | Tip.resx 25 | 26 | 27 | 28 | 29 | 30 | PublicResXFileCodeGenerator 31 | Tip.Designer.cs 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /ant.mgr/ServicesModel/ServicesModel/Admin/ActionSM.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace ServicesModel 8 | { 9 | public class MenuActionSM 10 | { 11 | public long MenuTid { get; set; } 12 | 13 | public List ActionList { get; set; } 14 | } 15 | 16 | public class ActionSM 17 | { 18 | public long MenuId { get; set; } 19 | public string ActionId { get; set; } 20 | 21 | public string ActionName { get; set; } 22 | } 23 | 24 | public class SystemAction 25 | { 26 | public bool IsGod { get; set; } 27 | 28 | public List ActionList { get; set; } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /ant.mgr/ServicesModel/ServicesModel/Admin/CommonSM.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace ServicesModel 8 | { 9 | 10 | public class UploadImageResult 11 | { 12 | 13 | public string Md5 { get; set; } 14 | public string Src { get; set; } 15 | public string Err { get; set; } 16 | public string FileName { get; set; } 17 | } 18 | 19 | public class DbTablesAndColumnsSM 20 | { 21 | public DbTablesAndColumnsSM() 22 | { 23 | type = "table"; 24 | } 25 | public string type { get; set; } 26 | public List columns { get; set; } 27 | public List data { get; set; } 28 | } 29 | 30 | public class DynamicColumn 31 | { 32 | public DynamicColumn(string c) 33 | { 34 | this.title = c; 35 | } 36 | public string title { get; set; } 37 | 38 | } 39 | 40 | 41 | public class CodeGenTable 42 | { 43 | public string DbName { get; set; } 44 | /// 45 | /// class的名称 46 | /// 47 | public string Name { get; set; } 48 | public string TableName { get; set; } 49 | public string Comment { get; set; } 50 | } 51 | public class CodeGenField 52 | { 53 | /// 54 | /// Class的字段名称 55 | /// 56 | public string Name { get; set; } 57 | public bool IsPrimary { get; set; } 58 | public bool Identity { get; set; } 59 | /// 60 | /// 表的字段名称 61 | /// 62 | public string FieldName { get; set; } 63 | /// 64 | /// 备注 65 | /// 66 | public string Comment { get; set; } 67 | public string TableName { get; set; } 68 | public long Length { get; set; } 69 | } 70 | 71 | 72 | } 73 | -------------------------------------------------------------------------------- /ant.mgr/ServicesModel/ServicesModel/Admin/SystemMenuSM.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using DbModel; 6 | using Mapping; 7 | using Newtonsoft.Json; 8 | 9 | namespace ServicesModel 10 | { 11 | public class SystemMenuSM:IMapFrom 12 | { 13 | public SystemMenuSM() 14 | { 15 | ChildMunuList = new List(); 16 | } 17 | 18 | public long Tid { get; set; } 19 | 20 | [JsonProperty("name")] 21 | public string Name { get; set; } 22 | 23 | [JsonProperty("id")] 24 | public string IdExtend { 25 | get 26 | { 27 | if (Tid < 1) 28 | { 29 | return ActionId; 30 | } 31 | else 32 | { 33 | return Tid.ToString(); 34 | } 35 | } 36 | } 37 | public string ActionId { get; set; } 38 | //public string NameAttribute { 39 | // get { return " " + Name + ""; } 40 | //} 41 | public string Ico { get; set; } 42 | 43 | public string Url { get; set; } 44 | 45 | public int? OrderRule { get; set; } 46 | 47 | public int? Level { get; set; } 48 | 49 | 50 | public long ParentTid { get; set; } 51 | 52 | public string Class { get; set; } 53 | public bool IsActive { get; set; } 54 | 55 | [JsonProperty("nodes")] 56 | public List ChildMunuList { get; set; } 57 | 58 | [JsonProperty("children")] 59 | public List ChildMunuList2 { 60 | get { return this.ChildMunuList; } 61 | } 62 | 63 | [JsonProperty("checked")] 64 | public bool HasMenu { get; set; } 65 | 66 | 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /ant.mgr/ServicesModel/ServicesModel/Admin/Token.cs: -------------------------------------------------------------------------------- 1 | //----------------------------------------------------------------------- 2 | // 3 | // Copyright (C) Company. All Rights Reserved. 4 | // 5 | // nainaigu 6 | // 7 | //----------------------------------------------------------------------- 8 | 9 | 10 | namespace ServicesModel 11 | { 12 | using System; 13 | using System.Collections.Generic; 14 | using System.Linq; 15 | using System.Text; 16 | using System.Threading.Tasks; 17 | 18 | 19 | 20 | public class Token 21 | { 22 | /// 23 | /// 姓名 24 | /// 25 | public string Code { get; set; } 26 | 27 | /// 28 | /// 登录Id 29 | /// 30 | public string Eid { get; set; } 31 | 32 | public string MenuRights { get; set; } 33 | 34 | public string ToJsonString() 35 | { 36 | return Newtonsoft.Json.JsonConvert.SerializeObject(this); 37 | } 38 | 39 | public long RoleTid { get; set; } 40 | 41 | public string RoleName { get; set; } 42 | public Token() 43 | { 44 | 45 | } 46 | public Token(string cookie) 47 | { 48 | var token = Newtonsoft.Json.JsonConvert.DeserializeObject(cookie); 49 | if (token == null) 50 | { 51 | throw new Exception("token invaild"); 52 | } 53 | this.Eid = token.Eid; 54 | this.MenuRights = token.MenuRights; 55 | this.Code = token.Code; 56 | this.RoleTid = token.RoleTid; 57 | this.RoleName = token.RoleName; 58 | } 59 | } 60 | } -------------------------------------------------------------------------------- /ant.mgr/ServicesModel/ServicesModel/Admin/UserSM.cs: -------------------------------------------------------------------------------- 1 | using DbModel; 2 | 3 | namespace ServicesModel 4 | { 5 | public class UserSM : SystemUsers 6 | { 7 | public string RoleName { get; set; } 8 | 9 | public string RoleDesc { get; set; } 10 | 11 | } 12 | 13 | 14 | 15 | } 16 | -------------------------------------------------------------------------------- /ant.mgr/ServicesModel/ServicesModel/ServicesModel.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net8.0 5 | true 6 | 7 | 8 | 9 | 1701;1702;1591 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /ant.mgr/ViewModels/ViewModels/Admin/AccountVm.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | 6 | namespace ViewModels.Reuqest 7 | { 8 | public class LogOnVM 9 | { 10 | 11 | /// 12 | /// 登录名称 13 | /// 14 | public string eid { get; set; } 15 | 16 | /// 17 | /// 密码 18 | /// 19 | public string pwd { get; set; } 20 | 21 | 22 | } 23 | 24 | public class UserAddRoleVm 25 | { 26 | /// 27 | /// 用户Tid 28 | /// 29 | public long UserTid { get; set; } 30 | 31 | /// 32 | /// 角色Tid 33 | /// 34 | public long RoleTid { get; set; } 35 | 36 | } 37 | 38 | public class ChangeFieldVm 39 | { 40 | /// 41 | /// 主键 42 | /// 43 | public long Tid { get; set; } 44 | 45 | /// 46 | /// 字段 47 | /// 48 | public string Field { get; set; } 49 | /// 50 | /// 值 51 | /// 52 | public string Value { get; set; } 53 | 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /ant.mgr/ViewModels/ViewModels/Admin/AddMenuVm.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | 6 | namespace ViewModels.Reuqest 7 | { 8 | public class AddMenuVm 9 | { 10 | /// 11 | /// 父节点Tid 12 | /// 13 | public long ParentTid { get; set; } 14 | 15 | /// 16 | /// 名称 17 | /// 18 | public string Name { get; set; } 19 | 20 | /// 21 | /// URL 22 | /// 23 | public string Url { get; set; } 24 | 25 | /// 26 | /// 排序 27 | /// 28 | public int OrderRule { get; set; } 29 | 30 | /// 31 | /// 样式 32 | /// 33 | public string Class { get; set; } 34 | 35 | /// 36 | /// 是否要在页面上显示该菜单 37 | /// 38 | public bool IsActive { get; set; } 39 | 40 | /// 41 | /// 主键 42 | /// 43 | public long Tid { get; set; } 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /ant.mgr/ViewModels/ViewModels/Admin/CommonVm.cs: -------------------------------------------------------------------------------- 1 | using Infrastructure.StaticExt; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using ViewModels.Condition; 6 | 7 | namespace ViewModels.Reuqest 8 | { 9 | 10 | 11 | 12 | public class CodeGenVm 13 | { 14 | /// 15 | /// 表名称 16 | /// 17 | public string TableName { get; set; } 18 | 19 | /// 20 | /// 字段列表 21 | /// 22 | public List Columns 23 | { 24 | get 25 | { 26 | if (string.IsNullOrEmpty(ColumnStr)) 27 | { 28 | return new List(); 29 | } 30 | return ColumnStr.Split(',').ToList(); 31 | } 32 | } 33 | 34 | /// 35 | /// 字段名称列表多个逗号隔开 36 | /// 37 | public string ColumnStr { get; set; } 38 | } 39 | 40 | 41 | 42 | 43 | } 44 | -------------------------------------------------------------------------------- /ant.mgr/ViewModels/ViewModels/Admin/Reuqest.cs: -------------------------------------------------------------------------------- 1 | //----------------------------------------------------------------------- 2 | // 3 | // Copyright (C) Company. All Rights Reserved. 4 | // 5 | // nainaigu 6 | // 7 | //----------------------------------------------------------------------- 8 | 9 | using System.ComponentModel; 10 | 11 | namespace ViewModels.Reuqest 12 | { 13 | using System; 14 | using System.Collections.Generic; 15 | using System.Linq; 16 | using System.Text; 17 | using System.Threading.Tasks; 18 | 19 | 20 | /// 21 | /// 适用于 WebAPI的请求包装 22 | /// 23 | public class ReuqestBase 24 | { 25 | public ReuqestBase() 26 | { 27 | // this.Token = string.Empty; 28 | 29 | } 30 | // public string Token { get; set; } 31 | } 32 | 33 | 34 | public class RequestInfo : ReuqestBase 35 | { 36 | public RequestInfo() 37 | { 38 | this.Data = default(T); 39 | } 40 | 41 | [Description("请求参数对象")] 42 | public T Data { get; set; } 43 | } 44 | } -------------------------------------------------------------------------------- /ant.mgr/ViewModels/ViewModels/Admin/RoleVm.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using ViewModels.Condition; 7 | 8 | namespace ViewModels.Reuqest 9 | { 10 | public class RoleAction 11 | { 12 | public long MenuId { get; set; } 13 | public string ActionId { get; set; } 14 | 15 | public List ActionList { get; set; } 16 | 17 | } 18 | 19 | 20 | 21 | public class RoleVm : ConditionBase 22 | { 23 | 24 | public string RoleName { get; set; } 25 | public string CreateUser { get; set; } 26 | 27 | 28 | } 29 | 30 | 31 | public class AddRoleVm 32 | { 33 | public long Tid { get; set; } 34 | public string RoleName { get; set; } 35 | 36 | public string RoleDesc { get; set; } 37 | public List Ids { get; set; } 38 | 39 | 40 | public List Actions { get; set; } 41 | } 42 | 43 | public class ActionVm 44 | { 45 | public long MenuId { get; set; } 46 | public string ActionId { get; set; } 47 | 48 | public string ActionName { get; set; } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /ant.mgr/ViewModels/ViewModels/Admin/UserVm.cs: -------------------------------------------------------------------------------- 1 | using ViewModels.Condition; 2 | 3 | namespace ViewModels.Reuqest 4 | { 5 | 6 | public class AccountVm : ConditionBase 7 | { 8 | /// 9 | /// 姓名 10 | /// 11 | public string UserName { get; set; } 12 | 13 | /// 14 | /// Eid 15 | /// 16 | public string Eid { get; set; } 17 | 18 | /// 19 | /// 角色TId 20 | /// 21 | public long RoleTid { get; set; } 22 | 23 | } 24 | 25 | 26 | 27 | public class UserVm : ConditionBase 28 | { 29 | /// 30 | /// 邮箱 31 | /// 32 | public string Email { get; set; } 33 | 34 | /// 35 | /// 手机号 36 | /// 37 | public string Phone { get; set; } 38 | 39 | } 40 | 41 | 42 | public class UpdatePwdVm 43 | { 44 | public string Eid { get; set; } 45 | public string OldPwd { get; set; } 46 | public string Pwd { get; set; } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /ant.mgr/ViewModels/ViewModels/Condition/ConditionBase.cs: -------------------------------------------------------------------------------- 1 | //----------------------------------------------------------------------- 2 | // 3 | // Copyright (C) Company. All Rights Reserved. 4 | // 5 | // nainaigu 6 | // 7 | //----------------------------------------------------------------------- 8 | 9 | 10 | using System.ComponentModel; 11 | 12 | namespace ViewModels.Condition 13 | { 14 | using System; 15 | using System.Collections.Generic; 16 | using System.Linq; 17 | using System.Text; 18 | using System.Threading.Tasks; 19 | 20 | 21 | /// 22 | /// 分页查询 23 | /// 24 | public class ConditionBase 25 | { 26 | private int pageSize; 27 | 28 | /// 29 | /// 条数,默认10 30 | /// 31 | [Description("条数,默认10")] 32 | public int PageSize 33 | { 34 | get { return pageSize <= 0 ? 10 : pageSize; } 35 | set { pageSize = value; } 36 | } 37 | 38 | private int pageIndex ; 39 | 40 | /// 41 | /// 页数,默认1 42 | /// 43 | [Description("页数,默认1")] 44 | public int PageIndex 45 | { 46 | get { return pageIndex <= 0 ?1 : pageIndex; } 47 | set { pageIndex = value; } 48 | } 49 | 50 | private string orderBy; 51 | 52 | /// 53 | /// 排序字段 54 | /// 55 | [Description("排序字段")] 56 | public string OrderBy 57 | { 58 | get { return orderBy; } 59 | set { orderBy = value; } 60 | } 61 | 62 | private string orderSequence; 63 | 64 | /// 65 | /// asc | desc 66 | /// 67 | [Description("asc | desc")] 68 | public string OrderSequence 69 | { 70 | get { return string.IsNullOrEmpty(orderSequence)?"asc": orderSequence; } 71 | set { orderSequence = value; } 72 | } 73 | } 74 | } -------------------------------------------------------------------------------- /ant.mgr/ViewModels/ViewModels/Condition/SearchConditionInfo.cs: -------------------------------------------------------------------------------- 1 | //----------------------------------------------------------------------- 2 | // 3 | // Copyright (C) Company. All Rights Reserved. 4 | // 5 | // nainaigu 6 | // 7 | //----------------------------------------------------------------------- 8 | namespace ViewModels.Condition 9 | { 10 | using System; 11 | using System.Collections.Generic; 12 | using System.Linq; 13 | using System.Text; 14 | using System.Threading.Tasks; 15 | 16 | 17 | /// 18 | /// 查询 适用于分页查询 直接包装成对象ConditionModel 19 | /// 20 | public class SearchConditionInfo : ConditionBase 21 | { 22 | private T conditionModel; 23 | 24 | public T ConditionModel 25 | { 26 | get { return conditionModel; } 27 | set { conditionModel = value; } 28 | } 29 | } 30 | } -------------------------------------------------------------------------------- /ant.mgr/ViewModels/ViewModels/Result/ResultConfig.cs: -------------------------------------------------------------------------------- 1 | //----------------------------------------------------------------------- 2 | // 3 | // Copyright (C) Company. All Rights Reserved. 4 | // 5 | // nainaigu 6 | // 7 | //----------------------------------------------------------------------- 8 | namespace Configuration 9 | { 10 | using System; 11 | using System.Collections.Generic; 12 | using System.Linq; 13 | using System.Text; 14 | using System.Threading.Tasks; 15 | 16 | 17 | public class ResultConfig 18 | { 19 | /// 20 | /// 执行成功返回值("1") 21 | /// 22 | public static int Ok = 1; 23 | /// 24 | /// 执行成功返回值提示("成功") 25 | /// 26 | public static string SuccessfulMessage = "操作成功!"; 27 | 28 | 29 | /// 30 | /// 执行失败返回值("0") 31 | /// 32 | public static int Fail = 0; 33 | /// 34 | /// 执行失败返回值提示(失败) 35 | /// 36 | public static string FailMessage = "操作失败!"; 37 | 38 | /// 39 | /// 40 | /// 41 | public static int NoPower =2; 42 | /// 43 | /// 44 | /// 45 | public static string FailMessageForNoPower = "没有权限,操作失败!"; 46 | 47 | 48 | public static string FailMessageForSystem = "系统出错,操作失败!"; 49 | 50 | public static string FailMessageForNotFound = "系统出错,404-NotFound!"; 51 | } 52 | } -------------------------------------------------------------------------------- /ant.mgr/ViewModels/ViewModels/Result/ResultJsonBase.cs: -------------------------------------------------------------------------------- 1 | //----------------------------------------------------------------------- 2 | // 3 | // Copyright (C) Company. All Rights Reserved. 4 | // 5 | // nainaigu 6 | // 7 | //----------------------------------------------------------------------- 8 | 9 | using System.ComponentModel; 10 | 11 | namespace ViewModels.Result 12 | { 13 | using System; 14 | using System.Collections.Generic; 15 | using System.Linq; 16 | using System.Text; 17 | using System.Threading.Tasks; 18 | 19 | 20 | /// 21 | /// ResultJsonBase 22 | /// 23 | public class ResultJsonBase 24 | { 25 | 26 | public ResultJsonBase() 27 | { 28 | 29 | } 30 | 31 | #region field 32 | 33 | private int status; 34 | private string info; 35 | 36 | #endregion 37 | 38 | #region property 39 | 40 | /// 41 | /// 状态 42 | /// 43 | [Description("状态(0:失败 1:成功)")] 44 | public int Status 45 | { 46 | get { return status; } 47 | set { status = value; } 48 | } 49 | 50 | /// 51 | /// 提示信息 52 | /// 53 | [Description("提示信息")] 54 | public string Info 55 | { 56 | get { return info; } 57 | set { info = value; } 58 | } 59 | 60 | #endregion 61 | } 62 | } -------------------------------------------------------------------------------- /ant.mgr/ViewModels/ViewModels/Result/ResultJsonInfo.cs: -------------------------------------------------------------------------------- 1 | //----------------------------------------------------------------------- 2 | // 3 | // Copyright (C) Company. All Rights Reserved. 4 | // 5 | // nainaigu 6 | // 7 | //----------------------------------------------------------------------- 8 | 9 | using System.ComponentModel; 10 | 11 | namespace ViewModels.Result 12 | { 13 | using System; 14 | using System.Collections.Generic; 15 | using System.Linq; 16 | using System.Text; 17 | using System.Threading.Tasks; 18 | 19 | 20 | /// 21 | /// API返回的Json模型(用于Select等需要返回数据集的场景) 22 | /// 23 | public class ResultJsonInfo : ResultJsonBase 24 | { 25 | public ResultJsonInfo() 26 | { 27 | 28 | } 29 | 30 | #region field 31 | 32 | private T data; 33 | 34 | #endregion 35 | 36 | #region property 37 | 38 | /// 39 | /// 返回数据 40 | /// 41 | [Description("返回数据")] 42 | public T Data 43 | { 44 | get { return data; } 45 | set { data = value; } 46 | } 47 | 48 | #endregion 49 | } 50 | } -------------------------------------------------------------------------------- /ant.mgr/ViewModels/ViewModels/Result/ResultJsonNoDataInfo.cs: -------------------------------------------------------------------------------- 1 | //----------------------------------------------------------------------- 2 | // 3 | // Copyright (C) Company. All Rights Reserved. 4 | // 5 | // nainaigu 6 | // 7 | //----------------------------------------------------------------------- 8 | namespace ViewModels.Result 9 | { 10 | using System; 11 | using System.Collections.Generic; 12 | using System.Linq; 13 | using System.Text; 14 | using System.Threading.Tasks; 15 | 16 | 17 | /// 18 | ///API返回的Json模型(用于Insert、Update、Delete等不需要返回数据集的场景) 19 | /// 20 | public class ResultJsonNoDataInfo : ResultJsonBase 21 | { 22 | public ResultJsonNoDataInfo() 23 | { 24 | 25 | } 26 | 27 | //#region field 28 | 29 | //private string guid; 30 | 31 | //#endregion 32 | 33 | //#region property 34 | 35 | ///// 36 | ///// 返回被操作记录的Guid 37 | ///// 38 | //public string Guid 39 | //{ 40 | // get { return guid; } 41 | // set { guid = value; } 42 | //} 43 | 44 | //#endregion 45 | } 46 | } -------------------------------------------------------------------------------- /ant.mgr/ViewModels/ViewModels/Result/SearchResult.cs: -------------------------------------------------------------------------------- 1 | //----------------------------------------------------------------------- 2 | // 3 | // Copyright (C) Company. All Rights Reserved. 4 | // 5 | // nainaigu 6 | // 7 | //----------------------------------------------------------------------- 8 | 9 | using System.ComponentModel; 10 | 11 | namespace ViewModels.Result 12 | { 13 | using System; 14 | using System.Collections.Generic; 15 | using System.Linq; 16 | using System.Text; 17 | using System.Threading.Tasks; 18 | 19 | 20 | /// 21 | /// 搜索结果 22 | /// 23 | public class SearchResult : Result.ResultJsonBase 24 | { 25 | 26 | 27 | 28 | #region property 29 | 30 | #region 分页信息 31 | 32 | 33 | /// 34 | /// 总记录数 35 | /// 36 | [Description("总记录数")] 37 | public long Total { get; set; } 38 | 39 | /// 40 | /// 总记录数 41 | /// 42 | [Description("总记录数")] 43 | public T Rows{get; set; } 44 | 45 | #endregion 46 | 47 | #endregion 48 | } 49 | } -------------------------------------------------------------------------------- /ant.mgr/ViewModels/ViewModels/Result/SearchResultDic.cs: -------------------------------------------------------------------------------- 1 | //----------------------------------------------------------------------- 2 | // 3 | // Copyright (C) Company. All Rights Reserved. 4 | // 5 | // nainaigu 6 | // 7 | //----------------------------------------------------------------------- 8 | namespace ViewModels.Result 9 | { 10 | using System; 11 | using System.Collections.Generic; 12 | using System.Linq; 13 | using System.Text; 14 | using System.Threading.Tasks; 15 | 16 | 17 | /// 18 | /// 返回结果有额外的信息 19 | /// 20 | public class SearchResultDic : Result.ResultJsonInfo 21 | { 22 | public SearchResultDic() 23 | { 24 | this.PageCount = 0; 25 | this.RecordCount = 0; 26 | this.ResultDic = new Dictionary(); 27 | } 28 | 29 | 30 | /// 31 | /// 总页数 32 | /// 33 | public long PageCount { get; set; } 34 | 35 | /// 36 | /// 总记录数 37 | /// 38 | public long RecordCount { get; set; } 39 | 40 | public Dictionary ResultDic; 41 | 42 | } 43 | } -------------------------------------------------------------------------------- /ant.mgr/ViewModels/ViewModels/ViewModels.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net8.0 5 | true 6 | 7 | 8 | 9 | 1701;1702;1591 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /ant.mgr/mgr.core/App_Start/MVCFile.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using Microsoft.AspNetCore.Http; 6 | 7 | namespace ant.mgr.core 8 | { 9 | public class MVCFile 10 | { 11 | public List Files { get; private set; } = new List(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /ant.mgr/mgr.core/App_Start/ViewRenderService.cs: -------------------------------------------------------------------------------- 1 | using Infrastructure.Logging; 2 | using Infrastructure.View; 3 | using Microsoft.AspNetCore.Http; 4 | using Microsoft.AspNetCore.Mvc; 5 | using Microsoft.AspNetCore.Mvc.Abstractions; 6 | using Microsoft.AspNetCore.Mvc.ModelBinding; 7 | using Microsoft.AspNetCore.Mvc.Razor; 8 | using Microsoft.AspNetCore.Mvc.Rendering; 9 | using Microsoft.AspNetCore.Mvc.ViewEngines; 10 | using Microsoft.AspNetCore.Mvc.ViewFeatures; 11 | using Microsoft.AspNetCore.Routing; 12 | using System; 13 | using System.IO; 14 | using System.Threading.Tasks; 15 | 16 | namespace ant.mgr.core 17 | { 18 | public class ViewRenderService : IViewRenderService 19 | { 20 | private readonly IRazorViewEngine _razorViewEngine; 21 | private readonly ITempDataProvider _tempDataProvider; 22 | private readonly IServiceProvider _serviceProvider; 23 | public ViewRenderService(IRazorViewEngine razorViewEngine, 24 | ITempDataProvider tempDataProvider, 25 | IServiceProvider serviceProvider) 26 | { 27 | _razorViewEngine = razorViewEngine; 28 | _tempDataProvider = tempDataProvider; 29 | _serviceProvider = serviceProvider; 30 | } 31 | 32 | public async Task RenderToStringAsync(string viewName, object model) 33 | { 34 | try 35 | { 36 | var httpContext = new DefaultHttpContext { RequestServices = _serviceProvider }; 37 | var actionContext = new ActionContext(httpContext, new RouteData(), new ActionDescriptor()); 38 | 39 | using (var sw = new StringWriter()) 40 | { 41 | IView view = null; 42 | var getViewResult = _razorViewEngine.GetView(executingFilePath: "~/", viewPath: "~/"+viewName + ".cshtml", isMainPage: true); 43 | if (getViewResult.Success) 44 | { 45 | view = getViewResult.View; 46 | } 47 | 48 | if (view == null) 49 | { 50 | var viewResult = _razorViewEngine.FindView(actionContext, viewName, true); 51 | view = viewResult?.View; 52 | } 53 | 54 | if (view == null) 55 | { 56 | var arr = viewName.Split('/'); 57 | if (arr.Length == 3) 58 | { 59 | var routeData = new RouteData(); 60 | routeData.Values["area"] = arr[0]; 61 | routeData.Values["controller"] = arr[1]; 62 | var routeDesc = new ActionDescriptor(); 63 | routeDesc.RouteValues["area"] = arr[0]; 64 | routeDesc.RouteValues["controller"] = arr[1]; 65 | actionContext = new ActionContext(httpContext, routeData, routeDesc); 66 | var viewResult = _razorViewEngine.FindView(actionContext, arr[2], true); 67 | view = viewResult?.View; 68 | } 69 | 70 | } 71 | 72 | if (view == null) 73 | { 74 | LogHelper.Warn("ViewRenderService", "没有找到对应的view:" + viewName); 75 | return string.Empty; 76 | } 77 | 78 | var viewDictionary = new ViewDataDictionary(new EmptyModelMetadataProvider(), new ModelStateDictionary()) 79 | { 80 | Model = model 81 | }; 82 | 83 | var viewContext = new ViewContext( 84 | actionContext, 85 | view, 86 | viewDictionary, 87 | new TempDataDictionary(actionContext.HttpContext, _tempDataProvider), 88 | sw, 89 | new HtmlHelperOptions() 90 | ); 91 | 92 | await view.RenderAsync(viewContext); 93 | return sw.ToString(); 94 | } 95 | } 96 | catch (Exception ex) 97 | { 98 | LogHelper.Warn("ViewRenderService", "找view出错了:" + viewName, ex); 99 | return string.Empty; 100 | } 101 | } 102 | } 103 | } -------------------------------------------------------------------------------- /ant.mgr/mgr.core/Areas/Admin/Controllers/BaseController.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Cors; 2 | using ServicesModel; 3 | 4 | namespace ant.mgr.core.Areas.Admin.Controllers 5 | { 6 | /// 7 | /// 基础控制器 8 | /// 9 | [EnableCors("Any")]//统一设置Cors策略 10 | public class BaseController : Microsoft.AspNetCore.Mvc.Controller 11 | { 12 | /// 13 | /// 用户登录态 14 | /// 15 | public Token UserToken { get; set; } 16 | 17 | /// 18 | /// 当前菜单Tid 19 | /// 20 | public long CurrentMenuTid { get; set; } 21 | 22 | } 23 | 24 | } -------------------------------------------------------------------------------- /ant.mgr/mgr.core/Areas/Admin/Controllers/ErrorController.cs: -------------------------------------------------------------------------------- 1 | using Configuration; 2 | using Infrastructure.Web; 3 | using Microsoft.AspNetCore.Http; 4 | using Microsoft.AspNetCore.Mvc; 5 | using ViewModels.Result; 6 | 7 | namespace ant.mgr.core.Areas.Admin.Controllers 8 | { 9 | /// 10 | /// 错误 11 | /// 12 | [Area(nameof(Admin))] 13 | [Route("Admin/[controller]/[action]")] 14 | public class ErrorController : BaseController 15 | { 16 | 17 | public IHttpContextAccessor HttpContextAccessor { get; } 18 | 19 | public ErrorController(IHttpContextAccessor httpContextAccessor) 20 | { 21 | HttpContextAccessor = httpContextAccessor; 22 | } 23 | 24 | [Route("admin/error/404")] 25 | public ActionResult Http404() 26 | { 27 | if (HttpContextAccessor.HttpContext.Request.IsAjaxRequest()) 28 | { 29 | return Http405(); 30 | } 31 | return View(); 32 | } 33 | 34 | public ActionResult Http403(string userInfo) 35 | { 36 | ViewBag.userInfo = userInfo; 37 | return View(); 38 | } 39 | 40 | 41 | /// 42 | /// 未登录 43 | /// 44 | public ActionResult NoLogin() 45 | { 46 | return RedirectToAction("Login", "Account",new {area="Admin"}); 47 | } 48 | 49 | /// 50 | /// 没有权限 51 | /// 52 | /// ActionResult. 53 | [Route("admin/error/401")] 54 | public JsonResult Http401() 55 | { 56 | var result = new ResultJsonNoDataInfo(); 57 | result.Status = ResultConfig.Fail; 58 | result.Info = ResultConfig.FailMessageForNoPower; 59 | return Json(result); 60 | } 61 | 62 | /// 63 | /// 系统错误 64 | /// 65 | /// 66 | [Route("admin/error/500")] 67 | public JsonResult Http500(string exception =null) 68 | { 69 | var result = new ResultJsonNoDataInfo(); 70 | result.Status = ResultConfig.Fail; 71 | result.Info = ResultConfig.FailMessageForSystem + (exception!=null?$"【Exception:{exception}】":""); 72 | return Json(result); 73 | } 74 | 75 | public ActionResult Http405() 76 | { 77 | var result = new ResultJsonNoDataInfo(); 78 | result.Status = ResultConfig.Fail; 79 | result.Info = ResultConfig.FailMessageForNotFound; 80 | return Json(result); 81 | } 82 | } 83 | } -------------------------------------------------------------------------------- /ant.mgr/mgr.core/Areas/Admin/Filter/FileDownloadAttribute.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Microsoft.AspNetCore.Http; 3 | using Microsoft.AspNetCore.Mvc; 4 | using Microsoft.AspNetCore.Mvc.Filters; 5 | 6 | namespace ant.mgr.core.Filter 7 | { 8 | [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)] 9 | public class FileDownloadAttribute : BaseFilterAttribute 10 | { 11 | public FileDownloadAttribute(string cookieName = "fileDownload", string cookiePath = "/") 12 | { 13 | CookieName = cookieName; 14 | CookiePath = cookiePath; 15 | } 16 | 17 | public string CookieName { get; set; } 18 | 19 | public string CookiePath { get; set; } 20 | 21 | /// 22 | /// If the current response is a FileResult (an MVC base class for files) then write a 23 | /// cookie to inform jquery.fileDownload that a successful file download has occured 24 | /// 25 | /// 26 | private void CheckAndHandleFileResult(ActionExecutedContext filterContext) 27 | { 28 | var httpContext = filterContext.HttpContext; 29 | var response = httpContext.Response; 30 | 31 | if (filterContext.Result is FileResult) 32 | { 33 | var CookieOps = new CookieOptions 34 | { 35 | Path = CookiePath 36 | }; 37 | response.Cookies.Append(CookieName, "true", CookieOps); 38 | } 39 | else 40 | { 41 | if (httpContext.Request.Cookies[CookieName] != null) 42 | { 43 | var CookieOps = new CookieOptions 44 | { 45 | Path = CookiePath, 46 | Expires = DateTime.Now.AddYears(-1), 47 | }; 48 | response.Cookies.Append(CookieName, "true", CookieOps); 49 | } 50 | } 51 | } 52 | 53 | public override void OnActionExecuted(ActionExecutedContext filterContext) 54 | { 55 | CheckAndHandleFileResult(filterContext); 56 | 57 | base.OnActionExecuted(filterContext); 58 | } 59 | } 60 | } -------------------------------------------------------------------------------- /ant.mgr/mgr.core/Areas/Admin/Filter/GlobalExceptionFilter.cs: -------------------------------------------------------------------------------- 1 | using Configuration; 2 | using Infrastructure.Logging; 3 | using Infrastructure.Web; 4 | using Microsoft.AspNetCore.Http; 5 | using Microsoft.AspNetCore.Mvc; 6 | using Microsoft.AspNetCore.Mvc.Filters; 7 | using System; 8 | using System.Net; 9 | using Microsoft.AspNetCore.Routing; 10 | using ViewModels.Result; 11 | 12 | namespace ant.mgr.core.Filter 13 | { 14 | public class GlobalExceptionFilter : IExceptionFilter 15 | { 16 | public void OnException(ExceptionContext filterContext) 17 | { 18 | if (filterContext == null) 19 | { 20 | throw new ArgumentNullException(nameof(filterContext)); 21 | } 22 | 23 | if (filterContext.HttpContext.Request.IsAjaxRequest()) 24 | { 25 | HandleAjaxRequestException(filterContext); 26 | } 27 | else 28 | { 29 | var http403 = new RouteValueDictionary(new 30 | { 31 | area = "Admin", 32 | action = "Http500", 33 | controller = "error", 34 | exception = filterContext.Exception.Message 35 | }); 36 | filterContext.Result = new RedirectToRouteResult(http403); 37 | } 38 | } 39 | 40 | private void HandleAjaxRequestException(ExceptionContext filterContext) 41 | { 42 | if (filterContext.ExceptionHandled) 43 | { 44 | return; 45 | } 46 | var errorMsg = filterContext.Exception.InnerException != null 47 | ? filterContext.Exception.InnerException.Message 48 | : filterContext.Exception.Message; 49 | 50 | filterContext.Result = new JsonResult(new ResultJsonNoDataInfo() 51 | { 52 | Info = errorMsg, 53 | Status = ResultConfig.Fail 54 | }); 55 | filterContext.ExceptionHandled = true; 56 | filterContext.HttpContext.Response.Clear(); 57 | filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.OK; 58 | LogHelper.Warn(nameof(GlobalExceptionFilter.HandleAjaxRequestException), filterContext.Exception); 59 | } 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /ant.mgr/mgr.core/Areas/Admin/Filter/ModelBinderProvider.cs: -------------------------------------------------------------------------------- 1 | using Newtonsoft.Json.Serialization; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Dynamic; 5 | using System.IO; 6 | using System.Linq; 7 | using System.Threading.Tasks; 8 | using Microsoft.AspNetCore.Http; 9 | using Microsoft.AspNetCore.Mvc.ModelBinding; 10 | using Microsoft.AspNetCore.Mvc.ModelBinding.Binders; 11 | using Newtonsoft.Json; 12 | 13 | namespace ant.mgr.core.Filter 14 | { 15 | public class JsonNetBinder: IModelBinder 16 | { 17 | private readonly IHttpContextAccessor HttpContextAccessor; 18 | 19 | public JsonNetBinder(IHttpContextAccessor httpContextAccessor) 20 | { 21 | HttpContextAccessor = httpContextAccessor; 22 | } 23 | public Task BindModelAsync(ModelBindingContext bindingContext) 24 | { 25 | if (bindingContext == null) 26 | { 27 | throw new ArgumentNullException(nameof(bindingContext)); 28 | } 29 | 30 | var bodyText = HttpContextAccessor.HttpContext.Request.Form["__JsonRequest"].FirstOrDefault(); 31 | if (!string.IsNullOrEmpty(bodyText)) 32 | { 33 | var jsonData = JsonConvert.DeserializeObject(bodyText, bindingContext.ModelType, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }); 34 | bindingContext.Result = ModelBindingResult.Success(jsonData); 35 | } 36 | return Task.CompletedTask; 37 | } 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /ant.mgr/mgr.core/Areas/Admin/Views/Account/Login.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | ViewBag.Title = "登录"; 3 | Layout = "~/Views/Shared/_Layout.cshtml"; 4 | } 5 | 6 |
7 |
8 |
9 |

Ant

10 |
11 |

欢迎使用 Ant管理后台

12 | 13 |
14 |
15 | 16 |
17 |
18 | 19 |
20 | 21 | 22 | 23 |

24 | @*请确保使用windows账号登录!*@ 25 |

26 | 27 |
28 |
29 |
30 | 31 | @section Scripts 32 | { 33 | 99 | } -------------------------------------------------------------------------------- /ant.mgr/mgr.core/Areas/Admin/Views/Error/Http403.cshtml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 没有权限 7 | 62 | 63 | 64 |
65 | 66 |

403

67 |

68 | 啊哦,这个页面您暂时无权访问,请申请权限 69 |

70 |
71 | 72 | 73 | -------------------------------------------------------------------------------- /ant.mgr/mgr.core/Areas/Admin/Views/Error/Http404.cshtml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 请求地址没找到 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 |

404

21 |

页面未找到!

22 |
23 | 抱歉,页面好像去火星了~ 24 |
您可以返回主页看看 25 |
主页 26 |
27 |
28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /ant.mgr/mgr.core/Areas/Admin/Views/Error/Http4041.cshtml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 请求地址没找到 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 |

404

21 |

页面未找到!

22 |
23 | 抱歉,页面好像去火星了~ 24 |
您可以返回主页看看 25 |
主页 26 |
27 |
28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /ant.mgr/mgr.core/Areas/Admin/Views/Home/Index.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | Layout = "~/Views/Shared/_HomeLayout.cshtml"; 3 | } -------------------------------------------------------------------------------- /ant.mgr/mgr.core/Controllers/HomeController.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using Microsoft.AspNetCore.Mvc; 6 | 7 | namespace ant.mgr.core.Controllers 8 | { 9 | public class HomeController : ControllerBase 10 | { 11 | public IActionResult Index() 12 | { 13 | return RedirectToAction("Index", "Home", new { area = "Admin" }); 14 | } 15 | 16 | /// 17 | /// 首页 18 | /// 19 | /// 20 | 21 | public ActionResult DashBord() 22 | { 23 | return Content($"Ant后台快速开发框架 版本号:{ typeof(Startup).Assembly.GetName().Version.ToString()}"); 24 | } 25 | } 26 | } -------------------------------------------------------------------------------- /ant.mgr/mgr.core/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Autofac.Extensions.DependencyInjection; 3 | using Microsoft.AspNetCore; 4 | using Microsoft.AspNetCore.Hosting; 5 | using Microsoft.Extensions.Hosting; 6 | using Microsoft.Extensions.Logging; 7 | using NLog; 8 | using NLog.Web; 9 | 10 | namespace ant.mgr.core 11 | { 12 | public class Program 13 | { 14 | public static void Main(string[] args) 15 | { 16 | var logger = NLog.LogManager.Setup().LoadConfigurationFromAppSettings().GetCurrentClassLogger(); 17 | try 18 | { 19 | logger.Debug("init main"); 20 | CreateHostBuilder(args).Build().Run(); 21 | } 22 | catch (Exception ex) 23 | { 24 | //NLog: catch setup errors 25 | logger.Error(ex, "Stopped program because of exception"); 26 | throw; 27 | } 28 | finally 29 | { 30 | // Ensure to flush and stop internal timers/threads before application-exit (Avoid segmentation fault on Linux) 31 | NLog.LogManager.Shutdown(); 32 | } 33 | } 34 | public static IHostBuilder CreateHostBuilder(string[] args) => 35 | Host.CreateDefaultBuilder(args) 36 | .UseServiceProviderFactory(new AutofacServiceProviderFactory()) 37 | .ConfigureWebHostDefaults(webBuilder => 38 | { 39 | webBuilder.UseStartup() 40 | .ConfigureLogging(logging => 41 | { 42 | logging.ClearProviders(); 43 | #if DEBUG 44 | logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Debug); 45 | 46 | #else 47 | logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace); 48 | #endif 49 | }).UseNLog(); 50 | }); 51 | 52 | 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /ant.mgr/mgr.core/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "iisSettings": { 3 | "windowsAuthentication": false, 4 | "anonymousAuthentication": true, 5 | "iis": { 6 | "applicationUrl": "http://localhost/ant.mgr.core", 7 | "sslPort": 0 8 | }, 9 | "iisExpress": { 10 | "applicationUrl": "http://localhost:59694", 11 | "sslPort": 0 12 | } 13 | }, 14 | "profiles": { 15 | "console": { 16 | "commandName": "Project", 17 | "launchUrl": "http://localhost:5000", 18 | "environmentVariables": { 19 | "ASPNETCORE_ENVIRONMENT": "Development" 20 | }, 21 | "applicationUrl": "http://localhost:5000" 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /ant.mgr/mgr.core/Startup.cs: -------------------------------------------------------------------------------- 1 | using Autofac; 2 | using Autofac.Annotation; 3 | using Autofac.Extensions.DependencyInjection; 4 | using Infrastructure.View; 5 | using Microsoft.AspNetCore.Builder; 6 | using Microsoft.AspNetCore.Hosting; 7 | using Microsoft.AspNetCore.Mvc; 8 | using Microsoft.Extensions.Configuration; 9 | using Microsoft.Extensions.DependencyInjection; 10 | using Microsoft.Extensions.Logging; 11 | using Newtonsoft.Json.Serialization; 12 | using NLog.Extensions.Logging; 13 | using Repository; 14 | using System; 15 | using ant.mgr.core.Filter; 16 | using Infrastructure.Web; 17 | using Microsoft.Extensions.Hosting; 18 | 19 | namespace ant.mgr.core 20 | { 21 | public class Startup 22 | { 23 | public Startup(IConfiguration configuration) 24 | { 25 | Configuration = configuration; 26 | } 27 | 28 | public IConfiguration Configuration { get; } 29 | 30 | public ILifetimeScope AutofacContainer { get; private set; } 31 | 32 | public void ConfigureContainer(ContainerBuilder builder) 33 | { 34 | //autofac打标签模式 文档:https://github.com/yuzd/Autofac.Annotation 35 | builder.RegisterModule(new AutofacAnnotationModule( 36 | this.GetType().Assembly, 37 | typeof(BaseRepository<>).Assembly, 38 | typeof(HttpContext).Assembly) 39 | .SetDefaultAutofacScopeToInstancePerLifetimeScope()); 40 | 41 | } 42 | 43 | // This method gets called by the runtime. Use this method to add services to the container. 44 | public void ConfigureServices(IServiceCollection services) 45 | { 46 | services.AddCors(o => o.AddPolicy("Any", r => 47 | { 48 | r.AllowAnyOrigin() 49 | .AllowAnyMethod() 50 | .AllowAnyHeader(); 51 | })); 52 | 53 | services.AddControllersWithViews(op => op.Filters.Add()); 54 | services.AddRazorPages().AddNewtonsoftJson(options => 55 | options.SerializerSettings.ContractResolver = 56 | new DefaultContractResolver()); 57 | 58 | services.AddScoped(); 59 | 60 | services.AddHttpContextAccessor(); 61 | 62 | } 63 | 64 | // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. 65 | public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory logging) 66 | { 67 | #region AntORM 68 | //文档:https://github.com/yuzd/AntData.ORM 69 | app.UseAntData(); 70 | #endregion 71 | 72 | #region AutoMapperConfig 73 | var autoMapperConfig = new Mapping.AutoMapper(); 74 | autoMapperConfig.ExecuteByAssemblyName("DbModel", "ServicesModel"); 75 | #endregion 76 | 77 | app.UseStaticFiles(); 78 | 79 | app.UseStatusCodePagesWithReExecute("/admin/error/{0}"); 80 | 81 | app.UseRouting(); 82 | 83 | app.UseCors(); 84 | 85 | app.UseEndpoints(endpoints => 86 | { 87 | endpoints.MapControllers(); 88 | endpoints.MapRazorPages(); 89 | endpoints.MapAreaControllerRoute( 90 | name: "Admin", "Admin", 91 | pattern: "Admin/{controller=Home}/{action=Index}/{id?}"); 92 | endpoints.MapControllerRoute( 93 | name: "default", 94 | pattern: "{controller=Home}/{action=Index}/{id?}"); 95 | 96 | }); 97 | 98 | Infrastructure.Web.HttpContext.ServiceProvider = this.AutofacContainer = app.ApplicationServices.GetAutofacRoot(); 99 | } 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /ant.mgr/mgr.core/Views/Shared/Error.cshtml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 500 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 |

500

21 |

页面未找到!

22 |
23 | 服务器好像出错了... 24 |
您可以返回主页看看 25 |
主页 26 |
27 |
28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /ant.mgr/mgr.core/Views/Shared/NotSupport.cshtml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 500 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 |

500

21 |

页面暂不开放!

22 |
23 | 抱歉,您的权限暂时不能查看... 24 |
您可以返回主页看看 25 |
26 |
27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /ant.mgr/mgr.core/Views/Shared/_Loading.cshtml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ant.mgr/mgr.core/Views/_ViewImports.cshtml: -------------------------------------------------------------------------------- 1 | @using ant.mgr.core 2 | @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers 3 | -------------------------------------------------------------------------------- /ant.mgr/mgr.core/Web.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /ant.mgr/mgr.core/ant.mgr.core.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net8.0 5 | true 6 | 3.7 7 | 8 | 9 | 10 | 1701;1702;1591 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | Always 33 | 34 | 35 | Always 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /ant.mgr/mgr.core/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Debug", 5 | "System": "Information", 6 | "Microsoft": "Information" 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /ant.mgr/mgr.core/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "IncludeScopes": false, 4 | "LogLevel": { 5 | "Default": "Information" 6 | } 7 | }, 8 | "AllowedHosts": "*", 9 | "GoldList": "[zdyu]", 10 | "AntDbType": "antmgr_mysql", 11 | "dal": [ 12 | { 13 | "Provider": "mysql", 14 | "Name": "antmgr_mysql", 15 | "ConnectionItemList": [ 16 | { 17 | "Name": "antmgr_mysql", 18 | "ConnectionString": "Server=127.0.0.1;Port=3306;Database=antmgr;Uid=root;Pwd=123456;charset=utf8;SslMode=none", 19 | "DatabaseType": "Master" 20 | } 21 | ] 22 | }, 23 | { 24 | "Provider": "sqlserver", 25 | "Name": "antmgr_sqlserver", 26 | "ConnectionItemList": [ 27 | { 28 | "Name": "antmgr_sqlserver", 29 | "ConnectionString": "Server=.\\;Database=antmgr;Trusted_Connection=True;Enlist=False;", 30 | "DatabaseType": "Master" 31 | } 32 | ] 33 | } 34 | ] 35 | } 36 | -------------------------------------------------------------------------------- /ant.mgr/mgr.core/nlog.config: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 20 | 21 | 22 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/css/ace/chosen-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/css/ace/chosen-sprite.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/css/ace/chosen-sprite@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/css/ace/chosen-sprite@2x.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/css/fonts/ionicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/css/fonts/ionicons.ttf -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/css/fonts/ionicons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/css/fonts/ionicons.woff -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/css/loading.css: -------------------------------------------------------------------------------- 1 | 2 | 3 | .loading { 4 | position: fixed; 5 | top: 0; 6 | bottom: 0; 7 | right: 0; 8 | left: 0; 9 | z-index: 99999; 10 | background: rgba(216, 216, 216, 0.92); 11 | } 12 | .loading2 { 13 | position: fixed; 14 | top: 0; 15 | bottom: 0; 16 | right: 0; 17 | left: 0; 18 | z-index: 99999; 19 | background: rgba(216, 216, 216, 0.92); 20 | } 21 | .loading-spinner { 22 | margin: auto; 23 | width: 60px; 24 | height: 60px; 25 | position: absolute; 26 | top: 0; 27 | right: 0; 28 | left: 0; 29 | bottom: 0; 30 | } 31 | .container1 > div, .container2 > div, .container3 > div { 32 | width: 16px; 33 | height: 16px; 34 | background-color: #000000; 35 | border-radius: 100%; 36 | position: absolute; 37 | -webkit-animation: bouncedelay 1.2s infinite ease-in-out; 38 | animation: bouncedelay 1.2s infinite ease-in-out; 39 | -webkit-animation-fill-mode: both; 40 | animation-fill-mode: both; 41 | } 42 | .loading-spinner .spinner-container { 43 | position: absolute; 44 | width: 100%; 45 | height: 100%; 46 | } 47 | .container2 { 48 | -webkit-transform: rotateZ(45deg); 49 | transform: rotateZ(45deg); 50 | } 51 | .container3 { 52 | -webkit-transform: rotateZ(90deg); 53 | transform: rotateZ(90deg); 54 | } 55 | .circle1 { 56 | top: 0; 57 | left: 0; 58 | } 59 | .circle2 { 60 | top: 0; 61 | right: 0; 62 | } 63 | .circle3 { 64 | right: 0; 65 | bottom: 0; 66 | } 67 | .circle4 { 68 | left: 0; 69 | bottom: 0; 70 | } 71 | .container2 .circle1 { 72 | -webkit-animation-delay: -1.1s; 73 | animation-delay: -1.1s; 74 | } 75 | .container3 .circle1 { 76 | -webkit-animation-delay: -1.0s; 77 | animation-delay: -1.0s; 78 | } 79 | .container1 .circle2 { 80 | -webkit-animation-delay: -0.9s; 81 | animation-delay: -0.9s; 82 | } 83 | .container2 .circle2 { 84 | -webkit-animation-delay: -0.8s; 85 | animation-delay: -0.8s; 86 | } 87 | .container3 .circle2 { 88 | -webkit-animation-delay: -0.7s; 89 | animation-delay: -0.7s; 90 | } 91 | .container1 .circle3 { 92 | -webkit-animation-delay: -0.6s; 93 | animation-delay: -0.6s; 94 | } 95 | .container2 .circle3 { 96 | -webkit-animation-delay: -0.5s; 97 | animation-delay: -0.5s; 98 | } 99 | .container3 .circle3 { 100 | -webkit-animation-delay: -0.4s; 101 | animation-delay: -0.4s; 102 | } 103 | .container1 .circle4 { 104 | -webkit-animation-delay: -0.3s; 105 | animation-delay: -0.3s; 106 | } 107 | .container2 .circle4 { 108 | -webkit-animation-delay: -0.2s; 109 | animation-delay: -0.2s; 110 | } 111 | .container3 .circle4 { 112 | -webkit-animation-delay: -0.1s; 113 | animation-delay: -0.1s; 114 | } 115 | @-webkit-keyframes bouncedelay { 116 | 0%, 80%, 100% { 117 | -webkit-transform: scale(0.0); 118 | } 119 | 40% { 120 | -webkit-transform: scale(1.0); 121 | } 122 | } 123 | @keyframes bouncedelay { 124 | 0%, 80%, 100% { 125 | transform: scale(0.0); 126 | -webkit-transform: scale(0.0); 127 | } 128 | 40% { 129 | transform: scale(1.0); 130 | -webkit-transform: scale(1.0); 131 | } 132 | } -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/css/login.css: -------------------------------------------------------------------------------- 1 | html{height: 100%;} 2 | body.signin { 3 | background: #18c8f6; 4 | height: auto; 5 | background:url("../img/login-background.jpg") no-repeat center fixed; 6 | -webkit-background-size: cover; 7 | -moz-background-size: cover; 8 | -o-background-size: cover; 9 | background-size: cover; 10 | color: rgba(255,255,255,.95); 11 | } 12 | 13 | .signinpanel { 14 | width: 750px; 15 | margin: 10% auto 0 auto; 16 | } 17 | 18 | .signinpanel .logopanel { 19 | float: none; 20 | width: auto; 21 | padding: 0; 22 | background: none; 23 | } 24 | 25 | .signinpanel .signin-info ul { 26 | list-style: none; 27 | padding: 0; 28 | margin: 20px 0; 29 | } 30 | 31 | .signinpanel .form-control { 32 | display: block; 33 | margin-top: 15px; 34 | } 35 | 36 | .signinpanel .uname { 37 | background: #fff url(../img/user.png) no-repeat 95% center;color:#333; 38 | } 39 | 40 | .signinpanel .pword { 41 | background: #fff url(../img/locked.png) no-repeat 95% center;color:#333; 42 | } 43 | 44 | .signinpanel .btn { 45 | margin-top: 15px; 46 | } 47 | 48 | .signinpanel form { 49 | background: rgba(255, 255, 255, 0.2); 50 | border: 1px solid rgba(255,255,255,.3); 51 | -moz-box-shadow: 0 3px 0 rgba(12, 12, 12, 0.03); 52 | -webkit-box-shadow: 0 3px 0 rgba(12, 12, 12, 0.03); 53 | box-shadow: 0 3px 0 rgba(12, 12, 12, 0.03); 54 | -moz-border-radius: 3px; 55 | -webkit-border-radius: 3px; 56 | border-radius: 3px; 57 | padding: 30px; 58 | } 59 | 60 | .signup-footer{border-top: solid 1px rgba(255,255,255,.3);margin:20px 0;padding-top: 15px;} 61 | 62 | @media screen and (max-width: 768px) { 63 | .signinpanel, 64 | .signuppanel { 65 | margin: 0 auto; 66 | width: 420px!important; 67 | padding: 20px; 68 | } 69 | .signinpanel form { 70 | margin-top: 20px; 71 | } 72 | .signup-footer { 73 | margin-bottom: 10px; 74 | } 75 | .signuppanel .form-control { 76 | margin-bottom: 10px; 77 | } 78 | .signup-footer .pull-left, 79 | .signup-footer .pull-right { 80 | float: none !important; 81 | text-align: center; 82 | } 83 | .signinpanel .signin-info ul { 84 | display: none; 85 | } 86 | } 87 | @media screen and (max-width: 320px) { 88 | .signinpanel, 89 | .signuppanel { 90 | margin:0 20px; 91 | width:auto; 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/css/patterns/header-profile-skin-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/css/patterns/header-profile-skin-1.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/css/patterns/header-profile-skin-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/css/patterns/header-profile-skin-3.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/css/patterns/header-profile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/css/patterns/header-profile.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/css/patterns/shattered.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/css/patterns/shattered.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/css/plugins/images/sort_asc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/css/plugins/images/sort_asc.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/css/plugins/images/sort_desc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/css/plugins/images/sort_desc.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/css/plugins/images/sprite-skin-flat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/css/plugins/images/sprite-skin-flat.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/css/plugins/images/spritemap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/css/plugins/images/spritemap.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/css/plugins/images/spritemap@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/css/plugins/images/spritemap@2x.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/css/plugins/img/clear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/css/plugins/img/clear.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/css/plugins/img/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/css/plugins/img/loading.gif -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/css/plugins/jQueryUI/images/ui-bg_diagonals-thick_18_b81900_40x40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/css/plugins/jQueryUI/images/ui-bg_diagonals-thick_18_b81900_40x40.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/css/plugins/jQueryUI/images/ui-bg_diagonals-thick_20_666666_40x40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/css/plugins/jQueryUI/images/ui-bg_diagonals-thick_20_666666_40x40.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/css/plugins/jQueryUI/images/ui-bg_flat_0_aaaaaa_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/css/plugins/jQueryUI/images/ui-bg_flat_0_aaaaaa_40x100.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/css/plugins/jQueryUI/images/ui-bg_flat_10_000000_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/css/plugins/jQueryUI/images/ui-bg_flat_10_000000_40x100.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/css/plugins/jQueryUI/images/ui-bg_flat_75_ffffff_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/css/plugins/jQueryUI/images/ui-bg_flat_75_ffffff_40x100.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/css/plugins/jQueryUI/images/ui-bg_glass_100_f6f6f6_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/css/plugins/jQueryUI/images/ui-bg_glass_100_f6f6f6_1x400.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/css/plugins/jQueryUI/images/ui-bg_glass_100_fdf5ce_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/css/plugins/jQueryUI/images/ui-bg_glass_100_fdf5ce_1x400.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/css/plugins/jQueryUI/images/ui-bg_glass_65_ffffff_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/css/plugins/jQueryUI/images/ui-bg_glass_65_ffffff_1x400.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/css/plugins/jQueryUI/images/ui-bg_gloss-wave_35_f6a828_500x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/css/plugins/jQueryUI/images/ui-bg_gloss-wave_35_f6a828_500x100.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/css/plugins/jQueryUI/images/ui-bg_highlight-soft_100_eeeeee_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/css/plugins/jQueryUI/images/ui-bg_highlight-soft_100_eeeeee_1x100.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/css/plugins/jQueryUI/images/ui-bg_highlight-soft_75_ffe45c_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/css/plugins/jQueryUI/images/ui-bg_highlight-soft_75_ffe45c_1x100.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/css/plugins/jQueryUI/images/ui-icons_222222_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/css/plugins/jQueryUI/images/ui-icons_222222_256x240.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/css/plugins/jQueryUI/images/ui-icons_228ef1_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/css/plugins/jQueryUI/images/ui-icons_228ef1_256x240.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/css/plugins/jQueryUI/images/ui-icons_454545_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/css/plugins/jQueryUI/images/ui-icons_454545_256x240.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/css/plugins/jQueryUI/images/ui-icons_888888_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/css/plugins/jQueryUI/images/ui-icons_888888_256x240.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/css/plugins/jQueryUI/images/ui-icons_ef8c08_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/css/plugins/jQueryUI/images/ui-icons_ef8c08_256x240.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/css/plugins/jQueryUI/images/ui-icons_ffd27a_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/css/plugins/jQueryUI/images/ui-icons_ffd27a_256x240.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/css/plugins/jQueryUI/images/ui-icons_ffffff_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/css/plugins/jQueryUI/images/ui-icons_ffffff_256x240.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/css/plugins/switchery/switchery.css: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * Main stylesheet for Switchery. 4 | * http://abpetkov.github.io/switchery/ 5 | * 6 | */ 7 | 8 | .switchery { 9 | background-color: #fff; 10 | border: 1px solid #dfdfdf; 11 | border-radius: 20px; 12 | cursor: pointer; 13 | display: inline-block; 14 | height: 30px; 15 | position: relative; 16 | vertical-align: middle; 17 | width: 50px; 18 | 19 | -webkit-box-sizing: content-box; 20 | -moz-box-sizing: content-box; 21 | box-sizing: content-box; 22 | } 23 | 24 | .switchery > small { 25 | background: #fff; 26 | border-radius: 100%; 27 | box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4); 28 | height: 30px; 29 | position: absolute; 30 | top: 0; 31 | width: 30px; 32 | } 33 | -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/favicon.ico -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/img/403.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/img/403.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/img/Status_Offline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/img/Status_Offline.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/img/back.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/img/back.jpg -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/img/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/img/bg.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/img/browser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/img/browser.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/img/browser.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/img/browser.psd -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/img/fullscreen_alt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/img/fullscreen_alt.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/img/fullscreen_exit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/img/fullscreen_exit.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/img/icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/img/icons.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/img/join.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/img/join.gif -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/img/joinbottom.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/img/joinbottom.gif -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/img/loading-upload.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/img/loading-upload.gif -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/img/locked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/img/locked.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/img/progress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/img/progress.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/img/sort_both.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/img/sort_both.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/img/sql_formater.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/img/sql_formater.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/img/user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/img/user.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/img/webuploader.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/img/webuploader.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/auth.js: -------------------------------------------------------------------------------- 1 | function auth() { 2 | QQT.ajax('/Admin/Role/GetSystemUserActions', 'Get', null, false, false) 3 | .done(function (response) { 4 | $('.loading').show(); 5 | var result = response.Data; 6 | if (result.IsGod) { 7 | $('.loading').hide(); 8 | return; 9 | } 10 | 11 | if (result.ActionList && result.ActionList.indexOf('index') < 0) { 12 | $('.loading').hide(); 13 | window.location.href = 14 | window.appUrl + 15 | '/' + 16 | 'Admin/Error' + 17 | '/' + 18 | 'Http403'; 19 | return; 20 | //mvcJump('Error', 'Http403', { acionInfo: window.location.pathname }); 21 | } 22 | 23 | $('.authorization').each(function (index, item) { 24 | var actionId = $(item).attr('action-id') || ''; 25 | var isPermit = false; 26 | if (result.ActionList && result.ActionList.indexOf(actionId) >= 0) { 27 | isPermit = true; 28 | } 29 | if (!isPermit) { 30 | $(item).remove(); 31 | } 32 | }); 33 | setTimeout(function () { 34 | $('.loading').hide(); 35 | },200); 36 | }); 37 | } 38 | 39 | auth(); -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/authlazy.js: -------------------------------------------------------------------------------- 1 | function auth() { 2 | QQT.ajax('/Admin/Role/GetSystemUserActions', 'Get', null, false, false) 3 | .done(function (response) { 4 | $('.loading').show(); 5 | var result = response.Data; 6 | 7 | 8 | if (!result.IsGod && (result.ActionList && result.ActionList.indexOf('index') < 0)) { 9 | $('.loading').hide(); 10 | debugger 11 | window.location.href = 12 | window.appUrl + 13 | '/' + 14 | 'Admin/Error' + 15 | '/' + 16 | 'Http403'; 17 | return; 18 | //mvcJump('Error', 'Http403', { acionInfo: window.location.pathname }); 19 | } 20 | 21 | $('.authorization').each(function (index, item) { 22 | var actionId = $(item).attr('action-id') || ''; 23 | if (result.IsGod || (result.ActionList && result.ActionList.indexOf(actionId) >= 0)) { 24 | $(item).show(); 25 | } 26 | }); 27 | setTimeout(function () { 28 | $('.loading').hide(); 29 | },200); 30 | }); 31 | } 32 | 33 | -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/content.js: -------------------------------------------------------------------------------- 1 | var $parentNode = window.parent.document; 2 | 3 | function $childNode(name) { 4 | return window.frames[name] 5 | } 6 | 7 | // tooltips 8 | $('.tooltip-demo').tooltip({ 9 | selector: "[data-toggle=tooltip]", 10 | container: "body" 11 | }); 12 | 13 | // 使用animation.css修改Bootstrap Modal 14 | $('.modal').appendTo("body"); 15 | 16 | $("[data-toggle=popover]").popover(); 17 | 18 | //折叠ibox 19 | $('.collapse-link').click(function () { 20 | var ibox = $(this).closest('div.ibox'); 21 | var button = $(this).find('i'); 22 | var content = ibox.find('div.ibox-content'); 23 | content.slideToggle(200); 24 | button.toggleClass('fa-chevron-up').toggleClass('fa-chevron-down'); 25 | ibox.toggleClass('').toggleClass('border-bottom'); 26 | setTimeout(function () { 27 | ibox.resize(); 28 | ibox.find('[id^=map-]').resize(); 29 | }, 50); 30 | }); 31 | 32 | //关闭ibox 33 | $('.close-link').click(function () { 34 | var content = $(this).closest('div.ibox'); 35 | content.remove(); 36 | }); 37 | 38 | //判断当前页面是否在iframe中 39 | //if (top == this) { 40 | // var gohome = '
'; 41 | // $('body').append(gohome); 42 | //} 43 | 44 | //animation.css 45 | function animationHover(element, animation) { 46 | element = $(element); 47 | element.hover( 48 | function () { 49 | element.addClass('animated ' + animation); 50 | }, 51 | function () { 52 | //动画完成之前移除class 53 | window.setTimeout(function () { 54 | element.removeClass('animated ' + animation); 55 | }, 2000); 56 | }); 57 | } 58 | 59 | //拖动面板 60 | function WinMove() { 61 | var element = "[class*=col]"; 62 | var handle = ".ibox-title"; 63 | var connect = "[class*=col]"; 64 | $(element).sortable({ 65 | handle: handle, 66 | connectWith: connect, 67 | tolerance: 'pointer', 68 | forcePlaceholderSize: true, 69 | opacity: 0.8, 70 | }) 71 | .disableSelection(); 72 | }; 73 | -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/jquery.base64.min.js: -------------------------------------------------------------------------------- 1 | (function (global) { "use strict"; var _Base64 = global.Base64; var version = "2.1.9"; var buffer; if (typeof module !== "undefined" && module.exports) { try { buffer = require("buffer").Buffer } catch (err) { } } var b64chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; var b64tab = function (bin) { var t = {}; for (var i = 0, l = bin.length; i < l; i++) t[bin.charAt(i)] = i; return t }(b64chars); var fromCharCode = String.fromCharCode; var cb_utob = function (c) { if (c.length < 2) { var cc = c.charCodeAt(0); return cc < 128 ? c : cc < 2048 ? fromCharCode(192 | cc >>> 6) + fromCharCode(128 | cc & 63) : fromCharCode(224 | cc >>> 12 & 15) + fromCharCode(128 | cc >>> 6 & 63) + fromCharCode(128 | cc & 63) } else { var cc = 65536 + (c.charCodeAt(0) - 55296) * 1024 + (c.charCodeAt(1) - 56320); return fromCharCode(240 | cc >>> 18 & 7) + fromCharCode(128 | cc >>> 12 & 63) + fromCharCode(128 | cc >>> 6 & 63) + fromCharCode(128 | cc & 63) } }; var re_utob = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g; var utob = function (u) { return u.replace(re_utob, cb_utob) }; var cb_encode = function (ccc) { var padlen = [0, 2, 1][ccc.length % 3], ord = ccc.charCodeAt(0) << 16 | (ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8 | (ccc.length > 2 ? ccc.charCodeAt(2) : 0), chars = [b64chars.charAt(ord >>> 18), b64chars.charAt(ord >>> 12 & 63), padlen >= 2 ? "=" : b64chars.charAt(ord >>> 6 & 63), padlen >= 1 ? "=" : b64chars.charAt(ord & 63)]; return chars.join("") }; var btoa = global.btoa ? function (b) { return global.btoa(b) } : function (b) { return b.replace(/[\s\S]{1,3}/g, cb_encode) }; var _encode = buffer ? function (u) { return (u.constructor === buffer.constructor ? u : new buffer(u)).toString("base64") } : function (u) { return btoa(utob(u)) }; var encode = function (u, urisafe) { return !urisafe ? _encode(String(u)) : _encode(String(u)).replace(/[+\/]/g, function (m0) { return m0 == "+" ? "-" : "_" }).replace(/=/g, "") }; var encodeURI = function (u) { return encode(u, true) }; var re_btou = new RegExp(["[À-ß][€-¿]", "[à-ï][€-¿]{2}", "[ð-÷][€-¿]{3}"].join("|"), "g"); var cb_btou = function (cccc) { switch (cccc.length) { case 4: var cp = (7 & cccc.charCodeAt(0)) << 18 | (63 & cccc.charCodeAt(1)) << 12 | (63 & cccc.charCodeAt(2)) << 6 | 63 & cccc.charCodeAt(3), offset = cp - 65536; return fromCharCode((offset >>> 10) + 55296) + fromCharCode((offset & 1023) + 56320); case 3: return fromCharCode((15 & cccc.charCodeAt(0)) << 12 | (63 & cccc.charCodeAt(1)) << 6 | 63 & cccc.charCodeAt(2)); default: return fromCharCode((31 & cccc.charCodeAt(0)) << 6 | 63 & cccc.charCodeAt(1)) } }; var btou = function (b) { return b.replace(re_btou, cb_btou) }; var cb_decode = function (cccc) { var len = cccc.length, padlen = len % 4, n = (len > 0 ? b64tab[cccc.charAt(0)] << 18 : 0) | (len > 1 ? b64tab[cccc.charAt(1)] << 12 : 0) | (len > 2 ? b64tab[cccc.charAt(2)] << 6 : 0) | (len > 3 ? b64tab[cccc.charAt(3)] : 0), chars = [fromCharCode(n >>> 16), fromCharCode(n >>> 8 & 255), fromCharCode(n & 255)]; chars.length -= [0, 0, 2, 1][padlen]; return chars.join("") }; var atob = global.atob ? function (a) { return global.atob(a) } : function (a) { return a.replace(/[\s\S]{1,4}/g, cb_decode) }; var _decode = buffer ? function (a) { return (a.constructor === buffer.constructor ? a : new buffer(a, "base64")).toString() } : function (a) { return btou(atob(a)) }; var decode = function (a) { return _decode(String(a).replace(/[-_]/g, function (m0) { return m0 == "-" ? "+" : "/" }).replace(/[^A-Za-z0-9\+\/]/g, "")) }; var noConflict = function () { var Base64 = global.Base64; global.Base64 = _Base64; return Base64 }; global.Base64 = { VERSION: version, atob: atob, btoa: btoa, fromBase64: decode, toBase64: encode, utob: utob, encode: encode, encodeURI: encodeURI, btou: btou, decode: decode, noConflict: noConflict }; if (typeof Object.defineProperty === "function") { var noEnum = function (v) { return { value: v, enumerable: false, writable: true, configurable: true } }; global.Base64.extendString = function () { Object.defineProperty(String.prototype, "fromBase64", noEnum(function () { return decode(this) })); Object.defineProperty(String.prototype, "toBase64", noEnum(function (urisafe) { return encode(this, urisafe) })); Object.defineProperty(String.prototype, "toBase64URI", noEnum(function () { return encode(this, true) })) } } if (global["Meteor"]) { Base64 = global.Base64 } })(this); -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/jquery.min.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/jquery.min.js -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/bootstrap-fileinput/img/loading-sm.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/bootstrap-fileinput/img/loading-sm.gif -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/bootstrap-fileinput/img/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/bootstrap-fileinput/img/loading.gif -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/bootstrap-fileinput/locales/zh.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * FileInput Chinese Translations 3 | * 4 | * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or 5 | * any HTML markup tags in the messages must not be converted or translated. 6 | * 7 | * @see http://github.com/kartik-v/bootstrap-fileinput 8 | * @author kangqf 9 | * 10 | * NOTE: this file must be saved in UTF-8 encoding. 11 | */ 12 | (function (root, factory) { 13 | if (typeof root.define === 'function' && root.define.amd) { 14 | root.define(['jquery'], factory); 15 | } else factory(jQuery); 16 | }(window, function ($) { 17 | "use strict"; 18 | $.fn.fileinputLocales = $.fn.fileinputLocales || {}; 19 | $.fn.fileinputLocales['zh'] = { 20 | fileSingle: '文件', 21 | filePlural: '多个文件', 22 | browseLabel: '选择 …', 23 | removeLabel: '移除', 24 | removeTitle: '清除选中文件', 25 | cancelLabel: '取消', 26 | cancelTitle: '取消进行中的上传', 27 | uploadLabel: '上传', 28 | uploadTitle: '上传选中文件', 29 | msgNo: '没有', 30 | msgNoFilesSelected: '', 31 | msgCancelled: '取消', 32 | msgZoomModalHeading: '详细预览', 33 | msgSizeTooLarge: '文件 "{name}" ({size} KB) 超过了允许大小 {maxSize} KB.', 34 | msgFilesTooLess: '你必须选择最少 {n} {files} 来上传. ', 35 | msgFilesTooMany: '选择的上传文件个数 ({n}) 超出最大文件的限制个数 {m}.', 36 | msgFileNotFound: '文件 "{name}" 未找到!', 37 | msgFileSecured: '安全限制,为了防止读取文件 "{name}".', 38 | msgFileNotReadable: '文件 "{name}" 不可读.', 39 | msgFilePreviewAborted: '取消 "{name}" 的预览.', 40 | msgFilePreviewError: '读取 "{name}" 时出现了一个错误.', 41 | msgInvalidFileType: '不正确的类型 "{name}". 只支持 "{types}" 类型的文件.', 42 | msgInvalidFileExtension: '不正确的文件扩展名 "{name}". 只支持 "{extensions}" 的文件扩展名.', 43 | msgUploadAborted: '该文件上传被中止', 44 | msgUploadThreshold: 'Processing...', 45 | msgValidationError: '验证错误', 46 | msgLoading: '加载第 {index} 文件 共 {files} …', 47 | msgProgress: '加载第 {index} 文件 共 {files} - {name} - {percent}% 完成.', 48 | msgSelected: '{n} {files} 选中', 49 | msgFoldersNotAllowed: '只支持拖拽文件! 跳过 {n} 拖拽的文件夹.', 50 | msgImageWidthSmall: '宽度的图像文件的"{name}"的必须是至少{size}像素.', 51 | msgImageHeightSmall: '图像文件的"{name}"的高度必须至少为{size}像素.', 52 | msgImageWidthLarge: '宽度的图像文件"{name}"不能超过{size}像素.', 53 | msgImageHeightLarge: '图像文件"{name}"的高度不能超过{size}像素.', 54 | msgImageResizeError: '无法获取的图像尺寸调整。', 55 | msgImageResizeException: '错误而调整图像大小。
{errors}
', 56 | dropZoneTitle: '拖拽文件到这里 …', 57 | dropZoneClickTitle: '
(or click to select {files})', 58 | fileActionSettings: { 59 | removeTitle: '删除文件', 60 | uploadTitle: '上传文件', 61 | zoomTitle: '查看详情', 62 | dragTitle: 'Move / Rearrange', 63 | indicatorNewTitle: '没有上传', 64 | indicatorSuccessTitle: '上传', 65 | indicatorErrorTitle: '上传错误', 66 | indicatorLoadingTitle: '上传 ...' 67 | }, 68 | previewZoomButtonTitles: { 69 | prev: 'View previous file', 70 | next: 'View next file', 71 | toggleheader: 'Toggle header', 72 | fullscreen: 'Toggle full screen', 73 | borderless: 'Toggle borderless mode', 74 | close: 'Close detailed preview' 75 | } 76 | }; 77 | })); -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/bootstrap-fileinput/themes/fa/theme.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * bootstrap-fileinput v4.3.4 3 | * http://plugins.krajee.com/file-input 4 | * 5 | * Font Awesome icon theme configuration for bootstrap-fileinput. Requires font awesome assets to be loaded. 6 | * 7 | * Author: Kartik Visweswaran 8 | * Copyright: 2014 - 2016, Kartik Visweswaran, Krajee.com 9 | * 10 | * Licensed under the BSD 3-Clause 11 | * https://github.com/kartik-v/bootstrap-fileinput/blob/master/LICENSE.md 12 | */ 13 | (function ($) { 14 | "use strict"; 15 | 16 | $.fn.fileinputThemes.fa = { 17 | fileActionSettings: { 18 | removeIcon: '', 19 | uploadIcon: '', 20 | zoomIcon: '', 21 | dragIcon: '', 22 | indicatorNew: '', 23 | indicatorSuccess: '', 24 | indicatorError: '', 25 | indicatorLoading: '' 26 | }, 27 | layoutTemplates: { 28 | fileIcon: ' ' 29 | }, 30 | previewZoomButtonIcons: { 31 | prev: '', 32 | next: '', 33 | toggleheader: '', 34 | fullscreen: '', 35 | borderless: '', 36 | close: '' 37 | }, 38 | previewFileIcon: '', 39 | browseIcon: '', 40 | removeIcon: '', 41 | cancelIcon: '', 42 | uploadIcon: '', 43 | msgValidationErrorIcon: ' ' 44 | }; 45 | })(window.jQuery); 46 | -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/bootstrap-fileinput/themes/gly/theme.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * bootstrap-fileinput v4.3.4 3 | * http://plugins.krajee.com/file-input 4 | * 5 | * Glyphicon (default) theme configuration for bootstrap-fileinput. 6 | * 7 | * Author: Kartik Visweswaran 8 | * Copyright: 2014 - 2016, Kartik Visweswaran, Krajee.com 9 | * 10 | * Licensed under the BSD 3-Clause 11 | * https://github.com/kartik-v/bootstrap-fileinput/blob/master/LICENSE.md 12 | */ 13 | (function ($) { 14 | "use strict"; 15 | 16 | $.fn.fileinputThemes.gly = { 17 | fileActionSettings: { 18 | removeIcon: '', 19 | uploadIcon: '', 20 | zoomIcon: '', 21 | dragIcon: '', 22 | indicatorNew: '', 23 | indicatorSuccess: '', 24 | indicatorError: '', 25 | indicatorLoading: '' 26 | }, 27 | layoutTemplates: { 28 | fileIcon: '' 29 | }, 30 | previewZoomButtonIcons: { 31 | prev: '', 32 | next: '', 33 | toggleheader: '', 34 | fullscreen: '', 35 | borderless: '', 36 | close: '' 37 | }, 38 | previewFileIcon: '', 39 | browseIcon: ' ', 40 | removeIcon: '', 41 | cancelIcon: '', 42 | uploadIcon: '', 43 | msgValidationErrorIcon: ' ' 44 | }; 45 | })(window.jQuery); 46 | -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/bootstrap-table/bootstrap-table-editable.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | * bootstrap-table - v1.11.0 - 2016-07-02 3 | * https://github.com/wenzhixin/bootstrap-table 4 | * Copyright (c) 2016 zhixin wen 5 | * Licensed MIT License 6 | */ 7 | !function(a){"use strict";a.extend(a.fn.bootstrapTable.defaults,{editable:!0,onEditableInit:function(){return!1},onEditableSave:function(){return!1},onEditableShown:function(){return!1},onEditableHidden:function(){return!1}}),a.extend(a.fn.bootstrapTable.Constructor.EVENTS,{"editable-init.bs.table":"onEditableInit","editable-save.bs.table":"onEditableSave","editable-shown.bs.table":"onEditableShown","editable-hidden.bs.table":"onEditableHidden"});var b=a.fn.bootstrapTable.Constructor,c=b.prototype.initTable,d=b.prototype.initBody;b.prototype.initTable=function(){var b=this;c.apply(this,Array.prototype.slice.apply(arguments)),this.options.editable&&a.each(this.columns,function(c,d){if(d.editable){var e={},f=[],g="editable-",h=function(a,b){var c=a.replace(/([A-Z])/g,function(a){return"-"+a.toLowerCase()});if(c.slice(0,g.length)==g){var d=c.replace(g,"data-");e[d]=b}};a.each(b.options,h),d.formatter=d.formatter||function(a){return a},d._formatter=d._formatter?d._formatter:d.formatter,d.formatter=function(c,g,i){var j=d._formatter?d._formatter(c,g,i):c;a.each(d,h),a.each(e,function(a,b){f.push(" "+a+'="'+b+'"')});var k=!1;return d.editable.hasOwnProperty("noeditFormatter")&&(k=d.editable.noeditFormatter(c,g,i)),k===!1?['"].join(""):k}}})},b.prototype.initBody=function(){var b=this;d.apply(this,Array.prototype.slice.apply(arguments)),this.options.editable&&(a.each(this.columns,function(c,d){d.editable&&(b.$body.find('a[data-name="'+d.field+'"]').editable(d.editable).off("save").on("save",function(c,e){var f=b.getData(),g=a(this).parents("tr[data-index]").data("index"),h=f[g],i=h[d.field];a(this).data("value",e.submitValue),h[d.field]=e.submitValue,b.trigger("editable-save",d.field,h,i,a(this)),b.resetFooter()}),b.$body.find('a[data-name="'+d.field+'"]').editable(d.editable).off("shown").on("shown",function(c,e){var f=b.getData(),g=a(this).parents("tr[data-index]").data("index"),h=f[g];b.trigger("editable-shown",d.field,h,a(this),e)}),b.$body.find('a[data-name="'+d.field+'"]').editable(d.editable).off("hidden").on("hidden",function(c,e){var f=b.getData(),g=a(this).parents("tr[data-index]").data("index"),h=f[g];b.trigger("editable-hidden",d.field,h,a(this),e)}))}),this.trigger("editable-init"))}}(jQuery); -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/bootstrap-table/bootstrap-table-mobile.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | * bootstrap-table - v1.11.0 - 2016-07-02 3 | * https://github.com/wenzhixin/bootstrap-table 4 | * Copyright (c) 2016 zhixin wen 5 | * Licensed MIT License 6 | */ 7 | !function(a){"use strict";var b=function(b,c){b.options.columnsHidden.length>0&&a.each(b.columns,function(d,e){-1!==b.options.columnsHidden.indexOf(e.field)&&e.visible!==c&&b.toggleColumn(a.fn.bootstrapTable.utils.getFieldIndex(b.columns,e.field),c,!0)})},c=function(a){(a.options.height||a.options.showFooter)&&setTimeout(function(){a.resetView.call(a)},1)},d=function(a,b,d){a.options.minHeight?b<=a.options.minWidth&&d<=a.options.minHeight?e(a):b>a.options.minWidth&&d>a.options.minHeight&&f(a):b<=a.options.minWidth?e(a):b>a.options.minWidth&&f(a),c(a)},e=function(a){g(a,!1),b(a,!1)},f=function(a){g(a,!0),b(a,!0)},g=function(a,b){a.options.cardView=b,a.toggleView()},h=function(a,b){var c;return function(){var d=this,e=arguments,f=function(){c=null,a.apply(d,e)};clearTimeout(c),c=setTimeout(f,b)}};a.extend(a.fn.bootstrapTable.defaults,{mobileResponsive:!1,minWidth:562,minHeight:void 0,heightThreshold:100,checkOnInit:!0,columnsHidden:[]});var i=a.fn.bootstrapTable.Constructor,j=i.prototype.init;i.prototype.init=function(){if(j.apply(this,Array.prototype.slice.apply(arguments)),this.options.mobileResponsive&&this.options.minWidth){this.options.minWidth<100&&this.options.resizable&&(console.log("The minWidth when the resizable extension is active should be greater or equal than 100"),this.options.minWidth=100);var b=this,c={width:a(window).width(),height:a(window).height()};if(a(window).on("resize orientationchange",h(function(){var e=a(this).height(),f=a(this).width();(Math.abs(c.height-e)>b.options.heightThreshold||c.width!=f)&&(d(b,f,e),c={width:f,height:e})},200)),this.options.checkOnInit){var e=a(window).height(),f=a(window).width();d(this,f,e),c={width:f,height:e}}}}}(jQuery); -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Bootstrap Table Chinese translation 3 | * Author: Zhixin Wen 4 | */ 5 | (function ($) { 6 | 'use strict'; 7 | 8 | $.fn.bootstrapTable.locales['zh-CN'] = { 9 | formatLoadingMessage: function () { 10 | return '正在努力地加载数据中,请稍候……'; 11 | }, 12 | formatRecordsPerPage: function (pageNumber) { 13 | return '每页显示 ' + pageNumber + ' 条记录'; 14 | }, 15 | formatShowingRows: function (pageFrom, pageTo, totalRows) { 16 | return '显示第 ' + pageFrom + ' 到第 ' + pageTo + ' 条记录,总共 ' + totalRows + ' 条记录'; 17 | }, 18 | formatSearch: function () { 19 | return '搜索'; 20 | }, 21 | formatNoMatches: function () { 22 | return '没有找到匹配的记录'; 23 | }, 24 | formatPaginationSwitch: function () { 25 | return '隐藏/显示分页'; 26 | }, 27 | formatRefresh: function () { 28 | return '刷新'; 29 | }, 30 | formatToggle: function () { 31 | return '切换'; 32 | }, 33 | formatColumns: function () { 34 | return '列'; 35 | }, 36 | formatExport: function () { 37 | return '导出数据'; 38 | }, 39 | formatClearFilters: function () { 40 | return '清空过滤'; 41 | } 42 | }; 43 | 44 | $.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['zh-CN']); 45 | 46 | })(jQuery); 47 | -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | * bootstrap-table - v1.11.0 - 2016-07-02 3 | * https://github.com/wenzhixin/bootstrap-table 4 | * Copyright (c) 2016 zhixin wen 5 | * Licensed MIT License 6 | */ 7 | !function(a){"use strict";a.fn.bootstrapTable.locales["zh-CN"]={formatLoadingMessage:function(){return"正在努力地加载数据中,请稍候……"},formatRecordsPerPage:function(a){return"每页显示 "+a+" 条记录"},formatShowingRows:function(a,b,c){return"显示第 "+a+" 到第 "+b+" 条记录,总共 "+c+" 条记录"},formatSearch:function(){return"搜索"},formatNoMatches:function(){return"没有找到匹配的记录"},formatPaginationSwitch:function(){return"隐藏/显示分页"},formatRefresh:function(){return"刷新"},formatToggle:function(){return"切换"},formatColumns:function(){return"列"},formatExport:function(){return"导出数据"},formatClearFilters:function(){return"清空过滤"}},a.extend(a.fn.bootstrapTable.defaults,a.fn.bootstrapTable.locales["zh-CN"])}(jQuery); -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/clearjs/jquery.input-clear.js: -------------------------------------------------------------------------------- 1 | /** 2 | jQuery input clear button 3 | Dual licensed under the MIT or GPL Version 2 licenses. 4 | 5 | Copyright (c) 2013 Ehsan Mahpour 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy 8 | of this software and associated documentation files (the "Software"), to deal 9 | in the Software without restriction, including without limitation the rights 10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | copies of the Software, and to permit persons to whom the Software is 12 | furnished to do so, subject to the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be included in 15 | all copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 23 | THE SOFTWARE. 24 | */ 25 | 26 | (function ($) { 27 | "use strict"; 28 | $.fn.inputClear = function (options) { 29 | var settings = $.extend({ 30 | 'exclude': '.no-clear', 31 | }, options); 32 | return this.each(function () { 33 | // add private event handler to avoid conflict 34 | $(this).not(settings.exclude) 35 | .unbind("clear-focus") 36 | .bind("clear-focus", ( 37 | function () { 38 | if ($(this).data("clear-button")) return; 39 | var x = $(""); 40 | $(x).data("text-box", this); 41 | $(x).mouseover(function () { $(this).addClass("over"); }).mouseleave(function () { $(this).removeClass("over"); }); 42 | $(this).data("clear-button", x); 43 | $(x).css({ "position": "absolute", "left": ($(this).position().right), "top": $(this).position().top, "margin": "3px 0px 0px -20px" }); 44 | $(this).after(x); 45 | //$(this)); 46 | })) 47 | .unbind("clear-blur").bind("clear-blur", ( 48 | function (e) { 49 | var x = $(this).data("clear-button"); 50 | if (x) { 51 | if ($(x).hasClass("over")) { 52 | $(x).removeClass("over"); 53 | $(x).hide().remove(); 54 | $(this).val(""); 55 | $(this).removeData("clear-button"); 56 | var txt = this; 57 | e.stopPropagation(); 58 | e.stopImmediatePropagation(); 59 | setTimeout($.proxy(function () { $(this).trigger("focus"); }, txt), 50); 60 | return false; 61 | } 62 | } 63 | if (x && !$(x).hasClass("over")) { 64 | $(this).removeData("clear-button"); 65 | $(x).remove(); 66 | } 67 | })); 68 | // add private event to the focus/unfocus events as branches 69 | $(this).on("focus", function () { 70 | $(this).trigger("clear-focus"); 71 | }).on("blur", function () { 72 | $(this).trigger("clear-blur"); 73 | }); 74 | }); 75 | }; 76 | })(jQuery); -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/datetimepicker/locales/bootstrap-datetimepicker.zh-CN.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Simplified Chinese translation for bootstrap-datetimepicker 3 | * Yuan Cheung 4 | */ 5 | ;(function($){ 6 | $.fn.datetimepicker.dates['zh-CN'] = { 7 | days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"], 8 | daysShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六", "周日"], 9 | daysMin: ["日", "一", "二", "三", "四", "五", "六", "日"], 10 | months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], 11 | monthsShort: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], 12 | today: "今天", 13 | suffix: [], 14 | meridiem: ["上午", "下午"] 15 | }; 16 | }(jQuery)); 17 | -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/img/filter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/img/filter.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/img/sortDown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/img/sortDown.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/img/sortNone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/img/sortNone.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/img/sortUp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/img/sortUp.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/layer/laydate/skins/default/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/layer/laydate/skins/default/icon.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/layer/laydate/skins/default/laydate.css: -------------------------------------------------------------------------------- 1 | /** 2 | 3 | @Name: laydate皮肤:墨绿 4 | @Author:贤心 5 | @Site:http://sentsin.com/layui/laydate 6 | 7 | **/ 8 | 9 | .laydate-icon{border:1px solid #ccc; background-image:url(icon.png)} 10 | 11 | .laydate_body .laydate_bottom #laydate_hms, 12 | .laydate_body .laydate_time{border:1px solid #ccc;} 13 | 14 | .laydate_body .laydate_box, 15 | .laydate_body .laydate_ym .laydate_yms, 16 | .laydate_body .laydate_time{box-shadow: 2px 2px 5px rgba(0,0,0,.1);} 17 | 18 | .laydate_body .laydate_box{border-top:none; border-bottom:none; background-color:#fff; color:#00625A;} 19 | .laydate_body .laydate_box input{background:none!important; color:#fff;} 20 | .laydate_body .laydate_box .laydate_void{color:#00E8D7!important;} 21 | .laydate_body .laydate_box a, .laydate_body .laydate_box a:hover{color:#00625A;} 22 | .laydate_body .laydate_box a:hover{color:#666;} 23 | .laydate_body .laydate_click{background-color:#009F95!important; color:#fff!important;} 24 | .laydate_body .laydate_top{border-top:1px solid #009F95; background-color:#009F95} 25 | .laydate_body .laydate_ym{border:1px solid #009F95; background-color:#009F95;} 26 | .laydate_body .laydate_ym .laydate_yms{border:1px solid #009F95; background-color:#009F95; color:#fff;} 27 | .laydate_body .laydate_y .laydate_yms a{border-bottom:1px solid #009F95;} 28 | .laydate_body .laydate_y .laydate_yms .laydate_chdown{border-top:1px solid #009F95; border-bottom:none;} 29 | .laydate_body .laydate_choose{border-left:1px solid #009F95;} 30 | .laydate_body .laydate_chprev{border-left:none; border-right:1px solid #009F95;} 31 | .laydate_body .laydate_choose:hover, 32 | .laydate_body .laydate_y .laydate_yms a:hover{background-color:#00C1B3;} 33 | .laydate_body .laydate_chtop cite{border-bottom-color:#fff;} 34 | .laydate_body .laydate_chdown cite, .laydate_body .laydate_ym label{border-top-color:#fff;} 35 | .laydate_body .laydate_chprev cite{border-right-style:solid; border-right-color:#fff;} 36 | .laydate_body .laydate_chnext cite{border-left-style:solid; border-left-color:#fff;} 37 | .laydate_body .laydate_table{width: 240px!important; margin: 0!important; border:1px solid #ccc; border-top:none; border-bottom:none;} 38 | .laydate_body .laydate_table td{border:none; height:21px!important; line-height:21px!important; background-color:#fff; color:#00625A;} 39 | .laydate_body .laydate_table .laydate_nothis{color:#999;} 40 | .laydate_body .laydate_table thead{border-bottom:1px solid #ccc; height:21px!important; line-height:21px!important;} 41 | .laydate_body .laydate_table thead th{} 42 | .laydate_body .laydate_bottom{border:1px solid #ccc; border-top:none;} 43 | .laydate_body .laydate_bottom #laydate_hms{background-color:#fff;} 44 | .laydate_body .laydate_time{background-color:#fff;} 45 | .laydate_body .laydate_time1{width: 226px!important; height: 152px!important;} 46 | .laydate_body .laydate_bottom .laydate_sj{width:31px!important; border-right:1px solid #ccc; background-color:#fff;} 47 | .laydate_body .laydate_bottom input{background-color:#fff; color:#00625A;} 48 | .laydate_body .laydate_bottom .laydte_hsmtex{border-bottom:1px solid #ccc;} 49 | .laydate_body .laydate_bottom .laydate_btn{border-right:1px solid #ccc;} 50 | .laydate_body .laydate_bottom .laydate_v{color:#999} 51 | .laydate_body .laydate_bottom .laydate_btn a{border: 1px solid #ccc; border-right:none; background-color:#fff;} 52 | .laydate_body .laydate_bottom .laydate_btn a:hover{background-color:#F6F6F6; color:#00625A;} 53 | 54 | .laydate_body .laydate_m .laydate_yms span:hover, 55 | .laydate_body .laydate_time .laydate_hmsno span:hover, 56 | .laydate_body .laydate_y .laydate_yms ul li:hover, 57 | .laydate_body .laydate_table td:hover{background-color:#00C1B3; color:#fff;} 58 | 59 | 60 | -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/layer/laydatev5.0.85/theme/default/font/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/layer/laydatev5.0.85/theme/default/font/iconfont.eot -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/layer/laydatev5.0.85/theme/default/font/iconfont.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | Created by iconfont 9 | 10 | 11 | 12 | 13 | 21 | 22 | 23 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/layer/laydatev5.0.85/theme/default/font/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/layer/laydatev5.0.85/theme/default/font/iconfont.ttf -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/layer/laydatev5.0.85/theme/default/font/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/layer/laydatev5.0.85/theme/default/font/iconfont.woff -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/layer/layim/data/chatlog.json: -------------------------------------------------------------------------------- 1 | { 2 | "status": 1, 3 | "msg": "ok", 4 | "data": [ 5 | { 6 | "id": "100001", 7 | "name": "Beaut-zihan", 8 | "time": "10:23", 9 | "face": "img/a1.jpg" 10 | }, 11 | { 12 | "id": "100002", 13 | "name": "慕容晓晓", 14 | "time": "昨天", 15 | "face": "img/a2.jpg" 16 | }, 17 | { 18 | "id": "1000033", 19 | "name": "乔峰", 20 | "time": "2014-4.22", 21 | "face": "img/a3.jpg" 22 | }, 23 | { 24 | "id": "10000333", 25 | "name": "高圆圆", 26 | "time": "2014-4.21", 27 | "face": "img/a4.jpg" 28 | } 29 | ] 30 | } 31 | -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/layer/layim/data/friend.json: -------------------------------------------------------------------------------- 1 | { 2 | "status": 1, 3 | "msg": "ok", 4 | "data": [ 5 | { 6 | "name": "销售部", 7 | "nums": 36, 8 | "id": 1, 9 | "item": [ 10 | { 11 | "id": "100001", 12 | "name": "郭敬明", 13 | "face": "img/a5.jpg" 14 | }, 15 | { 16 | "id": "100002", 17 | "name": "作家崔成浩", 18 | "face": "img/a6.jpg" 19 | }, 20 | { 21 | "id": "1000022", 22 | "name": "韩寒", 23 | "face": "img/a7.jpg" 24 | }, 25 | { 26 | "id": "10000222", 27 | "name": "范爷", 28 | "face": "img/a8.jpg" 29 | }, 30 | { 31 | "id": "100002222", 32 | "name": "小马哥", 33 | "face": "img/a9.jpg" 34 | } 35 | ] 36 | }, 37 | { 38 | "name": "大学同窗", 39 | "nums": 16, 40 | "id": 2, 41 | "item": [ 42 | { 43 | "id": "1000033", 44 | "name": "苏醒", 45 | "face": "img/a9.jpg" 46 | }, 47 | { 48 | "id": "10000333", 49 | "name": "马云", 50 | "face": "img/a8.jpg" 51 | }, 52 | { 53 | "id": "100003", 54 | "name": "鬼脚七", 55 | "face": "img/a7.jpg" 56 | }, 57 | { 58 | "id": "100004", 59 | "name": "谢楠", 60 | "face": "img/a6.jpg" 61 | }, 62 | { 63 | "id": "100005", 64 | "name": "徐峥", 65 | "face": "img/a5.jpg" 66 | } 67 | ] 68 | }, 69 | { 70 | "name": "H+后台主题", 71 | "nums": 38, 72 | "id": 3, 73 | "item": [ 74 | { 75 | "id": "100006", 76 | "name": "柏雪近在它香", 77 | "face": "img/a4.jpg" 78 | }, 79 | { 80 | "id": "100007", 81 | "name": "罗昌平", 82 | "face": "img/a3.jpg" 83 | }, 84 | { 85 | "id": "100008", 86 | "name": "Crystal影子", 87 | "face": "img/a2.jpg" 88 | }, 89 | { 90 | "id": "100009", 91 | "name": "艺小想", 92 | "face": "img/a1.jpg" 93 | }, 94 | { 95 | "id": "100010", 96 | "name": "天猫", 97 | "face": "img/a8.jpg" 98 | }, 99 | { 100 | "id": "100011", 101 | "name": "张泉灵", 102 | "face": "img/a7.jpg" 103 | } 104 | ] 105 | } 106 | ] 107 | } 108 | -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/layer/layim/data/group.json: -------------------------------------------------------------------------------- 1 | { 2 | "status": 1, 3 | "msg": "ok", 4 | "data": [ 5 | { 6 | "name": "H+交流群", 7 | "nums": 36, 8 | "id": 1, 9 | "item": [ 10 | { 11 | "id": "101", 12 | "name": "H+ Bug反馈", 13 | "face": "http://tp2.sinaimg.cn/2211874245/180/40050524279/0" 14 | }, 15 | { 16 | "id": "102", 17 | "name": "H+ 技术交流", 18 | "face": "http://tp3.sinaimg.cn/1820711170/180/1286855219/1" 19 | } 20 | ] 21 | }, 22 | { 23 | "name": "Bootstrap", 24 | "nums": 16, 25 | "id": 2, 26 | "item": [ 27 | { 28 | "id": "103", 29 | "name": "Bootstrap中文", 30 | "face": "http://tp2.sinaimg.cn/2211874245/180/40050524279/0" 31 | }, 32 | { 33 | "id": "104", 34 | "name": "Bootstrap资源", 35 | "face": "http://tp3.sinaimg.cn/1820711170/180/1286855219/1" 36 | } 37 | ] 38 | }, 39 | { 40 | "name": "WebApp", 41 | "nums": 106, 42 | "id": 3, 43 | "item": [ 44 | { 45 | "id": "105", 46 | "name": "移动开发", 47 | "face": "http://tp2.sinaimg.cn/2211874245/180/40050524279/0" 48 | }, 49 | { 50 | "id": "106", 51 | "name": "H5前言", 52 | "face": "http://tp3.sinaimg.cn/1820711170/180/1286855219/1" 53 | } 54 | ] 55 | } 56 | ] 57 | } 58 | -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/layer/layim/data/groups.json: -------------------------------------------------------------------------------- 1 | { 2 | "status": 1, 3 | "msg": "ok", 4 | "data": [ 5 | { 6 | "id": "100001", 7 | "name": "無言的蒁説", 8 | "face": "img/a1.jpg" 9 | }, 10 | { 11 | "id": "100002", 12 | "name": "婷宝奢侈品", 13 | "face": "img/a2.jpg" 14 | }, 15 | { 16 | "id": "100003", 17 | "name": "忆恨思爱", 18 | "face": "img/a3.jpg" 19 | }, 20 | { 21 | "id": "100004", 22 | "name": "天涯奥拓慢", 23 | "face": "img/a4.jpg" 24 | }, 25 | { 26 | "id": "100005", 27 | "name": "雨落无声的天空", 28 | "face": "img/a5.jpg" 29 | }, 30 | { 31 | "id": "100006", 32 | "name": "李越LycorisRadiate", 33 | "face": "img/a6.jpg" 34 | }, 35 | { 36 | "id": "100007", 37 | "name": "冯胖妞张直丑", 38 | "face": "img/a7.jpg" 39 | }, 40 | { 41 | "id": "100008", 42 | "name": "陈龙hmmm", 43 | "face": "img/a8.jpg" 44 | }, 45 | { 46 | "id": "100009", 47 | "name": "别闹哥胆儿小", 48 | "face": "img/a9.jpg" 49 | }, 50 | { 51 | "id": "100010", 52 | "name": "锅锅锅锅萌哒哒 ", 53 | "face": "img/a10.jpg" 54 | } 55 | ] 56 | } 57 | -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/layer/layim/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/layer/layim/loading.gif -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/layer/skin/default/icon-ext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/layer/skin/default/icon-ext.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/layer/skin/default/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/layer/skin/default/icon.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/layer/skin/default/icon_ext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/layer/skin/default/icon_ext.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/layer/skin/default/loading-0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/layer/skin/default/loading-0.gif -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/layer/skin/default/loading-1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/layer/skin/default/loading-1.gif -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/layer/skin/default/loading-2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/layer/skin/default/loading-2.gif -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/layer/skin/default/textbg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/layer/skin/default/textbg.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/layer/skin/default/xubox_ico0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/layer/skin/default/xubox_ico0.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/layer/skin/default/xubox_loading0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/layer/skin/default/xubox_loading0.gif -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/layer/skin/default/xubox_loading1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/layer/skin/default/xubox_loading1.gif -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/layer/skin/default/xubox_loading2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/layer/skin/default/xubox_loading2.gif -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/layer/skin/default/xubox_loading3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/layer/skin/default/xubox_loading3.gif -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/layer/skin/default/xubox_title0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/layer/skin/default/xubox_title0.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/layer/skin/layer.ext.css: -------------------------------------------------------------------------------- 1 | /*! 2 | 3 | @Name: layer拓展样式 4 | @Date: 2012.12.13 5 | @Author: 贤心 6 | @blog: sentsin.com 7 | 8 | */.layui-layer-imgbar,.layui-layer-imgtit a,.layui-layer-tab .layui-layer-title span{text-overflow:ellipsis;white-space:nowrap}.layui-layer-iconext{background:url(default/icon-ext.png) no-repeat}html #layui_layer_skinlayerextcss{display:none;position:absolute;width:1989px}.layui-layer-prompt .layui-layer-input{display:block;width:220px;height:30px;margin:0 auto;line-height:30px;padding:0 5px;border:1px solid #ccc;box-shadow:1px 1px 5px rgba(0,0,0,.1) inset;color:#333}.layui-layer-prompt textarea.layui-layer-input{width:300px;height:100px;line-height:20px}.layui-layer-tab{box-shadow:1px 1px 50px rgba(0,0,0,.4)}.layui-layer-tab .layui-layer-title{padding-left:0;border-bottom:1px solid #ccc;background-color:#eee;overflow:visible}.layui-layer-tab .layui-layer-title span{position:relative;float:left;min-width:80px;max-width:260px;padding:0 20px;text-align:center;cursor:default;overflow:hidden}.layui-layer-tab .layui-layer-title span.layui-layer-tabnow{height:43px;border-left:1px solid #ccc;border-right:1px solid #ccc;background-color:#fff;z-index:10}.layui-layer-tab .layui-layer-title span:first-child{border-left:none}.layui-layer-tabmain{line-height:24px;clear:both}.layui-layer-tabmain .layui-layer-tabli{display:none}.layui-layer-tabmain .layui-layer-tabli.xubox_tab_layer{display:block}.xubox_tabclose{position:absolute;right:10px;top:5px;cursor:pointer}.layui-layer-photos{-webkit-animation-duration:1s;animation-duration:1s;background:url(default/xubox_loading1.gif) center center no-repeat #000}.layui-layer-photos .layui-layer-content{overflow:hidden;text-align:center}.layui-layer-photos .layui-layer-phimg img{position:relative;width:100%;display:inline-block;*display:inline;*zoom:1;vertical-align:top}.layui-layer-imgbar,.layui-layer-imguide{display:none}.layui-layer-imgnext,.layui-layer-imgprev{position:absolute;top:50%;width:27px;_width:44px;height:44px;margin-top:-22px;outline:0;blr:expression(this.onFocus=this.blur())}.layui-layer-imgprev{left:10px;background-position:-5px -5px;_background-position:-70px -5px}.layui-layer-imgprev:hover{background-position:-33px -5px;_background-position:-120px -5px}.layui-layer-imgnext{right:10px;_right:8px;background-position:-5px -50px;_background-position:-70px -50px}.layui-layer-imgnext:hover{background-position:-33px -50px;_background-position:-120px -50px}.layui-layer-imgbar{position:absolute;left:0;bottom:0;width:100%;height:32px;line-height:32px;background-color:rgba(0,0,0,.8);background-color:#000\9;filter:Alpha(opacity=80);color:#fff;overflow:hidden;font-size:0}.layui-layer-imgtit *{display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:12px}.layui-layer-imgtit a{max-width:65%;overflow:hidden;color:#fff}.layui-layer-imgtit a:hover{color:#fff;text-decoration:underline}.layui-layer-imgtit em{padding-left:10px;font-style:normal} 9 | -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/layer/skin/moon/default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/layer/skin/moon/default.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/layer/skin/moon/style.css: -------------------------------------------------------------------------------- 1 | /* 2 | * layer皮肤 3 | * 作者:一☆隐☆一 4 | * QQ:9073194 5 | * 请保留这里的信息 谢谢!虽然你不保留我也不能把你怎么样! 6 | */ 7 | 8 | html #layui_layer_skinmoonstylecss { 9 | display: none; 10 | position: absolute; 11 | width: 1989px; 12 | } 13 | body .layer-ext-moon[type="dialog"] { 14 | min-width: 320px; 15 | } 16 | body .layer-ext-moon-msg[type="dialog"]{min-width:200px;} 17 | body .layer-ext-moon .layui-layer-title { 18 | background: #f6f6f6; 19 | color: #212a31; 20 | font-size: 16px; 21 | font-weight: bold; 22 | height: 46px; 23 | line-height: 46px; 24 | } 25 | 26 | 27 | 28 | body .layer-ext-moon .layui-layer-content .layui-layer-ico { 29 | height: 32px; 30 | width: 32px; 31 | top:18.5px; 32 | } 33 | body .layer-ext-moon .layui-layer-ico0 { 34 | background: url(default.png) no-repeat -96px 0; 35 | ; 36 | } 37 | body .layer-ext-moon .layui-layer-ico1 { 38 | background: url(default.png) no-repeat -224px 0; 39 | ; 40 | } 41 | body .layer-ext-moon .layui-layer-ico2 { 42 | background: url(default.png) no-repeat -192px 0; 43 | } 44 | body .layer-ext-moon .layui-layer-ico3 { 45 | background: url(default.png) no-repeat -160px 0; 46 | } 47 | body .layer-ext-moon .layui-layer-ico4 { 48 | background: url(default.png) no-repeat -320px 0; 49 | } 50 | body .layer-ext-moon .layui-layer-ico5 { 51 | background: url(default.png) no-repeat -288px 0; 52 | } 53 | body .layer-ext-moon .layui-layer-ico6 { 54 | background: url(default.png) -256px 0; 55 | } 56 | body .layer-ext-moon .layui-layer-ico7 { 57 | background: url(default.png) no-repeat -128px 0; 58 | } 59 | body .layer-ext-moon .layui-layer-setwin { 60 | top: 15px; 61 | right: 15px; 62 | } 63 | body .layer-ext-moon .layui-layer-setwin a { 64 | width: 16px; 65 | height: 16px; 66 | } 67 | body .layer-ext-moon .layui-layer-setwin .layui-layer-min cite:hover { 68 | background-color: #56abe4; 69 | } 70 | body .layer-ext-moon .layui-layer-setwin .layui-layer-max { 71 | background: url(default.png) no-repeat -80px 0; 72 | } 73 | body .layer-ext-moon .layui-layer-setwin .layui-layer-max:hover { 74 | background: url(default.png) no-repeat -64px 0; 75 | } 76 | body .layer-ext-moon .layui-layer-setwin .layui-layer-maxmin { 77 | background: url(default.png) no-repeat -32px 0; 78 | } 79 | body .layer-ext-moon .layui-layer-setwin .layui-layer-maxmin:hover { 80 | background: url(default.png) no-repeat -16px 0; 81 | } 82 | body .layer-ext-moon .layui-layer-setwin .layui-layer-close1,body .layer-ext-moon .layui-layer-setwin .layui-layer-close2 { 83 | background: url(default.png) 0 0; 84 | } 85 | body .layer-ext-moon .layui-layer-setwin .layui-layer-close1:hover,body .layer-ext-moon .layui-layer-setwin .layui-layer-close2:hover { 86 | background: url(default.png) -48px 0; 87 | } 88 | body .layer-ext-moon .layui-layer-padding{padding-top: 24px;} 89 | body .layer-ext-moon .layui-layer-btn { 90 | padding: 15px 0; 91 | background: #f0f4f7; 92 | border-top: 1px #c7c7c7 solid; 93 | } 94 | body .layer-ext-moon .layui-layer-btn a { 95 | font-size: 12px; 96 | font-weight: normal; 97 | margin: 0 3px; 98 | margin-right: 7px; 99 | margin-left: 7px; 100 | padding: 6px 20px; 101 | color: #fff; 102 | border: 1px solid #0064b6; 103 | background: #0071ce; 104 | border-radius: 3px; 105 | display: inline-block; 106 | height: 20px; 107 | line-height: 20px; 108 | text-align: center; 109 | vertical-align: middle; 110 | background-repeat: no-repeat; 111 | text-decoration: none; 112 | outline: none; 113 | -moz-box-sizing: content-box; 114 | -webkit-box-sizing: content-box; 115 | box-sizing: content-box; 116 | } 117 | body .layer-ext-moon .layui-layer-btn .layui-layer-btn0 { 118 | background: #0071ce; 119 | } 120 | body .layer-ext-moon .layui-layer-btn .layui-layer-btn1 { 121 | background: #fff; 122 | color: #404a58; 123 | border: 1px solid #c0c4cd; 124 | border-radius: 3px; 125 | } 126 | body .layer-ext-moon .layui-layer-btn .layui-layer-btn2 { 127 | background: #f60; 128 | color: #fff; 129 | border: 1px solid #f60; 130 | border-radius: 3px; 131 | } 132 | body .layer-ext-moon .layui-layer-btn .layui-layer-btn3 { 133 | background: #f00; 134 | color: #fff; 135 | border: 1px solid #f00; 136 | border-radius: 3px; 137 | } 138 | 139 | body .layer-ext-moon .layui-layer-title span.layui-layer-tabnow{ 140 | height:46px; 141 | } 142 | -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/select2/select2-bootstrap.css: -------------------------------------------------------------------------------- 1 | .form-control .select2-choice { 2 | border: 0; 3 | border-radius: 2px; 4 | } 5 | 6 | .form-control .select2-choice .select2-arrow { 7 | border-radius: 0 2px 2px 0; 8 | } 9 | 10 | .form-control.select2-container { 11 | height: auto !important; 12 | padding: 0; 13 | } 14 | 15 | .form-control.select2-container.select2-dropdown-open { 16 | border-color: #5897FB; 17 | border-radius: 3px 3px 0 0; 18 | } 19 | 20 | .form-control .select2-container.select2-dropdown-open .select2-choices { 21 | border-radius: 3px 3px 0 0; 22 | } 23 | 24 | .form-control.select2-container .select2-choices { 25 | border: 0 !important; 26 | border-radius: 3px; 27 | } 28 | 29 | .control-group.warning .select2-container .select2-choice, 30 | .control-group.warning .select2-container .select2-choices, 31 | .control-group.warning .select2-container-active .select2-choice, 32 | .control-group.warning .select2-container-active .select2-choices, 33 | .control-group.warning .select2-dropdown-open.select2-drop-above .select2-choice, 34 | .control-group.warning .select2-dropdown-open.select2-drop-above .select2-choices, 35 | .control-group.warning .select2-container-multi.select2-container-active .select2-choices { 36 | border: 1px solid #C09853 !important; 37 | } 38 | 39 | .control-group.warning .select2-container .select2-choice div { 40 | border-left: 1px solid #C09853 !important; 41 | background: #FCF8E3 !important; 42 | } 43 | 44 | .control-group.error .select2-container .select2-choice, 45 | .control-group.error .select2-container .select2-choices, 46 | .control-group.error .select2-container-active .select2-choice, 47 | .control-group.error .select2-container-active .select2-choices, 48 | .control-group.error .select2-dropdown-open.select2-drop-above .select2-choice, 49 | .control-group.error .select2-dropdown-open.select2-drop-above .select2-choices, 50 | .control-group.error .select2-container-multi.select2-container-active .select2-choices { 51 | border: 1px solid #B94A48 !important; 52 | } 53 | 54 | .control-group.error .select2-container .select2-choice div { 55 | border-left: 1px solid #B94A48 !important; 56 | background: #F2DEDE !important; 57 | } 58 | 59 | .control-group.info .select2-container .select2-choice, 60 | .control-group.info .select2-container .select2-choices, 61 | .control-group.info .select2-container-active .select2-choice, 62 | .control-group.info .select2-container-active .select2-choices, 63 | .control-group.info .select2-dropdown-open.select2-drop-above .select2-choice, 64 | .control-group.info .select2-dropdown-open.select2-drop-above .select2-choices, 65 | .control-group.info .select2-container-multi.select2-container-active .select2-choices { 66 | border: 1px solid #3A87AD !important; 67 | } 68 | 69 | .control-group.info .select2-container .select2-choice div { 70 | border-left: 1px solid #3A87AD !important; 71 | background: #D9EDF7 !important; 72 | } 73 | 74 | .control-group.success .select2-container .select2-choice, 75 | .control-group.success .select2-container .select2-choices, 76 | .control-group.success .select2-container-active .select2-choice, 77 | .control-group.success .select2-container-active .select2-choices, 78 | .control-group.success .select2-dropdown-open.select2-drop-above .select2-choice, 79 | .control-group.success .select2-dropdown-open.select2-drop-above .select2-choices, 80 | .control-group.success .select2-container-multi.select2-container-active .select2-choices { 81 | border: 1px solid #468847 !important; 82 | } 83 | 84 | .control-group.success .select2-container .select2-choice div { 85 | border-left: 1px solid #468847 !important; 86 | background: #DFF0D8 !important; 87 | } 88 | -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/select2/select2-spinner.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/select2/select2-spinner.gif -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/select2/select2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/select2/select2.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/select2/select2_locale_zh-CN.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Select2 Chinese translation 3 | */ 4 | (function ($) { 5 | "use strict"; 6 | $.fn.select2.locales['zh-CN'] = { 7 | formatNoMatches: function () { return "没有找到匹配项"; }, 8 | formatInputTooShort: function (input, min) { var n = min - input.length; return "请再输入" + n + "个字符";}, 9 | formatInputTooLong: function (input, max) { var n = input.length - max; return "请删掉" + n + "个字符";}, 10 | formatSelectionTooBig: function (limit) { return "你只能选择最多" + limit + "项"; }, 11 | formatLoadMore: function (pageNumber) { return "加载结果中…"; }, 12 | formatSearching: function () { return "搜索中…"; } 13 | }; 14 | 15 | $.extend($.fn.select2.defaults, $.fn.select2.locales['zh-CN']); 16 | })(jQuery); 17 | -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/select2/select2x2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/select2/select2x2.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/switchery/switchery.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/switchery/switchery.js -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/zTree/3.5/metroStyle/img/1_close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/zTree/3.5/metroStyle/img/1_close.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/zTree/3.5/metroStyle/img/1_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/zTree/3.5/metroStyle/img/1_open.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/zTree/3.5/metroStyle/img/line_conn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/zTree/3.5/metroStyle/img/line_conn.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/zTree/3.5/metroStyle/img/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/zTree/3.5/metroStyle/img/loading.gif -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/zTree/3.5/metroStyle/img/metro.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/zTree/3.5/metroStyle/img/metro.gif -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/zTree/3.5/metroStyle/img/metro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/zTree/3.5/metroStyle/img/metro.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/zTree/3.5/zTreeStyle/img/diy/1_close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/zTree/3.5/zTreeStyle/img/diy/1_close.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/zTree/3.5/zTreeStyle/img/diy/1_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/zTree/3.5/zTreeStyle/img/diy/1_open.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/zTree/3.5/zTreeStyle/img/diy/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/zTree/3.5/zTreeStyle/img/diy/2.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/zTree/3.5/zTreeStyle/img/diy/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/zTree/3.5/zTreeStyle/img/diy/3.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/zTree/3.5/zTreeStyle/img/diy/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/zTree/3.5/zTreeStyle/img/diy/4.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/zTree/3.5/zTreeStyle/img/diy/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/zTree/3.5/zTreeStyle/img/diy/5.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/zTree/3.5/zTreeStyle/img/diy/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/zTree/3.5/zTreeStyle/img/diy/6.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/zTree/3.5/zTreeStyle/img/diy/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/zTree/3.5/zTreeStyle/img/diy/7.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/zTree/3.5/zTreeStyle/img/diy/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/zTree/3.5/zTreeStyle/img/diy/8.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/zTree/3.5/zTreeStyle/img/diy/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/zTree/3.5/zTreeStyle/img/diy/9.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/zTree/3.5/zTreeStyle/img/line_conn.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/zTree/3.5/zTreeStyle/img/line_conn.gif -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/zTree/3.5/zTreeStyle/img/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/zTree/3.5/zTreeStyle/img/loading.gif -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/zTree/3.5/zTreeStyle/img/zTreeStandard.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/zTree/3.5/zTreeStyle/img/zTreeStandard.gif -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/plugins/zTree/3.5/zTreeStyle/img/zTreeStandard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuzd/AntMgr/f609730edd35b49eec03bb02f087e9057f611384/ant.mgr/mgr.core/wwwroot/js/plugins/zTree/3.5/zTreeStyle/img/zTreeStandard.png -------------------------------------------------------------------------------- /ant.mgr/mgr.core/wwwroot/js/whenReady.js: -------------------------------------------------------------------------------- 1 | 2 | /* 3 | * 传递函数给whenReady() 4 | * 当文档解析完毕且为操作准备就绪时,函数作为document的方法调用 5 | */ 6 | var whenReady = (function () { //这个函数返回whenReady()函数 7 | var funcs = []; //当获得事件时,要运行的函数 8 | var ready = false; //当触发事件处理程序时,切换为true 9 | 10 | //当文档就绪时,调用事件处理程序 11 | function handler(e) { 12 | if (ready) return; //确保事件处理程序只完整运行一次 13 | 14 | //如果发生onreadystatechange事件,但其状态不是complete的话,那么文档尚未准备好 15 | if (e.type === 'onreadystatechange' && document.readyState !== 'complete') { 16 | return; 17 | } 18 | 19 | //运行所有注册函数 20 | //注意每次都要计算funcs.length 21 | //以防这些函数的调用可能会导致注册更多的函数 22 | for (var i = 0; i < funcs.length; i++) { 23 | funcs[i].call(document); 24 | } 25 | //事件处理函数完整执行,切换ready状态, 并移除所有函数 26 | ready = true; 27 | funcs = null; 28 | } 29 | //为接收到的任何事件注册处理程序 30 | if (document.addEventListener) { 31 | document.addEventListener('DOMContentLoaded', handler, false); 32 | document.addEventListener('readystatechange', handler, false); //IE9+ 33 | window.addEventListener('load', handler, false); 34 | } else if (document.attachEvent) { 35 | document.attachEvent('onreadystatechange', handler); 36 | window.attachEvent('onload', handler); 37 | } 38 | //返回whenReady()函数 39 | return function whenReady(fn) { 40 | if (ready) { fn.call(document); } 41 | else { funcs.push(fn); } 42 | } 43 | })(); --------------------------------------------------------------------------------