From 52c8b47879f1f020e3a89fc693d2bd4060a5c85a Mon Sep 17 00:00:00 2001 From: zhangdaihao Date: Mon, 25 Feb 2019 15:58:05 +0800 Subject: [PATCH] =?UTF-8?q?jeecg-boot=201.0=E7=89=88=E6=9C=AC=E5=8F=91?= =?UTF-8?q?=E5=B8=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 111 | 1 - README.md | 147 + ant-design-jeecg-vue/.editorconfig | 39 + ant-design-jeecg-vue/.gitattributes | 1 + ant-design-jeecg-vue/.gitignore | 21 + ant-design-jeecg-vue/.prettierrc | 5 + ant-design-jeecg-vue/LICENSE | 21 + ant-design-jeecg-vue/README.md | 147 + ant-design-jeecg-vue/babel.config.js | 5 + ant-design-jeecg-vue/idea.config.js | 24 + ant-design-jeecg-vue/package.json | 98 + ant-design-jeecg-vue/public/avatar2.jpg | Bin 0 -> 80189 bytes ant-design-jeecg-vue/public/color.less | 7684 ++++++++++++++ ant-design-jeecg-vue/public/index.html | 238 + ant-design-jeecg-vue/public/logo.png | Bin 0 -> 20228 bytes ant-design-jeecg-vue/public/v2.js | 1 + ant-design-jeecg-vue/src/App.vue | 44 + ant-design-jeecg-vue/src/api/api.js | 129 + ant-design-jeecg-vue/src/api/index.js | 10 + ant-design-jeecg-vue/src/api/login.js | 49 + ant-design-jeecg-vue/src/api/manage.js | 99 + .../src/assets/background.svg | 69 + .../src/assets/less/index.less | 21 + ant-design-jeecg-vue/src/assets/logo.png | Bin 0 -> 20228 bytes ant-design-jeecg-vue/src/assets/logo.svg | 43 + .../src/components/AvatarList/Item.vue | 46 + .../src/components/AvatarList/List.vue | 100 + .../src/components/AvatarList/index.js | 4 + .../src/components/AvatarList/index.less | 60 + .../src/components/ChartCard.vue | 111 + .../src/components/CountDown/CountDown.vue | 103 + .../src/components/CountDown/index.js | 3 + .../src/components/Ellipsis/Ellipsis.vue | 63 + .../src/components/Ellipsis/index.js | 3 + .../src/components/NumberInfo/NumberInfo.vue | 54 + .../src/components/NumberInfo/index.js | 3 + .../src/components/NumberInfo/index.less | 55 + .../src/components/Trend/Trend.vue | 41 + .../src/components/Trend/index.js | 3 + .../src/components/Trend/index.less | 42 + .../src/components/_util/StringUtil.js | 25 + .../src/components/_util/util.js | 12 + .../src/components/chart/Bar.vue | 57 + .../src/components/chart/Liquid.vue | 67 + .../src/components/chart/MiniArea.vue | 67 + .../src/components/chart/MiniBar.vue | 68 + .../src/components/chart/MiniProgress.vue | 75 + .../src/components/chart/Radar.vue | 68 + .../src/components/chart/RankList.vue | 77 + .../src/components/chart/TransferBar.vue | 64 + .../src/components/chart/Trend.vue | 82 + .../src/components/chart/chart.scss | 13 + .../src/components/dict/DictSelectTag.vue | 47 + .../src/components/dict/DictSelectUtil.js | 61 + .../src/components/dict/README.md | 36 + .../src/components/dict/UserInfoTag.vue | 22 + .../src/components/dict/index.js | 7 + .../src/components/index.less | 4 + .../src/components/jeecg/JDate.vue | 74 + .../src/components/jeecg/README.md | 43 + .../src/components/layouts/BasicLayout.vue | 60 + .../src/components/layouts/BlankLayout.vue | 16 + .../src/components/layouts/IframePageView.vue | 47 + .../src/components/layouts/PageView.vue | 85 + .../src/components/layouts/RouteView.vue | 17 + .../src/components/layouts/TabLayout.vue | 213 + .../src/components/layouts/UserLayout.vue | 150 + .../src/components/layouts/index.js | 8 + .../src/components/menu/Contextmenu.vue | 71 + .../src/components/menu/SideMenu.vue | 62 + .../src/components/menu/index.js | 162 + .../src/components/page/GlobalFooter.vue | 51 + .../src/components/page/GlobalHeader.vue | 127 + .../src/components/page/GlobalLayout.vue | 596 ++ .../src/components/page/PageHeader.vue | 238 + .../src/components/page/PageLayout.vue | 127 + .../src/components/page/SHeaderNotice.vue | 58 + .../src/components/setting/SettingDrawer.vue | 314 + .../src/components/setting/SettingItem.vue | 38 + .../src/components/table/README.md | 292 + .../src/components/table/StandardTable.vue | 252 + .../src/components/table/index.js | 265 + .../src/components/tools/Breadcrumb.vue | 48 + .../src/components/tools/DetailList.vue | 147 + .../src/components/tools/FooterToolBar.vue | 32 + .../src/components/tools/HeadInfo.vue | 67 + .../src/components/tools/HeaderNotice.vue | 85 + .../src/components/tools/Logo.vue | 33 + .../src/components/tools/TwoStepCaptcha.vue | 89 + .../src/components/tools/UserMenu.vue | 93 + .../src/components/tools/setting.js | 95 + .../src/config/router.config.js | 394 + ant-design-jeecg-vue/src/defaultSettings.js | 31 + ant-design-jeecg-vue/src/main.js | 61 + ant-design-jeecg-vue/src/permission.js | 75 + ant-design-jeecg-vue/src/router/README.md | 139 + ant-design-jeecg-vue/src/router/index.js | 12 + ant-design-jeecg-vue/src/store/getters.js | 17 + ant-design-jeecg-vue/src/store/index.js | 27 + ant-design-jeecg-vue/src/store/modules/app.js | 121 + .../src/store/modules/permission.js | 90 + .../src/store/modules/user.js | 100 + .../src/store/mutation-types.js | 17 + ant-design-jeecg-vue/src/utils/auth.js | 19 + ant-design-jeecg-vue/src/utils/axios.js | 37 + ant-design-jeecg-vue/src/utils/device.js | 23 + ant-design-jeecg-vue/src/utils/filter.js | 18 + .../src/utils/hasPermission.js | 26 + ant-design-jeecg-vue/src/utils/mixin.js | 39 + ant-design-jeecg-vue/src/utils/permissions.js | 8 + ant-design-jeecg-vue/src/utils/request.js | 99 + ant-design-jeecg-vue/src/utils/storage.js | 78 + ant-design-jeecg-vue/src/utils/util.js | 131 + ant-design-jeecg-vue/src/views/404.vue | 15 + ant-design-jeecg-vue/src/views/Home.vue | 163 + .../src/views/account/center/Index.vue | 287 + .../src/views/account/center/page/App.vue | 113 + .../src/views/account/center/page/Article.vue | 24 + .../src/views/account/center/page/Project.vue | 17 + .../src/views/account/center/page/index.js | 5 + .../views/account/settings/AvatarModal.vue | 103 + .../views/account/settings/BaseSetting.vue | 161 + .../src/views/account/settings/Binding.vue | 25 + .../src/views/account/settings/Custom.vue | 75 + .../src/views/account/settings/Index.vue | 154 + .../views/account/settings/Notification.vue | 25 + .../src/views/account/settings/Security.vue | 41 + .../src/views/dashboard/Analysis.vue | 267 + .../src/views/dashboard/Monitor.vue | 15 + .../src/views/dashboard/Workplace.vue | 361 + .../src/views/exception/403.vue | 17 + .../src/views/exception/404.vue | 17 + .../src/views/exception/500.vue | 17 + .../src/views/exception/ExceptionPage.vue | 88 + .../src/views/exception/type.js | 19 + .../src/views/form/BasicForm.vue | 138 + .../views/form/advancedForm/AdvancedForm.vue | 206 + .../form/advancedForm/RepositoryForm.vue | 119 + .../src/views/form/advancedForm/TaskForm.vue | 107 + .../src/views/form/stepForm/Step1.vue | 60 + .../src/views/form/stepForm/Step2.vue | 82 + .../src/views/form/stepForm/Step3.vue | 69 + .../src/views/form/stepForm/StepForm.vue | 62 + .../src/views/jeecg/FlowTest.vue | 93 + .../src/views/jeecg/JeecgDemoList.vue | 404 + .../src/views/jeecg/JeecgOrderMainList.vue | 316 + .../src/views/jeecg/PrintDemoList.vue | 208 + .../src/views/jeecg/helloworld.vue | 66 + .../src/views/jeecg/helloworld2.vue | 31 + .../views/jeecg/modules/JeecgDemoModal.vue | 181 + .../jeecg/modules/JeecgDemoTabsModal.vue | 285 + .../jeecg/modules/JeecgOrderMainModal.vue | 304 + .../views/jeecg/modules/SuperQueryModal.vue | 95 + .../jeecg/tablist/JeecgOrderCustomerList.vue | 293 + .../jeecg/tablist/JeecgOrderDMainList.vue | 347 + .../jeecg/tablist/JeecgOrderTicketList.vue | 273 + .../tablist/form/JeecgOrderCustomerModal.vue | 383 + .../tablist/form/JeecgOrderDMainModal.vue | 304 + .../tablist/form/JeecgOrderTicketModal.vue | 184 + .../src/views/list/CardList.vue | 110 + .../src/views/list/PermissionList.vue | 272 + .../src/views/list/RoleList.vue | 182 + .../src/views/list/StandardList.vue | 164 + .../src/views/list/TableInnerEditList.vue | 270 + .../src/views/list/TableList.vue | 337 + .../src/views/list/UserList.vue | 264 + .../src/views/list/modules/RoleModal.vue | 203 + .../src/views/list/search/SearchLayout.vue | 78 + .../src/views/profile/advanced/Advanced.vue | 342 + .../src/views/profile/basic/Index.vue | 255 + .../src/views/result/Error.vue | 45 + .../src/views/result/Result.vue | 91 + .../src/views/result/Success.vue | 92 + .../src/views/system/DepartList.vue | 417 + .../src/views/system/DepartList2.vue | 270 + .../src/views/system/DictList.vue | 460 + .../src/views/system/LogList.vue | 260 + .../src/views/system/PermissionList.vue | 256 + .../src/views/system/QuartzJobList.vue | 365 + .../src/views/system/RoleList.vue | 327 + .../src/views/system/SysAnnouncementList.vue | 406 + .../src/views/system/UserList.vue | 502 + .../src/views/system/modules/DepartModal.vue | 194 + .../views/system/modules/DictItemModal.vue | 154 + .../src/views/system/modules/DictModal.vue | 130 + .../views/system/modules/PasswordModal.vue | 136 + .../views/system/modules/PermissionModal.vue | 283 + .../views/system/modules/QuartzJobModal.vue | 157 + .../src/views/system/modules/RoleModal.vue | 155 + .../system/modules/SysAnnouncementModal.vue | 225 + .../src/views/system/modules/UserModal.vue | 378 + .../views/system/modules/UserRoleModal.vue | 168 + .../src/views/system/modules/icon/Icon.less | 35 + .../src/views/system/modules/icon/Icons.vue | 123 + ant-design-jeecg-vue/src/views/user/Login.vue | 314 + .../src/views/user/Register.vue | 316 + .../src/views/user/RegisterResult.vue | 50 + ant-design-jeecg-vue/vue.config.js | 73 + ant-design-jeecg-vue/yarn.lock | 9448 +++++++++++++++++ ...1\271\347\233\256\350\257\264\346\230\216" | 9 + jeecg-boot/docs/db/sys-init-20190128.sql | 871 ++ jeecg-boot/pom.xml | 193 + .../main/java/org/jeecg/JeecgApplication.java | 17 + .../java/org/jeecg/JeecgCodeGenerator.java | 46 + .../java/org/jeecg/common/api/vo/Result.java | 84 + .../jeecg/common/aspect/AutoLogAspect.java | 99 + .../common/aspect/annotation/AutoLog.java | 36 + .../jeecg/common/constant/CommonConstant.java | 60 + .../common/constant/CommonSendStatus.java | 15 + .../common/exception/JeecgBootException.java | 19 + .../exception/JeecgBootExceptionHandler.java | 55 + .../jeecg/common/system/api/ISysBaseAPI.java | 12 + .../system/controller/CommonController.java | 143 + .../java/org/jeecg/common/util/DateUtils.java | 620 ++ .../java/org/jeecg/common/util/IPUtils.java | 58 + .../java/org/jeecg/common/util/MD5Util.java | 41 + .../org/jeecg/common/util/MyClassLoader.java | 87 + .../org/jeecg/common/util/PasswordUtil.java | 179 + .../java/org/jeecg/common/util/RedisUtil.java | 571 + .../jeecg/common/util/SpringContextUtils.java | 84 + .../jeecg/common/util/YouBianCodeUtil.java | 173 + .../org/jeecg/common/util/oConvertUtils.java | 535 + .../util/superSearch/ObjectParseUtil.java | 60 + .../util/superSearch/QueryRuleEnum.java | 60 + .../common/util/superSearch/QueryRuleVo.java | 11 + .../org/jeecg/config/MybatisPlusConfig.java | 35 + .../java/org/jeecg/config/RedisConfig.java | 80 + .../java/org/jeecg/config/ShiroConfig.java | 134 + .../java/org/jeecg/config/Swagger2Config.java | 97 + .../org/jeecg/config/WebMvcConfiguration.java | 33 + .../config/mybatis/MybatisInterceptor.java | 144 + .../modules/demo/mock/MockController.java | 86 + .../modules/demo/mock/json/permission.json | 156 + .../demo/mock/json/permission_no_page.json | 150 + .../jeecg/modules/demo/mock/json/role.json | 608 ++ .../jeecg/modules/demo/mock/json/service.json | 103 + .../jeecg/modules/demo/mock/json/user.json | 2388 +++++ .../demo/mock/json/workplace_activity.json | 85 + .../demo/mock/json/workplace_projects.json | 61 + .../demo/mock/json/workplace_radar.json | 43 + .../demo/mock/json/workplace_teams.json | 32 + .../demo/test/controller/AutoController.java | 42 + .../test/controller/JeecgDemoController.java | 296 + .../controller/JeecgOrderDMainController.java | 404 + .../controller/JeecgOrderMainController.java | 205 + .../modules/demo/test/entity/JeecgDemo.java | 62 + .../demo/test/entity/JeecgOrderCustomer.java | 50 + .../demo/test/entity/JeecgOrderMain.java | 50 + .../demo/test/entity/JeecgOrderTicket.java | 46 + .../demo/test/mapper/JeecgDemoMapper.java | 18 + .../test/mapper/JeecgOrderCustomerMapper.java | 29 + .../test/mapper/JeecgOrderMainMapper.java | 17 + .../test/mapper/JeecgOrderTicketMapper.java | 29 + .../demo/test/mapper/xml/JeecgDemoMapper.xml | 9 + .../mapper/xml/JeecgOrderCustomerMapper.xml | 5 + .../test/mapper/xml/JeecgOrderMainMapper.xml | 5 + .../mapper/xml/JeecgOrderTicketMapper.xml | 5 + .../demo/test/service/IJeecgDemoService.java | 17 + .../service/IJeecgOrderCustomerService.java | 18 + .../test/service/IJeecgOrderMainService.java | 44 + .../service/IJeecgOrderTicketService.java | 18 + .../service/impl/JeecgDemoServiceImpl.java | 61 + .../impl/JeecgOrderCustomerServiceImpl.java | 30 + .../impl/JeecgOrderMainServiceImpl.java | 88 + .../impl/JeecgOrderTicketServiceImpl.java | 29 + .../demo/test/vo/JeecgOrderMainPage.java | 16 + .../controller/QuartzJobController.java | 297 + .../modules/quartz/entity/QuartzJob.java | 52 + .../jeecg/modules/quartz/job/SampleJob.java | 23 + .../modules/quartz/job/SampleParamJob.java | 32 + .../quartz/mapper/QuartzJobMapper.java | 20 + .../quartz/mapper/xml/QuartzJobMapper.xml | 9 + .../quartz/service/IQuartzJobService.java | 19 + .../service/impl/QuartzJobServiceImpl.java | 29 + .../jeecg/modules/shiro/authc/JwtToken.java | 28 + .../jeecg/modules/shiro/authc/MyRealm.java | 185 + .../modules/shiro/authc/aop/JwtFilter.java | 73 + .../shiro/authc/aop/ResourceCheckFilter.java | 72 + .../modules/shiro/authc/util/JwtUtil.java | 87 + .../jeecg/modules/shiro/vo/DefContants.java | 7 + .../jeecg/modules/shiro/vo/ResponseBean.java | 42 + .../org/jeecg/modules/shiro/vo/UserBean.java | 13 + .../modules/shiro/web/TestWebController.java | 85 + .../controller/FindsDepartsChildrenUtil.java | 103 + .../system/controller/LoginController.java | 96 + .../controller/SysAnnouncementController.java | 230 + .../controller/SysDepartController.java | 190 + .../system/controller/SysDictController.java | 234 + .../controller/SysDictItemController.java | 161 + .../system/controller/SysLogController.java | 133 + .../controller/SysPermissionController.java | 408 + .../system/controller/SysRoleController.java | 233 + .../system/controller/SysUserController.java | 283 + .../system/entity/SysAnnouncement.java | 70 + .../modules/system/entity/SysDepart.java | 114 + .../jeecg/modules/system/entity/SysDict.java | 75 + .../modules/system/entity/SysDictItem.java | 74 + .../jeecg/modules/system/entity/SysLog.java | 108 + .../modules/system/entity/SysPermission.java | 118 + .../jeecg/modules/system/entity/SysRole.java | 78 + .../system/entity/SysRolePermission.java | 51 + .../jeecg/modules/system/entity/SysUser.java | 116 + .../modules/system/entity/SysUserRole.java | 50 + .../system/mapper/SysAnnouncementMapper.java | 17 + .../system/mapper/SysDepartMapper.java | 20 + .../system/mapper/SysDictItemMapper.java | 16 + .../modules/system/mapper/SysDictMapper.java | 24 + .../modules/system/mapper/SysLogMapper.java | 42 + .../system/mapper/SysPermissionMapper.java | 28 + .../modules/system/mapper/SysRoleMapper.java | 17 + .../mapper/SysRolePermissionMapper.java | 16 + .../modules/system/mapper/SysUserMapper.java | 21 + .../system/mapper/SysUserRoleMapper.java | 21 + .../mapper/xml/SysAnnouncementMapper.xml | 5 + .../system/mapper/xml/SysDepartMapper.xml | 4 + .../system/mapper/xml/SysDictItemMapper.xml | 5 + .../system/mapper/xml/SysDictMapper.xml | 19 + .../system/mapper/xml/SysLogMapper.xml | 25 + .../system/mapper/xml/SysPermissionMapper.xml | 50 + .../system/mapper/xml/SysUserMapper.xml | 10 + .../modules/system/model/DepartIdModel.java | 78 + .../system/model/SysDepartTreeModel.java | 344 + .../modules/system/model/SysDictTree.java | 89 + .../modules/system/model/SysLoginModel.java | 37 + .../system/model/SysPermissionTree.java | 304 + .../jeecg/modules/system/model/TreeModel.java | 124 + .../modules/system/model/TreeSelectModel.java | 72 + .../service/ISysAnnouncementService.java | 14 + .../system/service/ISysDepartService.java | 52 + .../system/service/ISysDictItemService.java | 16 + .../system/service/ISysDictService.java | 20 + .../system/service/ISysLogService.java | 43 + .../system/service/ISysPermissionService.java | 34 + .../service/ISysRolePermissionService.java | 23 + .../system/service/ISysRoleService.java | 22 + .../system/service/ISysUserRoleService.java | 16 + .../system/service/ISysUserService.java | 40 + .../impl/SysAnnouncementServiceImpl.java | 19 + .../system/service/impl/SysBaseAPI.java | 48 + .../service/impl/SysDepartServiceImpl.java | 196 + .../service/impl/SysDictItemServiceImpl.java | 20 + .../service/impl/SysDictServiceImpl.java | 37 + .../service/impl/SysLogServiceImpl.java | 49 + .../impl/SysPermissionServiceImpl.java | 125 + .../impl/SysRolePermissionServiceImpl.java | 42 + .../service/impl/SysRoleServiceImpl.java | 27 + .../service/impl/SysUserRoleServiceImpl.java | 20 + .../service/impl/SysUserServiceImpl.java | 73 + jeecg-boot/src/main/resources/application.yml | 95 + jeecg-boot/src/main/resources/banner.txt | 7 + .../src/main/resources/db/data-mysql.sql | 8 + .../src/main/resources/db/schema-mysql.sql | 11 + .../controller/${entityName}Controller.javai | 165 + .../entity/${entityName}.javai | 39 + .../mapper/${entityName}Mapper.javai | 17 + .../mapper/xml/${entityName}Mapper.xml | 5 + .../service/I${entityName}Service.javai | 14 + .../impl/${entityName}ServiceImpl.javai | 19 + .../vue/${entityName}List.vuei | 287 + .../vue/modules/${entityName}Modal.vuei | 155 + .../controller/${entityName}Controller.javai | 207 + .../entity/${entityName}.javai | 39 + .../mapper/${entityName}Mapper.javai | 27 + .../mapper/xml/${entityName}Mapper.xml | 5 + .../service/I${entityName}Service.javai | 41 + .../impl/${entityName}ServiceImpl.javai | 87 + .../vue/${entityName}List.vuei | 287 + .../vue/modules/${entityName}Modal.vuei | 155 + .../${entityName}Controller.javai | 165 + .../${entityPackage}/${entityName}.javai | 39 + .../${entityName}Mapper.javai | 17 + .../xml/${entityName}Mapper.xml | 5 + .../I${entityName}Service.javai | 14 + .../impl/${entityName}ServiceImpl.javai | 19 + .../${entityPackage}/${entityName}List.vuei | 287 + .../modules/${entityName}Modal.vuei | 155 + .../resources/jeecg/jeecg_config.properties | 30 + .../resources/jeecg/jeecg_database.properties | 27 + .../src/main/resources/logback-spring.xml | 105 + .../main/resources/processes/MyProcess.bpmn | 40 + .../src/main/resources/static/demo1.html | 1 + .../main/resources/static/view/userlist.html | 122 + .../src/main/resources/templates/demo3.ftl | 17 + .../src/test/java/org/jeecg/ActivitiTest.java | 28 + .../src/test/java/org/jeecg/SampleTest.java | 48 + 385 files changed, 60058 insertions(+), 1 deletion(-) delete mode 100644 111 create mode 100644 README.md create mode 100644 ant-design-jeecg-vue/.editorconfig create mode 100644 ant-design-jeecg-vue/.gitattributes create mode 100644 ant-design-jeecg-vue/.gitignore create mode 100644 ant-design-jeecg-vue/.prettierrc create mode 100644 ant-design-jeecg-vue/LICENSE create mode 100644 ant-design-jeecg-vue/README.md create mode 100644 ant-design-jeecg-vue/babel.config.js create mode 100644 ant-design-jeecg-vue/idea.config.js create mode 100644 ant-design-jeecg-vue/package.json create mode 100644 ant-design-jeecg-vue/public/avatar2.jpg create mode 100644 ant-design-jeecg-vue/public/color.less create mode 100644 ant-design-jeecg-vue/public/index.html create mode 100644 ant-design-jeecg-vue/public/logo.png create mode 100644 ant-design-jeecg-vue/public/v2.js create mode 100644 ant-design-jeecg-vue/src/App.vue create mode 100644 ant-design-jeecg-vue/src/api/api.js create mode 100644 ant-design-jeecg-vue/src/api/index.js create mode 100644 ant-design-jeecg-vue/src/api/login.js create mode 100644 ant-design-jeecg-vue/src/api/manage.js create mode 100644 ant-design-jeecg-vue/src/assets/background.svg create mode 100644 ant-design-jeecg-vue/src/assets/less/index.less create mode 100644 ant-design-jeecg-vue/src/assets/logo.png create mode 100644 ant-design-jeecg-vue/src/assets/logo.svg create mode 100644 ant-design-jeecg-vue/src/components/AvatarList/Item.vue create mode 100644 ant-design-jeecg-vue/src/components/AvatarList/List.vue create mode 100644 ant-design-jeecg-vue/src/components/AvatarList/index.js create mode 100644 ant-design-jeecg-vue/src/components/AvatarList/index.less create mode 100644 ant-design-jeecg-vue/src/components/ChartCard.vue create mode 100644 ant-design-jeecg-vue/src/components/CountDown/CountDown.vue create mode 100644 ant-design-jeecg-vue/src/components/CountDown/index.js create mode 100644 ant-design-jeecg-vue/src/components/Ellipsis/Ellipsis.vue create mode 100644 ant-design-jeecg-vue/src/components/Ellipsis/index.js create mode 100644 ant-design-jeecg-vue/src/components/NumberInfo/NumberInfo.vue create mode 100644 ant-design-jeecg-vue/src/components/NumberInfo/index.js create mode 100644 ant-design-jeecg-vue/src/components/NumberInfo/index.less create mode 100644 ant-design-jeecg-vue/src/components/Trend/Trend.vue create mode 100644 ant-design-jeecg-vue/src/components/Trend/index.js create mode 100644 ant-design-jeecg-vue/src/components/Trend/index.less create mode 100644 ant-design-jeecg-vue/src/components/_util/StringUtil.js create mode 100644 ant-design-jeecg-vue/src/components/_util/util.js create mode 100644 ant-design-jeecg-vue/src/components/chart/Bar.vue create mode 100644 ant-design-jeecg-vue/src/components/chart/Liquid.vue create mode 100644 ant-design-jeecg-vue/src/components/chart/MiniArea.vue create mode 100644 ant-design-jeecg-vue/src/components/chart/MiniBar.vue create mode 100644 ant-design-jeecg-vue/src/components/chart/MiniProgress.vue create mode 100644 ant-design-jeecg-vue/src/components/chart/Radar.vue create mode 100644 ant-design-jeecg-vue/src/components/chart/RankList.vue create mode 100644 ant-design-jeecg-vue/src/components/chart/TransferBar.vue create mode 100644 ant-design-jeecg-vue/src/components/chart/Trend.vue create mode 100644 ant-design-jeecg-vue/src/components/chart/chart.scss create mode 100644 ant-design-jeecg-vue/src/components/dict/DictSelectTag.vue create mode 100644 ant-design-jeecg-vue/src/components/dict/DictSelectUtil.js create mode 100644 ant-design-jeecg-vue/src/components/dict/README.md create mode 100644 ant-design-jeecg-vue/src/components/dict/UserInfoTag.vue create mode 100644 ant-design-jeecg-vue/src/components/dict/index.js create mode 100644 ant-design-jeecg-vue/src/components/index.less create mode 100644 ant-design-jeecg-vue/src/components/jeecg/JDate.vue create mode 100644 ant-design-jeecg-vue/src/components/jeecg/README.md create mode 100644 ant-design-jeecg-vue/src/components/layouts/BasicLayout.vue create mode 100644 ant-design-jeecg-vue/src/components/layouts/BlankLayout.vue create mode 100644 ant-design-jeecg-vue/src/components/layouts/IframePageView.vue create mode 100644 ant-design-jeecg-vue/src/components/layouts/PageView.vue create mode 100644 ant-design-jeecg-vue/src/components/layouts/RouteView.vue create mode 100644 ant-design-jeecg-vue/src/components/layouts/TabLayout.vue create mode 100644 ant-design-jeecg-vue/src/components/layouts/UserLayout.vue create mode 100644 ant-design-jeecg-vue/src/components/layouts/index.js create mode 100644 ant-design-jeecg-vue/src/components/menu/Contextmenu.vue create mode 100644 ant-design-jeecg-vue/src/components/menu/SideMenu.vue create mode 100644 ant-design-jeecg-vue/src/components/menu/index.js create mode 100644 ant-design-jeecg-vue/src/components/page/GlobalFooter.vue create mode 100644 ant-design-jeecg-vue/src/components/page/GlobalHeader.vue create mode 100644 ant-design-jeecg-vue/src/components/page/GlobalLayout.vue create mode 100644 ant-design-jeecg-vue/src/components/page/PageHeader.vue create mode 100644 ant-design-jeecg-vue/src/components/page/PageLayout.vue create mode 100644 ant-design-jeecg-vue/src/components/page/SHeaderNotice.vue create mode 100644 ant-design-jeecg-vue/src/components/setting/SettingDrawer.vue create mode 100644 ant-design-jeecg-vue/src/components/setting/SettingItem.vue create mode 100644 ant-design-jeecg-vue/src/components/table/README.md create mode 100644 ant-design-jeecg-vue/src/components/table/StandardTable.vue create mode 100644 ant-design-jeecg-vue/src/components/table/index.js create mode 100644 ant-design-jeecg-vue/src/components/tools/Breadcrumb.vue create mode 100644 ant-design-jeecg-vue/src/components/tools/DetailList.vue create mode 100644 ant-design-jeecg-vue/src/components/tools/FooterToolBar.vue create mode 100644 ant-design-jeecg-vue/src/components/tools/HeadInfo.vue create mode 100644 ant-design-jeecg-vue/src/components/tools/HeaderNotice.vue create mode 100644 ant-design-jeecg-vue/src/components/tools/Logo.vue create mode 100644 ant-design-jeecg-vue/src/components/tools/TwoStepCaptcha.vue create mode 100644 ant-design-jeecg-vue/src/components/tools/UserMenu.vue create mode 100644 ant-design-jeecg-vue/src/components/tools/setting.js create mode 100644 ant-design-jeecg-vue/src/config/router.config.js create mode 100644 ant-design-jeecg-vue/src/defaultSettings.js create mode 100644 ant-design-jeecg-vue/src/main.js create mode 100644 ant-design-jeecg-vue/src/permission.js create mode 100644 ant-design-jeecg-vue/src/router/README.md create mode 100644 ant-design-jeecg-vue/src/router/index.js create mode 100644 ant-design-jeecg-vue/src/store/getters.js create mode 100644 ant-design-jeecg-vue/src/store/index.js create mode 100644 ant-design-jeecg-vue/src/store/modules/app.js create mode 100644 ant-design-jeecg-vue/src/store/modules/permission.js create mode 100644 ant-design-jeecg-vue/src/store/modules/user.js create mode 100644 ant-design-jeecg-vue/src/store/mutation-types.js create mode 100644 ant-design-jeecg-vue/src/utils/auth.js create mode 100644 ant-design-jeecg-vue/src/utils/axios.js create mode 100644 ant-design-jeecg-vue/src/utils/device.js create mode 100644 ant-design-jeecg-vue/src/utils/filter.js create mode 100644 ant-design-jeecg-vue/src/utils/hasPermission.js create mode 100644 ant-design-jeecg-vue/src/utils/mixin.js create mode 100644 ant-design-jeecg-vue/src/utils/permissions.js create mode 100644 ant-design-jeecg-vue/src/utils/request.js create mode 100644 ant-design-jeecg-vue/src/utils/storage.js create mode 100644 ant-design-jeecg-vue/src/utils/util.js create mode 100644 ant-design-jeecg-vue/src/views/404.vue create mode 100644 ant-design-jeecg-vue/src/views/Home.vue create mode 100644 ant-design-jeecg-vue/src/views/account/center/Index.vue create mode 100644 ant-design-jeecg-vue/src/views/account/center/page/App.vue create mode 100644 ant-design-jeecg-vue/src/views/account/center/page/Article.vue create mode 100644 ant-design-jeecg-vue/src/views/account/center/page/Project.vue create mode 100644 ant-design-jeecg-vue/src/views/account/center/page/index.js create mode 100644 ant-design-jeecg-vue/src/views/account/settings/AvatarModal.vue create mode 100644 ant-design-jeecg-vue/src/views/account/settings/BaseSetting.vue create mode 100644 ant-design-jeecg-vue/src/views/account/settings/Binding.vue create mode 100644 ant-design-jeecg-vue/src/views/account/settings/Custom.vue create mode 100644 ant-design-jeecg-vue/src/views/account/settings/Index.vue create mode 100644 ant-design-jeecg-vue/src/views/account/settings/Notification.vue create mode 100644 ant-design-jeecg-vue/src/views/account/settings/Security.vue create mode 100644 ant-design-jeecg-vue/src/views/dashboard/Analysis.vue create mode 100644 ant-design-jeecg-vue/src/views/dashboard/Monitor.vue create mode 100644 ant-design-jeecg-vue/src/views/dashboard/Workplace.vue create mode 100644 ant-design-jeecg-vue/src/views/exception/403.vue create mode 100644 ant-design-jeecg-vue/src/views/exception/404.vue create mode 100644 ant-design-jeecg-vue/src/views/exception/500.vue create mode 100644 ant-design-jeecg-vue/src/views/exception/ExceptionPage.vue create mode 100644 ant-design-jeecg-vue/src/views/exception/type.js create mode 100644 ant-design-jeecg-vue/src/views/form/BasicForm.vue create mode 100644 ant-design-jeecg-vue/src/views/form/advancedForm/AdvancedForm.vue create mode 100644 ant-design-jeecg-vue/src/views/form/advancedForm/RepositoryForm.vue create mode 100644 ant-design-jeecg-vue/src/views/form/advancedForm/TaskForm.vue create mode 100644 ant-design-jeecg-vue/src/views/form/stepForm/Step1.vue create mode 100644 ant-design-jeecg-vue/src/views/form/stepForm/Step2.vue create mode 100644 ant-design-jeecg-vue/src/views/form/stepForm/Step3.vue create mode 100644 ant-design-jeecg-vue/src/views/form/stepForm/StepForm.vue create mode 100644 ant-design-jeecg-vue/src/views/jeecg/FlowTest.vue create mode 100644 ant-design-jeecg-vue/src/views/jeecg/JeecgDemoList.vue create mode 100644 ant-design-jeecg-vue/src/views/jeecg/JeecgOrderMainList.vue create mode 100644 ant-design-jeecg-vue/src/views/jeecg/PrintDemoList.vue create mode 100644 ant-design-jeecg-vue/src/views/jeecg/helloworld.vue create mode 100644 ant-design-jeecg-vue/src/views/jeecg/helloworld2.vue create mode 100644 ant-design-jeecg-vue/src/views/jeecg/modules/JeecgDemoModal.vue create mode 100644 ant-design-jeecg-vue/src/views/jeecg/modules/JeecgDemoTabsModal.vue create mode 100644 ant-design-jeecg-vue/src/views/jeecg/modules/JeecgOrderMainModal.vue create mode 100644 ant-design-jeecg-vue/src/views/jeecg/modules/SuperQueryModal.vue create mode 100644 ant-design-jeecg-vue/src/views/jeecg/tablist/JeecgOrderCustomerList.vue create mode 100644 ant-design-jeecg-vue/src/views/jeecg/tablist/JeecgOrderDMainList.vue create mode 100644 ant-design-jeecg-vue/src/views/jeecg/tablist/JeecgOrderTicketList.vue create mode 100644 ant-design-jeecg-vue/src/views/jeecg/tablist/form/JeecgOrderCustomerModal.vue create mode 100644 ant-design-jeecg-vue/src/views/jeecg/tablist/form/JeecgOrderDMainModal.vue create mode 100644 ant-design-jeecg-vue/src/views/jeecg/tablist/form/JeecgOrderTicketModal.vue create mode 100644 ant-design-jeecg-vue/src/views/list/CardList.vue create mode 100644 ant-design-jeecg-vue/src/views/list/PermissionList.vue create mode 100644 ant-design-jeecg-vue/src/views/list/RoleList.vue create mode 100644 ant-design-jeecg-vue/src/views/list/StandardList.vue create mode 100644 ant-design-jeecg-vue/src/views/list/TableInnerEditList.vue create mode 100644 ant-design-jeecg-vue/src/views/list/TableList.vue create mode 100644 ant-design-jeecg-vue/src/views/list/UserList.vue create mode 100644 ant-design-jeecg-vue/src/views/list/modules/RoleModal.vue create mode 100644 ant-design-jeecg-vue/src/views/list/search/SearchLayout.vue create mode 100644 ant-design-jeecg-vue/src/views/profile/advanced/Advanced.vue create mode 100644 ant-design-jeecg-vue/src/views/profile/basic/Index.vue create mode 100644 ant-design-jeecg-vue/src/views/result/Error.vue create mode 100644 ant-design-jeecg-vue/src/views/result/Result.vue create mode 100644 ant-design-jeecg-vue/src/views/result/Success.vue create mode 100644 ant-design-jeecg-vue/src/views/system/DepartList.vue create mode 100644 ant-design-jeecg-vue/src/views/system/DepartList2.vue create mode 100644 ant-design-jeecg-vue/src/views/system/DictList.vue create mode 100644 ant-design-jeecg-vue/src/views/system/LogList.vue create mode 100644 ant-design-jeecg-vue/src/views/system/PermissionList.vue create mode 100644 ant-design-jeecg-vue/src/views/system/QuartzJobList.vue create mode 100644 ant-design-jeecg-vue/src/views/system/RoleList.vue create mode 100644 ant-design-jeecg-vue/src/views/system/SysAnnouncementList.vue create mode 100644 ant-design-jeecg-vue/src/views/system/UserList.vue create mode 100644 ant-design-jeecg-vue/src/views/system/modules/DepartModal.vue create mode 100644 ant-design-jeecg-vue/src/views/system/modules/DictItemModal.vue create mode 100644 ant-design-jeecg-vue/src/views/system/modules/DictModal.vue create mode 100644 ant-design-jeecg-vue/src/views/system/modules/PasswordModal.vue create mode 100644 ant-design-jeecg-vue/src/views/system/modules/PermissionModal.vue create mode 100644 ant-design-jeecg-vue/src/views/system/modules/QuartzJobModal.vue create mode 100644 ant-design-jeecg-vue/src/views/system/modules/RoleModal.vue create mode 100644 ant-design-jeecg-vue/src/views/system/modules/SysAnnouncementModal.vue create mode 100644 ant-design-jeecg-vue/src/views/system/modules/UserModal.vue create mode 100644 ant-design-jeecg-vue/src/views/system/modules/UserRoleModal.vue create mode 100644 ant-design-jeecg-vue/src/views/system/modules/icon/Icon.less create mode 100644 ant-design-jeecg-vue/src/views/system/modules/icon/Icons.vue create mode 100644 ant-design-jeecg-vue/src/views/user/Login.vue create mode 100644 ant-design-jeecg-vue/src/views/user/Register.vue create mode 100644 ant-design-jeecg-vue/src/views/user/RegisterResult.vue create mode 100644 ant-design-jeecg-vue/vue.config.js create mode 100644 ant-design-jeecg-vue/yarn.lock create mode 100644 "jeecg-boot/docs/- \351\241\271\347\233\256\350\257\264\346\230\216" create mode 100644 jeecg-boot/docs/db/sys-init-20190128.sql create mode 100644 jeecg-boot/pom.xml create mode 100644 jeecg-boot/src/main/java/org/jeecg/JeecgApplication.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/JeecgCodeGenerator.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/common/api/vo/Result.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/common/aspect/AutoLogAspect.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/common/aspect/annotation/AutoLog.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/common/constant/CommonConstant.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/common/constant/CommonSendStatus.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/common/exception/JeecgBootException.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/common/exception/JeecgBootExceptionHandler.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/common/system/api/ISysBaseAPI.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/common/system/controller/CommonController.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/common/util/DateUtils.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/common/util/IPUtils.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/common/util/MD5Util.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/common/util/MyClassLoader.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/common/util/PasswordUtil.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/common/util/RedisUtil.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/common/util/SpringContextUtils.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/common/util/YouBianCodeUtil.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/common/util/oConvertUtils.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/common/util/superSearch/ObjectParseUtil.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/common/util/superSearch/QueryRuleEnum.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/common/util/superSearch/QueryRuleVo.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/config/MybatisPlusConfig.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/config/RedisConfig.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/config/ShiroConfig.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/config/Swagger2Config.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/config/WebMvcConfiguration.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/config/mybatis/MybatisInterceptor.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/demo/mock/MockController.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/demo/mock/json/permission.json create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/demo/mock/json/permission_no_page.json create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/demo/mock/json/role.json create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/demo/mock/json/service.json create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/demo/mock/json/user.json create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/demo/mock/json/workplace_activity.json create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/demo/mock/json/workplace_projects.json create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/demo/mock/json/workplace_radar.json create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/demo/mock/json/workplace_teams.json create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/demo/test/controller/AutoController.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/demo/test/controller/JeecgDemoController.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/demo/test/controller/JeecgOrderDMainController.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/demo/test/controller/JeecgOrderMainController.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/demo/test/entity/JeecgDemo.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/demo/test/entity/JeecgOrderCustomer.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/demo/test/entity/JeecgOrderMain.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/demo/test/entity/JeecgOrderTicket.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/demo/test/mapper/JeecgDemoMapper.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/demo/test/mapper/JeecgOrderCustomerMapper.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/demo/test/mapper/JeecgOrderMainMapper.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/demo/test/mapper/JeecgOrderTicketMapper.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/demo/test/mapper/xml/JeecgDemoMapper.xml create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/demo/test/mapper/xml/JeecgOrderCustomerMapper.xml create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/demo/test/mapper/xml/JeecgOrderMainMapper.xml create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/demo/test/mapper/xml/JeecgOrderTicketMapper.xml create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/demo/test/service/IJeecgDemoService.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/demo/test/service/IJeecgOrderCustomerService.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/demo/test/service/IJeecgOrderMainService.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/demo/test/service/IJeecgOrderTicketService.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/demo/test/service/impl/JeecgDemoServiceImpl.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/demo/test/service/impl/JeecgOrderCustomerServiceImpl.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/demo/test/service/impl/JeecgOrderMainServiceImpl.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/demo/test/service/impl/JeecgOrderTicketServiceImpl.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/demo/test/vo/JeecgOrderMainPage.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/quartz/controller/QuartzJobController.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/quartz/entity/QuartzJob.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/quartz/job/SampleJob.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/quartz/job/SampleParamJob.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/quartz/mapper/QuartzJobMapper.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/quartz/mapper/xml/QuartzJobMapper.xml create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/quartz/service/IQuartzJobService.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/quartz/service/impl/QuartzJobServiceImpl.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/shiro/authc/JwtToken.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/shiro/authc/MyRealm.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/shiro/authc/aop/JwtFilter.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/shiro/authc/aop/ResourceCheckFilter.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/shiro/authc/util/JwtUtil.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/shiro/vo/DefContants.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/shiro/vo/ResponseBean.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/shiro/vo/UserBean.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/shiro/web/TestWebController.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/controller/FindsDepartsChildrenUtil.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/controller/LoginController.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/controller/SysAnnouncementController.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/controller/SysDepartController.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/controller/SysDictController.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/controller/SysDictItemController.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/controller/SysLogController.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/controller/SysPermissionController.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/controller/SysRoleController.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/controller/SysUserController.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/entity/SysAnnouncement.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/entity/SysDepart.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/entity/SysDict.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/entity/SysDictItem.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/entity/SysLog.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/entity/SysPermission.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/entity/SysRole.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/entity/SysRolePermission.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/entity/SysUser.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/entity/SysUserRole.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/SysAnnouncementMapper.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/SysDepartMapper.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/SysDictItemMapper.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/SysDictMapper.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/SysLogMapper.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/SysPermissionMapper.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/SysRoleMapper.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/SysRolePermissionMapper.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/SysUserRoleMapper.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/xml/SysAnnouncementMapper.xml create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/xml/SysDepartMapper.xml create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/xml/SysDictItemMapper.xml create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/xml/SysDictMapper.xml create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/xml/SysLogMapper.xml create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/xml/SysPermissionMapper.xml create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/model/DepartIdModel.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/model/SysDepartTreeModel.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/model/SysDictTree.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/model/SysLoginModel.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/model/SysPermissionTree.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/model/TreeModel.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/model/TreeSelectModel.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/service/ISysAnnouncementService.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/service/ISysDepartService.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/service/ISysDictItemService.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/service/ISysDictService.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/service/ISysLogService.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/service/ISysPermissionService.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/service/ISysRolePermissionService.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/service/ISysRoleService.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/service/ISysUserRoleService.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/service/ISysUserService.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/service/impl/SysAnnouncementServiceImpl.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/service/impl/SysBaseAPI.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/service/impl/SysDepartServiceImpl.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/service/impl/SysDictItemServiceImpl.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/service/impl/SysDictServiceImpl.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/service/impl/SysLogServiceImpl.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/service/impl/SysPermissionServiceImpl.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/service/impl/SysRolePermissionServiceImpl.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/service/impl/SysRoleServiceImpl.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/service/impl/SysUserRoleServiceImpl.java create mode 100644 jeecg-boot/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java create mode 100644 jeecg-boot/src/main/resources/application.yml create mode 100644 jeecg-boot/src/main/resources/banner.txt create mode 100644 jeecg-boot/src/main/resources/db/data-mysql.sql create mode 100644 jeecg-boot/src/main/resources/db/schema-mysql.sql create mode 100644 jeecg-boot/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai create mode 100644 jeecg-boot/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai create mode 100644 jeecg-boot/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai create mode 100644 jeecg-boot/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/mapper/xml/${entityName}Mapper.xml create mode 100644 jeecg-boot/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai create mode 100644 jeecg-boot/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai create mode 100644 jeecg-boot/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei create mode 100644 jeecg-boot/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei create mode 100644 jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai create mode 100644 jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai create mode 100644 jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai create mode 100644 jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/mapper/xml/${entityName}Mapper.xml create mode 100644 jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai create mode 100644 jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai create mode 100644 jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei create mode 100644 jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei create mode 100644 jeecg-boot/src/main/resources/jeecg/code-template2/java/${bussiPackage}/controller/${entityPackage}/${entityName}Controller.javai create mode 100644 jeecg-boot/src/main/resources/jeecg/code-template2/java/${bussiPackage}/entity/${entityPackage}/${entityName}.javai create mode 100644 jeecg-boot/src/main/resources/jeecg/code-template2/java/${bussiPackage}/mapper/${entityPackage}/${entityName}Mapper.javai create mode 100644 jeecg-boot/src/main/resources/jeecg/code-template2/java/${bussiPackage}/mapper/${entityPackage}/xml/${entityName}Mapper.xml create mode 100644 jeecg-boot/src/main/resources/jeecg/code-template2/java/${bussiPackage}/service/${entityPackage}/I${entityName}Service.javai create mode 100644 jeecg-boot/src/main/resources/jeecg/code-template2/java/${bussiPackage}/service/${entityPackage}/impl/${entityName}ServiceImpl.javai create mode 100644 jeecg-boot/src/main/resources/jeecg/code-template2/java/${bussiPackage}/vue/${entityPackage}/${entityName}List.vuei create mode 100644 jeecg-boot/src/main/resources/jeecg/code-template2/java/${bussiPackage}/vue/${entityPackage}/modules/${entityName}Modal.vuei create mode 100644 jeecg-boot/src/main/resources/jeecg/jeecg_config.properties create mode 100644 jeecg-boot/src/main/resources/jeecg/jeecg_database.properties create mode 100644 jeecg-boot/src/main/resources/logback-spring.xml create mode 100644 jeecg-boot/src/main/resources/processes/MyProcess.bpmn create mode 100644 jeecg-boot/src/main/resources/static/demo1.html create mode 100644 jeecg-boot/src/main/resources/static/view/userlist.html create mode 100644 jeecg-boot/src/main/resources/templates/demo3.ftl create mode 100644 jeecg-boot/src/test/java/org/jeecg/ActivitiTest.java create mode 100644 jeecg-boot/src/test/java/org/jeecg/SampleTest.java diff --git a/111 b/111 deleted file mode 100644 index 5f2f16bf..00000000 --- a/111 +++ /dev/null @@ -1 +0,0 @@ -1111 diff --git a/README.md b/README.md new file mode 100644 index 00000000..a6144420 --- /dev/null +++ b/README.md @@ -0,0 +1,147 @@ +Jeecg-Boot 快速开发平台(前后端分离版本) +=============== + +当前最新版本: 1.0(发布日期:20190225) + +项目介绍: +----------------------------------- +Jeecg-boot 一个全新的版本,采用前后端分离方案,提供强大代码生成器的快速开发平台 +前端页面代码和后端功能代码一键生成,不需要写任何代码,保持jeecg一贯的强大!! + + +技术架构: +----------------------------------- +后端技术: SpringBoot + Mybatis-plus + Shiro + Jwt + Swagger-ui + Redis +前端技术: Ant-design-vue + Vue + Webpack +其他技术: Druid(数据库连接池)、Logback(日志工具) 、poi(Excel工具)、 + Quartz(定时任务)、lombok(简化代码) +项目构建: Maven、Jdk8 + + +前端开发必读文档: + +前端UI组件: Ant Design of Vue +https://vuecomponent.github.io/ant-design-vue/docs/vue/introduce-cn +报表UI组件:viser-vue +https://viserjs.github.io/demo.html#/viser/bar/basic-bar +VUE基础知识: +https://cn.vuejs.org/v2/guide + + + +Overview +---- + +基于 [Ant Design of Vue](https://vuecomponent.github.io/ant-design-vue/docs/vue/introduce-cn/) 实现的 Vue 版 + +[预览地址](http://boot.jeecg.org) **附带一些后台基础用到的列表展示例子** +效果抢先看: + +1. 系统效果 +![输入图片说明](https://static.oschina.net/uploads/img/201902/25154007_icdX.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201902/25153956_Q752.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201901/07154149_555Q.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201902/25154209_qlCg.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201902/25154251_XoW9.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201902/25154331_0ndT.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201902/25154414_ckFS.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201902/25155155_Hm6H.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201902/25155213_T04n.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201902/25155224_MRLU.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201902/25155234_7zCP.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201902/25155242_K7Sw.png "在这里输入图片标题") + + +技术文档 +----------------------------------- +* [在线演示](http://boot.jeecg.org) +* [官方文档](http://jeecg-boot.mydoc.io) +* QQ交流群:284271917 + + +前端开发环境和依赖 +---- +- node +- yarn +- webpack +- eslint +- @vue/cli 3.2.1 +- [ant-design-vue](https://github.com/vueComponent/ant-design-vue) - Ant Design Of Vue 实现 +- [vue-cropper](https://github.com/xyxiao001/vue-cropper) - 头像裁剪组件 +- [@antv/g2](https://antv.alipay.com/zh-cn/index.html) - Alipay AntV 数据可视化图表 +- [Viser-vue](https://viserjs.github.io/docs.html#/viser/guide/installation) - antv/g2 封装实现 + + + +项目下载和运行 +---- + +- 拉取项目代码 +```bash +git clone https://github.com/zhangdaiscott/jeecg-boot.git +cd jeecg-boot/ant-design-jeecg-vue +``` + +- 安装依赖 +``` +yarn install +``` + +- 开发模式运行 +``` +yarn run serve +``` + +- 编译项目 +``` +yarn run build +``` + +- Lints and fixes files +``` +yarn run lint +``` + + + +其他说明 +---- + +- 项目使用的 [vue-cli3](https://cli.vuejs.org/guide/), 请更新您的 cli + +- 关闭 Eslint (不推荐) 移除 `package.json` 中 `eslintConfig` 整个节点代码 + +- 修改 Ant Design 配色,在文件 `vue.config.js` 中,其他 less 变量覆盖参考 [ant design](https://ant.design/docs/react/customize-theme-cn) 官方说明 +```ecmascript 6 + css: { + loaderOptions: { + less: { + modifyVars: { + /* less 变量覆盖,用于自定义 ant design 主题 */ + + 'primary-color': '#F5222D', + 'link-color': '#F5222D', + 'border-radius-base': '4px', + }, + javascriptEnabled: true, + } + } + } +``` + + + +附属文档 +---- + +- [路由/菜单说明](https://github.com/sendya/ant-design-pro-vue/blob/master/src/router/README.md) + +- [ANTD 默认配置项](https://github.com/sendya/ant-design-pro-vue/blob/master/src/defaultSettings.js) + +- 其他待补充... + + +备注 +---- + +> @vue/cli 升级后,eslint 规则更新了。由于影响到全部 .vue 文件,需要逐个验证。既暂时关闭部分原本不验证的规则,后期维护时,在逐步修正这些 rules \ No newline at end of file diff --git a/ant-design-jeecg-vue/.editorconfig b/ant-design-jeecg-vue/.editorconfig new file mode 100644 index 00000000..3e26fbb6 --- /dev/null +++ b/ant-design-jeecg-vue/.editorconfig @@ -0,0 +1,39 @@ +[*] +charset=utf-8 +end_of_line=crlf +insert_final_newline=false +indent_style=space +indent_size=2 + +[{*.ng,*.sht,*.html,*.shtm,*.shtml,*.htm}] +indent_style=space +indent_size=2 + +[{*.jhm,*.xslt,*.xul,*.rng,*.xsl,*.xsd,*.ant,*.tld,*.fxml,*.jrxml,*.xml,*.jnlp,*.wsdl}] +indent_style=space +indent_size=2 + +[{.babelrc,.stylelintrc,jest.config,.eslintrc,.prettierrc,*.json,*.jsb3,*.jsb2,*.bowerrc}] +indent_style=space +indent_size=2 + +[*.svg] +indent_style=space +indent_size=2 + +[*.js.map] +indent_style=space +indent_size=2 + +[*.less] +indent_style=space +indent_size=2 + +[*.vue] +indent_style=space +indent_size=2 + +[{.analysis_options,*.yml,*.yaml}] +indent_style=space +indent_size=2 + diff --git a/ant-design-jeecg-vue/.gitattributes b/ant-design-jeecg-vue/.gitattributes new file mode 100644 index 00000000..e5073192 --- /dev/null +++ b/ant-design-jeecg-vue/.gitattributes @@ -0,0 +1 @@ +public/* linguist-vendored \ No newline at end of file diff --git a/ant-design-jeecg-vue/.gitignore b/ant-design-jeecg-vue/.gitignore new file mode 100644 index 00000000..185e6631 --- /dev/null +++ b/ant-design-jeecg-vue/.gitignore @@ -0,0 +1,21 @@ +.DS_Store +node_modules +/dist + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw* diff --git a/ant-design-jeecg-vue/.prettierrc b/ant-design-jeecg-vue/.prettierrc new file mode 100644 index 00000000..cbe842ac --- /dev/null +++ b/ant-design-jeecg-vue/.prettierrc @@ -0,0 +1,5 @@ +{ + "printWidth": 120, + "semi": false, + "singleQuote": true +} diff --git a/ant-design-jeecg-vue/LICENSE b/ant-design-jeecg-vue/LICENSE new file mode 100644 index 00000000..66eef0be --- /dev/null +++ b/ant-design-jeecg-vue/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018 Anan Yang + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/ant-design-jeecg-vue/README.md b/ant-design-jeecg-vue/README.md new file mode 100644 index 00000000..a6144420 --- /dev/null +++ b/ant-design-jeecg-vue/README.md @@ -0,0 +1,147 @@ +Jeecg-Boot 快速开发平台(前后端分离版本) +=============== + +当前最新版本: 1.0(发布日期:20190225) + +项目介绍: +----------------------------------- +Jeecg-boot 一个全新的版本,采用前后端分离方案,提供强大代码生成器的快速开发平台 +前端页面代码和后端功能代码一键生成,不需要写任何代码,保持jeecg一贯的强大!! + + +技术架构: +----------------------------------- +后端技术: SpringBoot + Mybatis-plus + Shiro + Jwt + Swagger-ui + Redis +前端技术: Ant-design-vue + Vue + Webpack +其他技术: Druid(数据库连接池)、Logback(日志工具) 、poi(Excel工具)、 + Quartz(定时任务)、lombok(简化代码) +项目构建: Maven、Jdk8 + + +前端开发必读文档: + +前端UI组件: Ant Design of Vue +https://vuecomponent.github.io/ant-design-vue/docs/vue/introduce-cn +报表UI组件:viser-vue +https://viserjs.github.io/demo.html#/viser/bar/basic-bar +VUE基础知识: +https://cn.vuejs.org/v2/guide + + + +Overview +---- + +基于 [Ant Design of Vue](https://vuecomponent.github.io/ant-design-vue/docs/vue/introduce-cn/) 实现的 Vue 版 + +[预览地址](http://boot.jeecg.org) **附带一些后台基础用到的列表展示例子** +效果抢先看: + +1. 系统效果 +![输入图片说明](https://static.oschina.net/uploads/img/201902/25154007_icdX.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201902/25153956_Q752.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201901/07154149_555Q.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201902/25154209_qlCg.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201902/25154251_XoW9.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201902/25154331_0ndT.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201902/25154414_ckFS.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201902/25155155_Hm6H.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201902/25155213_T04n.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201902/25155224_MRLU.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201902/25155234_7zCP.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201902/25155242_K7Sw.png "在这里输入图片标题") + + +技术文档 +----------------------------------- +* [在线演示](http://boot.jeecg.org) +* [官方文档](http://jeecg-boot.mydoc.io) +* QQ交流群:284271917 + + +前端开发环境和依赖 +---- +- node +- yarn +- webpack +- eslint +- @vue/cli 3.2.1 +- [ant-design-vue](https://github.com/vueComponent/ant-design-vue) - Ant Design Of Vue 实现 +- [vue-cropper](https://github.com/xyxiao001/vue-cropper) - 头像裁剪组件 +- [@antv/g2](https://antv.alipay.com/zh-cn/index.html) - Alipay AntV 数据可视化图表 +- [Viser-vue](https://viserjs.github.io/docs.html#/viser/guide/installation) - antv/g2 封装实现 + + + +项目下载和运行 +---- + +- 拉取项目代码 +```bash +git clone https://github.com/zhangdaiscott/jeecg-boot.git +cd jeecg-boot/ant-design-jeecg-vue +``` + +- 安装依赖 +``` +yarn install +``` + +- 开发模式运行 +``` +yarn run serve +``` + +- 编译项目 +``` +yarn run build +``` + +- Lints and fixes files +``` +yarn run lint +``` + + + +其他说明 +---- + +- 项目使用的 [vue-cli3](https://cli.vuejs.org/guide/), 请更新您的 cli + +- 关闭 Eslint (不推荐) 移除 `package.json` 中 `eslintConfig` 整个节点代码 + +- 修改 Ant Design 配色,在文件 `vue.config.js` 中,其他 less 变量覆盖参考 [ant design](https://ant.design/docs/react/customize-theme-cn) 官方说明 +```ecmascript 6 + css: { + loaderOptions: { + less: { + modifyVars: { + /* less 变量覆盖,用于自定义 ant design 主题 */ + + 'primary-color': '#F5222D', + 'link-color': '#F5222D', + 'border-radius-base': '4px', + }, + javascriptEnabled: true, + } + } + } +``` + + + +附属文档 +---- + +- [路由/菜单说明](https://github.com/sendya/ant-design-pro-vue/blob/master/src/router/README.md) + +- [ANTD 默认配置项](https://github.com/sendya/ant-design-pro-vue/blob/master/src/defaultSettings.js) + +- 其他待补充... + + +备注 +---- + +> @vue/cli 升级后,eslint 规则更新了。由于影响到全部 .vue 文件,需要逐个验证。既暂时关闭部分原本不验证的规则,后期维护时,在逐步修正这些 rules \ No newline at end of file diff --git a/ant-design-jeecg-vue/babel.config.js b/ant-design-jeecg-vue/babel.config.js new file mode 100644 index 00000000..ba179669 --- /dev/null +++ b/ant-design-jeecg-vue/babel.config.js @@ -0,0 +1,5 @@ +module.exports = { + presets: [ + '@vue/app' + ] +} diff --git a/ant-design-jeecg-vue/idea.config.js b/ant-design-jeecg-vue/idea.config.js new file mode 100644 index 00000000..4d86bd94 --- /dev/null +++ b/ant-design-jeecg-vue/idea.config.js @@ -0,0 +1,24 @@ +'use strict' +const path = require('path') + +function resolve (dir) { + return path.join(__dirname, '.', dir) +} + +module.exports = { + context: path.resolve(__dirname, './'), + resolve: { + extensions: ['.js', '.vue', '.json'], + alias: { + 'config': resolve('config'), + '@': resolve('src'), + '@views': resolve('src/views'), + '@comp': resolve('src/components'), + '@core': resolve('src/core'), + '@utils': resolve('src/utils'), + '@entry': resolve('src/entry'), + '@router': resolve('src/router'), + '@store': resolve('src/store') + } + }, +} \ No newline at end of file diff --git a/ant-design-jeecg-vue/package.json b/ant-design-jeecg-vue/package.json new file mode 100644 index 00000000..6d6baff5 --- /dev/null +++ b/ant-design-jeecg-vue/package.json @@ -0,0 +1,98 @@ +{ + "name": "vue-antd-pro", + "version": "1.1.0", + "private": true, + "scripts": { + "serve": "vue-cli-service serve --open", + "build": "vue-cli-service build", + "lint": "vue-cli-service lint", + "test:unit": "vue-cli-service test:unit", + "test:e2e": "vue-cli-service test:e2e" + }, + "dependencies": { + "@antv/data-set": "^0.10.1", + "ant-design-vue": "^1.3.1", + "axios": "^0.18.0", + "dayjs": "^1.8.0", + "enquire.js": "^2.1.6", + "js-cookie": "^2.2.0", + "lodash.get": "^4.4.2", + "lodash.pick": "^4.4.0", + "md5": "^2.2.1", + "nprogress": "^0.2.0", + "viser-vue": "^2.4.4", + "vue": "^2.5.22", + "vue-class-component": "^6.0.0", + "vue-cropper": "^0.4.8", + "vue-i18n": "^8.7.0", + "vue-ls": "^3.2.0", + "vue-print-nb": "^1.0.3", + "vue-property-decorator": "^7.3.0", + "vue-router": "^3.0.1", + "vuex": "^3.0.1", + "vuex-class": "^0.3.1" + }, + "devDependencies": { + "@babel/polyfill": "^7.2.5", + "@vue/cli-plugin-babel": "^3.3.0", + "@vue/cli-plugin-eslint": "^3.3.0", + "@vue/cli-service": "^3.3.0", + "@vue/eslint-config-standard": "^4.0.0", + "babel-eslint": "^10.0.1", + "eslint": "^5.12.0", + "eslint-plugin-vue": "^5.1.0", + "less": "^3.8.1", + "less-loader": "^4.1.0", + "node-sass": "^4.11.0", + "sass-loader": "^7.0.1", + "vue-template-compiler": "^2.5.22" + }, + "eslintConfig": { + "root": true, + "env": { + "node": true + }, + "extends": [ + "plugin:vue/strongly-recommended", + "eslint:recommended" + ], + "parserOptions": { + "parser": "babel-eslint" + }, + "rules": { + "generator-star-spacing": "off", + "no-mixed-operators": 0, + "vue/max-attributes-per-line": [ + 2, + { + "singleline": 5, + "multiline": { + "max": 1, + "allowFirstLine": false + } + } + ], + "vue/attribute-hyphenation": 0, + "vue/html-self-closing": 0, + "vue/component-name-in-template-casing": 0, + "vue/html-closing-bracket-spacing": 0, + "vue/singleline-html-element-content-newline": 0, + "vue/no-unused-components": 0, + "vue/multiline-html-element-content-newline": 0, + "vue/no-use-v-if-with-v-for": 0, + "vue/html-closing-bracket-newline": 0, + "vue/no-parsing-error": 0, + "no-console": 0 + } + }, + "postcss": { + "plugins": { + "autoprefixer": {} + } + }, + "browserslist": [ + "> 1%", + "last 2 versions", + "not ie <= 8" + ] +} diff --git a/ant-design-jeecg-vue/public/avatar2.jpg b/ant-design-jeecg-vue/public/avatar2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9adb2d1b88665631c9dfe7acd8c125ec87eb6fc0 GIT binary patch literal 80189 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Ȇ~_mYlz55^9KP)hUklbsu17%qOvafHCep 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

@kHGHV*M}ud-K*Ym^3Id2q7H(x;jE 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

    9J2$d}*12p3mw+Jf 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
  1. +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 literal 0 HcmV?d00001 diff --git a/ant-design-jeecg-vue/public/color.less b/ant-design-jeecg-vue/public/color.less new file mode 100644 index 00000000..c7e6b1b2 --- /dev/null +++ b/ant-design-jeecg-vue/public/color.less @@ -0,0 +1,7684 @@ +@primary-color: #1890ff; +/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */ +/* stylelint-disable no-duplicate-selectors */ +/* stylelint-disable */ +.bezierEasingMixin() { + @functions: ~`(function() { + var NEWTON_ITERATIONS = 4; + var NEWTON_MIN_SLOPE = 0.001; + var SUBDIVISION_PRECISION = 0.0000001; + var SUBDIVISION_MAX_ITERATIONS = 10; + + var kSplineTableSize = 11; + var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0); + + var float32ArraySupported = typeof Float32Array === 'function'; + + function A (aA1, aA2) { return 1.0 - 3.0 * aA2 + 3.0 * aA1; } + function B (aA1, aA2) { return 3.0 * aA2 - 6.0 * aA1; } + function C (aA1) { return 3.0 * aA1; } + + // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2. + function calcBezier (aT, aA1, aA2) { return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT; } + + // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2. + function getSlope (aT, aA1, aA2) { return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1); } + + function binarySubdivide (aX, aA, aB, mX1, mX2) { + var currentX, currentT, i = 0; + do { + currentT = aA + (aB - aA) / 2.0; + currentX = calcBezier(currentT, mX1, mX2) - aX; + if (currentX > 0.0) { + aB = currentT; + } else { + aA = currentT; + } + } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS); + return currentT; + } + + function newtonRaphsonIterate (aX, aGuessT, mX1, mX2) { + for (var i = 0; i < NEWTON_ITERATIONS; ++i) { + var currentSlope = getSlope(aGuessT, mX1, mX2); + if (currentSlope === 0.0) { + return aGuessT; + } + var currentX = calcBezier(aGuessT, mX1, mX2) - aX; + aGuessT -= currentX / currentSlope; + } + return aGuessT; + } + + var BezierEasing = function (mX1, mY1, mX2, mY2) { + if (!(0 <= mX1 && mX1 <= 1 && 0 <= mX2 && mX2 <= 1)) { + throw new Error('bezier x values must be in [0, 1] range'); + } + + // Precompute samples table + var sampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize); + if (mX1 !== mY1 || mX2 !== mY2) { + for (var i = 0; i < kSplineTableSize; ++i) { + sampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2); + } + } + + function getTForX (aX) { + var intervalStart = 0.0; + var currentSample = 1; + var lastSample = kSplineTableSize - 1; + + for (; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample) { + intervalStart += kSampleStepSize; + } + --currentSample; + + // Interpolate to provide an initial guess for t + var dist = (aX - sampleValues[currentSample]) / (sampleValues[currentSample + 1] - sampleValues[currentSample]); + var guessForT = intervalStart + dist * kSampleStepSize; + + var initialSlope = getSlope(guessForT, mX1, mX2); + if (initialSlope >= NEWTON_MIN_SLOPE) { + return newtonRaphsonIterate(aX, guessForT, mX1, mX2); + } else if (initialSlope === 0.0) { + return guessForT; + } else { + return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2); + } + } + + return function BezierEasing (x) { + if (mX1 === mY1 && mX2 === mY2) { + return x; // linear + } + // Because JavaScript number are imprecise, we should guarantee the extremes are right. + if (x === 0) { + return 0; + } + if (x === 1) { + return 1; + } + return calcBezier(getTForX(x), mY1, mY2); + }; + }; + + this.colorEasing = BezierEasing(0.26, 0.09, 0.37, 0.18); + // less 3 requires a return + return ''; +})()`; +} +// It is hacky way to make this function will be compiled preferentially by less +// resolve error: `ReferenceError: colorPalette is not defined` +// https://github.com/ant-design/ant-motion/issues/44 +.bezierEasingMixin(); + +/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */ +.tinyColorMixin() { + @functions: ~`(function() { +// TinyColor v1.4.1 +// https://github.com/bgrins/TinyColor +// 2016-07-07, Brian Grinstead, MIT License +var trimLeft = /^\s+/, + trimRight = /\s+$/, + tinyCounter = 0, + mathRound = Math.round, + mathMin = Math.min, + mathMax = Math.max, + mathRandom = Math.random; + +function tinycolor (color, opts) { + + color = (color) ? color : ''; + opts = opts || { }; + + // If input is already a tinycolor, return itself + if (color instanceof tinycolor) { + return color; + } + // If we are called as a function, call using new instead + if (!(this instanceof tinycolor)) { + return new tinycolor(color, opts); + } + + var rgb = inputToRGB(color); + this._originalInput = color, + this._r = rgb.r, + this._g = rgb.g, + this._b = rgb.b, + this._a = rgb.a, + this._roundA = mathRound(100*this._a) / 100, + this._format = opts.format || rgb.format; + this._gradientType = opts.gradientType; + + // Don't let the range of [0,255] come back in [0,1]. + // Potentially lose a little bit of precision here, but will fix issues where + // .5 gets interpreted as half of the total, instead of half of 1 + // If it was supposed to be 128, this was already taken care of by inputToRgb + if (this._r < 1) { this._r = mathRound(this._r); } + if (this._g < 1) { this._g = mathRound(this._g); } + if (this._b < 1) { this._b = mathRound(this._b); } + + this._ok = rgb.ok; + this._tc_id = tinyCounter++; +} + +tinycolor.prototype = { + isDark: function() { + return this.getBrightness() < 128; + }, + isLight: function() { + return !this.isDark(); + }, + isValid: function() { + return this._ok; + }, + getOriginalInput: function() { + return this._originalInput; + }, + getFormat: function() { + return this._format; + }, + getAlpha: function() { + return this._a; + }, + getBrightness: function() { + //http://www.w3.org/TR/AERT#color-contrast + var rgb = this.toRgb(); + return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000; + }, + getLuminance: function() { + //http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef + var rgb = this.toRgb(); + var RsRGB, GsRGB, BsRGB, R, G, B; + RsRGB = rgb.r/255; + GsRGB = rgb.g/255; + BsRGB = rgb.b/255; + + if (RsRGB <= 0.03928) {R = RsRGB / 12.92;} else {R = Math.pow(((RsRGB + 0.055) / 1.055), 2.4);} + if (GsRGB <= 0.03928) {G = GsRGB / 12.92;} else {G = Math.pow(((GsRGB + 0.055) / 1.055), 2.4);} + if (BsRGB <= 0.03928) {B = BsRGB / 12.92;} else {B = Math.pow(((BsRGB + 0.055) / 1.055), 2.4);} + return (0.2126 * R) + (0.7152 * G) + (0.0722 * B); + }, + setAlpha: function(value) { + this._a = boundAlpha(value); + this._roundA = mathRound(100*this._a) / 100; + return this; + }, + toHsv: function() { + var hsv = rgbToHsv(this._r, this._g, this._b); + return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this._a }; + }, + toHsvString: function() { + var hsv = rgbToHsv(this._r, this._g, this._b); + var h = mathRound(hsv.h * 360), s = mathRound(hsv.s * 100), v = mathRound(hsv.v * 100); + return (this._a == 1) ? + "hsv(" + h + ", " + s + "%, " + v + "%)" : + "hsva(" + h + ", " + s + "%, " + v + "%, "+ this._roundA + ")"; + }, + toHsl: function() { + var hsl = rgbToHsl(this._r, this._g, this._b); + return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this._a }; + }, + toHslString: function() { + var hsl = rgbToHsl(this._r, this._g, this._b); + var h = mathRound(hsl.h * 360), s = mathRound(hsl.s * 100), l = mathRound(hsl.l * 100); + return (this._a == 1) ? + "hsl(" + h + ", " + s + "%, " + l + "%)" : + "hsla(" + h + ", " + s + "%, " + l + "%, "+ this._roundA + ")"; + }, + toHex: function(allow3Char) { + return rgbToHex(this._r, this._g, this._b, allow3Char); + }, + toHexString: function(allow3Char) { + return '#' + this.toHex(allow3Char); + }, + toHex8: function(allow4Char) { + return rgbaToHex(this._r, this._g, this._b, this._a, allow4Char); + }, + toHex8String: function(allow4Char) { + return '#' + this.toHex8(allow4Char); + }, + toRgb: function() { + return { r: mathRound(this._r), g: mathRound(this._g), b: mathRound(this._b), a: this._a }; + }, + toRgbString: function() { + return (this._a == 1) ? + "rgb(" + mathRound(this._r) + ", " + mathRound(this._g) + ", " + mathRound(this._b) + ")" : + "rgba(" + mathRound(this._r) + ", " + mathRound(this._g) + ", " + mathRound(this._b) + ", " + this._roundA + ")"; + }, + toPercentageRgb: function() { + return { r: mathRound(bound01(this._r, 255) * 100) + "%", g: mathRound(bound01(this._g, 255) * 100) + "%", b: mathRound(bound01(this._b, 255) * 100) + "%", a: this._a }; + }, + toPercentageRgbString: function() { + return (this._a == 1) ? + "rgb(" + mathRound(bound01(this._r, 255) * 100) + "%, " + mathRound(bound01(this._g, 255) * 100) + "%, " + mathRound(bound01(this._b, 255) * 100) + "%)" : + "rgba(" + mathRound(bound01(this._r, 255) * 100) + "%, " + mathRound(bound01(this._g, 255) * 100) + "%, " + mathRound(bound01(this._b, 255) * 100) + "%, " + this._roundA + ")"; + }, + toName: function() { + if (this._a === 0) { + return "transparent"; + } + + if (this._a < 1) { + return false; + } + + return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false; + }, + toFilter: function(secondColor) { + var hex8String = '#' + rgbaToArgbHex(this._r, this._g, this._b, this._a); + var secondHex8String = hex8String; + var gradientType = this._gradientType ? "GradientType = 1, " : ""; + + if (secondColor) { + var s = tinycolor(secondColor); + secondHex8String = '#' + rgbaToArgbHex(s._r, s._g, s._b, s._a); + } + + return "progid:DXImageTransform.Microsoft.gradient("+gradientType+"startColorstr="+hex8String+",endColorstr="+secondHex8String+")"; + }, + toString: function(format) { + var formatSet = !!format; + format = format || this._format; + + var formattedString = false; + var hasAlpha = this._a < 1 && this._a >= 0; + var needsAlphaFormat = !formatSet && hasAlpha && (format === "hex" || format === "hex6" || format === "hex3" || format === "hex4" || format === "hex8" || format === "name"); + + if (needsAlphaFormat) { + // Special case for "transparent", all other non-alpha formats + // will return rgba when there is transparency. + if (format === "name" && this._a === 0) { + return this.toName(); + } + return this.toRgbString(); + } + if (format === "rgb") { + formattedString = this.toRgbString(); + } + if (format === "prgb") { + formattedString = this.toPercentageRgbString(); + } + if (format === "hex" || format === "hex6") { + formattedString = this.toHexString(); + } + if (format === "hex3") { + formattedString = this.toHexString(true); + } + if (format === "hex4") { + formattedString = this.toHex8String(true); + } + if (format === "hex8") { + formattedString = this.toHex8String(); + } + if (format === "name") { + formattedString = this.toName(); + } + if (format === "hsl") { + formattedString = this.toHslString(); + } + if (format === "hsv") { + formattedString = this.toHsvString(); + } + + return formattedString || this.toHexString(); + }, + clone: function() { + return tinycolor(this.toString()); + }, + + _applyModification: function(fn, args) { + var color = fn.apply(null, [this].concat([].slice.call(args))); + this._r = color._r; + this._g = color._g; + this._b = color._b; + this.setAlpha(color._a); + return this; + }, + lighten: function() { + return this._applyModification(lighten, arguments); + }, + brighten: function() { + return this._applyModification(brighten, arguments); + }, + darken: function() { + return this._applyModification(darken, arguments); + }, + desaturate: function() { + return this._applyModification(desaturate, arguments); + }, + saturate: function() { + return this._applyModification(saturate, arguments); + }, + greyscale: function() { + return this._applyModification(greyscale, arguments); + }, + spin: function() { + return this._applyModification(spin, arguments); + }, + + _applyCombination: function(fn, args) { + return fn.apply(null, [this].concat([].slice.call(args))); + }, + analogous: function() { + return this._applyCombination(analogous, arguments); + }, + complement: function() { + return this._applyCombination(complement, arguments); + }, + monochromatic: function() { + return this._applyCombination(monochromatic, arguments); + }, + splitcomplement: function() { + return this._applyCombination(splitcomplement, arguments); + }, + triad: function() { + return this._applyCombination(triad, arguments); + }, + tetrad: function() { + return this._applyCombination(tetrad, arguments); + } +}; + +// If input is an object, force 1 into "1.0" to handle ratios properly +// String input requires "1.0" as input, so 1 will be treated as 1 +tinycolor.fromRatio = function(color, opts) { + if (typeof color == "object") { + var newColor = {}; + for (var i in color) { + if (color.hasOwnProperty(i)) { + if (i === "a") { + newColor[i] = color[i]; + } + else { + newColor[i] = convertToPercentage(color[i]); + } + } + } + color = newColor; + } + + return tinycolor(color, opts); +}; + +// Given a string or object, convert that input to RGB +// Possible string inputs: +// +// "red" +// "#f00" or "f00" +// "#ff0000" or "ff0000" +// "#ff000000" or "ff000000" +// "rgb 255 0 0" or "rgb (255, 0, 0)" +// "rgb 1.0 0 0" or "rgb (1, 0, 0)" +// "rgba (255, 0, 0, 1)" or "rgba 255, 0, 0, 1" +// "rgba (1.0, 0, 0, 1)" or "rgba 1.0, 0, 0, 1" +// "hsl(0, 100%, 50%)" or "hsl 0 100% 50%" +// "hsla(0, 100%, 50%, 1)" or "hsla 0 100% 50%, 1" +// "hsv(0, 100%, 100%)" or "hsv 0 100% 100%" +// +function inputToRGB(color) { + + var rgb = { r: 0, g: 0, b: 0 }; + var a = 1; + var s = null; + var v = null; + var l = null; + var ok = false; + var format = false; + + if (typeof color == "string") { + color = stringInputToObject(color); + } + + if (typeof color == "object") { + if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) { + rgb = rgbToRgb(color.r, color.g, color.b); + ok = true; + format = String(color.r).substr(-1) === "%" ? "prgb" : "rgb"; + } + else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) { + s = convertToPercentage(color.s); + v = convertToPercentage(color.v); + rgb = hsvToRgb(color.h, s, v); + ok = true; + format = "hsv"; + } + else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) { + s = convertToPercentage(color.s); + l = convertToPercentage(color.l); + rgb = hslToRgb(color.h, s, l); + ok = true; + format = "hsl"; + } + + if (color.hasOwnProperty("a")) { + a = color.a; + } + } + + a = boundAlpha(a); + + return { + ok: ok, + format: color.format || format, + r: mathMin(255, mathMax(rgb.r, 0)), + g: mathMin(255, mathMax(rgb.g, 0)), + b: mathMin(255, mathMax(rgb.b, 0)), + a: a + }; +} + +// Conversion Functions +// -------------------- + +// rgbToHsl, rgbToHsv, hslToRgb, hsvToRgb modified from: +// + +// rgbToRgb +// Handle bounds / percentage checking to conform to CSS color spec +// +// *Assumes:* r, g, b in [0, 255] or [0, 1] +// *Returns:* { r, g, b } in [0, 255] +function rgbToRgb(r, g, b){ + return { + r: bound01(r, 255) * 255, + g: bound01(g, 255) * 255, + b: bound01(b, 255) * 255 + }; +} + +// rgbToHsl +// Converts an RGB color value to HSL. +// *Assumes:* r, g, and b are contained in [0, 255] or [0, 1] +// *Returns:* { h, s, l } in [0,1] +function rgbToHsl(r, g, b) { + + r = bound01(r, 255); + g = bound01(g, 255); + b = bound01(b, 255); + + var max = mathMax(r, g, b), min = mathMin(r, g, b); + var h, s, l = (max + min) / 2; + + if(max == min) { + h = s = 0; // achromatic + } + else { + var d = max - min; + s = l > 0.5 ? d / (2 - max - min) : d / (max + min); + switch(max) { + case r: h = (g - b) / d + (g < b ? 6 : 0); break; + case g: h = (b - r) / d + 2; break; + case b: h = (r - g) / d + 4; break; + } + + h /= 6; + } + + return { h: h, s: s, l: l }; +} + +// hslToRgb +// Converts an HSL color value to RGB. +// *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100] +// *Returns:* { r, g, b } in the set [0, 255] +function hslToRgb(h, s, l) { + var r, g, b; + + h = bound01(h, 360); + s = bound01(s, 100); + l = bound01(l, 100); + + function hue2rgb(p, q, t) { + if(t < 0) t += 1; + if(t > 1) t -= 1; + if(t < 1/6) return p + (q - p) * 6 * t; + if(t < 1/2) return q; + if(t < 2/3) return p + (q - p) * (2/3 - t) * 6; + return p; + } + + if(s === 0) { + r = g = b = l; // achromatic + } + else { + var q = l < 0.5 ? l * (1 + s) : l + s - l * s; + var p = 2 * l - q; + r = hue2rgb(p, q, h + 1/3); + g = hue2rgb(p, q, h); + b = hue2rgb(p, q, h - 1/3); + } + + return { r: r * 255, g: g * 255, b: b * 255 }; +} + +// rgbToHsv +// Converts an RGB color value to HSV +// *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1] +// *Returns:* { h, s, v } in [0,1] +function rgbToHsv(r, g, b) { + + r = bound01(r, 255); + g = bound01(g, 255); + b = bound01(b, 255); + + var max = mathMax(r, g, b), min = mathMin(r, g, b); + var h, s, v = max; + + var d = max - min; + s = max === 0 ? 0 : d / max; + + if(max == min) { + h = 0; // achromatic + } + else { + switch(max) { + case r: h = (g - b) / d + (g < b ? 6 : 0); break; + case g: h = (b - r) / d + 2; break; + case b: h = (r - g) / d + 4; break; + } + h /= 6; + } + return { h: h, s: s, v: v }; +} + +// hsvToRgb +// Converts an HSV color value to RGB. +// *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100] +// *Returns:* { r, g, b } in the set [0, 255] + function hsvToRgb(h, s, v) { + + h = bound01(h, 360) * 6; + s = bound01(s, 100); + v = bound01(v, 100); + + var i = Math.floor(h), + f = h - i, + p = v * (1 - s), + q = v * (1 - f * s), + t = v * (1 - (1 - f) * s), + mod = i % 6, + r = [v, q, p, p, t, v][mod], + g = [t, v, v, q, p, p][mod], + b = [p, p, t, v, v, q][mod]; + + return { r: r * 255, g: g * 255, b: b * 255 }; +} + +// rgbToHex +// Converts an RGB color to hex +// Assumes r, g, and b are contained in the set [0, 255] +// Returns a 3 or 6 character hex +function rgbToHex(r, g, b, allow3Char) { + + var hex = [ + pad2(mathRound(r).toString(16)), + pad2(mathRound(g).toString(16)), + pad2(mathRound(b).toString(16)) + ]; + + // Return a 3 character hex if possible + if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) { + return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0); + } + + return hex.join(""); +} + +// rgbaToHex +// Converts an RGBA color plus alpha transparency to hex +// Assumes r, g, b are contained in the set [0, 255] and +// a in [0, 1]. Returns a 4 or 8 character rgba hex +function rgbaToHex(r, g, b, a, allow4Char) { + + var hex = [ + pad2(mathRound(r).toString(16)), + pad2(mathRound(g).toString(16)), + pad2(mathRound(b).toString(16)), + pad2(convertDecimalToHex(a)) + ]; + + // Return a 4 character hex if possible + if (allow4Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1) && hex[3].charAt(0) == hex[3].charAt(1)) { + return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0); + } + + return hex.join(""); +} + +// rgbaToArgbHex +// Converts an RGBA color to an ARGB Hex8 string +// Rarely used, but required for "toFilter()" +function rgbaToArgbHex(r, g, b, a) { + + var hex = [ + pad2(convertDecimalToHex(a)), + pad2(mathRound(r).toString(16)), + pad2(mathRound(g).toString(16)), + pad2(mathRound(b).toString(16)) + ]; + + return hex.join(""); +} + +// equals +// Can be called with any tinycolor input +tinycolor.equals = function (color1, color2) { + if (!color1 || !color2) { return false; } + return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString(); +}; + +tinycolor.random = function() { + return tinycolor.fromRatio({ + r: mathRandom(), + g: mathRandom(), + b: mathRandom() + }); +}; + +// Modification Functions +// ---------------------- +// Thanks to less.js for some of the basics here +// + +function desaturate(color, amount) { + amount = (amount === 0) ? 0 : (amount || 10); + var hsl = tinycolor(color).toHsl(); + hsl.s -= amount / 100; + hsl.s = clamp01(hsl.s); + return tinycolor(hsl); +} + +function saturate(color, amount) { + amount = (amount === 0) ? 0 : (amount || 10); + var hsl = tinycolor(color).toHsl(); + hsl.s += amount / 100; + hsl.s = clamp01(hsl.s); + return tinycolor(hsl); +} + +function greyscale(color) { + return tinycolor(color).desaturate(100); +} + +function lighten (color, amount) { + amount = (amount === 0) ? 0 : (amount || 10); + var hsl = tinycolor(color).toHsl(); + hsl.l += amount / 100; + hsl.l = clamp01(hsl.l); + return tinycolor(hsl); +} + +function brighten(color, amount) { + amount = (amount === 0) ? 0 : (amount || 10); + var rgb = tinycolor(color).toRgb(); + rgb.r = mathMax(0, mathMin(255, rgb.r - mathRound(255 * - (amount / 100)))); + rgb.g = mathMax(0, mathMin(255, rgb.g - mathRound(255 * - (amount / 100)))); + rgb.b = mathMax(0, mathMin(255, rgb.b - mathRound(255 * - (amount / 100)))); + return tinycolor(rgb); +} + +function darken (color, amount) { + amount = (amount === 0) ? 0 : (amount || 10); + var hsl = tinycolor(color).toHsl(); + hsl.l -= amount / 100; + hsl.l = clamp01(hsl.l); + return tinycolor(hsl); +} + +// Spin takes a positive or negative amount within [-360, 360] indicating the change of hue. +// Values outside of this range will be wrapped into this range. +function spin(color, amount) { + var hsl = tinycolor(color).toHsl(); + var hue = (hsl.h + amount) % 360; + hsl.h = hue < 0 ? 360 + hue : hue; + return tinycolor(hsl); +} + +// Combination Functions +// --------------------- +// Thanks to jQuery xColor for some of the ideas behind these +// + +function complement(color) { + var hsl = tinycolor(color).toHsl(); + hsl.h = (hsl.h + 180) % 360; + return tinycolor(hsl); +} + +function triad(color) { + var hsl = tinycolor(color).toHsl(); + var h = hsl.h; + return [ + tinycolor(color), + tinycolor({ h: (h + 120) % 360, s: hsl.s, l: hsl.l }), + tinycolor({ h: (h + 240) % 360, s: hsl.s, l: hsl.l }) + ]; +} + +function tetrad(color) { + var hsl = tinycolor(color).toHsl(); + var h = hsl.h; + return [ + tinycolor(color), + tinycolor({ h: (h + 90) % 360, s: hsl.s, l: hsl.l }), + tinycolor({ h: (h + 180) % 360, s: hsl.s, l: hsl.l }), + tinycolor({ h: (h + 270) % 360, s: hsl.s, l: hsl.l }) + ]; +} + +function splitcomplement(color) { + var hsl = tinycolor(color).toHsl(); + var h = hsl.h; + return [ + tinycolor(color), + tinycolor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l}), + tinycolor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l}) + ]; +} + +function analogous(color, results, slices) { + results = results || 6; + slices = slices || 30; + + var hsl = tinycolor(color).toHsl(); + var part = 360 / slices; + var ret = [tinycolor(color)]; + + for (hsl.h = ((hsl.h - (part * results >> 1)) + 720) % 360; --results; ) { + hsl.h = (hsl.h + part) % 360; + ret.push(tinycolor(hsl)); + } + return ret; +} + +function monochromatic(color, results) { + results = results || 6; + var hsv = tinycolor(color).toHsv(); + var h = hsv.h, s = hsv.s, v = hsv.v; + var ret = []; + var modification = 1 / results; + + while (results--) { + ret.push(tinycolor({ h: h, s: s, v: v})); + v = (v + modification) % 1; + } + + return ret; +} + +// Utility Functions +// --------------------- + +tinycolor.mix = function(color1, color2, amount) { + amount = (amount === 0) ? 0 : (amount || 50); + + var rgb1 = tinycolor(color1).toRgb(); + var rgb2 = tinycolor(color2).toRgb(); + + var p = amount / 100; + + var rgba = { + r: ((rgb2.r - rgb1.r) * p) + rgb1.r, + g: ((rgb2.g - rgb1.g) * p) + rgb1.g, + b: ((rgb2.b - rgb1.b) * p) + rgb1.b, + a: ((rgb2.a - rgb1.a) * p) + rgb1.a + }; + + return tinycolor(rgba); +}; + +// Readability Functions +// --------------------- +// false +// tinycolor.isReadable("#000", "#111",{level:"AA",size:"large"}) => false +tinycolor.isReadable = function(color1, color2, wcag2) { + var readability = tinycolor.readability(color1, color2); + var wcag2Parms, out; + + out = false; + + wcag2Parms = validateWCAG2Parms(wcag2); + switch (wcag2Parms.level + wcag2Parms.size) { + case "AAsmall": + case "AAAlarge": + out = readability >= 4.5; + break; + case "AAlarge": + out = readability >= 3; + break; + case "AAAsmall": + out = readability >= 7; + break; + } + return out; + +}; + +// mostReadable +// Given a base color and a list of possible foreground or background +// colors for that base, returns the most readable color. +// Optionally returns Black or White if the most readable color is unreadable. +// *Example* +// tinycolor.mostReadable(tinycolor.mostReadable("#123", ["#124", "#125"],{includeFallbackColors:false}).toHexString(); // "#112255" +// tinycolor.mostReadable(tinycolor.mostReadable("#123", ["#124", "#125"],{includeFallbackColors:true}).toHexString(); // "#ffffff" +// tinycolor.mostReadable("#a8015a", ["#faf3f3"],{includeFallbackColors:true,level:"AAA",size:"large"}).toHexString(); // "#faf3f3" +// tinycolor.mostReadable("#a8015a", ["#faf3f3"],{includeFallbackColors:true,level:"AAA",size:"small"}).toHexString(); // "#ffffff" +tinycolor.mostReadable = function(baseColor, colorList, args) { + var bestColor = null; + var bestScore = 0; + var readability; + var includeFallbackColors, level, size ; + args = args || {}; + includeFallbackColors = args.includeFallbackColors ; + level = args.level; + size = args.size; + + for (var i= 0; i < colorList.length ; i++) { + readability = tinycolor.readability(baseColor, colorList[i]); + if (readability > bestScore) { + bestScore = readability; + bestColor = tinycolor(colorList[i]); + } + } + + if (tinycolor.isReadable(baseColor, bestColor, {"level":level,"size":size}) || !includeFallbackColors) { + return bestColor; + } + else { + args.includeFallbackColors=false; + return tinycolor.mostReadable(baseColor,["#fff", "#000"],args); + } +}; + +// Big List of Colors +// ------------------ +// +var names = tinycolor.names = { + aliceblue: "f0f8ff", + antiquewhite: "faebd7", + aqua: "0ff", + aquamarine: "7fffd4", + azure: "f0ffff", + beige: "f5f5dc", + bisque: "ffe4c4", + black: "000", + blanchedalmond: "ffebcd", + blue: "00f", + blueviolet: "8a2be2", + brown: "a52a2a", + burlywood: "deb887", + burntsienna: "ea7e5d", + cadetblue: "5f9ea0", + chartreuse: "7fff00", + chocolate: "d2691e", + coral: "ff7f50", + cornflowerblue: "6495ed", + cornsilk: "fff8dc", + crimson: "dc143c", + cyan: "0ff", + darkblue: "00008b", + darkcyan: "008b8b", + darkgoldenrod: "b8860b", + darkgray: "a9a9a9", + darkgreen: "006400", + darkgrey: "a9a9a9", + darkkhaki: "bdb76b", + darkmagenta: "8b008b", + darkolivegreen: "556b2f", + darkorange: "ff8c00", + darkorchid: "9932cc", + darkred: "8b0000", + darksalmon: "e9967a", + darkseagreen: "8fbc8f", + darkslateblue: "483d8b", + darkslategray: "2f4f4f", + darkslategrey: "2f4f4f", + darkturquoise: "00ced1", + darkviolet: "9400d3", + deeppink: "ff1493", + deepskyblue: "00bfff", + dimgray: "696969", + dimgrey: "696969", + dodgerblue: "1e90ff", + firebrick: "b22222", + floralwhite: "fffaf0", + forestgreen: "228b22", + fuchsia: "f0f", + gainsboro: "dcdcdc", + ghostwhite: "f8f8ff", + gold: "ffd700", + goldenrod: "daa520", + gray: "808080", + green: "008000", + greenyellow: "adff2f", + grey: "808080", + honeydew: "f0fff0", + hotpink: "ff69b4", + indianred: "cd5c5c", + indigo: "4b0082", + ivory: "fffff0", + khaki: "f0e68c", + lavender: "e6e6fa", + lavenderblush: "fff0f5", + lawngreen: "7cfc00", + lemonchiffon: "fffacd", + lightblue: "add8e6", + lightcoral: "f08080", + lightcyan: "e0ffff", + lightgoldenrodyellow: "fafad2", + lightgray: "d3d3d3", + lightgreen: "90ee90", + lightgrey: "d3d3d3", + lightpink: "ffb6c1", + lightsalmon: "ffa07a", + lightseagreen: "20b2aa", + lightskyblue: "87cefa", + lightslategray: "789", + lightslategrey: "789", + lightsteelblue: "b0c4de", + lightyellow: "ffffe0", + lime: "0f0", + limegreen: "32cd32", + linen: "faf0e6", + magenta: "f0f", + maroon: "800000", + mediumaquamarine: "66cdaa", + mediumblue: "0000cd", + mediumorchid: "ba55d3", + mediumpurple: "9370db", + mediumseagreen: "3cb371", + mediumslateblue: "7b68ee", + mediumspringgreen: "00fa9a", + mediumturquoise: "48d1cc", + mediumvioletred: "c71585", + midnightblue: "191970", + mintcream: "f5fffa", + mistyrose: "ffe4e1", + moccasin: "ffe4b5", + navajowhite: "ffdead", + navy: "000080", + oldlace: "fdf5e6", + olive: "808000", + olivedrab: "6b8e23", + orange: "ffa500", + orangered: "ff4500", + orchid: "da70d6", + palegoldenrod: "eee8aa", + palegreen: "98fb98", + paleturquoise: "afeeee", + palevioletred: "db7093", + papayawhip: "ffefd5", + peachpuff: "ffdab9", + peru: "cd853f", + pink: "ffc0cb", + plum: "dda0dd", + powderblue: "b0e0e6", + purple: "800080", + rebeccapurple: "663399", + red: "f00", + rosybrown: "bc8f8f", + royalblue: "4169e1", + saddlebrown: "8b4513", + salmon: "fa8072", + sandybrown: "f4a460", + seagreen: "2e8b57", + seashell: "fff5ee", + sienna: "a0522d", + silver: "c0c0c0", + skyblue: "87ceeb", + slateblue: "6a5acd", + slategray: "708090", + slategrey: "708090", + snow: "fffafa", + springgreen: "00ff7f", + steelblue: "4682b4", + tan: "d2b48c", + teal: "008080", + thistle: "d8bfd8", + tomato: "ff6347", + turquoise: "40e0d0", + violet: "ee82ee", + wheat: "f5deb3", + white: "fff", + whitesmoke: "f5f5f5", + yellow: "ff0", + yellowgreen: "9acd32" +}; + +// Make it easy to access colors via hexNames[hex] +var hexNames = tinycolor.hexNames = flip(names); + +// Utilities +// --------- + +// { 'name1': 'val1' } becomes { 'val1': 'name1' } +function flip(o) { + var flipped = { }; + for (var i in o) { + if (o.hasOwnProperty(i)) { + flipped[o[i]] = i; + } + } + return flipped; +} + +// Return a valid alpha value [0,1] with all invalid values being set to 1 +function boundAlpha(a) { + a = parseFloat(a); + + if (isNaN(a) || a < 0 || a > 1) { + a = 1; + } + + return a; +} + +// Take input from [0, n] and return it as [0, 1] +function bound01(n, max) { + if (isOnePointZero(n)) { n = "100%"; } + + var processPercent = isPercentage(n); + n = mathMin(max, mathMax(0, parseFloat(n))); + + // Automatically convert percentage into number + if (processPercent) { + n = parseInt(n * max, 10) / 100; + } + + // Handle floating point rounding errors + if ((Math.abs(n - max) < 0.000001)) { + return 1; + } + + // Convert into [0, 1] range if it isn't already + return (n % max) / parseFloat(max); +} + +// Force a number between 0 and 1 +function clamp01(val) { + return mathMin(1, mathMax(0, val)); +} + +// Parse a base-16 hex value into a base-10 integer +function parseIntFromHex(val) { + return parseInt(val, 16); +} + +// Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1 +// +function isOnePointZero(n) { + return typeof n == "string" && n.indexOf('.') != -1 && parseFloat(n) === 1; +} + +// Check to see if string passed in is a percentage +function isPercentage(n) { + return typeof n === "string" && n.indexOf('%') != -1; +} + +// Force a hex value to have 2 characters +function pad2(c) { + return c.length == 1 ? '0' + c : '' + c; +} + +// Replace a decimal with it's percentage value +function convertToPercentage(n) { + if (n <= 1) { + n = (n * 100) + "%"; + } + + return n; +} + +// Converts a decimal to a hex value +function convertDecimalToHex(d) { + return Math.round(parseFloat(d) * 255).toString(16); +} +// Converts a hex value to a decimal +function convertHexToDecimal(h) { + return (parseIntFromHex(h) / 255); +} + +var matchers = (function() { + + // + var CSS_INTEGER = "[-\\+]?\\d+%?"; + + // + var CSS_NUMBER = "[-\\+]?\\d*\\.\\d+%?"; + + // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome. + var CSS_UNIT = "(?:" + CSS_NUMBER + ")|(?:" + CSS_INTEGER + ")"; + + // Actual matching. + // Parentheses and commas are optional, but not required. + // Whitespace can take the place of commas or opening paren + var PERMISSIVE_MATCH3 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?"; + var PERMISSIVE_MATCH4 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?"; + + return { + CSS_UNIT: new RegExp(CSS_UNIT), + rgb: new RegExp("rgb" + PERMISSIVE_MATCH3), + rgba: new RegExp("rgba" + PERMISSIVE_MATCH4), + hsl: new RegExp("hsl" + PERMISSIVE_MATCH3), + hsla: new RegExp("hsla" + PERMISSIVE_MATCH4), + hsv: new RegExp("hsv" + PERMISSIVE_MATCH3), + hsva: new RegExp("hsva" + PERMISSIVE_MATCH4), + hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, + hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/, + hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, + hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/ + }; +})(); + +// isValidCSSUnit +// Take in a single string / number and check to see if it looks like a CSS unit +// (see matchers above for definition). +function isValidCSSUnit(color) { + return !!matchers.CSS_UNIT.exec(color); +} + +// stringInputToObject +// Permissive string parsing. Take in a number of formats, and output an object +// based on detected format. Returns { r, g, b } or { h, s, l } or { h, s, v} +function stringInputToObject(color) { + + color = color.replace(trimLeft, '').replace(trimRight, '').toLowerCase(); + var named = false; + if (names[color]) { + color = names[color]; + named = true; + } + else if (color == 'transparent') { + return { r: 0, g: 0, b: 0, a: 0, format: "name" }; + } + + // Try to match string input using regular expressions. + // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360] + // Just return an object and let the conversion functions handle that. + // This way the result will be the same whether the tinycolor is initialized with string or object. + var match; + if ((match = matchers.rgb.exec(color))) { + return { r: match[1], g: match[2], b: match[3] }; + } + if ((match = matchers.rgba.exec(color))) { + return { r: match[1], g: match[2], b: match[3], a: match[4] }; + } + if ((match = matchers.hsl.exec(color))) { + return { h: match[1], s: match[2], l: match[3] }; + } + if ((match = matchers.hsla.exec(color))) { + return { h: match[1], s: match[2], l: match[3], a: match[4] }; + } + if ((match = matchers.hsv.exec(color))) { + return { h: match[1], s: match[2], v: match[3] }; + } + if ((match = matchers.hsva.exec(color))) { + return { h: match[1], s: match[2], v: match[3], a: match[4] }; + } + if ((match = matchers.hex8.exec(color))) { + return { + r: parseIntFromHex(match[1]), + g: parseIntFromHex(match[2]), + b: parseIntFromHex(match[3]), + a: convertHexToDecimal(match[4]), + format: named ? "name" : "hex8" + }; + } + if ((match = matchers.hex6.exec(color))) { + return { + r: parseIntFromHex(match[1]), + g: parseIntFromHex(match[2]), + b: parseIntFromHex(match[3]), + format: named ? "name" : "hex" + }; + } + if ((match = matchers.hex4.exec(color))) { + return { + r: parseIntFromHex(match[1] + '' + match[1]), + g: parseIntFromHex(match[2] + '' + match[2]), + b: parseIntFromHex(match[3] + '' + match[3]), + a: convertHexToDecimal(match[4] + '' + match[4]), + format: named ? "name" : "hex8" + }; + } + if ((match = matchers.hex3.exec(color))) { + return { + r: parseIntFromHex(match[1] + '' + match[1]), + g: parseIntFromHex(match[2] + '' + match[2]), + b: parseIntFromHex(match[3] + '' + match[3]), + format: named ? "name" : "hex" + }; + } + + return false; +} + +function validateWCAG2Parms(parms) { + // return valid WCAG2 parms for isReadable. + // If input parms are invalid, return {"level":"AA", "size":"small"} + var level, size; + parms = parms || {"level":"AA", "size":"small"}; + level = (parms.level || "AA").toUpperCase(); + size = (parms.size || "small").toLowerCase(); + if (level !== "AA" && level !== "AAA") { + level = "AA"; + } + if (size !== "small" && size !== "large") { + size = "small"; + } + return {"level":level, "size":size}; +} + +this.tinycolor = tinycolor; + +})()`; +} +// It is hacky way to make this function will be compiled preferentially by less +// resolve error: `ReferenceError: colorPalette is not defined` +// https://github.com/ant-design/ant-motion/issues/44 +.tinyColorMixin(); + +// We create a very complex algorithm which take the place of original tint/shade color system +// to make sure no one can understand it 👻 +// and create an entire color palette magicly by inputing just a single primary color. +// We are using bezier-curve easing function and some color manipulations like tint/shade/darken/spin +.colorPaletteMixin() { + @functions: ~`(function() { + var hueStep = 2; + var saturationStep = 16; + var saturationStep2 = 5; + var brightnessStep1 = 5; + var brightnessStep2 = 15; + var lightColorCount = 5; + var darkColorCount = 4; + + var getHue = function(hsv, i, isLight) { + var hue; + if (hsv.h >= 60 && hsv.h <= 240) { + hue = isLight ? hsv.h - hueStep * i : hsv.h + hueStep * i; + } else { + hue = isLight ? hsv.h + hueStep * i : hsv.h - hueStep * i; + } + if (hue < 0) { + hue += 360; + } else if (hue >= 360) { + hue -= 360; + } + return Math.round(hue); + }; + var getSaturation = function(hsv, i, isLight) { + var saturation; + if (isLight) { + saturation = Math.round(hsv.s * 100) - saturationStep * i; + } else if (i == darkColorCount) { + saturation = Math.round(hsv.s * 100) + saturationStep; + } else { + saturation = Math.round(hsv.s * 100) + saturationStep2 * i; + } + if (saturation > 100) { + saturation = 100; + } + if (isLight && i === lightColorCount && saturation > 10) { + saturation = 10; + } + if (saturation < 6) { + saturation = 6; + } + return Math.round(saturation); + }; + var getValue = function(hsv, i, isLight) { + if (isLight) { + return Math.round(hsv.v * 100) + brightnessStep1 * i; + } + return Math.round(hsv.v * 100) - brightnessStep2 * i; + }; + + this.colorPalette = function(color, index) { + var isLight = index <= 6; + var hsv = tinycolor(color).toHsv(); + var i = isLight ? lightColorCount + 1 - index : index - lightColorCount - 1; + return tinycolor({ + h: getHue(hsv, i, isLight), + s: getSaturation(hsv, i, isLight), + v: getValue(hsv, i, isLight), + }).toHexString(); + }; +})()`; +} +// It is hacky way to make this function will be compiled preferentially by less +// resolve error: `ReferenceError: colorPalette is not defined` +// https://github.com/ant-design/ant-motion/issues/44 +.colorPaletteMixin(); + +// color palettes +@blue-1: color(~`colorPalette("@{blue-6}", 1)`); +@blue-2: color(~`colorPalette("@{blue-6}", 2)`); +@blue-3: color(~`colorPalette("@{blue-6}", 3)`); +@blue-4: color(~`colorPalette("@{blue-6}", 4)`); +@blue-5: color(~`colorPalette("@{blue-6}", 5)`); +@blue-6: #1890ff; +@blue-7: color(~`colorPalette("@{blue-6}", 7)`); +@blue-8: color(~`colorPalette("@{blue-6}", 8)`); +@blue-9: color(~`colorPalette("@{blue-6}", 9)`); +@blue-10: color(~`colorPalette("@{blue-6}", 10)`); + +@purple-1: color(~`colorPalette("@{purple-6}", 1)`); +@purple-2: color(~`colorPalette("@{purple-6}", 2)`); +@purple-3: color(~`colorPalette("@{purple-6}", 3)`); +@purple-4: color(~`colorPalette("@{purple-6}", 4)`); +@purple-5: color(~`colorPalette("@{purple-6}", 5)`); +@purple-6: #722ed1; +@purple-7: color(~`colorPalette("@{purple-6}", 7)`); +@purple-8: color(~`colorPalette("@{purple-6}", 8)`); +@purple-9: color(~`colorPalette("@{purple-6}", 9)`); +@purple-10: color(~`colorPalette("@{purple-6}", 10)`); + +@cyan-1: color(~`colorPalette("@{cyan-6}", 1)`); +@cyan-2: color(~`colorPalette("@{cyan-6}", 2)`); +@cyan-3: color(~`colorPalette("@{cyan-6}", 3)`); +@cyan-4: color(~`colorPalette("@{cyan-6}", 4)`); +@cyan-5: color(~`colorPalette("@{cyan-6}", 5)`); +@cyan-6: #13c2c2; +@cyan-7: color(~`colorPalette("@{cyan-6}", 7)`); +@cyan-8: color(~`colorPalette("@{cyan-6}", 8)`); +@cyan-9: color(~`colorPalette("@{cyan-6}", 9)`); +@cyan-10: color(~`colorPalette("@{cyan-6}", 10)`); + +@green-1: color(~`colorPalette("@{green-6}", 1)`); +@green-2: color(~`colorPalette("@{green-6}", 2)`); +@green-3: color(~`colorPalette("@{green-6}", 3)`); +@green-4: color(~`colorPalette("@{green-6}", 4)`); +@green-5: color(~`colorPalette("@{green-6}", 5)`); +@green-6: #52c41a; +@green-7: color(~`colorPalette("@{green-6}", 7)`); +@green-8: color(~`colorPalette("@{green-6}", 8)`); +@green-9: color(~`colorPalette("@{green-6}", 9)`); +@green-10: color(~`colorPalette("@{green-6}", 10)`); + +@magenta-1: color(~`colorPalette("@{magenta-6}", 1)`); +@magenta-2: color(~`colorPalette("@{magenta-6}", 2)`); +@magenta-3: color(~`colorPalette("@{magenta-6}", 3)`); +@magenta-4: color(~`colorPalette("@{magenta-6}", 4)`); +@magenta-5: color(~`colorPalette("@{magenta-6}", 5)`); +@magenta-6: #eb2f96; +@magenta-7: color(~`colorPalette("@{magenta-6}", 7)`); +@magenta-8: color(~`colorPalette("@{magenta-6}", 8)`); +@magenta-9: color(~`colorPalette("@{magenta-6}", 9)`); +@magenta-10: color(~`colorPalette("@{magenta-6}", 10)`); + +// alias of magenta +@pink-1: color(~`colorPalette("@{pink-6}", 1)`); +@pink-2: color(~`colorPalette("@{pink-6}", 2)`); +@pink-3: color(~`colorPalette("@{pink-6}", 3)`); +@pink-4: color(~`colorPalette("@{pink-6}", 4)`); +@pink-5: color(~`colorPalette("@{pink-6}", 5)`); +@pink-6: #eb2f96; +@pink-7: color(~`colorPalette("@{pink-6}", 7)`); +@pink-8: color(~`colorPalette("@{pink-6}", 8)`); +@pink-9: color(~`colorPalette("@{pink-6}", 9)`); +@pink-10: color(~`colorPalette("@{pink-6}", 10)`); + +@red-1: color(~`colorPalette("@{red-6}", 1)`); +@red-2: color(~`colorPalette("@{red-6}", 2)`); +@red-3: color(~`colorPalette("@{red-6}", 3)`); +@red-4: color(~`colorPalette("@{red-6}", 4)`); +@red-5: color(~`colorPalette("@{red-6}", 5)`); +@red-6: #f5222d; +@red-7: color(~`colorPalette("@{red-6}", 7)`); +@red-8: color(~`colorPalette("@{red-6}", 8)`); +@red-9: color(~`colorPalette("@{red-6}", 9)`); +@red-10: color(~`colorPalette("@{red-6}", 10)`); + +@orange-1: color(~`colorPalette("@{orange-6}", 1)`); +@orange-2: color(~`colorPalette("@{orange-6}", 2)`); +@orange-3: color(~`colorPalette("@{orange-6}", 3)`); +@orange-4: color(~`colorPalette("@{orange-6}", 4)`); +@orange-5: color(~`colorPalette("@{orange-6}", 5)`); +@orange-6: #fa8c16; +@orange-7: color(~`colorPalette("@{orange-6}", 7)`); +@orange-8: color(~`colorPalette("@{orange-6}", 8)`); +@orange-9: color(~`colorPalette("@{orange-6}", 9)`); +@orange-10: color(~`colorPalette("@{orange-6}", 10)`); + +@yellow-1: color(~`colorPalette("@{yellow-6}", 1)`); +@yellow-2: color(~`colorPalette("@{yellow-6}", 2)`); +@yellow-3: color(~`colorPalette("@{yellow-6}", 3)`); +@yellow-4: color(~`colorPalette("@{yellow-6}", 4)`); +@yellow-5: color(~`colorPalette("@{yellow-6}", 5)`); +@yellow-6: #fadb14; +@yellow-7: color(~`colorPalette("@{yellow-6}", 7)`); +@yellow-8: color(~`colorPalette("@{yellow-6}", 8)`); +@yellow-9: color(~`colorPalette("@{yellow-6}", 9)`); +@yellow-10: color(~`colorPalette("@{yellow-6}", 10)`); + +@volcano-1: color(~`colorPalette("@{volcano-6}", 1)`); +@volcano-2: color(~`colorPalette("@{volcano-6}", 2)`); +@volcano-3: color(~`colorPalette("@{volcano-6}", 3)`); +@volcano-4: color(~`colorPalette("@{volcano-6}", 4)`); +@volcano-5: color(~`colorPalette("@{volcano-6}", 5)`); +@volcano-6: #fa541c; +@volcano-7: color(~`colorPalette("@{volcano-6}", 7)`); +@volcano-8: color(~`colorPalette("@{volcano-6}", 8)`); +@volcano-9: color(~`colorPalette("@{volcano-6}", 9)`); +@volcano-10: color(~`colorPalette("@{volcano-6}", 10)`); + +@geekblue-1: color(~`colorPalette("@{geekblue-6}", 1)`); +@geekblue-2: color(~`colorPalette("@{geekblue-6}", 2)`); +@geekblue-3: color(~`colorPalette("@{geekblue-6}", 3)`); +@geekblue-4: color(~`colorPalette("@{geekblue-6}", 4)`); +@geekblue-5: color(~`colorPalette("@{geekblue-6}", 5)`); +@geekblue-6: #2f54eb; +@geekblue-7: color(~`colorPalette("@{geekblue-6}", 7)`); +@geekblue-8: color(~`colorPalette("@{geekblue-6}", 8)`); +@geekblue-9: color(~`colorPalette("@{geekblue-6}", 9)`); +@geekblue-10: color(~`colorPalette("@{geekblue-6}", 10)`); + +@lime-1: color(~`colorPalette("@{lime-6}", 1)`); +@lime-2: color(~`colorPalette("@{lime-6}", 2)`); +@lime-3: color(~`colorPalette("@{lime-6}", 3)`); +@lime-4: color(~`colorPalette("@{lime-6}", 4)`); +@lime-5: color(~`colorPalette("@{lime-6}", 5)`); +@lime-6: #a0d911; +@lime-7: color(~`colorPalette("@{lime-6}", 7)`); +@lime-8: color(~`colorPalette("@{lime-6}", 8)`); +@lime-9: color(~`colorPalette("@{lime-6}", 9)`); +@lime-10: color(~`colorPalette("@{lime-6}", 10)`); + +@gold-1: color(~`colorPalette("@{gold-6}", 1)`); +@gold-2: color(~`colorPalette("@{gold-6}", 2)`); +@gold-3: color(~`colorPalette("@{gold-6}", 3)`); +@gold-4: color(~`colorPalette("@{gold-6}", 4)`); +@gold-5: color(~`colorPalette("@{gold-6}", 5)`); +@gold-6: #faad14; +@gold-7: color(~`colorPalette("@{gold-6}", 7)`); +@gold-8: color(~`colorPalette("@{gold-6}", 8)`); +@gold-9: color(~`colorPalette("@{gold-6}", 9)`); +@gold-10: color(~`colorPalette("@{gold-6}", 10)`); + +// The prefix to use on all css classes from ant. +@ant-prefix : ant; + +// -------- Colors ----------- + +@info-color : @blue-6; +@success-color : @green-6; +@processing-color : @blue-6; +@error-color : @red-6; +@highlight-color : @red-6; +@warning-color : @gold-6; +@normal-color : #d9d9d9; + +// Color used by default to control hover and active backgrounds and for +// alert info backgrounds. +@primary-1: color(~`colorPalette("@{primary-color}", 1)`); // replace tint(@primary-color, 90%) +@primary-2: color(~`colorPalette("@{primary-color}", 2)`); // replace tint(@primary-color, 80%) +@primary-3: color(~`colorPalette("@{primary-color}", 3)`); // unused +@primary-4: color(~`colorPalette("@{primary-color}", 4)`); // unused +@primary-5: color(~`colorPalette("@{primary-color}", 5)`); // color used to control the text color in many active and hover states, replace tint(@primary-color, 20%) +@primary-6: @primary-color; // color used to control the text color of active buttons, don't use, use @primary-color +@primary-7: color(~`colorPalette("@{primary-color}", 7)`); // replace shade(@primary-color, 5%) +@primary-8: color(~`colorPalette("@{primary-color}", 8)`); // unused +@primary-9: color(~`colorPalette("@{primary-color}", 9)`); // unused +@primary-10: color(~`colorPalette("@{primary-color}", 10)`); // unused + +// Base Scaffolding Variables +// --- + +// Background color for `` +@body-background : #fff; +// Base background color for most components +@component-background : #fff; +@font-family : "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif, +"Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; +@code-family : "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace; +@heading-color : fade(#000, 85%); +@text-color : fade(#000, 65%); +@text-color-secondary : fade(#000, 45%); +@heading-color-dark : fade(#fff, 100%); +@text-color-dark : fade(#fff, 85%); +@text-color-secondary-dark: fade(#fff, 65%); +@font-size-base : 14px; +@font-size-lg : @font-size-base + 2px; +@font-size-sm : 12px; +@line-height-base : 1.5; +@border-radius-base : 4px; +@border-radius-sm : 2px; + +// vertical paddings +@padding-lg : 24px; // containers +@padding-md : 16px; // small containers and buttons +@padding-sm : 12px; // Form controls and items +@padding-xs : 8px; // small items + +// vertical padding for all form controls +@control-padding-horizontal: @padding-sm; +@control-padding-horizontal-sm: @padding-xs; + +// The background colors for active and hover states for things like +// list items or table cells. +@item-active-bg : @primary-1; +@item-hover-bg : @primary-1; + +// ICONFONT +@iconfont-css-prefix : anticon; + +// LINK +@link-color : @primary-color; +@link-hover-color : color(~`colorPalette("@{link-color}", 5)`); +@link-active-color : color(~`colorPalette("@{link-color}", 7)`); +@link-decoration : none; +@link-hover-decoration : none; + +// Animation +@ease-base-out : cubic-bezier(0.7, 0.3, 0.1, 1); +@ease-base-in : cubic-bezier(0.9, 0, 0.3, 0.7); +@ease-out : cubic-bezier(0.215, 0.61, 0.355, 1); +@ease-in : cubic-bezier(0.55, 0.055, 0.675, 0.19); +@ease-in-out : cubic-bezier(0.645, 0.045, 0.355, 1); +@ease-out-back : cubic-bezier(0.12, 0.4, 0.29, 1.46); +@ease-in-back : cubic-bezier(0.71, -0.46, 0.88, 0.6); +@ease-in-out-back : cubic-bezier(0.71, -0.46, 0.29, 1.46); +@ease-out-circ : cubic-bezier(0.08, 0.82, 0.17, 1); +@ease-in-circ : cubic-bezier(0.6, 0.04, 0.98, 0.34); +@ease-in-out-circ : cubic-bezier(0.78, 0.14, 0.15, 0.86); +@ease-out-quint : cubic-bezier(0.23, 1, 0.32, 1); +@ease-in-quint : cubic-bezier(0.755, 0.05, 0.855, 0.06); +@ease-in-out-quint : cubic-bezier(0.86, 0, 0.07, 1); + +// Border color +@border-color-base : hsv(0, 0, 85%); // base border outline a component +@border-color-split : hsv(0, 0, 91%); // split border inside a component +@border-width-base : 1px; // width of the border for a component +@border-style-base : solid; // style of a components border + +// Outline +@outline-blur-size : 0; +@outline-width : 2px; +@outline-color : @primary-color; + +@background-color-light : hsv(0, 0, 98%); // background of header and selected item +@background-color-base : hsv(0, 0, 96%); // Default grey background color + +// Disabled states +@disabled-color : fade(#000, 25%); +@disabled-bg : @background-color-base; +@disabled-color-dark : fade(#fff, 35%); + +// Shadow +@shadow-color : rgba(0, 0, 0, .15); +@box-shadow-base : @shadow-1-down; +@shadow-1-up : 0 -2px 8px @shadow-color; +@shadow-1-down : 0 2px 8px @shadow-color; +@shadow-1-left : -2px 0 8px @shadow-color; +@shadow-1-right : 2px 0 8px @shadow-color; +@shadow-2 : 0 4px 12px @shadow-color; + +// Buttons +@btn-font-weight : 400; +@btn-border-radius-base : @border-radius-base; +@btn-border-radius-sm : @border-radius-base; + +@btn-primary-color : #fff; +@btn-primary-bg : @primary-color; + +@btn-default-color : @text-color; +@btn-default-bg : #fff; +@btn-default-border : @border-color-base; + +@btn-danger-color : @error-color; +@btn-danger-bg : @background-color-base; +@btn-danger-border : @border-color-base; + +@btn-disable-color : @disabled-color; +@btn-disable-bg : @disabled-bg; +@btn-disable-border : @border-color-base; + +@btn-padding-base : 0 @padding-md - 1px; +@btn-font-size-lg : @font-size-lg; +@btn-font-size-sm : @font-size-base; +@btn-padding-lg : @btn-padding-base; +@btn-padding-sm : 0 @padding-xs - 1px; + +@btn-height-base : 32px; +@btn-height-lg : 40px; +@btn-height-sm : 24px; + +@btn-circle-size : @btn-height-base; +@btn-circle-size-lg : @btn-height-lg; +@btn-circle-size-sm : @btn-height-sm; + +@btn-group-border : @primary-5; + +// Checkbox +@checkbox-size : 16px; +@checkbox-color : @primary-color; +@checkbox-check-color : #fff; + +// Radio +@radio-size : 16px; +@radio-dot-color : @primary-color; + +// Radio buttons +@radio-button-bg : @btn-default-bg; +@radio-button-color : @btn-default-color; +@radio-button-hover-color : @primary-5; +@radio-button-active-color : @primary-7; + +// Media queries breakpoints +// Extra small screen / phone +@screen-xs : 480px; +@screen-xs-min : @screen-xs; + +// Small screen / tablet +@screen-sm : 576px; +@screen-sm-min : @screen-sm; + +// Medium screen / desktop +@screen-md : 768px; +@screen-md-min : @screen-md; + +// Large screen / wide desktop +@screen-lg : 992px; +@screen-lg-min : @screen-lg; + +// Extra large screen / full hd +@screen-xl : 1200px; +@screen-xl-min : @screen-xl; + +// Extra extra large screen / large descktop +@screen-xxl : 1600px; +@screen-xxl-min : @screen-xxl; + +// provide a maximum +@screen-xs-max : (@screen-sm-min - 1px); +@screen-sm-max : (@screen-md-min - 1px); +@screen-md-max : (@screen-lg-min - 1px); +@screen-lg-max : (@screen-xl-min - 1px); +@screen-xl-max : (@screen-xxl-min - 1px); + +// Grid system +@grid-columns : 24; +@grid-gutter-width : 0; + +// Layout +@layout-body-background : #f0f2f5; +@layout-header-background : #001529; +@layout-footer-background : @layout-body-background; +@layout-header-height : 64px; +@layout-header-padding : 0 50px; +@layout-footer-padding : 24px 50px; +@layout-sider-background : @layout-header-background; +@layout-trigger-height : 48px; +@layout-trigger-background : #002140; +@layout-trigger-color : #fff; +@layout-zero-trigger-width : 36px; +@layout-zero-trigger-height : 42px; +// Layout light theme +@layout-sider-background-light : #fff; +@layout-trigger-background-light: #fff; +@layout-trigger-color-light : @text-color; + +// z-index list +@zindex-affix : 10; +@zindex-back-top : 10; +@zindex-modal-mask : 1000; +@zindex-modal : 1000; +@zindex-notification : 1010; +@zindex-message : 1010; +@zindex-popover : 1030; +@zindex-picker : 1050; +@zindex-dropdown : 1050; +@zindex-tooltip : 1060; + +// Animation +@animation-duration-slow: .3s; // Modal +@animation-duration-base: .2s; +@animation-duration-fast: .1s; // Tooltip + +// Form +// --- +@label-required-color : @highlight-color; +@label-color : @heading-color; +@form-item-margin-bottom : 24px; +@form-item-trailing-colon : true; +@form-vertical-label-padding : 0 0 8px; +@form-vertical-label-margin : 0; + +// Input +// --- +@input-height-base : 32px; +@input-height-lg : 40px; +@input-height-sm : 24px; +@input-padding-horizontal : @control-padding-horizontal - 1px; +@input-padding-horizontal-base: @input-padding-horizontal; +@input-padding-horizontal-sm : @control-padding-horizontal-sm - 1px; +@input-padding-horizontal-lg : @input-padding-horizontal; +@input-padding-vertical-base : 4px; +@input-padding-vertical-sm : 1px; +@input-padding-vertical-lg : 6px; +@input-placeholder-color : hsv(0, 0, 75%); +@input-color : @text-color; +@input-border-color : @border-color-base; +@input-bg : #fff; +@input-addon-bg : @background-color-light; +@input-hover-border-color : @primary-color; +@input-disabled-bg : @disabled-bg; +@input-outline-offset : 0 0; + +// Tooltip +// --- +//* Tooltip max width +@tooltip-max-width: 250px; +//** Tooltip text color +@tooltip-color: #fff; +//** Tooltip background color +@tooltip-bg: rgba(0, 0, 0, .75); +//** Tooltip arrow width +@tooltip-arrow-width: 5px; +//** Tooltip distance with trigger +@tooltip-distance: @tooltip-arrow-width - 1px + 4px; +//** Tooltip arrow color +@tooltip-arrow-color: @tooltip-bg; + +// Popover +// --- +//** Popover body background color +@popover-bg: #fff; +//** Popover text color +@popover-color: @text-color; +//** Popover maximum width +@popover-min-width: 177px; +//** Popover arrow width +@popover-arrow-width: 6px; +//** Popover arrow color +@popover-arrow-color: @popover-bg; +//** Popover outer arrow width +//** Popover outer arrow color +@popover-arrow-outer-color: @popover-bg; +//** Popover distance with trigger +@popover-distance: @popover-arrow-width + 4px; + +// Modal +// -- +@modal-mask-bg: rgba(0, 0, 0, 0.65); + +// Progress +// -- +@progress-default-color: @processing-color; +@progress-remaining-color: @background-color-base; +@progress-text-color: @text-color; + +// Menu +// --- +@menu-inline-toplevel-item-height: 40px; +@menu-item-height: 40px; +@menu-collapsed-width: 80px; +@menu-bg: @component-background; +@menu-item-color: @text-color; +@menu-highlight-color: @primary-color; +@menu-item-active-bg: @item-active-bg; +@menu-item-active-border-width: 3px; +@menu-item-group-title-color: @text-color-secondary; +// dark theme +@menu-dark-color: @text-color-secondary-dark; +@menu-dark-bg: @layout-header-background; +@menu-dark-arrow-color: #fff; +@menu-dark-submenu-bg: #000c17; +@menu-dark-highlight-color: #fff; +@menu-dark-item-active-bg: @primary-color; + +// Spin +// --- +@spin-dot-size-sm: 14px; +@spin-dot-size: 20px; +@spin-dot-size-lg: 32px; + +// Table +// -- +@table-header-bg: @background-color-light; +@table-header-color: @heading-color; +@table-header-sort-bg: @background-color-base; +@table-body-sort-bg: rgba(0, 0, 0, .01); +@table-row-hover-bg: @primary-1; +@table-selected-row-bg: #fafafa; +@table-expanded-row-bg: #fbfbfb; +@table-padding-vertical: 16px; +@table-padding-horizontal: 16px; + +// Tag +// -- +@tag-default-bg: @background-color-light; +@tag-default-color: @text-color; +@tag-font-size: @font-size-sm; + +// TimePicker +// --- +@time-picker-panel-column-width: 56px; +@time-picker-panel-width: @time-picker-panel-column-width * 3; +@time-picker-selected-bg: @background-color-base; + +// Carousel +// --- +@carousel-dot-width: 16px; +@carousel-dot-height: 3px; +@carousel-dot-active-width: 24px; + +// Badge +// --- +@badge-height: 20px; +@badge-dot-size: 6px; +@badge-font-size: @font-size-sm; +@badge-font-weight: normal; +@badge-status-size: 6px; + +// Rate +// --- +@rate-star-color: @yellow-6; +@rate-star-bg: @border-color-split; + +// Card +// --- +@card-head-color: @heading-color; +@card-head-background: transparent; +@card-head-padding: 16px; +@card-inner-head-padding: 12px; +@card-padding-base: 24px; +@card-padding-wider: 32px; +@card-actions-background: @background-color-light; +@card-shadow: 0 2px 8px rgba(0, 0, 0, .09); + +// Tabs +// --- +@tabs-card-head-background: @background-color-light; +@tabs-card-height: 40px; +@tabs-card-active-color: @primary-color; +@tabs-title-font-size: @font-size-base; +@tabs-title-font-size-lg: @font-size-lg; +@tabs-title-font-size-sm: @font-size-base; +@tabs-ink-bar-color: @primary-color; +@tabs-bar-margin: 0 0 16px 0; +@tabs-horizontal-margin: 0 32px 0 0; +@tabs-horizontal-padding: 12px 16px; +@tabs-vertical-padding: 8px 24px; +@tabs-vertical-margin: 0 0 16px 0; +@tabs-scrolling-size: 32px; +@tabs-highlight-color: @primary-color; +@tabs-hover-color: @primary-5; +@tabs-active-color: @primary-7; + +// BackTop +// --- +@back-top-color: #fff; +@back-top-bg: @text-color-secondary; +@back-top-hover-bg: @text-color; + +// Avatar +// --- +@avatar-size-base: 32px; +@avatar-size-lg: 40px; +@avatar-size-sm: 24px; +@avatar-font-size-base: 18px; +@avatar-font-size-lg: 24px; +@avatar-font-size-sm: 14px; +@avatar-bg: #ccc; +@avatar-color: #fff; +@avatar-border-radius: @border-radius-base; + +// Switch +// --- +@switch-height: 22px; +@switch-sm-height: 16px; +@switch-sm-checked-margin-left: -(@switch-sm-height - 3px); +@switch-disabled-opacity: 0.4; +@switch-color: @primary-color; + +// Pagination +// --- +@pagination-item-size: 32px; +@pagination-item-size-sm: 24px; +@pagination-font-family: Arial; +@pagination-font-weight-active: 500; + +// Breadcrumb +// --- +@breadcrumb-base-color: @text-color-secondary; +@breadcrumb-last-item-color: @text-color; +@breadcrumb-font-size: @font-size-base; +@breadcrumb-icon-font-size: @font-size-base; +@breadcrumb-link-color: @text-color-secondary; +@breadcrumb-link-color-hover: @primary-5; +@breadcrumb-separator-color: @text-color-secondary; +@breadcrumb-separator-margin: 0 @padding-xs; + +// Slider +// --- +@slider-margin: 14px 6px 10px; +@slider-rail-background-color: @background-color-base; +@slider-rail-background-color-hover: #e1e1e1; +@slider-track-background-color: @primary-3; +@slider-track-background-color-hover: @primary-4; +@slider-handle-color: @primary-3; +@slider-handle-color-hover: @primary-4; +@slider-handle-color-focus: tint(@primary-color, 20%); +@slider-handle-color-focus-shadow: tint(@primary-color, 50%); +@slider-handle-color-tooltip-open: @primary-color; +@slider-dot-border-color: @border-color-split; +@slider-dot-border-color-active: tint(@primary-color, 50%); +@slider-disabled-color: @disabled-color; +@slider-disabled-background-color: @component-background; + +// Tree +// --- +@tree-title-height: 24px; +@tree-child-padding: 18px; +@tree-directory-selected-color: #fff; +@tree-directory-selected-bg: @primary-color; + +// Collapse +// --- +@collapse-header-padding: 12px 0 12px 40px; +@collapse-header-bg: @background-color-light; +@collapse-content-padding: @padding-md; +@collapse-content-bg: @component-background; + +// Skeleton +// --- +@skeleton-color: #f2f2f2; + +// Transfer +// --- +@transfer-disabled-bg: @disabled-bg; + +// Message +// --- +@message-notice-content-padding: 10px 16px; + +// Motion +// --- +@wave-animation-width: 6px; + +// Alert +// --- +@alert-success-border-color: ~`colorPalette("@{success-color}", 3)`; +@alert-success-bg-color: ~`colorPalette("@{success-color}", 1)`; +@alert-success-icon-color: @success-color; +@alert-info-border-color: ~`colorPalette("@{info-color}", 3)`; +@alert-info-bg-color: ~`colorPalette("@{info-color}", 1)`; +@alert-info-icon-color: @info-color; +@alert-warning-border-color: ~`colorPalette("@{warning-color}", 3)`; +@alert-warning-bg-color: ~`colorPalette("@{warning-color}", 1)`; +@alert-warning-icon-color: @warning-color; +@alert-error-border-color: ~`colorPalette("@{error-color}", 3)`; +@alert-error-bg-color: ~`colorPalette("@{error-color}", 1)`; +@alert-error-icon-color: @error-color; + +// List +// --- +@list-empty-text-padding: @padding-md; +@list-item-padding: @padding-sm 0; +@list-item-content-margin: 0 0 @padding-md 0; +@list-item-meta-margin-bottom: @padding-md; +@list-item-meta-avatar-margin-right: @padding-md; +@list-item-meta-title-margin-bottom: @padding-sm; + +// Menu +@menu-dark-item-selected-bg: @menu-dark-item-active-bg; + +// Tabs +@tab-bar-margin: @tabs-bar-margin; +@tab-horizontal-margin: @tabs-horizontal-margin; +@tab-vertical-margin: @tabs-vertical-margin; +@tab-horizontal-padding: @tabs-horizontal-padding; +@tab-vertical-padding: @tabs-vertical-padding; +@tab-scrolling-size: @tabs-scrolling-size; +@tab-highlight-color: @tabs-highlight-color; +@tab-hover-color: @tabs-hover-color; +@tab-active-color: @tabs-active-color; +@tabs-ink-bar-bg-color: @tabs-ink-bar-color; + +.listContent .extra { + color: rgba(0, 0, 0, 0.45); +} +.listContent .extra > em { + color: rgba(0, 0, 0, 0.25); +} +.avatarItem :global .ant-avatar { + border: 1px solid #fff; +} +.chartCard .avatar img { + border-radius: 100%; +} +.chartCard .meta { + color: rgba(0, 0, 0, 0.45); +} +.chartCard .total { + color: rgba(0, 0, 0, 0.85); +} +.chartCard .footer { + border-top: 1px solid #e8e8e8; +} +.field span:last-child { + color: rgba(0, 0, 0, 0.85); +} +.miniProgress .progressWrap { + background-color: #f5f5f5; +} +.miniProgress .progress { + border-radius: 1px 0 0 1px; + background-color: @primary-color; +} +.miniProgress .target span { + border-radius: 100px; +} +.pie .dot { + border-radius: 8px; +} +.pie .line { + background-color: #e8e8e8; +} +.pie .legendTitle { + color: rgba(0, 0, 0, 0.65); +} +.pie .percent { + color: rgba(0, 0, 0, 0.45); +} +.pie .total > h4 { + color: rgba(0, 0, 0, 0.45); +} +.pie .total > p { + color: rgba(0, 0, 0, 0.85); +} +.radar .legend .legendItem { + color: rgba(0, 0, 0, 0.45); +} +.radar .legend .legendItem h6 { + color: rgba(0, 0, 0, 0.85); +} +.radar .legend .legendItem:after { + background-color: #e8e8e8; +} +.radar .legend .dot { + border-radius: 6px; +} + +.timelineChart { + background: #fff; +} +.waterWave .text span { + color: rgba(0, 0, 0, 0.45); +} +.waterWave .text h4 { + color: rgba(0, 0, 0, 0.85); +} +.descriptionList .title { + color: rgba(0, 0, 0, 0.85); +} +.descriptionList .term { + color: rgba(0, 0, 0, 0.85); +} +.descriptionList .detail { + color: rgba(0, 0, 0, 0.65); +} +.descriptionList.small .title { + color: rgba(0, 0, 0, 0.65); +} +.linkGroup > a { + color: rgba(0, 0, 0, 0.65); +} +.linkGroup > a:hover { + color: @primary-color; +} +.lines .shadow { + color: transparent; +} +.exception .imgEle { + background-repeat: no-repeat; + background-position: 50% 50%; + background-size: contain; +} +.exception .content h1 { + color: #434e59; +} +.exception .content .desc { + color: rgba(0, 0, 0, 0.45); +} +.toolbar { + box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.03); + background: #fff; + border-top: 1px solid #e8e8e8; +} +.globalFooter .links a { + color: rgba(0, 0, 0, 0.45); +} +.globalFooter .links a:hover { + color: rgba(0, 0, 0, 0.65); +} +.globalFooter .copyright { + color: rgba(0, 0, 0, 0.45); +} +.header { + background: #fff; + box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08); +} +i.trigger:hover { + background: rgba(0, 0, 0, 0.025); +} +.right .action > i { + color: rgba(0, 0, 0, 0.65); +} +.right .action:hover { + background: rgba(0, 0, 0, 0.025); +} +:global(.right .action.ant-popover-open) { + background: rgba(0, 0, 0, 0.025); +} +.right .search:hover { + background: transparent; +} +.right .account .avatar { + color: @primary-color; + background: rgba(255, 255, 255, 0.85); +} +.dark .action { + color: rgba(255, 255, 255, 0.85); +} +.dark .action > i { + color: rgba(255, 255, 255, 0.85); +} +.dark .action:hover, +.dark .action:global(.ant-popover-open) { + background: @primary-color; +} +.dark .action :global(.ant-badge) { + color: rgba(255, 255, 255, 0.85); +} +.headerSearch .input { + background: transparent; + border-radius: 0; +} +.headerSearch .input :global(.ant-select-selection) { + background: transparent; +} +.headerSearch .input input { + border: 0; + box-shadow: none !important; +} +.headerSearch .input, +.headerSearch .input:hover, +.headerSearch .input:focus { + border-bottom: 1px solid #d9d9d9; +} +.login :global .ant-tabs .ant-tabs-bar { + border-bottom: 0; +} +.login .icon { + color: rgba(0, 0, 0, 0.2); +} +.login .icon:hover { + color: @primary-color; +} +.login .prefixIcon { + color: rgba(0, 0, 0, 0.25); +} +.list .item .avatar { + background: #fff; +} +.list .item:last-child { + border-bottom: 0; +} +.list .item:hover { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +.list .item .extra { + color: rgba(0, 0, 0, 0.45); +} +.notFound { + color: rgba(0, 0, 0, 0.45); +} +.clear { + color: rgba(0, 0, 0, 0.65); + border-radius: 0 0 4px 4px; + border-top: 1px solid #e8e8e8; +} +.clear:hover { + color: rgba(0, 0, 0, 0.85); +} +.numberInfo .suffix { + color: rgba(0, 0, 0, 0.65); +} +.numberInfo .numberInfoTitle { + color: rgba(0, 0, 0, 0.65); +} +.numberInfo .numberInfoSubTitle { + color: rgba(0, 0, 0, 0.45); +} +.numberInfo .numberInfoValue > span { + color: rgba(0, 0, 0, 0.85); +} +.numberInfo .numberInfoValue .subTotal { + color: rgba(0, 0, 0, 0.45); +} +.numberInfo .numberInfoValue .subTotal :global .anticon-caret-up { + color: #f5222d; +} +.numberInfo .numberInfoValue .subTotal :global .anticon-caret-down { + color: #52c41a; +} +.numberInfolight .numberInfoValue > span { + color: rgba(0, 0, 0, 0.65); +} +.pageHeader { + background: #fff; + border-bottom: 1px solid #e8e8e8; +} +.pageHeader .tabs :global .ant-tabs-bar { + border-bottom: 1px solid #e8e8e8; +} +.pageHeader .logo > img { + border-radius: 4px; +} +.pageHeader .title { + color: rgba(0, 0, 0, 0.85); +} +.result .icon > .success { + color: #52c41a; +} +.result .icon > .error { + color: #f5222d; +} +.result .title { + color: rgba(0, 0, 0, 0.85); +} +.result .description { + color: rgba(0, 0, 0, 0.45); +} +.result .extra { + background: #fafafa; + border-radius: 2px; +} +.blockChecbox .item { + border-radius: 4px; +} +.blockChecbox .selectIcon { + color: @primary-color; +} +.color_block { + border-radius: 4px; +} +.title { + color: rgba(0, 0, 0, 0.85); +} +.handle { + background: @primary-color; + border-radius: 4px 0 0 4px; +} +.setting-drawer-index-handle { + /* 暂时不知道放哪解决 */ + background: @primary-color !important; +} +.themeColor .title { + color: rgba(0, 0, 0, 0.65); +} +.themeColor .colorBlock { + border-radius: 2px; + color: #fff; +} +.logo { +} +.logo h1 { + color: white; +} +.sider { + box-shadow: 2px 0 6px rgba(0, 21, 41, 0.35); +} +.sider.light { + box-shadow: 2px 0 8px 0 rgba(29, 35, 41, 0.05); + background-color: white; +} +.sider.light .logo { + background: white; + box-shadow: 1px 1px 0 0 #e8e8e8; +} +.sider.light .logo h1 { + color: @primary-color; +} +.sider.light :global(.ant-menu-light) { + border-right-color: transparent; +} +:global .drawer .drawer-content { + background: #001529; +} +.standardFormRow { + border-bottom: 1px dashed #e8e8e8; +} +.standardFormRow :global .ant-form-item-label label { + color: rgba(0, 0, 0, 0.65); +} +.standardFormRow .label { + color: rgba(0, 0, 0, 0.85); +} +.standardFormRowLast { + border: none; +} + +.head { + box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08); +} +.head.light { + background-color: #fff; +} +.logo h1 { + color: #fff; +} +.light h1 { + color: #002140; +} +.trendItem .up { + color: #f5222d; +} +.trendItem .down { + color: #52c41a; +} +.trendItem.trendItemGrey .up, +.trendItem.trendItemGrey .down { + color: rgba(0, 0, 0, 0.65); +} +.trendItem.reverseColor .up { + color: #52c41a; +} +.trendItem.reverseColor .down { + color: #f5222d; +} +.container { + background: #f0f2f5; +} +.title { + color: rgba(0, 0, 0, 0.85); +} +.desc { + color: rgba(0, 0, 0, 0.45); +} +a.listItemMetaTitle { + color: rgba(0, 0, 0, 0.85); +} +.baseView .right .avatar_title { + color: rgba(0, 0, 0, 0.85); +} +.main { + background-color: #fff; +} +.main .leftmenu { + border-right: 1px solid #e8e8e8; +} +.main .leftmenu :global .ant-menu-inline { + border: none; +} +.main .right .title { + color: rgba(0, 0, 0, 0.85); +} +.main :global .ant-list-split .ant-list-item:last-child { + border-bottom: 1px solid #e8e8e8; +} +:global .ant-list-item-meta .taobao { + color: #ff4000; + border-radius: 4px; +} +:global .ant-list-item-meta .dingding { + background-color: #2eabff; + color: #fff; + border-radius: 4px; +} +:global .ant-list-item-meta .alipay { + color: #2eabff; + border-radius: 4px; +} +:global font.strong { + color: #52c41a; +} +:global font.medium { + color: #faad14; +} +:global font.weak { + color: #f5222d; +} + + + + +.trigger { + background: 'red'; +} +.desc { + color: rgba(0, 0, 0, 0.45); +} +.desc h3 { + color: rgba(0, 0, 0, 0.45); +} +.desc h4 { + color: rgba(0, 0, 0, 0.45); +} +.information .label { + color: rgba(0, 0, 0, 0.85); +} +.errorIcon { + color: #f5222d; +} +.errorListItem { + border-bottom: 1px solid #e8e8e8; +} +.errorListItem:hover { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +.errorListItem:last-child { + border: 0; +} +.errorListItem .errorIcon { + color: #f5222d; +} +.errorListItem .errorField { + color: rgba(0, 0, 0, 0.45); +} +.optional { + color: rgba(0, 0, 0, 0.45); +} +a.listItemMetaTitle { + color: rgba(0, 0, 0, 0.85); +} +.noData { + color: rgba(0, 0, 0, 0.25); +} +.heading { + color: rgba(0, 0, 0, 0.85); +} +.textSecondary { + color: rgba(0, 0, 0, 0.45); +} +.title { + color: rgba(0, 0, 0, 0.85); +} +.main .icon { + color: rgba(0, 0, 0, 0.2); +} +.main .icon:hover { + color: @primary-color; +} +.success { + color: #52c41a; +} +.warning { + color: #faad14; +} +.error { + color: #f5222d; +} +.progress-pass > .progress :global .ant-progress-bg { + background-color: #faad14; +} +html { + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} +body { + color: rgba(0, 0, 0, 0.65); + background-color: #fff; +} +h1, +h2, +h3, +h4, +h5, +h6 { + color: rgba(0, 0, 0, 0.85); +} +abbr[title], +abbr[data-original-title] { + border-bottom: 0; +} +a { + color: @primary-color; + background-color: transparent; +} +a:hover { + color: color(~`colorPalette("@{primary-color}", 5)`); +} +a:active { + color: color(~`colorPalette("@{primary-color}", 7)`); +} +a[disabled] { + color: rgba(0, 0, 0, 0.25); +} +img { + border-style: none; +} +table { + border-collapse: collapse; +} +caption { + color: rgba(0, 0, 0, 0.45); +} +input, +button, +select, +optgroup, +textarea { + color: inherit; +} +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; +} +fieldset { + border: 0; +} +legend { + color: inherit; +} +mark { + background-color: #feffe6; +} +::selection { + background: @primary-color; + color: #fff; +} +[ant-click-animating-without-extra-node]:after, +.ant-click-animating-node { + border-radius: inherit; + border: 0 solid @primary-color; +} +.ant-alert { + color: rgba(0, 0, 0, 0.65); + border-radius: 4px; +} +.ant-alert-success { + border: 1px solid #b7eb8f; + background-color: #f6ffed; +} +.ant-alert-success .ant-alert-icon { + color: #52c41a; +} +.ant-alert-info { + border: 1px solid color(~`colorPalette("@{primary-color}", 3)`); + background-color: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-alert-info .ant-alert-icon { + color: @primary-color; +} +.ant-alert-warning { + border: 1px solid #ffe58f; + background-color: #fffbe6; +} +.ant-alert-warning .ant-alert-icon { + color: #faad14; +} +.ant-alert-error { + border: 1px solid #ffa39e; + background-color: #fff1f0; +} +.ant-alert-error .ant-alert-icon { + color: #f5222d; +} +.ant-alert-close-icon .anticon-close { + color: rgba(0, 0, 0, 0.45); +} +.ant-alert-close-icon .anticon-close:hover { + color: #404040; +} +.ant-alert-with-description { + border-radius: 4px; + color: rgba(0, 0, 0, 0.65); +} +.ant-alert-with-description .ant-alert-message { + color: rgba(0, 0, 0, 0.85); +} +.ant-alert-banner { + border-radius: 0; + border: 0; +} +.ant-anchor { + color: rgba(0, 0, 0, 0.65); +} +.ant-anchor-wrapper { + background-color: #fff; +} +.ant-anchor-ink:before { + background-color: #e8e8e8; +} +.ant-anchor-ink-ball { + border-radius: 8px; + border: 2px solid @primary-color; + background-color: #fff; +} +.ant-anchor-link-title { + color: rgba(0, 0, 0, 0.65); +} +.ant-anchor-link-active > .ant-anchor-link-title { + color: @primary-color; +} +.ant-select-auto-complete { + color: rgba(0, 0, 0, 0.65); +} +.ant-select-auto-complete.ant-select .ant-select-selection { + border: 0; + box-shadow: none; +} +.ant-select-auto-complete.ant-select .ant-input { + background: transparent; + border-width: 1px; +} +.ant-select-auto-complete.ant-select .ant-input:focus, +.ant-select-auto-complete.ant-select .ant-input:hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + border-right-width: 1px !important; +} +.ant-avatar { + color: rgba(0, 0, 0, 0.65); + background: #ccc; + color: #fff; + border-radius: 50%; +} +.ant-avatar-image { + background: transparent; +} +.ant-avatar-lg { + border-radius: 50%; +} +.ant-avatar-sm { + border-radius: 50%; +} +.ant-avatar-square { + border-radius: 4px; +} +.ant-back-top { + color: rgba(0, 0, 0, 0.65); +} +.ant-back-top-content { + border-radius: 20px; + background-color: rgba(0, 0, 0, 0.45); + color: #fff; +} +.ant-back-top-content:hover { + background-color: rgba(0, 0, 0, 0.65); +} +.ant-back-top-icon { + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAoCAYAAACWwljjAAAABGdBTUEAALGPC/xhBQAAAbtJREFUWAntmMtKw0AUhhMvS5cuxILgQlRUpIggIoKIIoigG1eC+AA+jo+i6FIXBfeuXIgoeKVeitVWJX5HWhhDksnUpp3FDPyZk3Nm5nycmZKkXhAEOXSA3lG7muTeRzmfy6HneUvIhnYkQK+Q9NhAA0Opg0vBEhjBKHiyb8iGMyQMOYuK41BcBSypAL+MYXSKjtFAW7EAGEO3qN4uMQbbAkXiSfRQJ1H6a+yhlkKRcAoVFYiweYNjtCVQJJpBz2GCiPt7fBOZQpFgDpUikse5HgnkM4Fi4QX0Fpc5wf9EbLqpUCy4jMoJSXWhFwbMNgWKhVbRhy5jirhs9fy/oFhgHVVTJEs7RLZ8sSEoJm6iz7SZDMbJ+/OKERQTttCXQRLToRUmrKWCYuA2+jbN0MB4OQobYShfdTCgn/sL1K36M7TLrN3n+758aPy2rrpR6+/od5E8tf/A1uLS9aId5T7J3CNYihkQ4D9PiMdMC7mp4rjB9kjFjZp8BlnVHJBuO1yFXIV0FdDF3RlyFdJVQBdv5AxVdIsq8apiZ2PyYO1EVykesGfZEESsCkweyR8MUW+V8uJ1gkYipmpdP1pm2aJVPEGzAAAAAElFTkSuQmCC) 100%/100% no-repeat; +} +.ant-badge { + color: rgba(0, 0, 0, 0.65); + color: unset; +} +.ant-badge-count { + border-radius: 10px; + background: #f5222d; + color: #fff; + box-shadow: 0 0 0 1px #fff; +} +.ant-badge-count a, +.ant-badge-count a:hover { + color: #fff; +} +.ant-badge-dot { + border-radius: 100%; + background: #f5222d; + box-shadow: 0 0 0 1px #fff; +} +.ant-badge-status-dot { + border-radius: 50%; +} +.ant-badge-status-success { + background-color: #52c41a; +} +.ant-badge-status-processing { + background-color: @primary-color; +} +.ant-badge-status-processing:after { + border-radius: 50%; + border: 1px solid @primary-color; +} +.ant-badge-status-default { + background-color: #d9d9d9; +} +.ant-badge-status-error { + background-color: #f5222d; +} +.ant-badge-status-warning { + background-color: #faad14; +} +.ant-badge-status-text { + color: rgba(0, 0, 0, 0.65); +} +.ant-breadcrumb { + color: rgba(0, 0, 0, 0.65); + color: rgba(0, 0, 0, 0.45); +} +.ant-breadcrumb a { + color: rgba(0, 0, 0, 0.45); +} +.ant-breadcrumb a:hover { + color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-breadcrumb > span:last-child { + color: rgba(0, 0, 0, 0.65); +} +.ant-breadcrumb-separator { + color: rgba(0, 0, 0, 0.45); +} +.ant-btn { + background-image: none; + border: 1px solid transparent; + border-radius: 4px; + box-shadow: 0 2px 0 rgba(0, 0, 0, 0.015); + color: rgba(0, 0, 0, 0.65); + background-color: #fff; + border-color: #d9d9d9; +} +.ant-btn:not([disabled]):active { + box-shadow: none; +} +.ant-btn-lg { + border-radius: 4px; +} +.ant-btn-sm { + border-radius: 4px; +} +.ant-btn > a:only-child { + color: currentColor; +} +.ant-btn > a:only-child:after { + background: transparent; +} +.ant-btn:hover, +.ant-btn:focus { + color: color(~`colorPalette("@{primary-color}", 5)`); + background-color: #fff; + border-color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-btn:hover > a:only-child, +.ant-btn:focus > a:only-child { + color: currentColor; +} +.ant-btn:hover > a:only-child:after, +.ant-btn:focus > a:only-child:after { + background: transparent; +} +.ant-btn:active, +.ant-btn.active { + color: color(~`colorPalette("@{primary-color}", 7)`); + background-color: #fff; + border-color: color(~`colorPalette("@{primary-color}", 7)`); +} +.ant-btn:active > a:only-child, +.ant-btn.active > a:only-child { + color: currentColor; +} +.ant-btn:active > a:only-child:after, +.ant-btn.active > a:only-child:after { + background: transparent; +} +.ant-btn.disabled, +.ant-btn[disabled], +.ant-btn.disabled:hover, +.ant-btn[disabled]:hover, +.ant-btn.disabled:focus, +.ant-btn[disabled]:focus, +.ant-btn.disabled:active, +.ant-btn[disabled]:active, +.ant-btn.disabled.active, +.ant-btn[disabled].active { + color: rgba(0, 0, 0, 0.25); + background-color: #f5f5f5; + border-color: #d9d9d9; + box-shadow: none; +} +.ant-btn.disabled > a:only-child, +.ant-btn[disabled] > a:only-child, +.ant-btn.disabled:hover > a:only-child, +.ant-btn[disabled]:hover > a:only-child, +.ant-btn.disabled:focus > a:only-child, +.ant-btn[disabled]:focus > a:only-child, +.ant-btn.disabled:active > a:only-child, +.ant-btn[disabled]:active > a:only-child, +.ant-btn.disabled.active > a:only-child, +.ant-btn[disabled].active > a:only-child { + color: currentColor; +} +.ant-btn.disabled > a:only-child:after, +.ant-btn[disabled] > a:only-child:after, +.ant-btn.disabled:hover > a:only-child:after, +.ant-btn[disabled]:hover > a:only-child:after, +.ant-btn.disabled:focus > a:only-child:after, +.ant-btn[disabled]:focus > a:only-child:after, +.ant-btn.disabled:active > a:only-child:after, +.ant-btn[disabled]:active > a:only-child:after, +.ant-btn.disabled.active > a:only-child:after, +.ant-btn[disabled].active > a:only-child:after { + background: transparent; +} +.ant-btn:hover, +.ant-btn:focus, +.ant-btn:active, +.ant-btn.active { + background: #fff; +} +.ant-btn-primary { + color: #fff; + background-color: @primary-color; + border-color: @primary-color; + box-shadow: 0 2px 0 rgba(0, 0, 0, 0.035); +} +.ant-btn-primary > a:only-child { + color: currentColor; +} +.ant-btn-primary > a:only-child:after { + background: transparent; +} +.ant-btn-primary:hover, +.ant-btn-primary:focus { + color: #fff; + background-color: color(~`colorPalette("@{primary-color}", 5)`); + border-color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-btn-primary:hover > a:only-child, +.ant-btn-primary:focus > a:only-child { + color: currentColor; +} +.ant-btn-primary:hover > a:only-child:after, +.ant-btn-primary:focus > a:only-child:after { + background: transparent; +} +.ant-btn-primary:active, +.ant-btn-primary.active { + color: #fff; + background-color: color(~`colorPalette("@{primary-color}", 7)`); + border-color: color(~`colorPalette("@{primary-color}", 7)`); +} +.ant-btn-primary:active > a:only-child, +.ant-btn-primary.active > a:only-child { + color: currentColor; +} +.ant-btn-primary:active > a:only-child:after, +.ant-btn-primary.active > a:only-child:after { + background: transparent; +} +.ant-btn-primary.disabled, +.ant-btn-primary[disabled], +.ant-btn-primary.disabled:hover, +.ant-btn-primary[disabled]:hover, +.ant-btn-primary.disabled:focus, +.ant-btn-primary[disabled]:focus, +.ant-btn-primary.disabled:active, +.ant-btn-primary[disabled]:active, +.ant-btn-primary.disabled.active, +.ant-btn-primary[disabled].active { + color: rgba(0, 0, 0, 0.25); + background-color: #f5f5f5; + border-color: #d9d9d9; + box-shadow: none; +} +.ant-btn-primary.disabled > a:only-child, +.ant-btn-primary[disabled] > a:only-child, +.ant-btn-primary.disabled:hover > a:only-child, +.ant-btn-primary[disabled]:hover > a:only-child, +.ant-btn-primary.disabled:focus > a:only-child, +.ant-btn-primary[disabled]:focus > a:only-child, +.ant-btn-primary.disabled:active > a:only-child, +.ant-btn-primary[disabled]:active > a:only-child, +.ant-btn-primary.disabled.active > a:only-child, +.ant-btn-primary[disabled].active > a:only-child { + color: currentColor; +} +.ant-btn-primary.disabled > a:only-child:after, +.ant-btn-primary[disabled] > a:only-child:after, +.ant-btn-primary.disabled:hover > a:only-child:after, +.ant-btn-primary[disabled]:hover > a:only-child:after, +.ant-btn-primary.disabled:focus > a:only-child:after, +.ant-btn-primary[disabled]:focus > a:only-child:after, +.ant-btn-primary.disabled:active > a:only-child:after, +.ant-btn-primary[disabled]:active > a:only-child:after, +.ant-btn-primary.disabled.active > a:only-child:after, +.ant-btn-primary[disabled].active > a:only-child:after { + background: transparent; +} +.ant-btn-group .ant-btn-primary:not(:first-child):not(:last-child) { + border-right-color: color(~`colorPalette("@{primary-color}", 5)`); + border-left-color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-btn-group .ant-btn-primary:not(:first-child):not(:last-child):disabled { + border-color: #d9d9d9; +} +.ant-btn-group .ant-btn-primary:first-child:not(:last-child) { + border-right-color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-btn-group .ant-btn-primary:first-child:not(:last-child)[disabled] { + border-right-color: #d9d9d9; +} +.ant-btn-group .ant-btn-primary:last-child:not(:first-child), +.ant-btn-group .ant-btn-primary + .ant-btn-primary { + border-left-color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-btn-group .ant-btn-primary:last-child:not(:first-child)[disabled], +.ant-btn-group .ant-btn-primary + .ant-btn-primary[disabled] { + border-left-color: #d9d9d9; +} +.ant-btn-ghost { + color: rgba(0, 0, 0, 0.65); + background-color: transparent; + border-color: #d9d9d9; +} +.ant-btn-ghost > a:only-child { + color: currentColor; +} +.ant-btn-ghost > a:only-child:after { + background: transparent; +} +.ant-btn-ghost:hover, +.ant-btn-ghost:focus { + color: color(~`colorPalette("@{primary-color}", 5)`); + background-color: transparent; + border-color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-btn-ghost:hover > a:only-child, +.ant-btn-ghost:focus > a:only-child { + color: currentColor; +} +.ant-btn-ghost:hover > a:only-child:after, +.ant-btn-ghost:focus > a:only-child:after { + background: transparent; +} +.ant-btn-ghost:active, +.ant-btn-ghost.active { + color: color(~`colorPalette("@{primary-color}", 7)`); + background-color: transparent; + border-color: color(~`colorPalette("@{primary-color}", 7)`); +} +.ant-btn-ghost:active > a:only-child, +.ant-btn-ghost.active > a:only-child { + color: currentColor; +} +.ant-btn-ghost:active > a:only-child:after, +.ant-btn-ghost.active > a:only-child:after { + background: transparent; +} +.ant-btn-ghost.disabled, +.ant-btn-ghost[disabled], +.ant-btn-ghost.disabled:hover, +.ant-btn-ghost[disabled]:hover, +.ant-btn-ghost.disabled:focus, +.ant-btn-ghost[disabled]:focus, +.ant-btn-ghost.disabled:active, +.ant-btn-ghost[disabled]:active, +.ant-btn-ghost.disabled.active, +.ant-btn-ghost[disabled].active { + color: rgba(0, 0, 0, 0.25); + background-color: #f5f5f5; + border-color: #d9d9d9; + box-shadow: none; +} +.ant-btn-ghost.disabled > a:only-child, +.ant-btn-ghost[disabled] > a:only-child, +.ant-btn-ghost.disabled:hover > a:only-child, +.ant-btn-ghost[disabled]:hover > a:only-child, +.ant-btn-ghost.disabled:focus > a:only-child, +.ant-btn-ghost[disabled]:focus > a:only-child, +.ant-btn-ghost.disabled:active > a:only-child, +.ant-btn-ghost[disabled]:active > a:only-child, +.ant-btn-ghost.disabled.active > a:only-child, +.ant-btn-ghost[disabled].active > a:only-child { + color: currentColor; +} +.ant-btn-ghost.disabled > a:only-child:after, +.ant-btn-ghost[disabled] > a:only-child:after, +.ant-btn-ghost.disabled:hover > a:only-child:after, +.ant-btn-ghost[disabled]:hover > a:only-child:after, +.ant-btn-ghost.disabled:focus > a:only-child:after, +.ant-btn-ghost[disabled]:focus > a:only-child:after, +.ant-btn-ghost.disabled:active > a:only-child:after, +.ant-btn-ghost[disabled]:active > a:only-child:after, +.ant-btn-ghost.disabled.active > a:only-child:after, +.ant-btn-ghost[disabled].active > a:only-child:after { + background: transparent; +} +.ant-btn-dashed { + color: rgba(0, 0, 0, 0.65); + background-color: #fff; + border-color: #d9d9d9; + border-style: dashed; +} +.ant-btn-dashed > a:only-child { + color: currentColor; +} +.ant-btn-dashed > a:only-child:after { + background: transparent; +} +.ant-btn-dashed:hover, +.ant-btn-dashed:focus { + color: color(~`colorPalette("@{primary-color}", 5)`); + background-color: #fff; + border-color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-btn-dashed:hover > a:only-child, +.ant-btn-dashed:focus > a:only-child { + color: currentColor; +} +.ant-btn-dashed:hover > a:only-child:after, +.ant-btn-dashed:focus > a:only-child:after { + background: transparent; +} +.ant-btn-dashed:active, +.ant-btn-dashed.active { + color: color(~`colorPalette("@{primary-color}", 7)`); + background-color: #fff; + border-color: color(~`colorPalette("@{primary-color}", 7)`); +} +.ant-btn-dashed:active > a:only-child, +.ant-btn-dashed.active > a:only-child { + color: currentColor; +} +.ant-btn-dashed:active > a:only-child:after, +.ant-btn-dashed.active > a:only-child:after { + background: transparent; +} +.ant-btn-dashed.disabled, +.ant-btn-dashed[disabled], +.ant-btn-dashed.disabled:hover, +.ant-btn-dashed[disabled]:hover, +.ant-btn-dashed.disabled:focus, +.ant-btn-dashed[disabled]:focus, +.ant-btn-dashed.disabled:active, +.ant-btn-dashed[disabled]:active, +.ant-btn-dashed.disabled.active, +.ant-btn-dashed[disabled].active { + color: rgba(0, 0, 0, 0.25); + background-color: #f5f5f5; + border-color: #d9d9d9; + box-shadow: none; +} +.ant-btn-dashed.disabled > a:only-child, +.ant-btn-dashed[disabled] > a:only-child, +.ant-btn-dashed.disabled:hover > a:only-child, +.ant-btn-dashed[disabled]:hover > a:only-child, +.ant-btn-dashed.disabled:focus > a:only-child, +.ant-btn-dashed[disabled]:focus > a:only-child, +.ant-btn-dashed.disabled:active > a:only-child, +.ant-btn-dashed[disabled]:active > a:only-child, +.ant-btn-dashed.disabled.active > a:only-child, +.ant-btn-dashed[disabled].active > a:only-child { + color: currentColor; +} +.ant-btn-dashed.disabled > a:only-child:after, +.ant-btn-dashed[disabled] > a:only-child:after, +.ant-btn-dashed.disabled:hover > a:only-child:after, +.ant-btn-dashed[disabled]:hover > a:only-child:after, +.ant-btn-dashed.disabled:focus > a:only-child:after, +.ant-btn-dashed[disabled]:focus > a:only-child:after, +.ant-btn-dashed.disabled:active > a:only-child:after, +.ant-btn-dashed[disabled]:active > a:only-child:after, +.ant-btn-dashed.disabled.active > a:only-child:after, +.ant-btn-dashed[disabled].active > a:only-child:after { + background: transparent; +} +.ant-btn-danger { + color: #f5222d; + background-color: #f5f5f5; + border-color: #d9d9d9; +} +.ant-btn-danger > a:only-child { + color: currentColor; +} +.ant-btn-danger > a:only-child:after { + background: transparent; +} +.ant-btn-danger:hover { + color: #fff; + background-color: #ff4d4f; + border-color: #ff4d4f; +} +.ant-btn-danger:hover > a:only-child { + color: currentColor; +} +.ant-btn-danger:hover > a:only-child:after { + background: transparent; +} +.ant-btn-danger:focus { + color: #ff4d4f; + background-color: #fff; + border-color: #ff4d4f; +} +.ant-btn-danger:focus > a:only-child { + color: currentColor; +} +.ant-btn-danger:focus > a:only-child:after { + background: transparent; +} +.ant-btn-danger:active, +.ant-btn-danger.active { + color: #fff; + background-color: #cf1322; + border-color: #cf1322; +} +.ant-btn-danger:active > a:only-child, +.ant-btn-danger.active > a:only-child { + color: currentColor; +} +.ant-btn-danger:active > a:only-child:after, +.ant-btn-danger.active > a:only-child:after { + background: transparent; +} +.ant-btn-danger.disabled, +.ant-btn-danger[disabled], +.ant-btn-danger.disabled:hover, +.ant-btn-danger[disabled]:hover, +.ant-btn-danger.disabled:focus, +.ant-btn-danger[disabled]:focus, +.ant-btn-danger.disabled:active, +.ant-btn-danger[disabled]:active, +.ant-btn-danger.disabled.active, +.ant-btn-danger[disabled].active { + color: rgba(0, 0, 0, 0.25); + background-color: #f5f5f5; + border-color: #d9d9d9; + box-shadow: none; +} +.ant-btn-danger.disabled > a:only-child, +.ant-btn-danger[disabled] > a:only-child, +.ant-btn-danger.disabled:hover > a:only-child, +.ant-btn-danger[disabled]:hover > a:only-child, +.ant-btn-danger.disabled:focus > a:only-child, +.ant-btn-danger[disabled]:focus > a:only-child, +.ant-btn-danger.disabled:active > a:only-child, +.ant-btn-danger[disabled]:active > a:only-child, +.ant-btn-danger.disabled.active > a:only-child, +.ant-btn-danger[disabled].active > a:only-child { + color: currentColor; +} +.ant-btn-danger.disabled > a:only-child:after, +.ant-btn-danger[disabled] > a:only-child:after, +.ant-btn-danger.disabled:hover > a:only-child:after, +.ant-btn-danger[disabled]:hover > a:only-child:after, +.ant-btn-danger.disabled:focus > a:only-child:after, +.ant-btn-danger[disabled]:focus > a:only-child:after, +.ant-btn-danger.disabled:active > a:only-child:after, +.ant-btn-danger[disabled]:active > a:only-child:after, +.ant-btn-danger.disabled.active > a:only-child:after, +.ant-btn-danger[disabled].active > a:only-child:after { + background: transparent; +} +.ant-btn-circle, +.ant-btn-circle-outline { + border-radius: 50%; +} +.ant-btn-circle.ant-btn-lg, +.ant-btn-circle-outline.ant-btn-lg { + border-radius: 50%; +} +.ant-btn-circle.ant-btn-sm, +.ant-btn-circle-outline.ant-btn-sm { + border-radius: 50%; +} +.ant-btn:before { + background: #fff; + border-radius: inherit; +} +.ant-btn-group-lg > .ant-btn, +.ant-btn-group-lg > span > .ant-btn { + border-radius: 0; +} +.ant-btn-group-sm > .ant-btn, +.ant-btn-group-sm > span > .ant-btn { + border-radius: 0; +} +.ant-btn-group .ant-btn-primary + .ant-btn:not(.ant-btn-primary):not([disabled]) { + border-left-color: transparent; +} +.ant-btn-group .ant-btn { + border-radius: 0; +} +.ant-btn-group > .ant-btn:only-child { + border-radius: 4px; +} +.ant-btn-group > span:only-child > .ant-btn { + border-radius: 4px; +} +.ant-btn-group > .ant-btn:first-child:not(:last-child), +.ant-btn-group > span:first-child:not(:last-child) > .ant-btn { + border-bottom-left-radius: 4px; + border-top-left-radius: 4px; +} +.ant-btn-group > .ant-btn:last-child:not(:first-child), +.ant-btn-group > span:last-child:not(:first-child) > .ant-btn { + border-bottom-right-radius: 4px; + border-top-right-radius: 4px; +} +.ant-btn-group-sm > .ant-btn:only-child { + border-radius: 4px; +} +.ant-btn-group-sm > span:only-child > .ant-btn { + border-radius: 4px; +} +.ant-btn-group-sm > .ant-btn:first-child:not(:last-child), +.ant-btn-group-sm > span:first-child:not(:last-child) > .ant-btn { + border-bottom-left-radius: 4px; + border-top-left-radius: 4px; +} +.ant-btn-group-sm > .ant-btn:last-child:not(:first-child), +.ant-btn-group-sm > span:last-child:not(:first-child) > .ant-btn { + border-bottom-right-radius: 4px; + border-top-right-radius: 4px; +} +.ant-btn-group > .ant-btn-group:not(:first-child):not(:last-child) > .ant-btn { + border-radius: 0; +} +.ant-btn-group > .ant-btn-group:first-child:not(:last-child) > .ant-btn:last-child { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.ant-btn-group > .ant-btn-group:last-child:not(:first-child) > .ant-btn:first-child { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.ant-btn-background-ghost { + background: transparent !important; + border-color: #fff; + color: #fff; +} +.ant-btn-background-ghost.ant-btn-primary { + color: @primary-color; + background-color: transparent; + border-color: @primary-color; +} +.ant-btn-background-ghost.ant-btn-primary > a:only-child { + color: currentColor; +} +.ant-btn-background-ghost.ant-btn-primary > a:only-child:after { + background: transparent; +} +.ant-btn-background-ghost.ant-btn-primary:hover, +.ant-btn-background-ghost.ant-btn-primary:focus { + color: color(~`colorPalette("@{primary-color}", 5)`); + background-color: transparent; + border-color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-btn-background-ghost.ant-btn-primary:hover > a:only-child, +.ant-btn-background-ghost.ant-btn-primary:focus > a:only-child { + color: currentColor; +} +.ant-btn-background-ghost.ant-btn-primary:hover > a:only-child:after, +.ant-btn-background-ghost.ant-btn-primary:focus > a:only-child:after { + background: transparent; +} +.ant-btn-background-ghost.ant-btn-primary:active, +.ant-btn-background-ghost.ant-btn-primary.active { + color: color(~`colorPalette("@{primary-color}", 7)`); + background-color: transparent; + border-color: color(~`colorPalette("@{primary-color}", 7)`); +} +.ant-btn-background-ghost.ant-btn-primary:active > a:only-child, +.ant-btn-background-ghost.ant-btn-primary.active > a:only-child { + color: currentColor; +} +.ant-btn-background-ghost.ant-btn-primary:active > a:only-child:after, +.ant-btn-background-ghost.ant-btn-primary.active > a:only-child:after { + background: transparent; +} +.ant-btn-background-ghost.ant-btn-primary.disabled, +.ant-btn-background-ghost.ant-btn-primary[disabled], +.ant-btn-background-ghost.ant-btn-primary.disabled:hover, +.ant-btn-background-ghost.ant-btn-primary[disabled]:hover, +.ant-btn-background-ghost.ant-btn-primary.disabled:focus, +.ant-btn-background-ghost.ant-btn-primary[disabled]:focus, +.ant-btn-background-ghost.ant-btn-primary.disabled:active, +.ant-btn-background-ghost.ant-btn-primary[disabled]:active, +.ant-btn-background-ghost.ant-btn-primary.disabled.active, +.ant-btn-background-ghost.ant-btn-primary[disabled].active { + color: rgba(0, 0, 0, 0.25); + background-color: #f5f5f5; + border-color: #d9d9d9; + box-shadow: none; +} +.ant-btn-background-ghost.ant-btn-primary.disabled > a:only-child, +.ant-btn-background-ghost.ant-btn-primary[disabled] > a:only-child, +.ant-btn-background-ghost.ant-btn-primary.disabled:hover > a:only-child, +.ant-btn-background-ghost.ant-btn-primary[disabled]:hover > a:only-child, +.ant-btn-background-ghost.ant-btn-primary.disabled:focus > a:only-child, +.ant-btn-background-ghost.ant-btn-primary[disabled]:focus > a:only-child, +.ant-btn-background-ghost.ant-btn-primary.disabled:active > a:only-child, +.ant-btn-background-ghost.ant-btn-primary[disabled]:active > a:only-child, +.ant-btn-background-ghost.ant-btn-primary.disabled.active > a:only-child, +.ant-btn-background-ghost.ant-btn-primary[disabled].active > a:only-child { + color: currentColor; +} +.ant-btn-background-ghost.ant-btn-primary.disabled > a:only-child:after, +.ant-btn-background-ghost.ant-btn-primary[disabled] > a:only-child:after, +.ant-btn-background-ghost.ant-btn-primary.disabled:hover > a:only-child:after, +.ant-btn-background-ghost.ant-btn-primary[disabled]:hover > a:only-child:after, +.ant-btn-background-ghost.ant-btn-primary.disabled:focus > a:only-child:after, +.ant-btn-background-ghost.ant-btn-primary[disabled]:focus > a:only-child:after, +.ant-btn-background-ghost.ant-btn-primary.disabled:active > a:only-child:after, +.ant-btn-background-ghost.ant-btn-primary[disabled]:active > a:only-child:after, +.ant-btn-background-ghost.ant-btn-primary.disabled.active > a:only-child:after, +.ant-btn-background-ghost.ant-btn-primary[disabled].active > a:only-child:after { + background: transparent; +} +.ant-btn-background-ghost.ant-btn-danger { + color: #f5222d; + background-color: transparent; + border-color: #f5222d; +} +.ant-btn-background-ghost.ant-btn-danger > a:only-child { + color: currentColor; +} +.ant-btn-background-ghost.ant-btn-danger > a:only-child:after { + background: transparent; +} +.ant-btn-background-ghost.ant-btn-danger:hover, +.ant-btn-background-ghost.ant-btn-danger:focus { + color: #ff4d4f; + background-color: transparent; + border-color: #ff4d4f; +} +.ant-btn-background-ghost.ant-btn-danger:hover > a:only-child, +.ant-btn-background-ghost.ant-btn-danger:focus > a:only-child { + color: currentColor; +} +.ant-btn-background-ghost.ant-btn-danger:hover > a:only-child:after, +.ant-btn-background-ghost.ant-btn-danger:focus > a:only-child:after { + background: transparent; +} +.ant-btn-background-ghost.ant-btn-danger:active, +.ant-btn-background-ghost.ant-btn-danger.active { + color: #cf1322; + background-color: transparent; + border-color: #cf1322; +} +.ant-btn-background-ghost.ant-btn-danger:active > a:only-child, +.ant-btn-background-ghost.ant-btn-danger.active > a:only-child { + color: currentColor; +} +.ant-btn-background-ghost.ant-btn-danger:active > a:only-child:after, +.ant-btn-background-ghost.ant-btn-danger.active > a:only-child:after { + background: transparent; +} +.ant-btn-background-ghost.ant-btn-danger.disabled, +.ant-btn-background-ghost.ant-btn-danger[disabled], +.ant-btn-background-ghost.ant-btn-danger.disabled:hover, +.ant-btn-background-ghost.ant-btn-danger[disabled]:hover, +.ant-btn-background-ghost.ant-btn-danger.disabled:focus, +.ant-btn-background-ghost.ant-btn-danger[disabled]:focus, +.ant-btn-background-ghost.ant-btn-danger.disabled:active, +.ant-btn-background-ghost.ant-btn-danger[disabled]:active, +.ant-btn-background-ghost.ant-btn-danger.disabled.active, +.ant-btn-background-ghost.ant-btn-danger[disabled].active { + color: rgba(0, 0, 0, 0.25); + background-color: #f5f5f5; + border-color: #d9d9d9; + box-shadow: none; +} +.ant-btn-background-ghost.ant-btn-danger.disabled > a:only-child, +.ant-btn-background-ghost.ant-btn-danger[disabled] > a:only-child, +.ant-btn-background-ghost.ant-btn-danger.disabled:hover > a:only-child, +.ant-btn-background-ghost.ant-btn-danger[disabled]:hover > a:only-child, +.ant-btn-background-ghost.ant-btn-danger.disabled:focus > a:only-child, +.ant-btn-background-ghost.ant-btn-danger[disabled]:focus > a:only-child, +.ant-btn-background-ghost.ant-btn-danger.disabled:active > a:only-child, +.ant-btn-background-ghost.ant-btn-danger[disabled]:active > a:only-child, +.ant-btn-background-ghost.ant-btn-danger.disabled.active > a:only-child, +.ant-btn-background-ghost.ant-btn-danger[disabled].active > a:only-child { + color: currentColor; +} +.ant-btn-background-ghost.ant-btn-danger.disabled > a:only-child:after, +.ant-btn-background-ghost.ant-btn-danger[disabled] > a:only-child:after, +.ant-btn-background-ghost.ant-btn-danger.disabled:hover > a:only-child:after, +.ant-btn-background-ghost.ant-btn-danger[disabled]:hover > a:only-child:after, +.ant-btn-background-ghost.ant-btn-danger.disabled:focus > a:only-child:after, +.ant-btn-background-ghost.ant-btn-danger[disabled]:focus > a:only-child:after, +.ant-btn-background-ghost.ant-btn-danger.disabled:active > a:only-child:after, +.ant-btn-background-ghost.ant-btn-danger[disabled]:active > a:only-child:after, +.ant-btn-background-ghost.ant-btn-danger.disabled.active > a:only-child:after, +.ant-btn-background-ghost.ant-btn-danger[disabled].active > a:only-child:after { + background: transparent; +} +.christmas.ant-btn-primary:before { + background: url(data:image/png;base64,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) no-repeat 50% 0; + background-size: 64px; +} +.christmas.ant-btn-primary.ant-btn-lg:before { + background-size: 72px; +} +.christmas.ant-btn-primary.ant-btn-sm:before { + background-size: 56px; +} +.ant-fullcalendar { + color: rgba(0, 0, 0, 0.65); + border-top: 1px solid #d9d9d9; +} +.ant-fullcalendar table { + border-collapse: collapse; + background-color: transparent; +} +.ant-fullcalendar table, +.ant-fullcalendar th, +.ant-fullcalendar td { + border: 0; +} +.ant-fullcalendar-calendar-table { + border-spacing: 0; +} +.ant-fullcalendar-value { + color: rgba(0, 0, 0, 0.65); + border-radius: 2px; + background: transparent; +} +.ant-fullcalendar-value:hover { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-fullcalendar-value:active { + background: @primary-color; + color: #fff; +} +.ant-fullcalendar-today .ant-fullcalendar-value, +.ant-fullcalendar-month-panel-current-cell .ant-fullcalendar-value { + box-shadow: 0 0 0 1px @primary-color inset; +} +.ant-fullcalendar-selected-day .ant-fullcalendar-value, +.ant-fullcalendar-month-panel-selected-cell .ant-fullcalendar-value { + background: @primary-color; + color: #fff; +} +.ant-fullcalendar-disabled-cell-first-of-row .ant-fullcalendar-value { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +.ant-fullcalendar-disabled-cell-last-of-row .ant-fullcalendar-value { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} +.ant-fullcalendar-last-month-cell .ant-fullcalendar-value, +.ant-fullcalendar-next-month-btn-day .ant-fullcalendar-value { + color: rgba(0, 0, 0, 0.25); +} +.ant-fullcalendar-month-panel-table { + border-collapse: separate; +} +.ant-fullcalendar-fullscreen { + border-top: 0; +} +.ant-fullcalendar-fullscreen .ant-fullcalendar-month, +.ant-fullcalendar-fullscreen .ant-fullcalendar-date { + color: rgba(0, 0, 0, 0.65); + border-top: 2px solid #e8e8e8; +} +.ant-fullcalendar-fullscreen .ant-fullcalendar-month:hover, +.ant-fullcalendar-fullscreen .ant-fullcalendar-date:hover { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-fullcalendar-fullscreen .ant-fullcalendar-month:active, +.ant-fullcalendar-fullscreen .ant-fullcalendar-date:active { + background: color(~`colorPalette("@{primary-color}", 2)`); +} +.ant-fullcalendar-fullscreen .ant-fullcalendar-value { + background: transparent; +} +.ant-fullcalendar-fullscreen .ant-fullcalendar-today .ant-fullcalendar-value { + color: rgba(0, 0, 0, 0.65); +} +.ant-fullcalendar-fullscreen .ant-fullcalendar-month-panel-current-cell .ant-fullcalendar-month, +.ant-fullcalendar-fullscreen .ant-fullcalendar-today .ant-fullcalendar-date { + border-top-color: @primary-color; + background: transparent; +} +.ant-fullcalendar-fullscreen .ant-fullcalendar-month-panel-current-cell .ant-fullcalendar-value, +.ant-fullcalendar-fullscreen .ant-fullcalendar-today .ant-fullcalendar-value { + box-shadow: none; +} +.ant-fullcalendar-fullscreen .ant-fullcalendar-month-panel-selected-cell .ant-fullcalendar-month, +.ant-fullcalendar-fullscreen .ant-fullcalendar-selected-day .ant-fullcalendar-date { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-fullcalendar-fullscreen .ant-fullcalendar-month-panel-selected-cell .ant-fullcalendar-value, +.ant-fullcalendar-fullscreen .ant-fullcalendar-selected-day .ant-fullcalendar-value { + color: @primary-color; +} +.ant-fullcalendar-fullscreen .ant-fullcalendar-last-month-cell .ant-fullcalendar-date, +.ant-fullcalendar-fullscreen .ant-fullcalendar-next-month-btn-day .ant-fullcalendar-date { + color: rgba(0, 0, 0, 0.25); +} +.ant-fullcalendar-disabled-cell:not(.ant-fullcalendar-today) .ant-fullcalendar-date, +.ant-fullcalendar-disabled-cell:not(.ant-fullcalendar-today) .ant-fullcalendar-date:hover { + background: transparent; +} +.ant-fullcalendar-disabled-cell .ant-fullcalendar-value { + color: rgba(0, 0, 0, 0.25); + border-radius: 0; +} +.ant-card { + color: rgba(0, 0, 0, 0.65); + background: #fff; + border-radius: 2px; +} +.ant-card-hoverable:hover { + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.09); + border-color: rgba(0, 0, 0, 0.09); +} +.ant-card-bordered { + border: 1px solid #e8e8e8; +} +.ant-card-head { + background: transparent; + border-bottom: 1px solid #e8e8e8; + border-radius: 2px 2px 0 0; + color: rgba(0, 0, 0, 0.85); +} +.ant-card-head .ant-tabs { + color: rgba(0, 0, 0, 0.65); +} +.ant-card-head .ant-tabs-bar { + border-bottom: 1px solid #e8e8e8; +} +.ant-card-extra { + color: rgba(0, 0, 0, 0.65); +} +.ant-card-grid { + border-radius: 0; + border: 0; + box-shadow: 1px 0 0 0 #e8e8e8, 0 1px 0 0 #e8e8e8, 1px 1px 0 0 #e8e8e8, 1px 0 0 0 #e8e8e8 inset, 0 1px 0 0 #e8e8e8 inset; +} +.ant-card-grid:hover { + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); +} +.ant-card-cover img { + border-radius: 2px 2px 0 0; +} +.ant-card-actions { + border-top: 1px solid #e8e8e8; + background: #fafafa; +} +.ant-card-actions > li { + color: rgba(0, 0, 0, 0.45); +} +.ant-card-actions > li > span:hover { + color: @primary-color; +} +.ant-card-actions > li > span a { + color: rgba(0, 0, 0, 0.45); +} +.ant-card-actions > li > span a:hover { + color: @primary-color; +} +.ant-card-actions > li:not(:last-child) { + border-right: 1px solid #e8e8e8; +} +.ant-card-type-inner .ant-card-head { + background: #fafafa; +} +.ant-card-meta-title { + color: rgba(0, 0, 0, 0.85); +} +.ant-card-meta-description { + color: rgba(0, 0, 0, 0.45); +} +.ant-card-loading-block { + border-radius: 2px; + background: linear-gradient(90deg, rgba(207, 216, 220, 0.2), rgba(207, 216, 220, 0.4), rgba(207, 216, 220, 0.2)); + background-size: 600% 600%; +} +.ant-carousel { + color: rgba(0, 0, 0, 0.65); +} +.ant-carousel .slick-slider { + -webkit-tap-highlight-color: transparent; +} +.ant-carousel .slick-vertical .slick-slide { + border: 1px solid transparent; +} +.ant-carousel .slick-prev, +.ant-carousel .slick-next { + background: transparent; + color: transparent; + border: 0; +} +.ant-carousel .slick-prev:hover, +.ant-carousel .slick-next:hover, +.ant-carousel .slick-prev:focus, +.ant-carousel .slick-next:focus { + background: transparent; + color: transparent; +} +.ant-carousel .slick-dots li button { + border: 0; + background: #fff; + border-radius: 1px; + color: transparent; +} +.ant-carousel .slick-dots li.slick-active button { + background: #fff; +} +.ant-cascader { + color: rgba(0, 0, 0, 0.65); +} +.ant-cascader-input.ant-input { + background-color: transparent !important; +} +.ant-cascader-picker { + color: rgba(0, 0, 0, 0.65); + background-color: #fff; + border-radius: 4px; +} +.ant-cascader-picker-with-value .ant-cascader-picker-label { + color: transparent; +} +.ant-cascader-picker-disabled { + background: #f5f5f5; + color: rgba(0, 0, 0, 0.25); +} +.ant-cascader-picker:focus .ant-cascader-input { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-cascader-picker-show-search.ant-cascader-picker-focused { + color: rgba(0, 0, 0, 0.25); +} +.ant-cascader-picker-clear { + background: #fff; + color: rgba(0, 0, 0, 0.25); +} +.ant-cascader-picker-clear:hover { + color: rgba(0, 0, 0, 0.45); +} +.ant-cascader-picker-arrow { + color: rgba(0, 0, 0, 0.25); +} +.ant-cascader-menus { + background: #fff; + border-radius: 4px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); +} +.ant-cascader-menu { + border-right: 1px solid #e8e8e8; +} +.ant-cascader-menu:first-child { + border-radius: 4px 0 0 4px; +} +.ant-cascader-menu:last-child { + border-right-color: transparent; + border-radius: 0 4px 4px 0; +} +.ant-cascader-menu:only-child { + border-radius: 4px; +} +.ant-cascader-menu-item:hover { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-cascader-menu-item-disabled { + color: rgba(0, 0, 0, 0.25); +} +.ant-cascader-menu-item-disabled:hover { + background: transparent; +} +.ant-cascader-menu-item-active:not(.ant-cascader-menu-item-disabled), +.ant-cascader-menu-item-active:not(.ant-cascader-menu-item-disabled):hover { + background: #f5f5f5; +} +.ant-cascader-menu-item-expand .ant-cascader-menu-item-expand-icon, +.ant-cascader-menu-item-expand .ant-cascader-menu-item-loading-icon { + color: rgba(0, 0, 0, 0.45); +} +.ant-cascader-menu-item .ant-cascader-menu-item-keyword { + color: #f5222d; +} +.ant-checkbox { + color: rgba(0, 0, 0, 0.65); +} +.ant-checkbox-wrapper:hover .ant-checkbox-inner, +.ant-checkbox:hover .ant-checkbox-inner, +.ant-checkbox-input:focus + .ant-checkbox-inner { + border-color: @primary-color; +} +.ant-checkbox-checked:after { + border-radius: 2px; + border: 1px solid @primary-color; +} +.ant-checkbox-inner { + border: 1px solid #d9d9d9; + border-radius: 2px; + background-color: #fff; +} +.ant-checkbox-inner:after { + border: 2px solid #fff; + border-top: 0; + border-left: 0; +} +.ant-checkbox-indeterminate .ant-checkbox-inner:after { + border: 0; + background-color: @primary-color; +} +.ant-checkbox-indeterminate.ant-checkbox-disabled .ant-checkbox-inner:after { + border-color: rgba(0, 0, 0, 0.25); +} +.ant-checkbox-checked .ant-checkbox-inner:after { + border: 2px solid #fff; + border-top: 0; + border-left: 0; +} +.ant-checkbox-checked .ant-checkbox-inner { + background-color: @primary-color; + border-color: @primary-color; +} +.ant-checkbox-disabled.ant-checkbox-checked .ant-checkbox-inner:after { + border-color: rgba(0, 0, 0, 0.25); +} +.ant-checkbox-disabled .ant-checkbox-inner { + border-color: #d9d9d9 !important; + background-color: #f5f5f5; +} +.ant-checkbox-disabled .ant-checkbox-inner:after { + border-color: #f5f5f5; +} +.ant-checkbox-disabled + span { + color: rgba(0, 0, 0, 0.25); +} +.ant-checkbox-wrapper { + color: rgba(0, 0, 0, 0.65); +} +.ant-checkbox-group { + color: rgba(0, 0, 0, 0.65); +} +.ant-collapse { + color: rgba(0, 0, 0, 0.65); + background-color: #fafafa; + border-radius: 4px; + border: 1px solid #d9d9d9; + border-bottom: 0; +} +.ant-collapse > .ant-collapse-item { + border-bottom: 1px solid #d9d9d9; +} +.ant-collapse > .ant-collapse-item:last-child, +.ant-collapse > .ant-collapse-item:last-child > .ant-collapse-header { + border-radius: 0 0 4px 4px; +} +.ant-collapse > .ant-collapse-item > .ant-collapse-header { + color: rgba(0, 0, 0, 0.85); +} +.ant-collapse-content { + color: rgba(0, 0, 0, 0.65); + background-color: #fff; + border-top: 1px solid #d9d9d9; +} +.ant-collapse-item:last-child > .ant-collapse-content { + border-radius: 0 0 4px 4px; +} +.ant-collapse-borderless { + background-color: #fff; + border: 0; +} +.ant-collapse-borderless > .ant-collapse-item { + border-bottom: 1px solid #d9d9d9; +} +.ant-collapse-borderless > .ant-collapse-item:last-child, +.ant-collapse-borderless > .ant-collapse-item:last-child .ant-collapse-header { + border-radius: 0; +} +.ant-collapse-borderless > .ant-collapse-item > .ant-collapse-content { + background-color: transparent; + border-top: 0; +} +.ant-collapse .ant-collapse-item-disabled > .ant-collapse-header, +.ant-collapse .ant-collapse-item-disabled > .ant-collapse-header > .arrow { + color: rgba(0, 0, 0, 0.25); +} +.ant-calendar-picker-container { + color: rgba(0, 0, 0, 0.65); +} +.ant-calendar-picker { + color: rgba(0, 0, 0, 0.65); +} +.ant-calendar-picker:hover .ant-calendar-picker-input:not(.ant-input-disabled) { + border-color: @primary-color; +} +.ant-calendar-picker:focus .ant-calendar-picker-input:not(.ant-input-disabled) { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-calendar-picker-clear { + color: rgba(0, 0, 0, 0.25); + background: #fff; +} +.ant-calendar-picker-clear:hover { + color: rgba(0, 0, 0, 0.45); +} +.ant-calendar-picker-icon { + color: rgba(0, 0, 0, 0.25); +} +.ant-calendar { + border: 1px solid #fff; + background-color: #fff; + border-radius: 4px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); + background-clip: padding-box; +} +.ant-calendar-input-wrap { + border-bottom: 1px solid #e8e8e8; +} +.ant-calendar-input { + border: 0; + color: rgba(0, 0, 0, 0.65); + background: #fff; +} +.ant-calendar-input::-moz-placeholder { + color: #bfbfbf; +} +.ant-calendar-input:-ms-input-placeholder { + color: #bfbfbf; +} +.ant-calendar-input::-webkit-input-placeholder { + color: #bfbfbf; +} +.ant-calendar-header { + border-bottom: 1px solid #e8e8e8; +} +.ant-calendar-header a:hover { + color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-calendar-header .ant-calendar-century-select, +.ant-calendar-header .ant-calendar-decade-select, +.ant-calendar-header .ant-calendar-year-select, +.ant-calendar-header .ant-calendar-month-select { + color: rgba(0, 0, 0, 0.85); +} +.ant-calendar-header .ant-calendar-prev-century-btn, +.ant-calendar-header .ant-calendar-next-century-btn, +.ant-calendar-header .ant-calendar-prev-decade-btn, +.ant-calendar-header .ant-calendar-next-decade-btn, +.ant-calendar-header .ant-calendar-prev-month-btn, +.ant-calendar-header .ant-calendar-next-month-btn, +.ant-calendar-header .ant-calendar-prev-year-btn, +.ant-calendar-header .ant-calendar-next-year-btn { + color: rgba(0, 0, 0, 0.45); +} +.ant-calendar table { + border-collapse: collapse; + background-color: transparent; +} +.ant-calendar table, +.ant-calendar th, +.ant-calendar td { + border: 0; +} +.ant-calendar-calendar-table { + border-spacing: 0; +} +.ant-calendar-date { + color: rgba(0, 0, 0, 0.65); + border-radius: 2px; + border: 1px solid transparent; + background: transparent; +} +.ant-calendar-date:hover { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-calendar-date:active { + color: #fff; + background: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-calendar-today .ant-calendar-date { + border-color: @primary-color; + color: @primary-color; +} +.ant-calendar-last-month-cell .ant-calendar-date, +.ant-calendar-next-month-btn-day .ant-calendar-date { + color: rgba(0, 0, 0, 0.25); +} +.ant-calendar-selected-day .ant-calendar-date { + background: #d1e9ff; +} +.ant-calendar-selected-date .ant-calendar-date, +.ant-calendar-selected-start-date .ant-calendar-date, +.ant-calendar-selected-end-date .ant-calendar-date { + background: @primary-color; + color: #fff; + border: 1px solid transparent; +} +.ant-calendar-selected-date .ant-calendar-date:hover, +.ant-calendar-selected-start-date .ant-calendar-date:hover, +.ant-calendar-selected-end-date .ant-calendar-date:hover { + background: @primary-color; +} +.ant-calendar-disabled-cell .ant-calendar-date { + color: #bcbcbc; + background: #f5f5f5; + border-radius: 0; + border: 1px solid transparent; +} +.ant-calendar-disabled-cell .ant-calendar-date:hover { + background: #f5f5f5; +} +.ant-calendar-disabled-cell.ant-calendar-today .ant-calendar-date:before { + border: 1px solid #bcbcbc; + border-radius: 2px; +} +.ant-calendar-disabled-cell-first-of-row .ant-calendar-date { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +.ant-calendar-disabled-cell-last-of-row .ant-calendar-date { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} +.ant-calendar-footer { + border-top: 1px solid #e8e8e8; +} +.ant-calendar-footer:empty { + border-top: 0; +} +.ant-calendar .ant-calendar-today-btn-disabled, +.ant-calendar .ant-calendar-clear-btn-disabled { + color: rgba(0, 0, 0, 0.25); +} +.ant-calendar .ant-calendar-clear-btn:after { + color: rgba(0, 0, 0, 0.25); +} +.ant-calendar .ant-calendar-clear-btn:hover:after { + color: rgba(0, 0, 0, 0.45); +} +.ant-calendar .ant-calendar-ok-btn { + background-image: none; + border: 1px solid transparent; + box-shadow: 0 2px 0 rgba(0, 0, 0, 0.015); + color: #fff; + background-color: @primary-color; + border-color: @primary-color; + box-shadow: 0 2px 0 rgba(0, 0, 0, 0.035); + border-radius: 4px; +} +.ant-calendar .ant-calendar-ok-btn:not([disabled]):active { + box-shadow: none; +} +.ant-calendar .ant-calendar-ok-btn-lg { + border-radius: 4px; +} +.ant-calendar .ant-calendar-ok-btn-sm { + border-radius: 4px; +} +.ant-calendar .ant-calendar-ok-btn > a:only-child { + color: currentColor; +} +.ant-calendar .ant-calendar-ok-btn > a:only-child:after { + background: transparent; +} +.ant-calendar .ant-calendar-ok-btn:hover, +.ant-calendar .ant-calendar-ok-btn:focus { + color: #fff; + background-color: color(~`colorPalette("@{primary-color}", 5)`); + border-color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-calendar .ant-calendar-ok-btn:hover > a:only-child, +.ant-calendar .ant-calendar-ok-btn:focus > a:only-child { + color: currentColor; +} +.ant-calendar .ant-calendar-ok-btn:hover > a:only-child:after, +.ant-calendar .ant-calendar-ok-btn:focus > a:only-child:after { + background: transparent; +} +.ant-calendar .ant-calendar-ok-btn:active, +.ant-calendar .ant-calendar-ok-btn.active { + color: #fff; + background-color: color(~`colorPalette("@{primary-color}", 7)`); + border-color: color(~`colorPalette("@{primary-color}", 7)`); +} +.ant-calendar .ant-calendar-ok-btn:active > a:only-child, +.ant-calendar .ant-calendar-ok-btn.active > a:only-child { + color: currentColor; +} +.ant-calendar .ant-calendar-ok-btn:active > a:only-child:after, +.ant-calendar .ant-calendar-ok-btn.active > a:only-child:after { + background: transparent; +} +.ant-calendar .ant-calendar-ok-btn.disabled, +.ant-calendar .ant-calendar-ok-btn[disabled], +.ant-calendar .ant-calendar-ok-btn.disabled:hover, +.ant-calendar .ant-calendar-ok-btn[disabled]:hover, +.ant-calendar .ant-calendar-ok-btn.disabled:focus, +.ant-calendar .ant-calendar-ok-btn[disabled]:focus, +.ant-calendar .ant-calendar-ok-btn.disabled:active, +.ant-calendar .ant-calendar-ok-btn[disabled]:active, +.ant-calendar .ant-calendar-ok-btn.disabled.active, +.ant-calendar .ant-calendar-ok-btn[disabled].active { + color: rgba(0, 0, 0, 0.25); + background-color: #f5f5f5; + border-color: #d9d9d9; + box-shadow: none; +} +.ant-calendar .ant-calendar-ok-btn.disabled > a:only-child, +.ant-calendar .ant-calendar-ok-btn[disabled] > a:only-child, +.ant-calendar .ant-calendar-ok-btn.disabled:hover > a:only-child, +.ant-calendar .ant-calendar-ok-btn[disabled]:hover > a:only-child, +.ant-calendar .ant-calendar-ok-btn.disabled:focus > a:only-child, +.ant-calendar .ant-calendar-ok-btn[disabled]:focus > a:only-child, +.ant-calendar .ant-calendar-ok-btn.disabled:active > a:only-child, +.ant-calendar .ant-calendar-ok-btn[disabled]:active > a:only-child, +.ant-calendar .ant-calendar-ok-btn.disabled.active > a:only-child, +.ant-calendar .ant-calendar-ok-btn[disabled].active > a:only-child { + color: currentColor; +} +.ant-calendar .ant-calendar-ok-btn.disabled > a:only-child:after, +.ant-calendar .ant-calendar-ok-btn[disabled] > a:only-child:after, +.ant-calendar .ant-calendar-ok-btn.disabled:hover > a:only-child:after, +.ant-calendar .ant-calendar-ok-btn[disabled]:hover > a:only-child:after, +.ant-calendar .ant-calendar-ok-btn.disabled:focus > a:only-child:after, +.ant-calendar .ant-calendar-ok-btn[disabled]:focus > a:only-child:after, +.ant-calendar .ant-calendar-ok-btn.disabled:active > a:only-child:after, +.ant-calendar .ant-calendar-ok-btn[disabled]:active > a:only-child:after, +.ant-calendar .ant-calendar-ok-btn.disabled.active > a:only-child:after, +.ant-calendar .ant-calendar-ok-btn[disabled].active > a:only-child:after { + background: transparent; +} +.ant-calendar .ant-calendar-ok-btn-disabled { + color: rgba(0, 0, 0, 0.25); + background-color: #f5f5f5; + border-color: #d9d9d9; +} +.ant-calendar .ant-calendar-ok-btn-disabled > a:only-child { + color: currentColor; +} +.ant-calendar .ant-calendar-ok-btn-disabled > a:only-child:after { + background: transparent; +} +.ant-calendar .ant-calendar-ok-btn-disabled:hover { + color: rgba(0, 0, 0, 0.25); + background-color: #f5f5f5; + border-color: #d9d9d9; +} +.ant-calendar .ant-calendar-ok-btn-disabled:hover > a:only-child { + color: currentColor; +} +.ant-calendar .ant-calendar-ok-btn-disabled:hover > a:only-child:after { + background: transparent; +} +.ant-calendar-range-picker-input { + background-color: transparent; + border: 0; +} +.ant-calendar-range-picker-input::-moz-placeholder { + color: #bfbfbf; +} +.ant-calendar-range-picker-input:-ms-input-placeholder { + color: #bfbfbf; +} +.ant-calendar-range-picker-input::-webkit-input-placeholder { + color: #bfbfbf; +} +.ant-calendar-range-picker-separator { + color: rgba(0, 0, 0, 0.45); +} +.ant-calendar-range-left .ant-calendar-time-picker-inner { + border-right: 1px solid #e8e8e8; +} +.ant-calendar-range-right .ant-calendar-time-picker-inner { + border-left: 1px solid #e8e8e8; +} +.ant-calendar-range-middle { + color: rgba(0, 0, 0, 0.45); +} +.ant-calendar-range .ant-calendar-input, +.ant-calendar-range .ant-calendar-time-picker-input { + color: rgba(0, 0, 0, 0.65); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; + border: 0; + box-shadow: none; +} +.ant-calendar-range .ant-calendar-input::-moz-placeholder, +.ant-calendar-range .ant-calendar-time-picker-input::-moz-placeholder { + color: #bfbfbf; +} +.ant-calendar-range .ant-calendar-input:-ms-input-placeholder, +.ant-calendar-range .ant-calendar-time-picker-input:-ms-input-placeholder { + color: #bfbfbf; +} +.ant-calendar-range .ant-calendar-input::-webkit-input-placeholder, +.ant-calendar-range .ant-calendar-time-picker-input::-webkit-input-placeholder { + color: #bfbfbf; +} +.ant-calendar-range .ant-calendar-input:hover, +.ant-calendar-range .ant-calendar-time-picker-input:hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + border-right-width: 1px !important; +} +.ant-calendar-range .ant-calendar-input:focus, +.ant-calendar-range .ant-calendar-time-picker-input:focus { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-calendar-range .ant-calendar-input-disabled, +.ant-calendar-range .ant-calendar-time-picker-input-disabled { + background-color: #f5f5f5; + color: rgba(0, 0, 0, 0.25); +} +.ant-calendar-range .ant-calendar-input-disabled:hover, +.ant-calendar-range .ant-calendar-time-picker-input-disabled:hover { + border-color: #e6d8d8; + border-right-width: 1px !important; +} +.ant-calendar-range .ant-calendar-input:focus, +.ant-calendar-range .ant-calendar-time-picker-input:focus { + box-shadow: none; +} +.ant-calendar-range .ant-calendar-in-range-cell { + border-radius: 0; +} +.ant-calendar-range .ant-calendar-in-range-cell:before { + background: color(~`colorPalette("@{primary-color}", 1)`); + border-radius: 0; + border: 0; +} +.ant-calendar-range .ant-calendar-header, +.ant-calendar-range .ant-calendar-month-panel-header, +.ant-calendar-range .ant-calendar-year-panel-header { + border-bottom: 0; +} +.ant-calendar-range .ant-calendar-body, +.ant-calendar-range .ant-calendar-month-panel-body, +.ant-calendar-range .ant-calendar-year-panel-body { + border-top: 1px solid #e8e8e8; +} +.ant-calendar-range.ant-calendar-time .ant-calendar-time-picker-inner { + background: none; +} +.ant-calendar-range.ant-calendar-time .ant-calendar-time-picker-combobox { + background-color: #fff; + border-top: 1px solid #e8e8e8; +} +.ant-calendar-range.ant-calendar-show-time-picker .ant-calendar-body { + border-top-color: transparent; +} +.ant-calendar-time-picker { + background-color: #fff; +} +.ant-calendar-time-picker-inner { + background-color: #fff; + background-clip: padding-box; +} +.ant-calendar-time-picker-select { + border-right: 1px solid #e8e8e8; +} +.ant-calendar-time-picker-select:first-child { + border-left: 0; +} +.ant-calendar-time-picker-select:last-child { + border-right: 0; +} +.ant-calendar-time-picker-select li:hover { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +li.ant-calendar-time-picker-select-option-selected { + background: #f5f5f5; +} +li.ant-calendar-time-picker-select-option-disabled { + color: rgba(0, 0, 0, 0.25); +} +li.ant-calendar-time-picker-select-option-disabled:hover { + background: transparent; +} +.ant-calendar-time .ant-calendar-day-select { + color: rgba(0, 0, 0, 0.85); +} +.ant-calendar-time .ant-calendar-footer .ant-calendar-time-picker-btn-disabled { + color: rgba(0, 0, 0, 0.25); +} +.ant-calendar-month-panel { + border-radius: 4px; + background: #fff; +} +.ant-calendar-month-panel-header { + border-bottom: 1px solid #e8e8e8; +} +.ant-calendar-month-panel-header a:hover { + color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-calendar-month-panel-header .ant-calendar-month-panel-century-select, +.ant-calendar-month-panel-header .ant-calendar-month-panel-decade-select, +.ant-calendar-month-panel-header .ant-calendar-month-panel-year-select, +.ant-calendar-month-panel-header .ant-calendar-month-panel-month-select { + color: rgba(0, 0, 0, 0.85); +} +.ant-calendar-month-panel-header .ant-calendar-month-panel-prev-century-btn, +.ant-calendar-month-panel-header .ant-calendar-month-panel-next-century-btn, +.ant-calendar-month-panel-header .ant-calendar-month-panel-prev-decade-btn, +.ant-calendar-month-panel-header .ant-calendar-month-panel-next-decade-btn, +.ant-calendar-month-panel-header .ant-calendar-month-panel-prev-month-btn, +.ant-calendar-month-panel-header .ant-calendar-month-panel-next-month-btn, +.ant-calendar-month-panel-header .ant-calendar-month-panel-prev-year-btn, +.ant-calendar-month-panel-header .ant-calendar-month-panel-next-year-btn { + color: rgba(0, 0, 0, 0.45); +} +.ant-calendar-month-panel-table { + border-collapse: separate; +} +.ant-calendar-month-panel-selected-cell .ant-calendar-month-panel-month { + background: @primary-color; + color: #fff; +} +.ant-calendar-month-panel-selected-cell .ant-calendar-month-panel-month:hover { + background: @primary-color; + color: #fff; +} +.ant-calendar-month-panel-cell-disabled .ant-calendar-month-panel-month, +.ant-calendar-month-panel-cell-disabled .ant-calendar-month-panel-month:hover { + color: #bcbcbc; + background: #f5f5f5; +} +.ant-calendar-month-panel-month { + color: rgba(0, 0, 0, 0.65); + background: transparent; + border-radius: 2px; +} +.ant-calendar-month-panel-month:hover { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-calendar-year-panel { + border-radius: 4px; + background: #fff; +} +.ant-calendar-year-panel-header { + border-bottom: 1px solid #e8e8e8; +} +.ant-calendar-year-panel-header a:hover { + color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-calendar-year-panel-header .ant-calendar-year-panel-century-select, +.ant-calendar-year-panel-header .ant-calendar-year-panel-decade-select, +.ant-calendar-year-panel-header .ant-calendar-year-panel-year-select, +.ant-calendar-year-panel-header .ant-calendar-year-panel-month-select { + color: rgba(0, 0, 0, 0.85); +} +.ant-calendar-year-panel-header .ant-calendar-year-panel-prev-century-btn, +.ant-calendar-year-panel-header .ant-calendar-year-panel-next-century-btn, +.ant-calendar-year-panel-header .ant-calendar-year-panel-prev-decade-btn, +.ant-calendar-year-panel-header .ant-calendar-year-panel-next-decade-btn, +.ant-calendar-year-panel-header .ant-calendar-year-panel-prev-month-btn, +.ant-calendar-year-panel-header .ant-calendar-year-panel-next-month-btn, +.ant-calendar-year-panel-header .ant-calendar-year-panel-prev-year-btn, +.ant-calendar-year-panel-header .ant-calendar-year-panel-next-year-btn { + color: rgba(0, 0, 0, 0.45); +} +.ant-calendar-year-panel-table { + border-collapse: separate; +} +.ant-calendar-year-panel-year { + color: rgba(0, 0, 0, 0.65); + background: transparent; + border-radius: 2px; +} +.ant-calendar-year-panel-year:hover { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-calendar-year-panel-selected-cell .ant-calendar-year-panel-year { + background: @primary-color; + color: #fff; +} +.ant-calendar-year-panel-selected-cell .ant-calendar-year-panel-year:hover { + background: @primary-color; + color: #fff; +} +.ant-calendar-year-panel-last-decade-cell .ant-calendar-year-panel-year, +.ant-calendar-year-panel-next-decade-cell .ant-calendar-year-panel-year { + color: rgba(0, 0, 0, 0.25); +} +.ant-calendar-decade-panel { + background: #fff; + border-radius: 4px; +} +.ant-calendar-decade-panel-header { + border-bottom: 1px solid #e8e8e8; +} +.ant-calendar-decade-panel-header a:hover { + color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-calendar-decade-panel-header .ant-calendar-decade-panel-century-select, +.ant-calendar-decade-panel-header .ant-calendar-decade-panel-decade-select, +.ant-calendar-decade-panel-header .ant-calendar-decade-panel-year-select, +.ant-calendar-decade-panel-header .ant-calendar-decade-panel-month-select { + color: rgba(0, 0, 0, 0.85); +} +.ant-calendar-decade-panel-header .ant-calendar-decade-panel-prev-century-btn, +.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-century-btn, +.ant-calendar-decade-panel-header .ant-calendar-decade-panel-prev-decade-btn, +.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-decade-btn, +.ant-calendar-decade-panel-header .ant-calendar-decade-panel-prev-month-btn, +.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-month-btn, +.ant-calendar-decade-panel-header .ant-calendar-decade-panel-prev-year-btn, +.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-year-btn { + color: rgba(0, 0, 0, 0.45); +} +.ant-calendar-decade-panel-table { + border-collapse: separate; +} +.ant-calendar-decade-panel-decade { + color: rgba(0, 0, 0, 0.65); + background: transparent; + border-radius: 2px; +} +.ant-calendar-decade-panel-decade:hover { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-calendar-decade-panel-selected-cell .ant-calendar-decade-panel-decade { + background: @primary-color; + color: #fff; +} +.ant-calendar-decade-panel-selected-cell .ant-calendar-decade-panel-decade:hover { + background: @primary-color; + color: #fff; +} +.ant-calendar-decade-panel-last-century-cell .ant-calendar-decade-panel-decade, +.ant-calendar-decade-panel-next-century-cell .ant-calendar-decade-panel-decade { + color: rgba(0, 0, 0, 0.25); +} +.ant-calendar-week-number .ant-calendar-body tr:hover { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-calendar-week-number .ant-calendar-body tr.ant-calendar-active-week { + background: color(~`colorPalette("@{primary-color}", 2)`); +} +.ant-calendar-week-number .ant-calendar-body tr .ant-calendar-selected-day .ant-calendar-date, +.ant-calendar-week-number .ant-calendar-body tr .ant-calendar-selected-day:hover .ant-calendar-date { + background: transparent; + color: rgba(0, 0, 0, 0.65); +} +.ant-divider { + color: rgba(0, 0, 0, 0.65); + background: #e8e8e8; +} +.ant-divider-horizontal.ant-divider-with-text, +.ant-divider-horizontal.ant-divider-with-text-left, +.ant-divider-horizontal.ant-divider-with-text-right { + background: transparent; + color: rgba(0, 0, 0, 0.85); +} +.ant-divider-horizontal.ant-divider-with-text:before, +.ant-divider-horizontal.ant-divider-with-text-left:before, +.ant-divider-horizontal.ant-divider-with-text-right:before, +.ant-divider-horizontal.ant-divider-with-text:after, +.ant-divider-horizontal.ant-divider-with-text-left:after, +.ant-divider-horizontal.ant-divider-with-text-right:after { + border-top: 1px solid #e8e8e8; +} +.ant-divider-dashed { + background: none; + border-top: 1px dashed #e8e8e8; +} +.ant-divider-horizontal.ant-divider-with-text.ant-divider-dashed, +.ant-divider-horizontal.ant-divider-with-text-left.ant-divider-dashed, +.ant-divider-horizontal.ant-divider-with-text-right.ant-divider-dashed { + border-top: 0; +} +.ant-divider-horizontal.ant-divider-with-text.ant-divider-dashed:before, +.ant-divider-horizontal.ant-divider-with-text-left.ant-divider-dashed:before, +.ant-divider-horizontal.ant-divider-with-text-right.ant-divider-dashed:before, +.ant-divider-horizontal.ant-divider-with-text.ant-divider-dashed:after, +.ant-divider-horizontal.ant-divider-with-text-left.ant-divider-dashed:after, +.ant-divider-horizontal.ant-divider-with-text-right.ant-divider-dashed:after { + border-style: dashed none none; +} +.ant-drawer-left.ant-drawer-open .ant-drawer-content-wrapper { + box-shadow: 2px 0 8px rgba(0, 0, 0, 0.15); +} +.ant-drawer-right.ant-drawer-open .ant-drawer-content-wrapper { + box-shadow: -2px 0 8px rgba(0, 0, 0, 0.15); +} +.ant-drawer-top.ant-drawer-open .ant-drawer-content-wrapper { + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); +} +.ant-drawer-bottom.ant-drawer-open .ant-drawer-content-wrapper { + box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.15); +} +.ant-drawer-title { + color: rgba(0, 0, 0, 0.85); +} +.ant-drawer-content { + background-color: #fff; + border: 0; + background-clip: padding-box; +} +.ant-drawer-close { + border: 0; + background: transparent; + color: rgba(0, 0, 0, 0.45); +} +.ant-drawer-close:focus, +.ant-drawer-close:hover { + color: #444; +} +.ant-drawer-header { + border-radius: 4px 4px 0 0; + background: #fff; + color: rgba(0, 0, 0, 0.65); + border-bottom: 1px solid #e8e8e8; +} +.ant-drawer-mask { + background-color: rgba(0, 0, 0, 0.65); +} +.ant-drawer-open-content { + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); +} +.ant-dropdown { + color: rgba(0, 0, 0, 0.65); +} +.ant-dropdown-menu { + background-color: #fff; + border-radius: 4px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); + background-clip: padding-box; +} +.ant-dropdown-menu-item-group-title { + color: rgba(0, 0, 0, 0.45); +} +.ant-dropdown-menu-item, +.ant-dropdown-menu-submenu-title { + color: rgba(0, 0, 0, 0.65); +} +.ant-dropdown-menu-item > a, +.ant-dropdown-menu-submenu-title > a { + color: rgba(0, 0, 0, 0.65); +} +.ant-dropdown-menu-item-selected, +.ant-dropdown-menu-submenu-title-selected, +.ant-dropdown-menu-item-selected > a, +.ant-dropdown-menu-submenu-title-selected > a { + color: @primary-color; + background-color: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-dropdown-menu-item:hover, +.ant-dropdown-menu-submenu-title:hover { + background-color: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-dropdown-menu-item-disabled, +.ant-dropdown-menu-submenu-title-disabled { + color: rgba(0, 0, 0, 0.25); +} +.ant-dropdown-menu-item-disabled:hover, +.ant-dropdown-menu-submenu-title-disabled:hover { + color: rgba(0, 0, 0, 0.25); + background-color: #fff; +} +.ant-dropdown-menu-item-divider, +.ant-dropdown-menu-submenu-title-divider { + background-color: #e8e8e8; +} +.ant-dropdown-menu-item .ant-dropdown-menu-submenu-arrow-icon, +.ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow-icon { + color: rgba(0, 0, 0, 0.45); +} +.ant-dropdown-menu-submenu.ant-dropdown-menu-submenu-disabled .ant-dropdown-menu-submenu-title, +.ant-dropdown-menu-submenu.ant-dropdown-menu-submenu-disabled .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow-icon { + color: rgba(0, 0, 0, 0.25); +} +.ant-dropdown-menu-dark, +.ant-dropdown-menu-dark .ant-dropdown-menu { + background: #001529; +} +.ant-dropdown-menu-dark .ant-dropdown-menu-item, +.ant-dropdown-menu-dark .ant-dropdown-menu-submenu-title, +.ant-dropdown-menu-dark .ant-dropdown-menu-item > a { + color: rgba(255, 255, 255, 0.65); +} +.ant-dropdown-menu-dark .ant-dropdown-menu-item .ant-dropdown-menu-submenu-arrow:after, +.ant-dropdown-menu-dark .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow:after, +.ant-dropdown-menu-dark .ant-dropdown-menu-item > a .ant-dropdown-menu-submenu-arrow:after { + color: rgba(255, 255, 255, 0.65); +} +.ant-dropdown-menu-dark .ant-dropdown-menu-item:hover, +.ant-dropdown-menu-dark .ant-dropdown-menu-submenu-title:hover, +.ant-dropdown-menu-dark .ant-dropdown-menu-item > a:hover { + color: #fff; + background: transparent; +} +.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected, +.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected:hover, +.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected > a { + background: @primary-color; + color: #fff; +} +.ant-form { + color: rgba(0, 0, 0, 0.65); +} +.ant-form legend { + color: rgba(0, 0, 0, 0.45); + border: 0; + border-bottom: 1px solid #d9d9d9; +} +.ant-form output { + color: rgba(0, 0, 0, 0.65); +} +.ant-form-item-required:before { + color: #f5222d; +} +.ant-form-item { + color: rgba(0, 0, 0, 0.65); +} +.ant-form-item-label label { + color: rgba(0, 0, 0, 0.85); +} +.ant-form-explain, +.ant-form-extra { + color: rgba(0, 0, 0, 0.45); +} +form .ant-upload { + background: transparent; +} +.ant-input-group-wrap .ant-select-selection { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.ant-input-group-wrap .ant-select-selection:hover { + border-color: #d9d9d9; +} +.ant-input-group-wrap .ant-select-selection--single { + background-color: #eee; +} +.ant-input-group-wrap .ant-select-open .ant-select-selection { + border-color: #d9d9d9; + box-shadow: none; +} +.has-success.has-feedback .ant-form-item-children-icon { + color: #52c41a; +} +.has-warning .ant-form-explain, +.has-warning .ant-form-split { + color: #faad14; +} +.has-warning .ant-input, +.has-warning .ant-input:hover { + border-color: #faad14; +} +.has-warning .ant-input:focus { + border-color: #ffc53d; + box-shadow: 0 0 0 2px rgba(250, 173, 20, 0.2); + border-right-width: 1px !important; +} +.has-warning .ant-input:not([disabled]):hover { + border-color: #faad14; +} +.has-warning .ant-calendar-picker-open .ant-calendar-picker-input { + border-color: #ffc53d; + box-shadow: 0 0 0 2px rgba(250, 173, 20, 0.2); + border-right-width: 1px !important; +} +.has-warning .ant-input-prefix { + color: #faad14; +} +.has-warning .ant-input-group-addon { + color: #faad14; + border-color: #faad14; + background-color: #fff; +} +.has-warning .has-feedback { + color: #faad14; +} +.has-warning.has-feedback .ant-form-item-children-icon { + color: #faad14; +} +.has-warning .ant-select-selection { + border-color: #faad14; +} +.has-warning .ant-select-open .ant-select-selection, +.has-warning .ant-select-focused .ant-select-selection { + border-color: #ffc53d; + box-shadow: 0 0 0 2px rgba(250, 173, 20, 0.2); + border-right-width: 1px !important; +} +.has-warning .ant-calendar-picker-icon:after, +.has-warning .ant-time-picker-icon:after, +.has-warning .ant-picker-icon:after, +.has-warning .ant-select-arrow, +.has-warning .ant-cascader-picker-arrow { + color: #faad14; +} +.has-warning .ant-input-number, +.has-warning .ant-time-picker-input { + border-color: #faad14; +} +.has-warning .ant-input-number-focused, +.has-warning .ant-time-picker-input-focused, +.has-warning .ant-input-number:focus, +.has-warning .ant-time-picker-input:focus { + border-color: #ffc53d; + box-shadow: 0 0 0 2px rgba(250, 173, 20, 0.2); + border-right-width: 1px !important; +} +.has-warning .ant-input-number:not([disabled]):hover, +.has-warning .ant-time-picker-input:not([disabled]):hover { + border-color: #faad14; +} +.has-warning .ant-cascader-picker:focus .ant-cascader-input { + border-color: #ffc53d; + box-shadow: 0 0 0 2px rgba(250, 173, 20, 0.2); + border-right-width: 1px !important; +} +.has-error .ant-form-explain, +.has-error .ant-form-split { + color: #f5222d; +} +.has-error .ant-input, +.has-error .ant-input:hover { + border-color: #f5222d; +} +.has-error .ant-input:focus { + border-color: #ff4d4f; + box-shadow: 0 0 0 2px rgba(245, 34, 45, 0.2); + border-right-width: 1px !important; +} +.has-error .ant-input:not([disabled]):hover { + border-color: #f5222d; +} +.has-error .ant-calendar-picker-open .ant-calendar-picker-input { + border-color: #ff4d4f; + box-shadow: 0 0 0 2px rgba(245, 34, 45, 0.2); + border-right-width: 1px !important; +} +.has-error .ant-input-prefix { + color: #f5222d; +} +.has-error .ant-input-group-addon { + color: #f5222d; + border-color: #f5222d; + background-color: #fff; +} +.has-error .has-feedback { + color: #f5222d; +} +.has-error.has-feedback .ant-form-item-children-icon { + color: #f5222d; +} +.has-error .ant-select-selection { + border-color: #f5222d; +} +.has-error .ant-select-open .ant-select-selection, +.has-error .ant-select-focused .ant-select-selection { + border-color: #ff4d4f; + box-shadow: 0 0 0 2px rgba(245, 34, 45, 0.2); + border-right-width: 1px !important; +} +.has-error .ant-select.ant-select-auto-complete .ant-input:focus { + border-color: #f5222d; +} +.has-error .ant-input-group-addon .ant-select-selection { + border-color: transparent; + box-shadow: none; +} +.has-error .ant-calendar-picker-icon:after, +.has-error .ant-time-picker-icon:after, +.has-error .ant-picker-icon:after, +.has-error .ant-select-arrow, +.has-error .ant-cascader-picker-arrow { + color: #f5222d; +} +.has-error .ant-input-number, +.has-error .ant-time-picker-input { + border-color: #f5222d; +} +.has-error .ant-input-number-focused, +.has-error .ant-time-picker-input-focused, +.has-error .ant-input-number:focus, +.has-error .ant-time-picker-input:focus { + border-color: #ff4d4f; + box-shadow: 0 0 0 2px rgba(245, 34, 45, 0.2); + border-right-width: 1px !important; +} +.has-error .ant-input-number:not([disabled]):hover, +.has-error .ant-time-picker-input:not([disabled]):hover { + border-color: #f5222d; +} +.has-error .ant-mention-wrapper .ant-mention-editor, +.has-error .ant-mention-wrapper .ant-mention-editor:not([disabled]):hover { + border-color: #f5222d; +} +.has-error .ant-mention-wrapper.ant-mention-active:not([disabled]) .ant-mention-editor, +.has-error .ant-mention-wrapper .ant-mention-editor:not([disabled]):focus { + border-color: #ff4d4f; + box-shadow: 0 0 0 2px rgba(245, 34, 45, 0.2); + border-right-width: 1px !important; +} +.has-error .ant-cascader-picker:focus .ant-cascader-input { + border-color: #ff4d4f; + box-shadow: 0 0 0 2px rgba(245, 34, 45, 0.2); + border-right-width: 1px !important; +} +.is-validating.has-feedback .ant-form-item-children-icon { + color: @primary-color; +} +.ant-input-number { + color: rgba(0, 0, 0, 0.65); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; +} +.ant-input-number::-moz-placeholder { + color: #bfbfbf; +} +.ant-input-number:-ms-input-placeholder { + color: #bfbfbf; +} +.ant-input-number::-webkit-input-placeholder { + color: #bfbfbf; +} +.ant-input-number:hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + border-right-width: 1px !important; +} +.ant-input-number:focus { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-input-number-disabled { + background-color: #f5f5f5; + color: rgba(0, 0, 0, 0.25); +} +.ant-input-number-disabled:hover { + border-color: #e6d8d8; + border-right-width: 1px !important; +} +.ant-input-number-handler { + color: rgba(0, 0, 0, 0.45); +} +.ant-input-number-handler:active { + background: #f4f4f4; +} +.ant-input-number-handler:hover .ant-input-number-handler-up-inner, +.ant-input-number-handler:hover .ant-input-number-handler-down-inner { + color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-input-number-handler-up-inner, +.ant-input-number-handler-down-inner { + color: rgba(0, 0, 0, 0.45); +} +.ant-input-number:hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + border-right-width: 1px !important; +} +.ant-input-number-focused { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-input-number-disabled { + background-color: #f5f5f5; + color: rgba(0, 0, 0, 0.25); +} +.ant-input-number-disabled:hover { + border-color: #e6d8d8; + border-right-width: 1px !important; +} +.ant-input-number-input { + background-color: transparent; + border: 0; + border-radius: 4px; +} +.ant-input-number-input::-moz-placeholder { + color: #bfbfbf; +} +.ant-input-number-input:-ms-input-placeholder { + color: #bfbfbf; +} +.ant-input-number-input::-webkit-input-placeholder { + color: #bfbfbf; +} +.ant-input-number-handler-wrap { + border-left: 1px solid #d9d9d9; + background: #fff; + border-radius: 0 4px 4px 0; +} +.ant-input-number-handler-down { + border-top: 1px solid #d9d9d9; +} +.ant-input-number-handler-up-disabled:hover .ant-input-number-handler-up-inner, +.ant-input-number-handler-down-disabled:hover .ant-input-number-handler-down-inner { + color: rgba(0, 0, 0, 0.25); +} +.ant-input { + color: rgba(0, 0, 0, 0.65); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; +} +.ant-input::-moz-placeholder { + color: #bfbfbf; +} +.ant-input:-ms-input-placeholder { + color: #bfbfbf; +} +.ant-input::-webkit-input-placeholder { + color: #bfbfbf; +} +.ant-input:hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + border-right-width: 1px !important; +} +.ant-input:focus { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-input-disabled { + background-color: #f5f5f5; + color: rgba(0, 0, 0, 0.25); +} +.ant-input-disabled:hover { + border-color: #e6d8d8; + border-right-width: 1px !important; +} +.ant-input-group { + color: rgba(0, 0, 0, 0.65); + border-collapse: separate; + border-spacing: 0; +} +.ant-input-group-addon:not(:first-child):not(:last-child), +.ant-input-group-wrap:not(:first-child):not(:last-child), +.ant-input-group > .ant-input:not(:first-child):not(:last-child) { + border-radius: 0; +} +.ant-input-group .ant-input:focus { + border-right-width: 1px; +} +.ant-input-group .ant-input:hover { + border-right-width: 1px; +} +.ant-input-group-addon { + color: rgba(0, 0, 0, 0.65); + background-color: #fafafa; + border: 1px solid #d9d9d9; + border-radius: 4px; +} +.ant-input-group-addon .ant-select .ant-select-selection { + background-color: inherit; + border: 1px solid transparent; + box-shadow: none; +} +.ant-input-group-addon .ant-select-open .ant-select-selection, +.ant-input-group-addon .ant-select-focused .ant-select-selection { + color: @primary-color; +} +.ant-input-group > .ant-input:first-child, +.ant-input-group-addon:first-child { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.ant-input-group > .ant-input:first-child .ant-select .ant-select-selection, +.ant-input-group-addon:first-child .ant-select .ant-select-selection { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.ant-input-group > .ant-input-affix-wrapper:not(:first-child) .ant-input { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.ant-input-group > .ant-input-affix-wrapper:not(:last-child) .ant-input { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.ant-input-group-addon:first-child { + border-right: 0; +} +.ant-input-group-addon:last-child { + border-left: 0; +} +.ant-input-group > .ant-input:last-child, +.ant-input-group-addon:last-child { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.ant-input-group > .ant-input:last-child .ant-select .ant-select-selection, +.ant-input-group-addon:last-child .ant-select .ant-select-selection { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.ant-input-group.ant-input-group-compact-addon:not(:first-child):not(:last-child), +.ant-input-group.ant-input-group-compact-wrap:not(:first-child):not(:last-child), +.ant-input-group.ant-input-group-compact > .ant-input:not(:first-child):not(:last-child) { + border-right-width: 1px; + border-right-color: transparent; +} +.ant-input-group.ant-input-group-compact-addon:not(:first-child):not(:last-child):hover, +.ant-input-group.ant-input-group-compact-wrap:not(:first-child):not(:last-child):hover, +.ant-input-group.ant-input-group-compact > .ant-input:not(:first-child):not(:last-child):hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + border-right-width: 1px !important; +} +.ant-input-group.ant-input-group-compact-addon:not(:first-child):not(:last-child):focus, +.ant-input-group.ant-input-group-compact-wrap:not(:first-child):not(:last-child):focus, +.ant-input-group.ant-input-group-compact > .ant-input:not(:first-child):not(:last-child):focus { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-input-group.ant-input-group-compact > * { + border-radius: 0; + border-right-width: 0; +} +.ant-input-group.ant-input-group-compact > span:not(:last-child) > .ant-input { + border-right-width: 0; +} +.ant-input-group.ant-input-group-compact > .ant-select > .ant-select-selection, +.ant-input-group.ant-input-group-compact > .ant-calendar-picker .ant-input, +.ant-input-group.ant-input-group-compact > .ant-select-auto-complete .ant-input, +.ant-input-group.ant-input-group-compact > .ant-cascader-picker .ant-input, +.ant-input-group.ant-input-group-compact > .ant-mention-wrapper .ant-mention-editor, +.ant-input-group.ant-input-group-compact > .ant-time-picker .ant-time-picker-input { + border-radius: 0; + border-right-width: 1px; + border-right-color: transparent; +} +.ant-input-group.ant-input-group-compact > .ant-select > .ant-select-selection:hover, +.ant-input-group.ant-input-group-compact > .ant-calendar-picker .ant-input:hover, +.ant-input-group.ant-input-group-compact > .ant-select-auto-complete .ant-input:hover, +.ant-input-group.ant-input-group-compact > .ant-cascader-picker .ant-input:hover, +.ant-input-group.ant-input-group-compact > .ant-mention-wrapper .ant-mention-editor:hover, +.ant-input-group.ant-input-group-compact > .ant-time-picker .ant-time-picker-input:hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + border-right-width: 1px !important; +} +.ant-input-group.ant-input-group-compact > .ant-select > .ant-select-selection:focus, +.ant-input-group.ant-input-group-compact > .ant-calendar-picker .ant-input:focus, +.ant-input-group.ant-input-group-compact > .ant-select-auto-complete .ant-input:focus, +.ant-input-group.ant-input-group-compact > .ant-cascader-picker .ant-input:focus, +.ant-input-group.ant-input-group-compact > .ant-mention-wrapper .ant-mention-editor:focus, +.ant-input-group.ant-input-group-compact > .ant-time-picker .ant-time-picker-input:focus { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-input-group.ant-input-group-compact > *:first-child, +.ant-input-group.ant-input-group-compact > .ant-select:first-child > .ant-select-selection, +.ant-input-group.ant-input-group-compact > .ant-calendar-picker:first-child .ant-input, +.ant-input-group.ant-input-group-compact > .ant-select-auto-complete:first-child .ant-input, +.ant-input-group.ant-input-group-compact > .ant-cascader-picker:first-child .ant-input, +.ant-input-group.ant-input-group-compact > .ant-mention-wrapper:first-child .ant-mention-editor, +.ant-input-group.ant-input-group-compact > .ant-time-picker:first-child .ant-time-picker-input { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +.ant-input-group.ant-input-group-compact > *:last-child, +.ant-input-group.ant-input-group-compact > .ant-select:last-child > .ant-select-selection, +.ant-input-group.ant-input-group-compact > .ant-calendar-picker:last-child .ant-input, +.ant-input-group.ant-input-group-compact > .ant-select-auto-complete:last-child .ant-input, +.ant-input-group.ant-input-group-compact > .ant-cascader-picker:last-child .ant-input, +.ant-input-group.ant-input-group-compact > .ant-cascader-picker-focused:last-child .ant-input, +.ant-input-group.ant-input-group-compact > .ant-mention-wrapper:last-child .ant-mention-editor, +.ant-input-group.ant-input-group-compact > .ant-time-picker:last-child .ant-time-picker-input { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + border-right-width: 1px; + border-right-color: #d9d9d9; +} +.ant-input-group.ant-input-group-compact > *:last-child:hover, +.ant-input-group.ant-input-group-compact > .ant-select:last-child > .ant-select-selection:hover, +.ant-input-group.ant-input-group-compact > .ant-calendar-picker:last-child .ant-input:hover, +.ant-input-group.ant-input-group-compact > .ant-select-auto-complete:last-child .ant-input:hover, +.ant-input-group.ant-input-group-compact > .ant-cascader-picker:last-child .ant-input:hover, +.ant-input-group.ant-input-group-compact > .ant-cascader-picker-focused:last-child .ant-input:hover, +.ant-input-group.ant-input-group-compact > .ant-mention-wrapper:last-child .ant-mention-editor:hover, +.ant-input-group.ant-input-group-compact > .ant-time-picker:last-child .ant-time-picker-input:hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + border-right-width: 1px !important; +} +.ant-input-group.ant-input-group-compact > *:last-child:focus, +.ant-input-group.ant-input-group-compact > .ant-select:last-child > .ant-select-selection:focus, +.ant-input-group.ant-input-group-compact > .ant-calendar-picker:last-child .ant-input:focus, +.ant-input-group.ant-input-group-compact > .ant-select-auto-complete:last-child .ant-input:focus, +.ant-input-group.ant-input-group-compact > .ant-cascader-picker:last-child .ant-input:focus, +.ant-input-group.ant-input-group-compact > .ant-cascader-picker-focused:last-child .ant-input:focus, +.ant-input-group.ant-input-group-compact > .ant-mention-wrapper:last-child .ant-mention-editor:focus, +.ant-input-group.ant-input-group-compact > .ant-time-picker:last-child .ant-time-picker-input:focus { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-input-group.ant-input-group-compact > *:last-child:focus .ant-cascader-input, +.ant-input-group.ant-input-group-compact > .ant-select:last-child > .ant-select-selection:focus .ant-cascader-input, +.ant-input-group.ant-input-group-compact > .ant-calendar-picker:last-child .ant-input:focus .ant-cascader-input, +.ant-input-group.ant-input-group-compact > .ant-select-auto-complete:last-child .ant-input:focus .ant-cascader-input, +.ant-input-group.ant-input-group-compact > .ant-cascader-picker:last-child .ant-input:focus .ant-cascader-input, +.ant-input-group.ant-input-group-compact > .ant-cascader-picker-focused:last-child .ant-input:focus .ant-cascader-input, +.ant-input-group.ant-input-group-compact > .ant-mention-wrapper:last-child .ant-mention-editor:focus .ant-cascader-input, +.ant-input-group.ant-input-group-compact > .ant-time-picker:last-child .ant-time-picker-input:focus .ant-cascader-input { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-input-affix-wrapper { + color: rgba(0, 0, 0, 0.65); +} +.ant-input-affix-wrapper:hover .ant-input:not(.ant-input-disabled) { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + border-right-width: 1px !important; +} +.ant-input-affix-wrapper .ant-input-prefix, +.ant-input-affix-wrapper .ant-input-suffix { + color: rgba(0, 0, 0, 0.65); +} +.ant-input-search-icon { + color: rgba(0, 0, 0, 0.45); +} +.ant-input-search-icon:hover { + color: #333; +} +.ant-input-search > .ant-input-suffix > .ant-input-search-button { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.ant-layout { + background: #f0f2f5; +} +.ant-layout-header { + background: #001529; +} +.ant-layout-footer { + background: #f0f2f5; + color: rgba(0, 0, 0, 0.65); +} +.ant-layout-sider { + background: #001529; +} +.ant-layout-sider-trigger { + color: #fff; + background: #002140; +} +.ant-layout-sider-zero-width-trigger { + background: #001529; + color: #fff; + border-radius: 0 4px 4px 0; +} +.ant-layout-sider-zero-width-trigger:hover { + background: #192c3e; +} +.ant-layout-sider-light { + background: #fff; +} +.ant-layout-sider-light .ant-layout-sider-trigger { + color: rgba(0, 0, 0, 0.65); + background: #fff; +} +.ant-layout-sider-light .ant-layout-sider-zero-width-trigger { + color: rgba(0, 0, 0, 0.65); + background: #fff; +} +.ant-list { + color: rgba(0, 0, 0, 0.65); +} +.ant-list-empty-text { + color: rgba(0, 0, 0, 0.45); +} +.ant-list-item-meta-title { + color: rgba(0, 0, 0, 0.65); +} +.ant-list-item-meta-title > a { + color: rgba(0, 0, 0, 0.65); +} +.ant-list-item-meta-title > a:hover { + color: @primary-color; +} +.ant-list-item-meta-description { + color: rgba(0, 0, 0, 0.45); +} +.ant-list-item-action > li { + color: rgba(0, 0, 0, 0.45); +} +.ant-list-item-action-split { + background-color: #e8e8e8; +} +.ant-list-empty { + color: rgba(0, 0, 0, 0.45); +} +.ant-list-split .ant-list-item { + border-bottom: 1px solid #e8e8e8; +} +.ant-list-split .ant-list-item:last-child { + border-bottom: none; +} +.ant-list-split .ant-list-header { + border-bottom: 1px solid #e8e8e8; +} +.ant-list-something-after-last-item .ant-spin-container > .ant-list-item:last-child { + border-bottom: 1px solid #e8e8e8; +} +.ant-list-vertical .ant-list-item-meta-title { + color: rgba(0, 0, 0, 0.85); +} +.ant-list-vertical .ant-list-item-content { + color: rgba(0, 0, 0, 0.65); +} +.ant-list-grid .ant-list-item { + border-bottom: none; +} +.ant-list-bordered { + border-radius: 4px; + border: 1px solid #d9d9d9; +} +.ant-list-bordered .ant-list-item { + border-bottom: 1px solid #e8e8e8; +} +.ant-mention-wrapper { + color: rgba(0, 0, 0, 0.65); +} +.ant-mention-wrapper .ant-mention-editor { + color: rgba(0, 0, 0, 0.65); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; +} +.ant-mention-wrapper .ant-mention-editor::-moz-placeholder { + color: #bfbfbf; +} +.ant-mention-wrapper .ant-mention-editor:-ms-input-placeholder { + color: #bfbfbf; +} +.ant-mention-wrapper .ant-mention-editor::-webkit-input-placeholder { + color: #bfbfbf; +} +.ant-mention-wrapper .ant-mention-editor:hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + border-right-width: 1px !important; +} +.ant-mention-wrapper .ant-mention-editor:focus { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-mention-wrapper .ant-mention-editor-disabled { + background-color: #f5f5f5; + color: rgba(0, 0, 0, 0.25); +} +.ant-mention-wrapper .ant-mention-editor-disabled:hover { + border-color: #e6d8d8; + border-right-width: 1px !important; +} +.ant-mention-wrapper.ant-mention-active:not(.disabled) .ant-mention-editor { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-mention-wrapper.disabled .ant-mention-editor { + background-color: #f5f5f5; + color: rgba(0, 0, 0, 0.25); +} +.ant-mention-wrapper.disabled .ant-mention-editor:hover { + border-color: #e6d8d8; + border-right-width: 1px !important; +} +.ant-mention-wrapper .public-DraftEditorPlaceholder-root .public-DraftEditorPlaceholder-inner { + color: #bfbfbf; +} +.ant-mention-dropdown { + color: rgba(0, 0, 0, 0.65); + background-color: #fff; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); + border-radius: 4px; +} +.ant-mention-dropdown-notfound.ant-mention-dropdown-item { + color: rgba(0, 0, 0, 0.25); +} +.ant-mention-dropdown-notfound.ant-mention-dropdown-item .anticon-loading { + color: @primary-color; +} +.ant-mention-dropdown-item { + color: rgba(0, 0, 0, 0.65); +} +.ant-mention-dropdown-item:hover { + background-color: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-mention-dropdown-item.focus, +.ant-mention-dropdown-item-active { + background-color: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-mention-dropdown-item-disabled { + color: rgba(0, 0, 0, 0.25); +} +.ant-mention-dropdown-item-disabled:hover { + color: rgba(0, 0, 0, 0.25); + background-color: #fff; +} +.ant-mention-dropdown-item-selected, +.ant-mention-dropdown-item-selected:hover { + background-color: #f5f5f5; + color: rgba(0, 0, 0, 0.65); +} +.ant-mention-dropdown-item-divider { + background-color: #e8e8e8; +} +.ant-menu { + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); + color: rgba(0, 0, 0, 0.65); + background: #fff; +} +.ant-menu-item-group-title { + color: rgba(0, 0, 0, 0.45); +} +.ant-menu-item:active, +.ant-menu-submenu-title:active { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-menu-item > a { + color: rgba(0, 0, 0, 0.65); +} +.ant-menu-item > a:hover { + color: @primary-color; +} +.ant-menu-item > a:before { + background-color: transparent; +} +.ant-menu-item-divider { + background-color: #e8e8e8; +} +.ant-menu-item:hover, +.ant-menu-item-active, +.ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open, +.ant-menu-submenu-active, +.ant-menu-submenu-title:hover { + color: @primary-color; +} +.ant-menu-horizontal > .ant-menu-item:hover, +.ant-menu-horizontal > .ant-menu-item-active, +.ant-menu-horizontal > .ant-menu-submenu .ant-menu-submenu-title:hover { + background-color: transparent; +} +.ant-menu-item-selected { + color: @primary-color; +} +.ant-menu-item-selected > a, +.ant-menu-item-selected > a:hover { + color: @primary-color; +} +.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected { + background-color: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-menu-inline, +.ant-menu-vertical, +.ant-menu-vertical-left { + border-right: 1px solid #e8e8e8; +} +.ant-menu-vertical-right { + border-left: 1px solid #e8e8e8; +} +.ant-menu-vertical.ant-menu-sub, +.ant-menu-vertical-left.ant-menu-sub, +.ant-menu-vertical-right.ant-menu-sub { + border-right: 0; +} +.ant-menu-vertical.ant-menu-sub .ant-menu-item, +.ant-menu-vertical-left.ant-menu-sub .ant-menu-item, +.ant-menu-vertical-right.ant-menu-sub .ant-menu-item { + border-right: 0; +} +.ant-menu-vertical.ant-menu-sub .ant-menu-item:after, +.ant-menu-vertical-left.ant-menu-sub .ant-menu-item:after, +.ant-menu-vertical-right.ant-menu-sub .ant-menu-item:after { + border-right: 0; +} +.ant-menu > .ant-menu-item-divider { + background-color: #e8e8e8; +} +.ant-menu-submenu-popup { + border-radius: 4px; +} +.ant-menu-submenu > .ant-menu { + background-color: #fff; + border-radius: 4px; +} +.ant-menu-submenu-vertical > .ant-menu-submenu-title .ant-menu-submenu-arrow:before, +.ant-menu-submenu-vertical-left > .ant-menu-submenu-title .ant-menu-submenu-arrow:before, +.ant-menu-submenu-vertical-right > .ant-menu-submenu-title .ant-menu-submenu-arrow:before, +.ant-menu-submenu-inline > .ant-menu-submenu-title .ant-menu-submenu-arrow:before, +.ant-menu-submenu-vertical > .ant-menu-submenu-title .ant-menu-submenu-arrow:after, +.ant-menu-submenu-vertical-left > .ant-menu-submenu-title .ant-menu-submenu-arrow:after, +.ant-menu-submenu-vertical-right > .ant-menu-submenu-title .ant-menu-submenu-arrow:after, +.ant-menu-submenu-inline > .ant-menu-submenu-title .ant-menu-submenu-arrow:after { + background: #fff; + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.65), rgba(0, 0, 0, 0.65)); + border-radius: 2px; +} +.ant-menu-submenu-vertical > .ant-menu-submenu-title:hover .ant-menu-submenu-arrow:after, +.ant-menu-submenu-vertical-left > .ant-menu-submenu-title:hover .ant-menu-submenu-arrow:after, +.ant-menu-submenu-vertical-right > .ant-menu-submenu-title:hover .ant-menu-submenu-arrow:after, +.ant-menu-submenu-inline > .ant-menu-submenu-title:hover .ant-menu-submenu-arrow:after, +.ant-menu-submenu-vertical > .ant-menu-submenu-title:hover .ant-menu-submenu-arrow:before, +.ant-menu-submenu-vertical-left > .ant-menu-submenu-title:hover .ant-menu-submenu-arrow:before, +.ant-menu-submenu-vertical-right > .ant-menu-submenu-title:hover .ant-menu-submenu-arrow:before, +.ant-menu-submenu-inline > .ant-menu-submenu-title:hover .ant-menu-submenu-arrow:before { + background: linear-gradient(to right, @primary-color, @primary-color); +} +.ant-menu-vertical .ant-menu-submenu-selected, +.ant-menu-vertical-left .ant-menu-submenu-selected, +.ant-menu-vertical-right .ant-menu-submenu-selected { + color: @primary-color; +} +.ant-menu-vertical .ant-menu-submenu-selected > a, +.ant-menu-vertical-left .ant-menu-submenu-selected > a, +.ant-menu-vertical-right .ant-menu-submenu-selected > a { + color: @primary-color; +} +.ant-menu-horizontal { + border: 0; + border-bottom: 1px solid #e8e8e8; + box-shadow: none; +} +.ant-menu-horizontal > .ant-menu-item, +.ant-menu-horizontal > .ant-menu-submenu { + border-bottom: 2px solid transparent; +} +.ant-menu-horizontal > .ant-menu-item:hover, +.ant-menu-horizontal > .ant-menu-submenu:hover, +.ant-menu-horizontal > .ant-menu-item-active, +.ant-menu-horizontal > .ant-menu-submenu-active, +.ant-menu-horizontal > .ant-menu-item-open, +.ant-menu-horizontal > .ant-menu-submenu-open, +.ant-menu-horizontal > .ant-menu-item-selected, +.ant-menu-horizontal > .ant-menu-submenu-selected { + border-bottom: 2px solid @primary-color; + color: @primary-color; +} +.ant-menu-horizontal > .ant-menu-item > a { + color: rgba(0, 0, 0, 0.65); +} +.ant-menu-horizontal > .ant-menu-item > a:hover { + color: @primary-color; +} +.ant-menu-horizontal > .ant-menu-item-selected > a { + color: @primary-color; +} +.ant-menu-vertical .ant-menu-item:after, +.ant-menu-vertical-left .ant-menu-item:after, +.ant-menu-vertical-right .ant-menu-item:after, +.ant-menu-inline .ant-menu-item:after { + border-right: 3px solid @primary-color; +} +.ant-menu-inline-collapsed-tooltip a { + color: rgba(255, 255, 255, 0.85); +} +.ant-menu-root.ant-menu-vertical, +.ant-menu-root.ant-menu-vertical-left, +.ant-menu-root.ant-menu-vertical-right, +.ant-menu-root.ant-menu-inline { + box-shadow: none; +} +.ant-menu-sub.ant-menu-inline { + border: 0; + box-shadow: none; + border-radius: 0; +} +.ant-menu-item-disabled, +.ant-menu-submenu-disabled { + color: rgba(0, 0, 0, 0.25) !important; + background: none; + border-color: transparent !important; +} +.ant-menu-item-disabled > a, +.ant-menu-submenu-disabled > a { + color: rgba(0, 0, 0, 0.25) !important; +} +.ant-menu-item-disabled > .ant-menu-submenu-title, +.ant-menu-submenu-disabled > .ant-menu-submenu-title { + color: rgba(0, 0, 0, 0.25) !important; +} +.ant-menu-item-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow:before, +.ant-menu-submenu-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow:before, +.ant-menu-item-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow:after, +.ant-menu-submenu-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow:after { + background: rgba(0, 0, 0, 0.25) !important; +} +.ant-menu-dark, +.ant-menu-dark .ant-menu-sub { + color: rgba(255, 255, 255, 0.65); + background: #001529; +} +.ant-menu-dark .ant-menu-submenu-title .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-submenu-title .ant-menu-submenu-arrow:before, +.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow:before { + background: #fff; +} +.ant-menu-dark.ant-menu-submenu-popup { + background: transparent; +} +.ant-menu-dark .ant-menu-inline.ant-menu-sub { + background: #000c17; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.45) inset; +} +.ant-menu-dark.ant-menu-horizontal { + border-bottom: 0; +} +.ant-menu-dark.ant-menu-horizontal > .ant-menu-item, +.ant-menu-dark.ant-menu-horizontal > .ant-menu-submenu { + border-color: #001529; + border-bottom: 0; +} +.ant-menu-dark .ant-menu-item, +.ant-menu-dark .ant-menu-item-group-title, +.ant-menu-dark .ant-menu-item > a { + color: rgba(255, 255, 255, 0.65); +} +.ant-menu-dark.ant-menu-inline, +.ant-menu-dark.ant-menu-vertical, +.ant-menu-dark.ant-menu-vertical-left, +.ant-menu-dark.ant-menu-vertical-right { + border-right: 0; +} +.ant-menu-dark.ant-menu-inline .ant-menu-item, +.ant-menu-dark.ant-menu-vertical .ant-menu-item, +.ant-menu-dark.ant-menu-vertical-left .ant-menu-item, +.ant-menu-dark.ant-menu-vertical-right .ant-menu-item { + border-right: 0; +} +.ant-menu-dark.ant-menu-inline .ant-menu-item:after, +.ant-menu-dark.ant-menu-vertical .ant-menu-item:after, +.ant-menu-dark.ant-menu-vertical-left .ant-menu-item:after, +.ant-menu-dark.ant-menu-vertical-right .ant-menu-item:after { + border-right: 0; +} +.ant-menu-dark .ant-menu-item:hover, +.ant-menu-dark .ant-menu-item-active, +.ant-menu-dark .ant-menu-submenu-active, +.ant-menu-dark .ant-menu-submenu-open, +.ant-menu-dark .ant-menu-submenu-selected, +.ant-menu-dark .ant-menu-submenu-title:hover { + background-color: transparent; + color: #fff; +} +.ant-menu-dark .ant-menu-item:hover > a, +.ant-menu-dark .ant-menu-item-active > a, +.ant-menu-dark .ant-menu-submenu-active > a, +.ant-menu-dark .ant-menu-submenu-open > a, +.ant-menu-dark .ant-menu-submenu-selected > a, +.ant-menu-dark .ant-menu-submenu-title:hover > a { + color: #fff; +} +.ant-menu-dark .ant-menu-item:hover > .ant-menu-submenu-title > .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-item-active > .ant-menu-submenu-title > .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-submenu-active > .ant-menu-submenu-title > .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-submenu-open > .ant-menu-submenu-title > .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-submenu-selected > .ant-menu-submenu-title > .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-submenu-title:hover > .ant-menu-submenu-title > .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-item:hover > .ant-menu-submenu-title:hover > .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-item-active > .ant-menu-submenu-title:hover > .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-submenu-active > .ant-menu-submenu-title:hover > .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-submenu-open > .ant-menu-submenu-title:hover > .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-submenu-selected > .ant-menu-submenu-title:hover > .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-submenu-title:hover > .ant-menu-submenu-title:hover > .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-item:hover > .ant-menu-submenu-title > .ant-menu-submenu-arrow:before, +.ant-menu-dark .ant-menu-item-active > .ant-menu-submenu-title > .ant-menu-submenu-arrow:before, +.ant-menu-dark .ant-menu-submenu-active > .ant-menu-submenu-title > .ant-menu-submenu-arrow:before, +.ant-menu-dark .ant-menu-submenu-open > .ant-menu-submenu-title > .ant-menu-submenu-arrow:before, +.ant-menu-dark .ant-menu-submenu-selected > .ant-menu-submenu-title > .ant-menu-submenu-arrow:before, +.ant-menu-dark .ant-menu-submenu-title:hover > .ant-menu-submenu-title > .ant-menu-submenu-arrow:before, +.ant-menu-dark .ant-menu-item:hover > .ant-menu-submenu-title:hover > .ant-menu-submenu-arrow:before, +.ant-menu-dark .ant-menu-item-active > .ant-menu-submenu-title:hover > .ant-menu-submenu-arrow:before, +.ant-menu-dark .ant-menu-submenu-active > .ant-menu-submenu-title:hover > .ant-menu-submenu-arrow:before, +.ant-menu-dark .ant-menu-submenu-open > .ant-menu-submenu-title:hover > .ant-menu-submenu-arrow:before, +.ant-menu-dark .ant-menu-submenu-selected > .ant-menu-submenu-title:hover > .ant-menu-submenu-arrow:before, +.ant-menu-dark .ant-menu-submenu-title:hover > .ant-menu-submenu-title:hover > .ant-menu-submenu-arrow:before { + background: #fff; +} +.ant-menu-dark .ant-menu-item-selected { + border-right: 0; + color: #fff; +} +.ant-menu-dark .ant-menu-item-selected:after { + border-right: 0; +} +.ant-menu-dark .ant-menu-item-selected > a, +.ant-menu-dark .ant-menu-item-selected > a:hover { + color: #fff; +} +.ant-menu.ant-menu-dark .ant-menu-item-selected, +.ant-menu-submenu-popup.ant-menu-dark .ant-menu-item-selected { + background-color: @primary-color; +} +.ant-menu-dark .ant-menu-item-disabled, +.ant-menu-dark .ant-menu-submenu-disabled, +.ant-menu-dark .ant-menu-item-disabled > a, +.ant-menu-dark .ant-menu-submenu-disabled > a { + color: rgba(255, 255, 255, 0.35) !important; +} +.ant-menu-dark .ant-menu-item-disabled > .ant-menu-submenu-title, +.ant-menu-dark .ant-menu-submenu-disabled > .ant-menu-submenu-title { + color: rgba(255, 255, 255, 0.35) !important; +} +.ant-menu-dark .ant-menu-item-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow:before, +.ant-menu-dark .ant-menu-submenu-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow:before, +.ant-menu-dark .ant-menu-item-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-submenu-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow:after { + background: rgba(255, 255, 255, 0.35) !important; +} +.ant-message { + color: rgba(0, 0, 0, 0.65); +} +.ant-message-notice-content { + border-radius: 4px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); + background: #fff; +} +.ant-message-success .anticon { + color: #52c41a; +} +.ant-message-error .anticon { + color: #f5222d; +} +.ant-message-warning .anticon { + color: #faad14; +} +.ant-message-info .anticon, +.ant-message-loading .anticon { + color: @primary-color; +} +.ant-modal { + color: rgba(0, 0, 0, 0.65); +} +.ant-modal-title { + color: rgba(0, 0, 0, 0.85); +} +.ant-modal-content { + background-color: #fff; + border: 0; + border-radius: 4px; + background-clip: padding-box; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); +} +.ant-modal-close { + border: 0; + background: transparent; + color: rgba(0, 0, 0, 0.45); +} +.ant-modal-close:focus, +.ant-modal-close:hover { + color: #444; +} +.ant-modal-header { + border-radius: 4px 4px 0 0; + background: #fff; + color: rgba(0, 0, 0, 0.65); + border-bottom: 1px solid #e8e8e8; +} +.ant-modal-footer { + border-top: 1px solid #e8e8e8; + border-radius: 0 0 4px 4px; +} +.ant-modal-mask { + background-color: rgba(0, 0, 0, 0.65); +} +.ant-confirm-body .ant-confirm-title { + color: rgba(0, 0, 0, 0.85); +} +.ant-confirm-body .ant-confirm-content { + color: rgba(0, 0, 0, 0.65); +} +.ant-confirm-error .ant-confirm-body > .anticon { + color: #f5222d; +} +.ant-confirm-warning .ant-confirm-body > .anticon, +.ant-confirm-confirm .ant-confirm-body > .anticon { + color: #faad14; +} +.ant-confirm-info .ant-confirm-body > .anticon { + color: @primary-color; +} +.ant-confirm-success .ant-confirm-body > .anticon { + color: #52c41a; +} +.ant-notification { + color: rgba(0, 0, 0, 0.65); +} +.ant-notification-notice { + border-radius: 4px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); + background: #fff; +} +.ant-notification-notice-message { + color: rgba(0, 0, 0, 0.85); +} +.ant-notification-notice-message-single-line-auto-margin { + background-color: transparent; +} +.ant-notification-notice-icon-success { + color: #52c41a; +} +.ant-notification-notice-icon-info { + color: @primary-color; +} +.ant-notification-notice-icon-warning { + color: #faad14; +} +.ant-notification-notice-icon-error { + color: #f5222d; +} +.ant-notification-notice-close { + color: rgba(0, 0, 0, 0.45); +} +.ant-notification-notice-close:hover { + color: rgba(0, 0, 0, 0.67); +} +.ant-pagination { + color: rgba(0, 0, 0, 0.65); +} +.ant-pagination-item { + border-radius: 4px; + border: 1px solid #d9d9d9; + background-color: #fff; +} +.ant-pagination-item a { + color: rgba(0, 0, 0, 0.65); +} +.ant-pagination-item:focus, +.ant-pagination-item:hover { + border-color: @primary-color; +} +.ant-pagination-item:focus a, +.ant-pagination-item:hover a { + color: @primary-color; +} +.ant-pagination-item-active { + border-color: @primary-color; +} +.ant-pagination-item-active a { + color: @primary-color; +} +.ant-pagination-item-active:focus, +.ant-pagination-item-active:hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-pagination-item-active:focus a, +.ant-pagination-item-active:hover a { + color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-pagination-jump-prev .ant-pagination-item-container .ant-pagination-item-link-icon, +.ant-pagination-jump-next .ant-pagination-item-container .ant-pagination-item-link-icon { + color: @primary-color; +} +.ant-pagination-jump-prev .ant-pagination-item-container .ant-pagination-item-ellipsis, +.ant-pagination-jump-next .ant-pagination-item-container .ant-pagination-item-ellipsis { + color: rgba(0, 0, 0, 0.25); +} +.ant-pagination-prev, +.ant-pagination-next, +.ant-pagination-jump-prev, +.ant-pagination-jump-next { + color: rgba(0, 0, 0, 0.65); + border-radius: 4px; +} +.ant-pagination-prev a, +.ant-pagination-next a { + color: rgba(0, 0, 0, 0.65); +} +.ant-pagination-prev:hover a, +.ant-pagination-next:hover a { + border-color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-pagination-prev .ant-pagination-item-link, +.ant-pagination-next .ant-pagination-item-link { + border: 1px solid #d9d9d9; + background-color: #fff; + border-radius: 4px; +} +.ant-pagination-prev:focus .ant-pagination-item-link, +.ant-pagination-next:focus .ant-pagination-item-link, +.ant-pagination-prev:hover .ant-pagination-item-link, +.ant-pagination-next:hover .ant-pagination-item-link { + border-color: @primary-color; + color: @primary-color; +} +.ant-pagination-disabled a, +.ant-pagination-disabled:hover a, +.ant-pagination-disabled:focus a, +.ant-pagination-disabled .ant-pagination-item-link, +.ant-pagination-disabled:hover .ant-pagination-item-link, +.ant-pagination-disabled:focus .ant-pagination-item-link { + border-color: #d9d9d9; + color: rgba(0, 0, 0, 0.25); +} +.ant-pagination-options-quick-jumper input { + color: rgba(0, 0, 0, 0.65); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; +} +.ant-pagination-options-quick-jumper input::-moz-placeholder { + color: #bfbfbf; +} +.ant-pagination-options-quick-jumper input:-ms-input-placeholder { + color: #bfbfbf; +} +.ant-pagination-options-quick-jumper input::-webkit-input-placeholder { + color: #bfbfbf; +} +.ant-pagination-options-quick-jumper input:hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + border-right-width: 1px !important; +} +.ant-pagination-options-quick-jumper input:focus { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-pagination-options-quick-jumper input-disabled { + background-color: #f5f5f5; + color: rgba(0, 0, 0, 0.25); +} +.ant-pagination-options-quick-jumper input-disabled:hover { + border-color: #e6d8d8; + border-right-width: 1px !important; +} +.ant-pagination-simple .ant-pagination-prev .ant-pagination-item-link, +.ant-pagination-simple .ant-pagination-next .ant-pagination-item-link { + border: 0; +} +.ant-pagination-simple .ant-pagination-simple-pager input { + background-color: #fff; + border-radius: 4px; + border: 1px solid #d9d9d9; +} +.ant-pagination-simple .ant-pagination-simple-pager input:hover { + border-color: @primary-color; +} +.ant-pagination.mini .ant-pagination-item:not(.ant-pagination-item-active) { + background: transparent; + border-color: transparent; +} +.ant-pagination.mini .ant-pagination-prev .ant-pagination-item-link, +.ant-pagination.mini .ant-pagination-next .ant-pagination-item-link { + border-color: transparent; + background: transparent; +} +.ant-popover { + color: rgba(0, 0, 0, 0.65); +} +.ant-popover:after { + background: rgba(255, 255, 255, 0.01); +} +.ant-popover-inner { + background-color: #fff; + background-clip: padding-box; + border-radius: 4px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); +} +.ant-popover-title { + border-bottom: 1px solid #e8e8e8; + color: rgba(0, 0, 0, 0.85); +} +.ant-popover-inner-content { + color: rgba(0, 0, 0, 0.65); +} +.ant-popover-message { + color: rgba(0, 0, 0, 0.65); +} +.ant-popover-message > .anticon { + color: #faad14; +} +.ant-popover-arrow { + background: #fff; + border-color: transparent; + border-style: solid; +} +.ant-popover-placement-top > .ant-popover-content > .ant-popover-arrow, +.ant-popover-placement-topLeft > .ant-popover-content > .ant-popover-arrow, +.ant-popover-placement-topRight > .ant-popover-content > .ant-popover-arrow { + box-shadow: 3px 3px 7px rgba(0, 0, 0, 0.07); +} +.ant-popover-placement-right > .ant-popover-content > .ant-popover-arrow, +.ant-popover-placement-rightTop > .ant-popover-content > .ant-popover-arrow, +.ant-popover-placement-rightBottom > .ant-popover-content > .ant-popover-arrow { + box-shadow: -3px 3px 7px rgba(0, 0, 0, 0.07); +} +.ant-popover-placement-bottom > .ant-popover-content > .ant-popover-arrow, +.ant-popover-placement-bottomLeft > .ant-popover-content > .ant-popover-arrow, +.ant-popover-placement-bottomRight > .ant-popover-content > .ant-popover-arrow { + box-shadow: -2px -2px 5px rgba(0, 0, 0, 0.06); +} +.ant-popover-placement-left > .ant-popover-content > .ant-popover-arrow, +.ant-popover-placement-leftTop > .ant-popover-content > .ant-popover-arrow, +.ant-popover-placement-leftBottom > .ant-popover-content > .ant-popover-arrow { + box-shadow: 3px -3px 7px rgba(0, 0, 0, 0.07); +} +.ant-progress { + color: rgba(0, 0, 0, 0.65); +} +.ant-progress-inner { + background-color: #f5f5f5; + border-radius: 100px; +} +.ant-progress-success-bg, +.ant-progress-bg { + background-color: @primary-color; +} +.ant-progress-success-bg { + background-color: #52c41a; +} +.ant-progress-text { + color: rgba(0, 0, 0, 0.45); +} +.ant-progress-status-active .ant-progress-bg:before { + background: #fff; + border-radius: 10px; +} +.ant-progress-status-exception .ant-progress-bg { + background-color: #f5222d; +} +.ant-progress-status-exception .ant-progress-text { + color: #f5222d; +} +.ant-progress-status-success .ant-progress-bg { + background-color: #52c41a; +} +.ant-progress-status-success .ant-progress-text { + color: #52c41a; +} +.ant-progress-circle .ant-progress-inner { + background-color: transparent; +} +.ant-progress-circle .ant-progress-text { + color: rgba(0, 0, 0, 0.65); +} +.ant-progress-circle.ant-progress-status-exception .ant-progress-text { + color: #f5222d; +} +.ant-progress-circle.ant-progress-status-success .ant-progress-text { + color: #52c41a; +} +.ant-radio-group { + color: rgba(0, 0, 0, 0.65); +} +.ant-radio-wrapper { + color: rgba(0, 0, 0, 0.65); +} +.ant-radio { + color: rgba(0, 0, 0, 0.65); +} +.ant-radio-wrapper:hover .ant-radio .ant-radio-inner, +.ant-radio:hover .ant-radio-inner, +.ant-radio-focused .ant-radio-inner { + border-color: @primary-color; +} +.ant-radio-checked:after { + border-radius: 50%; + border: 1px solid @primary-color; +} +.ant-radio-inner { + border-width: 1px; + border-style: solid; + border-radius: 100px; + border-color: #d9d9d9; + background-color: #fff; +} +.ant-radio-inner:after { + border-radius: 8px; + border-top: 0; + border-left: 0; + background-color: @primary-color; +} +.ant-radio-checked .ant-radio-inner { + border-color: @primary-color; +} +.ant-radio-disabled .ant-radio-inner { + border-color: #d9d9d9 !important; + background-color: #f5f5f5; +} +.ant-radio-disabled .ant-radio-inner:after { + background-color: #ccc; +} +.ant-radio-disabled + span { + color: rgba(0, 0, 0, 0.25); +} +.ant-radio-button-wrapper { + color: rgba(0, 0, 0, 0.65); + border: 1px solid #d9d9d9; + border-left: 0; + border-top-width: 1.02px; + background: #fff; +} +.ant-radio-button-wrapper a { + color: rgba(0, 0, 0, 0.65); +} +.ant-radio-button-wrapper:not(:first-child)::before { + background-color: #d9d9d9; +} +.ant-radio-button-wrapper:first-child { + border-radius: 4px 0 0 4px; + border-left: 1px solid #d9d9d9; +} +.ant-radio-button-wrapper:last-child { + border-radius: 0 4px 4px 0; +} +.ant-radio-button-wrapper:first-child:last-child { + border-radius: 4px; +} +.ant-radio-button-wrapper:hover, +.ant-radio-button-wrapper-focused { + color: @primary-color; +} +.ant-radio-button-wrapper-checked { + background: #fff; + border-color: @primary-color; + color: @primary-color; + box-shadow: -1px 0 0 0 @primary-color; +} +.ant-radio-button-wrapper-checked::before { + background-color: @primary-color !important; +} +.ant-radio-button-wrapper-checked:first-child { + border-color: @primary-color; + box-shadow: none !important; +} +.ant-radio-button-wrapper-checked:hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: -1px 0 0 0 color(~`colorPalette("@{primary-color}", 5)`); + color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-radio-button-wrapper-checked:active { + border-color: color(~`colorPalette("@{primary-color}", 7)`); + box-shadow: -1px 0 0 0 color(~`colorPalette("@{primary-color}", 7)`); + color: color(~`colorPalette("@{primary-color}", 7)`); +} +.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled) { + background: @primary-color; + border-color: @primary-color; + color: #fff; +} +.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + background: color(~`colorPalette("@{primary-color}", 5)`); + color: #fff; +} +.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active { + border-color: color(~`colorPalette("@{primary-color}", 7)`); + background: color(~`colorPalette("@{primary-color}", 7)`); + color: #fff; +} +.ant-radio-button-wrapper-disabled { + border-color: #d9d9d9; + background-color: #f5f5f5; + color: rgba(0, 0, 0, 0.25); +} +.ant-radio-button-wrapper-disabled:first-child, +.ant-radio-button-wrapper-disabled:hover { + border-color: #d9d9d9; + background-color: #f5f5f5; + color: rgba(0, 0, 0, 0.25); +} +.ant-radio-button-wrapper-disabled:first-child { + border-left-color: #d9d9d9; +} +.ant-radio-button-wrapper-disabled.ant-radio-button-wrapper-checked { + color: #fff; + background-color: #e6e6e6; + border-color: #d9d9d9; + box-shadow: none; +} +.ant-rate { + color: rgba(0, 0, 0, 0.65); + color: #fadb14; +} +.ant-rate-star { + color: inherit; +} +.ant-rate-star-first, +.ant-rate-star-second { + color: #e8e8e8; +} +.ant-rate-star-half .ant-rate-star-first, +.ant-rate-star-full .ant-rate-star-second { + color: inherit; +} +.ant-select { + color: rgba(0, 0, 0, 0.65); +} +.ant-select > ul > li > a { + background-color: #fff; +} +.ant-select-arrow { + color: rgba(0, 0, 0, 0.25); +} +.ant-select-selection { + background-color: #fff; + border-radius: 4px; + border: 1px solid #d9d9d9; + border-top-width: 1.02px; +} +.ant-select-selection:hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + border-right-width: 1px !important; +} +.ant-select-focused .ant-select-selection, +.ant-select-selection:focus, +.ant-select-selection:active { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-select-selection__clear { + background: #fff; + color: rgba(0, 0, 0, 0.25); +} +.ant-select-selection__clear:hover { + color: rgba(0, 0, 0, 0.45); +} +.ant-select-disabled { + color: rgba(0, 0, 0, 0.25); +} +.ant-select-disabled .ant-select-selection { + background: #f5f5f5; +} +.ant-select-disabled .ant-select-selection:hover, +.ant-select-disabled .ant-select-selection:focus, +.ant-select-disabled .ant-select-selection:active { + border-color: #d9d9d9; + box-shadow: none; +} +.ant-select-disabled .ant-select-selection--multiple .ant-select-selection__choice { + background: #f5f5f5; + color: #aaa; +} +.ant-select-disabled .ant-select-selection__choice__remove { + color: rgba(0, 0, 0, 0.25); +} +.ant-select-disabled .ant-select-selection__choice__remove:hover { + color: rgba(0, 0, 0, 0.25); +} +.ant-select-selection__placeholder, +.ant-select-search__field__placeholder { + color: #bfbfbf; +} +.ant-select-search--inline .ant-select-search__field { + border-width: 0; + background: transparent; + border-radius: 4px; +} +.ant-select-selection--multiple .ant-select-selection__choice { + color: rgba(0, 0, 0, 0.65); + background-color: #fafafa; + border: 1px solid #e8e8e8; + border-radius: 2px; +} +.ant-select-selection--multiple .ant-select-selection__choice__remove { + color: rgba(0, 0, 0, 0.45); +} +.ant-select-selection--multiple .ant-select-selection__choice__remove:hover { + color: #404040; +} +.ant-select-open .ant-select-selection { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-select-combobox .ant-select-search__field { + box-shadow: none; +} +.ant-select-dropdown { + color: rgba(0, 0, 0, 0.65); + background-color: #fff; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); + border-radius: 4px; +} +.ant-select-dropdown-menu-item-group-title { + color: rgba(0, 0, 0, 0.45); +} +.ant-select-dropdown-menu-item-group-list .ant-select-dropdown-menu-item:first-child:not(:last-child), +.ant-select-dropdown-menu-item-group:not(:last-child) .ant-select-dropdown-menu-item-group-list .ant-select-dropdown-menu-item:last-child { + border-radius: 0; +} +.ant-select-dropdown-menu-item { + color: rgba(0, 0, 0, 0.65); +} +.ant-select-dropdown-menu-item:hover { + background-color: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-select-dropdown-menu-item:first-child { + border-radius: 4px 4px 0 0; +} +.ant-select-dropdown-menu-item:last-child { + border-radius: 0 0 4px 4px; +} +.ant-select-dropdown-menu-item-disabled { + color: rgba(0, 0, 0, 0.25); +} +.ant-select-dropdown-menu-item-disabled:hover { + color: rgba(0, 0, 0, 0.25); + background-color: #fff; +} +.ant-select-dropdown-menu-item-selected, +.ant-select-dropdown-menu-item-selected:hover { + background-color: #fafafa; + color: rgba(0, 0, 0, 0.65); +} +.ant-select-dropdown-menu-item-active { + background-color: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-select-dropdown-menu-item-divider { + background-color: #e8e8e8; +} +.ant-select-dropdown.ant-select-dropdown--multiple .ant-select-dropdown-menu-item .ant-select-selected-icon { + color: transparent; +} +.ant-select-dropdown.ant-select-dropdown--multiple .ant-select-dropdown-menu-item:hover .ant-select-selected-icon { + color: #ddd; +} +.ant-select-dropdown.ant-select-dropdown--multiple .ant-select-dropdown-menu-item-selected .ant-select-selected-icon, +.ant-select-dropdown.ant-select-dropdown--multiple .ant-select-dropdown-menu-item-selected:hover .ant-select-selected-icon { + color: @primary-color; +} +.ant-skeleton-header .ant-skeleton-avatar { + background: #f2f2f2; +} +.ant-skeleton-header .ant-skeleton-avatar.ant-skeleton-avatar-circle { + border-radius: 50%; +} +.ant-skeleton-header .ant-skeleton-avatar-lg.ant-skeleton-avatar-circle { + border-radius: 50%; +} +.ant-skeleton-header .ant-skeleton-avatar-sm.ant-skeleton-avatar-circle { + border-radius: 50%; +} +.ant-skeleton-content .ant-skeleton-title { + background: #f2f2f2; +} +.ant-skeleton-content .ant-skeleton-paragraph > li { + background: #f2f2f2; +} +.ant-skeleton.ant-skeleton-active .ant-skeleton-content .ant-skeleton-title, +.ant-skeleton.ant-skeleton-active .ant-skeleton-content .ant-skeleton-paragraph > li { + background: linear-gradient(90deg, #f2f2f2 25%, #e6e6e6 37%, #f2f2f2 63%); + background-size: 400% 100%; +} +.ant-skeleton.ant-skeleton-active .ant-skeleton-avatar { + background: linear-gradient(90deg, #f2f2f2 25%, #e6e6e6 37%, #f2f2f2 63%); + background-size: 400% 100%; +} +.ant-slider { + color: rgba(0, 0, 0, 0.65); +} +.ant-slider-rail { + border-radius: 2px; + background-color: #f5f5f5; +} +.ant-slider-track { + border-radius: 4px; + background-color: color(~`colorPalette("@{primary-color}", 3)`); +} +.ant-slider-handle { + border-radius: 50%; + border: solid 2px color(~`colorPalette("@{primary-color}", 3)`); + background-color: #fff; +} +.ant-slider-handle:focus { + border-color: #46a6ff; + box-shadow: 0 0 0 5px #8cc8ff; +} +.ant-slider-handle.ant-tooltip-open { + border-color: @primary-color; +} +.ant-slider:hover .ant-slider-rail { + background-color: #e1e1e1; +} +.ant-slider:hover .ant-slider-track { + background-color: color(~`colorPalette("@{primary-color}", 4)`); +} +.ant-slider:hover .ant-slider-handle:not(.ant-tooltip-open) { + border-color: color(~`colorPalette("@{primary-color}", 4)`); +} +.ant-slider-mark-text { + color: rgba(0, 0, 0, 0.45); +} +.ant-slider-mark-text-active { + color: rgba(0, 0, 0, 0.65); +} +.ant-slider-step { + background: transparent; +} +.ant-slider-dot { + border: 2px solid #e8e8e8; + background-color: #fff; + border-radius: 50%; +} +.ant-slider-dot-active { + border-color: #8cc8ff; +} +.ant-slider-disabled .ant-slider-track { + background-color: rgba(0, 0, 0, 0.25) !important; +} +.ant-slider-disabled .ant-slider-handle, +.ant-slider-disabled .ant-slider-dot { + border-color: rgba(0, 0, 0, 0.25) !important; + background-color: #fff; + box-shadow: none; +} +.ant-spin { + color: rgba(0, 0, 0, 0.65); + color: @primary-color; +} +.ant-spin-blur:after { + background: #fff; +} +.ant-spin-tip { + color: rgba(0, 0, 0, 0.45); +} +.ant-spin-dot i { + border-radius: 100%; + background-color: @primary-color; +} +.ant-steps { + color: rgba(0, 0, 0, 0.65); +} +.ant-steps-item-icon { + border: 1px solid rgba(0, 0, 0, 0.25); + border-radius: 32px; +} +.ant-steps-item-icon > .ant-steps-icon { + color: @primary-color; +} +.ant-steps-item-tail:after { + background: #e8e8e8; + border-radius: 1px; +} +.ant-steps-item-title { + color: rgba(0, 0, 0, 0.65); +} +.ant-steps-item-title:after { + background: #e8e8e8; +} +.ant-steps-item-description { + color: rgba(0, 0, 0, 0.45); +} +.ant-steps-item-wait .ant-steps-item-icon { + border-color: rgba(0, 0, 0, 0.25); + background-color: #fff; +} +.ant-steps-item-wait .ant-steps-item-icon > .ant-steps-icon { + color: rgba(0, 0, 0, 0.25); +} +.ant-steps-item-wait .ant-steps-item-icon > .ant-steps-icon .ant-steps-icon-dot { + background: rgba(0, 0, 0, 0.25); +} +.ant-steps-item-wait > .ant-steps-item-content > .ant-steps-item-title { + color: rgba(0, 0, 0, 0.45); +} +.ant-steps-item-wait > .ant-steps-item-content > .ant-steps-item-title:after { + background-color: #e8e8e8; +} +.ant-steps-item-wait > .ant-steps-item-content > .ant-steps-item-description { + color: rgba(0, 0, 0, 0.45); +} +.ant-steps-item-wait > .ant-steps-item-tail:after { + background-color: #e8e8e8; +} +.ant-steps-item-process .ant-steps-item-icon { + border-color: @primary-color; + background-color: #fff; +} +.ant-steps-item-process .ant-steps-item-icon > .ant-steps-icon { + color: @primary-color; +} +.ant-steps-item-process .ant-steps-item-icon > .ant-steps-icon .ant-steps-icon-dot { + background: @primary-color; +} +.ant-steps-item-process > .ant-steps-item-content > .ant-steps-item-title { + color: rgba(0, 0, 0, 0.85); +} +.ant-steps-item-process > .ant-steps-item-content > .ant-steps-item-title:after { + background-color: #e8e8e8; +} +.ant-steps-item-process > .ant-steps-item-content > .ant-steps-item-description { + color: rgba(0, 0, 0, 0.65); +} +.ant-steps-item-process > .ant-steps-item-tail:after { + background-color: #e8e8e8; +} +.ant-steps-item-process .ant-steps-item-icon { + background: @primary-color; +} +.ant-steps-item-process .ant-steps-item-icon > .ant-steps-icon { + color: #fff; +} +.ant-steps-item-finish .ant-steps-item-icon { + border-color: @primary-color; + background-color: #fff; +} +.ant-steps-item-finish .ant-steps-item-icon > .ant-steps-icon { + color: @primary-color; +} +.ant-steps-item-finish .ant-steps-item-icon > .ant-steps-icon .ant-steps-icon-dot { + background: @primary-color; +} +.ant-steps-item-finish > .ant-steps-item-content > .ant-steps-item-title { + color: rgba(0, 0, 0, 0.65); +} +.ant-steps-item-finish > .ant-steps-item-content > .ant-steps-item-title:after { + background-color: @primary-color; +} +.ant-steps-item-finish > .ant-steps-item-content > .ant-steps-item-description { + color: rgba(0, 0, 0, 0.45); +} +.ant-steps-item-finish > .ant-steps-item-tail:after { + background-color: @primary-color; +} +.ant-steps-item-error .ant-steps-item-icon { + border-color: #f5222d; + background-color: #fff; +} +.ant-steps-item-error .ant-steps-item-icon > .ant-steps-icon { + color: #f5222d; +} +.ant-steps-item-error .ant-steps-item-icon > .ant-steps-icon .ant-steps-icon-dot { + background: #f5222d; +} +.ant-steps-item-error > .ant-steps-item-content > .ant-steps-item-title { + color: #f5222d; +} +.ant-steps-item-error > .ant-steps-item-content > .ant-steps-item-title:after { + background-color: #e8e8e8; +} +.ant-steps-item-error > .ant-steps-item-content > .ant-steps-item-description { + color: #f5222d; +} +.ant-steps-item-error > .ant-steps-item-tail:after { + background-color: #e8e8e8; +} +.ant-steps-item.ant-steps-next-error .ant-steps-item-title:after { + background: #f5222d; +} +.ant-steps-item-custom .ant-steps-item-icon { + background: none; + border: 0; +} +.ant-steps-item-custom.ant-steps-item-process .ant-steps-item-icon > .ant-steps-icon { + color: @primary-color; +} +.ant-steps-small .ant-steps-item-icon { + border-radius: 24px; +} +.ant-steps-small .ant-steps-item-description { + color: rgba(0, 0, 0, 0.45); +} +.ant-steps-small .ant-steps-item-custom .ant-steps-item-icon { + border-radius: 0; + border: 0; + background: none; +} +.ant-steps-dot .ant-steps-item-icon { + border: 0; + background: transparent; +} +.ant-steps-dot .ant-steps-item-icon .ant-steps-icon-dot { + border-radius: 100px; +} +.ant-steps-dot .ant-steps-item-icon .ant-steps-icon-dot:after { + background: rgba(0, 0, 0, 0.001); +} +.ant-switch { + color: rgba(0, 0, 0, 0.65); + border-radius: 100px; + border: 1px solid transparent; + background-color: rgba(0, 0, 0, 0.25); +} +.ant-switch-inner { + color: #fff; +} +.ant-switch-loading-icon, +.ant-switch:after { + border-radius: 18px; + background-color: #fff; +} +.ant-switch:after { + box-shadow: 0 2px 4px 0 rgba(0, 35, 11, 0.2); +} +.ant-switch-loading-icon { + background: transparent; +} +.ant-switch-loading .ant-switch-loading-icon { + color: rgba(0, 0, 0, 0.65); +} +.ant-switch-checked.ant-switch-loading .ant-switch-loading-icon { + color: @primary-color; +} +.ant-switch:focus { + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); +} +.ant-switch:focus:hover { + box-shadow: none; +} +.ant-switch-checked { + background-color: @primary-color; +} +.ant-table { + color: rgba(0, 0, 0, 0.65); +} +.ant-table table { + border-collapse: collapse; + border-radius: 4px 4px 0 0; +} +.ant-table-thead > tr > th { + background: #fafafa; + color: rgba(0, 0, 0, 0.85); + border-bottom: 1px solid #e8e8e8; +} +.ant-table-thead > tr > th .anticon-filter, +.ant-table-thead > tr > th .ant-table-filter-icon { + color: #bfbfbf; +} +.ant-table-thead > tr > th .ant-table-filter-selected.anticon-filter { + color: @primary-color; +} +.ant-table-thead > tr > th .ant-table-column-sorter { + color: #bfbfbf; +} +.ant-table-thead > tr > th .ant-table-column-sorter-up.on, +.ant-table-thead > tr > th .ant-table-column-sorter-down.on { + color: @primary-color; +} +.ant-table-thead > tr > th.ant-table-column-has-actions:hover { + background: #f5f5f5; +} +.ant-table-thead > tr > th.ant-table-column-has-actions:hover .anticon-filter, +.ant-table-thead > tr > th.ant-table-column-has-actions:hover .ant-table-filter-icon { + background: #f5f5f5; +} +.ant-table-thead > tr > th.ant-table-column-has-actions:hover .anticon-filter:hover, +.ant-table-thead > tr > th.ant-table-column-has-actions:hover .ant-table-filter-icon:hover { + color: rgba(0, 0, 0, 0.45); + background: #ebebeb; +} +.ant-table-thead > tr > th.ant-table-column-has-actions:hover .anticon-filter:active, +.ant-table-thead > tr > th.ant-table-column-has-actions:hover .ant-table-filter-icon:active { + color: rgba(0, 0, 0, 0.65); +} +.ant-table-thead > tr > th.ant-table-column-has-actions .anticon-filter.ant-table-filter-open, +.ant-table-thead > tr > th.ant-table-column-has-actions .ant-table-filter-icon.ant-table-filter-open { + color: rgba(0, 0, 0, 0.45); + background: #ebebeb; +} +.ant-table-thead > tr > th.ant-table-column-has-actions:active .ant-table-column-sorter-up:not(.on), +.ant-table-thead > tr > th.ant-table-column-has-actions:active .ant-table-column-sorter-down:not(.on) { + color: rgba(0, 0, 0, 0.45); +} +.ant-table-thead > tr > th .ant-table-column-sorters:before { + background: transparent; +} +.ant-table-thead > tr > th .ant-table-column-sorters:hover:before { + background: rgba(0, 0, 0, 0.04); +} +.ant-table-thead > tr:first-child > th:first-child { + border-top-left-radius: 4px; +} +.ant-table-thead > tr:first-child > th:last-child { + border-top-right-radius: 4px; +} +.ant-table-thead > tr:not(:last-child) > th[colspan] { + border-bottom: 0; +} +.ant-table-tbody > tr > td { + border-bottom: 1px solid #e8e8e8; +} +.ant-table-thead > tr.ant-table-row-hover > td, +.ant-table-tbody > tr.ant-table-row-hover > td, +.ant-table-thead > tr:hover > td, +.ant-table-tbody > tr:hover > td { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-table-thead > tr:hover { + background: none; +} +.ant-table-footer { + background: #fafafa; + border-radius: 0 0 4px 4px; + border-top: 1px solid #e8e8e8; +} +.ant-table-footer:before { + background: #fafafa; +} +.ant-table.ant-table-bordered .ant-table-footer { + border: 1px solid #e8e8e8; +} +.ant-table-title { + border-radius: 4px 4px 0 0; +} +.ant-table.ant-table-bordered .ant-table-title { + border: 1px solid #e8e8e8; +} +.ant-table-title + .ant-table-content { + border-radius: 4px 4px 0 0; +} +.ant-table-bordered .ant-table-title + .ant-table-content, +.ant-table-bordered .ant-table-title + .ant-table-content table, +.ant-table-bordered .ant-table-title + .ant-table-content .ant-table-thead > tr:first-child > th { + border-radius: 0; +} +.ant-table-without-column-header .ant-table-title + .ant-table-content, +.ant-table-without-column-header table { + border-radius: 0; +} +.ant-table-tbody > tr.ant-table-row-selected td { + background: #fafafa; +} +.ant-table-thead > tr > th.ant-table-column-sort { + background: #f5f5f5; +} +.ant-table-tbody > tr > td.ant-table-column-sort { + background: rgba(0, 0, 0, 0.01); +} +.ant-table-header { + background: #fafafa; +} +.ant-table-header table { + border-radius: 4px 4px 0 0; +} +.ant-table-loading .ant-table-body { + background: #fff; +} +.ant-table-bordered .ant-table-header > table, +.ant-table-bordered .ant-table-body > table, +.ant-table-bordered .ant-table-fixed-left table, +.ant-table-bordered .ant-table-fixed-right table { + border: 1px solid #e8e8e8; + border-right: 0; + border-bottom: 0; +} +.ant-table-bordered.ant-table-empty .ant-table-placeholder { + border-left: 1px solid #e8e8e8; + border-right: 1px solid #e8e8e8; +} +.ant-table-bordered.ant-table-fixed-header .ant-table-header > table { + border-bottom: 0; +} +.ant-table-bordered.ant-table-fixed-header .ant-table-body > table { + border-top: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.ant-table-bordered.ant-table-fixed-header .ant-table-body-inner > table { + border-top: 0; +} +.ant-table-bordered.ant-table-fixed-header .ant-table-placeholder { + border: 0; +} +.ant-table-bordered .ant-table-thead > tr:not(:last-child) > th { + border-bottom: 1px solid #e8e8e8; +} +.ant-table-bordered .ant-table-thead > tr > th, +.ant-table-bordered .ant-table-tbody > tr > td { + border-right: 1px solid #e8e8e8; +} +.ant-table-placeholder { + background: #fff; + border-bottom: 1px solid #e8e8e8; + color: rgba(0, 0, 0, 0.45); +} +.ant-table-filter-dropdown { + background: #fff; + border-radius: 4px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); +} +.ant-table-filter-dropdown .ant-dropdown-menu { + border: 0; + box-shadow: none; + border-radius: 4px 4px 0 0; +} +.ant-table-filter-dropdown .ant-dropdown-menu-sub { + border-radius: 4px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); +} +.ant-table-filter-dropdown .ant-dropdown-menu .ant-dropdown-submenu-contain-selected .ant-dropdown-menu-submenu-title:after { + color: @primary-color; +} +.ant-table-filter-dropdown > .ant-dropdown-menu > .ant-dropdown-menu-item:last-child, +.ant-table-filter-dropdown > .ant-dropdown-menu > .ant-dropdown-menu-submenu:last-child .ant-dropdown-menu-submenu-title { + border-radius: 0; +} +.ant-table-filter-dropdown-btns { + border-top: 1px solid #e8e8e8; +} +.ant-table-filter-dropdown-link { + color: @primary-color; +} +.ant-table-filter-dropdown-link:hover { + color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-table-filter-dropdown-link:active { + color: color(~`colorPalette("@{primary-color}", 7)`); +} +.ant-table-selection .anticon-down { + color: #bfbfbf; +} +.ant-table-selection-menu { + background: #fff; + border-radius: 4px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); +} +.ant-table-selection-menu .ant-action-down { + color: #bfbfbf; +} +.ant-table-selection-down:hover .anticon-down { + color: #666; +} +.ant-table-row-expand-icon { + border: 1px solid #e8e8e8; + background: #fff; +} +tr.ant-table-expanded-row, +tr.ant-table-expanded-row:hover { + background: #fbfbfb; +} +.ant-table-fixed-header > .ant-table-content > .ant-table-scroll > .ant-table-body { + background: #fff; +} +.ant-table-fixed-left, +.ant-table-fixed-right { + border-radius: 0; +} +.ant-table-fixed-left table, +.ant-table-fixed-right table { + background: #fff; +} +.ant-table-fixed-header .ant-table-fixed-left .ant-table-body-outer .ant-table-fixed, +.ant-table-fixed-header .ant-table-fixed-right .ant-table-body-outer .ant-table-fixed { + border-radius: 0; +} +.ant-table-fixed-left { + box-shadow: 6px 0 6px -4px rgba(0, 0, 0, 0.15); +} +.ant-table-fixed-left, +.ant-table-fixed-left table { + border-radius: 4px 0 0 0; +} +.ant-table-fixed-left .ant-table-thead > tr > th:last-child { + border-top-right-radius: 0; +} +.ant-table-fixed-right { + box-shadow: -6px 0 6px -4px rgba(0, 0, 0, 0.15); +} +.ant-table-fixed-right, +.ant-table-fixed-right table { + border-radius: 0 4px 0 0; +} +.ant-table-fixed-right .ant-table-expanded-row { + color: transparent; +} +.ant-table-fixed-right .ant-table-thead > tr > th:first-child { + border-top-left-radius: 0; +} +.ant-table.ant-table-scroll-position-left .ant-table-fixed-left { + box-shadow: none; +} +.ant-table.ant-table-scroll-position-right .ant-table-fixed-right { + box-shadow: none; +} +.ant-table-small { + border: 1px solid #e8e8e8; + border-radius: 4px; +} +.ant-table-small > .ant-table-title { + border-bottom: 1px solid #e8e8e8; +} +.ant-table-small > .ant-table-content > .ant-table-header > table, +.ant-table-small > .ant-table-content > .ant-table-body > table, +.ant-table-small > .ant-table-content > .ant-table-scroll > .ant-table-header > table, +.ant-table-small > .ant-table-content > .ant-table-scroll > .ant-table-body > table, +.ant-table-small > .ant-table-content > .ant-table-fixed-left > .ant-table-header > table, +.ant-table-small > .ant-table-content > .ant-table-fixed-right > .ant-table-header > table, +.ant-table-small > .ant-table-content > .ant-table-fixed-left > .ant-table-body-outer > .ant-table-body-inner > table, +.ant-table-small > .ant-table-content > .ant-table-fixed-right > .ant-table-body-outer > .ant-table-body-inner > table { + border: 0; +} +.ant-table-small > .ant-table-content > .ant-table-header > table > .ant-table-thead > tr > th, +.ant-table-small > .ant-table-content > .ant-table-body > table > .ant-table-thead > tr > th, +.ant-table-small > .ant-table-content > .ant-table-scroll > .ant-table-header > table > .ant-table-thead > tr > th, +.ant-table-small > .ant-table-content > .ant-table-scroll > .ant-table-body > table > .ant-table-thead > tr > th, +.ant-table-small > .ant-table-content > .ant-table-fixed-left > .ant-table-header > table > .ant-table-thead > tr > th, +.ant-table-small > .ant-table-content > .ant-table-fixed-right > .ant-table-header > table > .ant-table-thead > tr > th, +.ant-table-small > .ant-table-content > .ant-table-fixed-left > .ant-table-body-outer > .ant-table-body-inner > table > .ant-table-thead > tr > th, +.ant-table-small > .ant-table-content > .ant-table-fixed-right > .ant-table-body-outer > .ant-table-body-inner > table > .ant-table-thead > tr > th { + background: #fff; + border-bottom: 1px solid #e8e8e8; +} +.ant-table-small > .ant-table-content .ant-table-header { + background: #fff; +} +.ant-table-small > .ant-table-content .ant-table-placeholder, +.ant-table-small > .ant-table-content .ant-table-row:last-child td { + border-bottom: 0; +} +.ant-table-small.ant-table-bordered { + border-right: 0; +} +.ant-table-small.ant-table-bordered .ant-table-title { + border: 0; + border-bottom: 1px solid #e8e8e8; + border-right: 1px solid #e8e8e8; +} +.ant-table-small.ant-table-bordered .ant-table-content { + border-right: 1px solid #e8e8e8; +} +.ant-table-small.ant-table-bordered .ant-table-footer { + border: 0; + border-top: 1px solid #e8e8e8; + border-right: 1px solid #e8e8e8; +} +.ant-table-small.ant-table-bordered .ant-table-placeholder { + border-left: 0; + border-bottom: 0; +} +.ant-table-small.ant-table-bordered .ant-table-thead > tr > th:last-child, +.ant-table-small.ant-table-bordered .ant-table-tbody > tr > td:last-child { + border-right: none; +} +.ant-table-small.ant-table-bordered .ant-table-fixed-left .ant-table-thead > tr > th:last-child, +.ant-table-small.ant-table-bordered .ant-table-fixed-left .ant-table-tbody > tr > td:last-child { + border-right: 1px solid #e8e8e8; +} +.ant-table-small.ant-table-bordered .ant-table-fixed-right { + border-right: 1px solid #e8e8e8; +} +.ant-tabs.ant-tabs-card > .ant-tabs-bar .ant-tabs-tab { + border: 1px solid #e8e8e8; + border-bottom: 0; + border-radius: 4px 4px 0 0; + background: #fafafa; +} +.ant-tabs.ant-tabs-card > .ant-tabs-bar .ant-tabs-tab-active { + background: #fff; + border-color: #e8e8e8; + color: @primary-color; +} +.ant-tabs.ant-tabs-card > .ant-tabs-bar .ant-tabs-tab .ant-tabs-close-x { + color: rgba(0, 0, 0, 0.45); +} +.ant-tabs.ant-tabs-card > .ant-tabs-bar .ant-tabs-tab .ant-tabs-close-x:hover { + color: rgba(0, 0, 0, 0.85); +} +.ant-tabs-extra-content .ant-tabs-new-tab { + border-radius: 2px; + border: 1px solid #e8e8e8; + color: rgba(0, 0, 0, 0.65); +} +.ant-tabs-extra-content .ant-tabs-new-tab:hover { + color: @primary-color; + border-color: @primary-color; +} +.ant-tabs-vertical.ant-tabs-card > .ant-tabs-bar .ant-tabs-tab { + border-bottom: 1px solid #e8e8e8; +} +.ant-tabs-vertical.ant-tabs-card.ant-tabs-left > .ant-tabs-bar .ant-tabs-tab { + border-right: 0; + border-radius: 4px 0 0 4px; +} +.ant-tabs-vertical.ant-tabs-card.ant-tabs-right > .ant-tabs-bar .ant-tabs-tab { + border-left: 0; + border-radius: 0 4px 4px 0; +} +.ant-tabs.ant-tabs-card.ant-tabs-bottom > .ant-tabs-bar .ant-tabs-tab { + border-bottom: 1px solid #e8e8e8; + border-top: 0; + border-radius: 0 0 4px 4px; +} +.ant-tabs.ant-tabs-card.ant-tabs-bottom > .ant-tabs-bar .ant-tabs-tab-active { + color: @primary-color; +} +.ant-tabs { + color: rgba(0, 0, 0, 0.65); +} +.ant-tabs-ink-bar { + background-color: @primary-color; +} +.ant-tabs-bar { + border-bottom: 1px solid #e8e8e8; +} +.ant-tabs-bottom .ant-tabs-bar { + border-bottom: none; + border-top: 1px solid #e8e8e8; +} +.ant-tabs-tab-prev, +.ant-tabs-tab-next { + border: 0; + background-color: transparent; + color: rgba(0, 0, 0, 0.45); +} +.ant-tabs-tab-prev:hover, +.ant-tabs-tab-next:hover { + color: rgba(0, 0, 0, 0.65); +} +.ant-tabs-tab-btn-disabled, +.ant-tabs-tab-btn-disabled:hover { + color: rgba(0, 0, 0, 0.25); +} +.ant-tabs-nav .ant-tabs-tab-disabled { + color: rgba(0, 0, 0, 0.25); +} +.ant-tabs-nav .ant-tabs-tab:hover { + color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-tabs-nav .ant-tabs-tab:active { + color: color(~`colorPalette("@{primary-color}", 7)`); +} +.ant-tabs-nav .ant-tabs-tab-active { + color: @primary-color; +} +.ant-tabs-vertical > .ant-tabs-bar { + border-bottom: 0; +} +.ant-tabs-vertical.ant-tabs-left > .ant-tabs-bar { + border-right: 1px solid #e8e8e8; +} +.ant-tabs-vertical.ant-tabs-left > .ant-tabs-content { + border-left: 1px solid #e8e8e8; +} +.ant-tabs-vertical.ant-tabs-right > .ant-tabs-bar { + border-left: 1px solid #e8e8e8; +} +.ant-tabs-vertical.ant-tabs-right > .ant-tabs-content { + border-right: 1px solid #e8e8e8; +} +.ant-tag { + color: rgba(0, 0, 0, 0.65); + border-radius: 4px; + border: 1px solid #d9d9d9; + background: #fafafa; +} +.ant-tag, +.ant-tag a, +.ant-tag a:hover { + color: rgba(0, 0, 0, 0.65); +} +.ant-tag .anticon-close { + color: rgba(0, 0, 0, 0.45); +} +.ant-tag .anticon-close:hover { + color: rgba(0, 0, 0, 0.85); +} +.ant-tag-has-color { + border-color: transparent; +} +.ant-tag-has-color, +.ant-tag-has-color a, +.ant-tag-has-color a:hover, +.ant-tag-has-color .anticon-close, +.ant-tag-has-color .anticon-close:hover { + color: #fff; +} +.ant-tag-checkable { + background-color: transparent; + border-color: transparent; +} +.ant-tag-checkable:not(.ant-tag-checkable-checked):hover { + color: @primary-color; +} +.ant-tag-checkable:active, +.ant-tag-checkable-checked { + color: #fff; +} +.ant-tag-checkable-checked { + background-color: @primary-color; +} +.ant-tag-checkable:active { + background-color: color(~`colorPalette("@{primary-color}", 7)`); +} +.ant-tag-pink { + color: #eb2f96; + background: #fff0f6; + border-color: #ffadd2; +} +.ant-tag-pink-inverse { + background: #eb2f96; + border-color: #eb2f96; + color: #fff; +} +.ant-tag-magenta { + color: #eb2f96; + background: #fff0f6; + border-color: #ffadd2; +} +.ant-tag-magenta-inverse { + background: #eb2f96; + border-color: #eb2f96; + color: #fff; +} +.ant-tag-red { + color: #f5222d; + background: #fff1f0; + border-color: #ffa39e; +} +.ant-tag-red-inverse { + background: #f5222d; + border-color: #f5222d; + color: #fff; +} +.ant-tag-volcano { + color: #fa541c; + background: #fff2e8; + border-color: #ffbb96; +} +.ant-tag-volcano-inverse { + background: #fa541c; + border-color: #fa541c; + color: #fff; +} +.ant-tag-orange { + color: #fa8c16; + background: #fff7e6; + border-color: #ffd591; +} +.ant-tag-orange-inverse { + background: #fa8c16; + border-color: #fa8c16; + color: #fff; +} +.ant-tag-yellow { + color: #fadb14; + background: #feffe6; + border-color: #fffb8f; +} +.ant-tag-yellow-inverse { + background: #fadb14; + border-color: #fadb14; + color: #fff; +} +.ant-tag-gold { + color: #faad14; + background: #fffbe6; + border-color: #ffe58f; +} +.ant-tag-gold-inverse { + background: #faad14; + border-color: #faad14; + color: #fff; +} +.ant-tag-cyan { + color: #13c2c2; + background: #e6fffb; + border-color: #87e8de; +} +.ant-tag-cyan-inverse { + background: #13c2c2; + border-color: #13c2c2; + color: #fff; +} +.ant-tag-lime { + color: #a0d911; + background: #fcffe6; + border-color: #eaff8f; +} +.ant-tag-lime-inverse { + background: #a0d911; + border-color: #a0d911; + color: #fff; +} +.ant-tag-green { + color: #52c41a; + background: #f6ffed; + border-color: #b7eb8f; +} +.ant-tag-green-inverse { + background: #52c41a; + border-color: #52c41a; + color: #fff; +} +.ant-tag-blue { + color: @primary-color; + background: color(~`colorPalette("@{primary-color}", 1)`); + border-color: color(~`colorPalette("@{primary-color}", 3)`); +} +.ant-tag-blue-inverse { + background: @primary-color; + border-color: @primary-color; + color: #fff; +} +.ant-tag-geekblue { + color: #2f54eb; + background: #f0f5ff; + border-color: #adc6ff; +} +.ant-tag-geekblue-inverse { + background: #2f54eb; + border-color: #2f54eb; + color: #fff; +} +.ant-tag-purple { + color: #722ed1; + background: #f9f0ff; + border-color: #d3adf7; +} +.ant-tag-purple-inverse { + background: #722ed1; + border-color: #722ed1; + color: #fff; +} +.ant-time-picker-panel { + color: rgba(0, 0, 0, 0.65); +} +.ant-time-picker-panel-inner { + background-color: #fff; + border-radius: 4px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); + background-clip: padding-box; +} +.ant-time-picker-panel-input { + border: 0; +} +.ant-time-picker-panel-input::-moz-placeholder { + color: #bfbfbf; +} +.ant-time-picker-panel-input:-ms-input-placeholder { + color: #bfbfbf; +} +.ant-time-picker-panel-input::-webkit-input-placeholder { + color: #bfbfbf; +} +.ant-time-picker-panel-input-wrap { + border-bottom: 1px solid #e8e8e8; +} +.ant-time-picker-panel-input-invalid { + border-color: red; +} +.ant-time-picker-panel-clear-btn-icon svg { + color: rgba(0, 0, 0, 0.25); +} +.ant-time-picker-panel-clear-btn-icon svg:hover { + color: rgba(0, 0, 0, 0.45); +} +.ant-time-picker-panel-select { + border-left: 1px solid #e8e8e8; +} +.ant-time-picker-panel-select:first-child { + border-left: 0; +} +.ant-time-picker-panel-select:last-child { + border-right: 0; +} +.ant-time-picker-panel-select li:hover { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +li.ant-time-picker-panel-select-option-selected { + background: #f5f5f5; +} +li.ant-time-picker-panel-select-option-selected:hover { + background: #f5f5f5; +} +li.ant-time-picker-panel-select-option-disabled { + color: rgba(0, 0, 0, 0.25); +} +li.ant-time-picker-panel-select-option-disabled:hover { + background: transparent; +} +.ant-time-picker-panel-addon { + border-top: 1px solid #e8e8e8; +} +.ant-time-picker { + color: rgba(0, 0, 0, 0.65); +} +.ant-time-picker-input { + color: rgba(0, 0, 0, 0.65); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; +} +.ant-time-picker-input::-moz-placeholder { + color: #bfbfbf; +} +.ant-time-picker-input:-ms-input-placeholder { + color: #bfbfbf; +} +.ant-time-picker-input::-webkit-input-placeholder { + color: #bfbfbf; +} +.ant-time-picker-input:hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + border-right-width: 1px !important; +} +.ant-time-picker-input:focus { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-time-picker-input-disabled { + background-color: #f5f5f5; + color: rgba(0, 0, 0, 0.25); +} +.ant-time-picker-input-disabled:hover { + border-color: #e6d8d8; + border-right-width: 1px !important; +} +.ant-time-picker-input[disabled] { + background-color: #f5f5f5; + color: rgba(0, 0, 0, 0.25); +} +.ant-time-picker-input[disabled]:hover { + border-color: #e6d8d8; + border-right-width: 1px !important; +} +.ant-time-picker-icon { + color: rgba(0, 0, 0, 0.25); +} +.ant-time-picker-icon .ant-time-picker-clock-icon { + color: rgba(0, 0, 0, 0.25); +} +.ant-timeline { + color: rgba(0, 0, 0, 0.65); +} +.ant-timeline-item-tail { + border-left: 2px solid #e8e8e8; +} +.ant-timeline-item-head { + background-color: #fff; + border-radius: 100px; + border: 2px solid transparent; +} +.ant-timeline-item-head-blue { + border-color: @primary-color; + color: @primary-color; +} +.ant-timeline-item-head-red { + border-color: #f5222d; + color: #f5222d; +} +.ant-timeline-item-head-green { + border-color: #52c41a; + color: #52c41a; +} +.ant-timeline-item-head-custom { + border: 0; + border-radius: 0; +} +.ant-timeline.ant-timeline-pending .ant-timeline-item-last .ant-timeline-item-tail { + border-left: 2px dotted #e8e8e8; +} +.ant-timeline.ant-timeline-reverse .ant-timeline-item-pending .ant-timeline-item-tail { + border-left: 2px dotted #e8e8e8; +} +.ant-tooltip { + color: rgba(0, 0, 0, 0.65); +} +.ant-tooltip-inner { + color: #fff; + background-color: rgba(0, 0, 0, 0.75); + border-radius: 4px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); +} +.ant-tooltip-arrow { + border-color: transparent; + border-style: solid; +} +.ant-tooltip-placement-top .ant-tooltip-arrow, +.ant-tooltip-placement-topLeft .ant-tooltip-arrow, +.ant-tooltip-placement-topRight .ant-tooltip-arrow { + border-width: 5px 5px 0; + border-top-color: rgba(0, 0, 0, 0.75); +} +.ant-tooltip-placement-right .ant-tooltip-arrow, +.ant-tooltip-placement-rightTop .ant-tooltip-arrow, +.ant-tooltip-placement-rightBottom .ant-tooltip-arrow { + border-width: 5px 5px 5px 0; + border-right-color: rgba(0, 0, 0, 0.75); +} +.ant-tooltip-placement-left .ant-tooltip-arrow, +.ant-tooltip-placement-leftTop .ant-tooltip-arrow, +.ant-tooltip-placement-leftBottom .ant-tooltip-arrow { + border-width: 5px 0 5px 5px; + border-left-color: rgba(0, 0, 0, 0.75); +} +.ant-tooltip-placement-bottom .ant-tooltip-arrow, +.ant-tooltip-placement-bottomLeft .ant-tooltip-arrow, +.ant-tooltip-placement-bottomRight .ant-tooltip-arrow { + border-width: 0 5px 5px; + border-bottom-color: rgba(0, 0, 0, 0.75); +} +.ant-transfer { + color: rgba(0, 0, 0, 0.65); +} +.ant-transfer-disabled .ant-transfer-list { + background: #f5f5f5; +} +.ant-transfer-list { + border: 1px solid #d9d9d9; + border-radius: 4px; +} +.ant-transfer-list-search-action { + color: rgba(0, 0, 0, 0.25); +} +.ant-transfer-list-search-action .anticon { + color: rgba(0, 0, 0, 0.25); +} +.ant-transfer-list-search-action .anticon:hover { + color: rgba(0, 0, 0, 0.45); +} +.ant-transfer-list-header { + border-radius: 4px 4px 0 0; + background: #fff; + color: rgba(0, 0, 0, 0.65); + border-bottom: 1px solid #e8e8e8; +} +.ant-transfer-list-content-item:not(.ant-transfer-list-content-item-disabled):hover { + background-color: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-transfer-list-content-item-disabled { + color: rgba(0, 0, 0, 0.25); +} +.ant-transfer-list-body-not-found { + color: rgba(0, 0, 0, 0.25); +} +.ant-transfer-list-footer { + border-top: 1px solid #e8e8e8; + border-radius: 0 0 4px 4px; +} +.ant-select-tree-checkbox { + color: rgba(0, 0, 0, 0.65); +} +.ant-select-tree-checkbox-wrapper:hover .ant-select-tree-checkbox-inner, +.ant-select-tree-checkbox:hover .ant-select-tree-checkbox-inner, +.ant-select-tree-checkbox-input:focus + .ant-select-tree-checkbox-inner { + border-color: @primary-color; +} +.ant-select-tree-checkbox-checked:after { + border-radius: 2px; + border: 1px solid @primary-color; +} +.ant-select-tree-checkbox-inner { + border: 1px solid #d9d9d9; + border-radius: 2px; + background-color: #fff; +} +.ant-select-tree-checkbox-inner:after { + border: 2px solid #fff; + border-top: 0; + border-left: 0; +} +.ant-select-tree-checkbox-indeterminate .ant-select-tree-checkbox-inner:after { + border: 0; + background-color: @primary-color; +} +.ant-select-tree-checkbox-indeterminate.ant-select-tree-checkbox-disabled .ant-select-tree-checkbox-inner:after { + border-color: rgba(0, 0, 0, 0.25); +} +.ant-select-tree-checkbox-checked .ant-select-tree-checkbox-inner:after { + border: 2px solid #fff; + border-top: 0; + border-left: 0; +} +.ant-select-tree-checkbox-checked .ant-select-tree-checkbox-inner { + background-color: @primary-color; + border-color: @primary-color; +} +.ant-select-tree-checkbox-disabled.ant-select-tree-checkbox-checked .ant-select-tree-checkbox-inner:after { + border-color: rgba(0, 0, 0, 0.25); +} +.ant-select-tree-checkbox-disabled .ant-select-tree-checkbox-inner { + border-color: #d9d9d9 !important; + background-color: #f5f5f5; +} +.ant-select-tree-checkbox-disabled .ant-select-tree-checkbox-inner:after { + border-color: #f5f5f5; +} +.ant-select-tree-checkbox-disabled + span { + color: rgba(0, 0, 0, 0.25); +} +.ant-select-tree-checkbox-wrapper { + color: rgba(0, 0, 0, 0.65); +} +.ant-select-tree-checkbox-group { + color: rgba(0, 0, 0, 0.65); +} +.ant-select-tree { + color: rgba(0, 0, 0, 0.65); +} +.ant-select-tree li .ant-select-tree-node-content-wrapper { + border-radius: 2px; + color: rgba(0, 0, 0, 0.65); +} +.ant-select-tree li .ant-select-tree-node-content-wrapper:hover { + background-color: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-select-tree li .ant-select-tree-node-content-wrapper.ant-select-tree-node-selected { + background-color: color(~`colorPalette("@{primary-color}", 2)`); +} +.ant-select-tree li span.ant-select-tree-switcher, +.ant-select-tree li span.ant-select-tree-iconEle { + border: 0 none; +} +.ant-select-tree li span.ant-select-icon_loading .ant-select-switcher-loading-icon { + color: @primary-color; +} +.ant-select-tree li span.ant-select-tree-switcher.ant-select-tree-switcher_open .ant-select-switcher-loading-icon, +.ant-select-tree li span.ant-select-tree-switcher.ant-select-tree-switcher_close .ant-select-switcher-loading-icon { + color: @primary-color; +} +li.ant-select-tree-treenode-disabled > span:not(.ant-select-tree-switcher), +li.ant-select-tree-treenode-disabled > .ant-select-tree-node-content-wrapper, +li.ant-select-tree-treenode-disabled > .ant-select-tree-node-content-wrapper span { + color: rgba(0, 0, 0, 0.25); +} +li.ant-select-tree-treenode-disabled > .ant-select-tree-node-content-wrapper:hover { + background: transparent; +} +.ant-select-tree-dropdown { + color: rgba(0, 0, 0, 0.65); +} +.ant-select-tree-dropdown .ant-select-dropdown-search .ant-select-search__field { + border: 1px solid #d9d9d9; + border-radius: 4px; +} +.ant-select-tree-dropdown .ant-select-not-found { + color: rgba(0, 0, 0, 0.25); +} +.ant-tree.ant-tree-directory > li span.ant-tree-node-content-wrapper, +.ant-tree.ant-tree-directory .ant-tree-child-tree > li span.ant-tree-node-content-wrapper { + border-radius: 0; +} +.ant-tree.ant-tree-directory > li span.ant-tree-node-content-wrapper:hover, +.ant-tree.ant-tree-directory .ant-tree-child-tree > li span.ant-tree-node-content-wrapper:hover { + background: transparent; +} +.ant-tree.ant-tree-directory > li span.ant-tree-node-content-wrapper:hover:before, +.ant-tree.ant-tree-directory .ant-tree-child-tree > li span.ant-tree-node-content-wrapper:hover:before { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-tree.ant-tree-directory > li span.ant-tree-node-content-wrapper.ant-tree-node-selected, +.ant-tree.ant-tree-directory .ant-tree-child-tree > li span.ant-tree-node-content-wrapper.ant-tree-node-selected { + color: #fff; + background: transparent; +} +.ant-tree.ant-tree-directory > li.ant-tree-treenode-selected > span.ant-tree-switcher, +.ant-tree.ant-tree-directory .ant-tree-child-tree > li.ant-tree-treenode-selected > span.ant-tree-switcher { + color: #fff; +} +.ant-tree.ant-tree-directory > li.ant-tree-treenode-selected > span.ant-tree-checkbox .ant-tree-checkbox-inner, +.ant-tree.ant-tree-directory .ant-tree-child-tree > li.ant-tree-treenode-selected > span.ant-tree-checkbox .ant-tree-checkbox-inner { + border-color: @primary-color; +} +.ant-tree.ant-tree-directory > li.ant-tree-treenode-selected > span.ant-tree-checkbox.ant-tree-checkbox-checked:after, +.ant-tree.ant-tree-directory .ant-tree-child-tree > li.ant-tree-treenode-selected > span.ant-tree-checkbox.ant-tree-checkbox-checked:after { + border-color: #fff; +} +.ant-tree.ant-tree-directory > li.ant-tree-treenode-selected > span.ant-tree-checkbox.ant-tree-checkbox-checked .ant-tree-checkbox-inner, +.ant-tree.ant-tree-directory .ant-tree-child-tree > li.ant-tree-treenode-selected > span.ant-tree-checkbox.ant-tree-checkbox-checked .ant-tree-checkbox-inner { + background: #fff; +} +.ant-tree.ant-tree-directory > li.ant-tree-treenode-selected > span.ant-tree-checkbox.ant-tree-checkbox-checked .ant-tree-checkbox-inner:after, +.ant-tree.ant-tree-directory .ant-tree-child-tree > li.ant-tree-treenode-selected > span.ant-tree-checkbox.ant-tree-checkbox-checked .ant-tree-checkbox-inner:after { + border-color: @primary-color; +} +.ant-tree.ant-tree-directory > li.ant-tree-treenode-selected > span.ant-tree-node-content-wrapper:before, +.ant-tree.ant-tree-directory .ant-tree-child-tree > li.ant-tree-treenode-selected > span.ant-tree-node-content-wrapper:before { + background: @primary-color; +} +.ant-tree-checkbox { + color: rgba(0, 0, 0, 0.65); +} +.ant-tree-checkbox-wrapper:hover .ant-tree-checkbox-inner, +.ant-tree-checkbox:hover .ant-tree-checkbox-inner, +.ant-tree-checkbox-input:focus + .ant-tree-checkbox-inner { + border-color: @primary-color; +} +.ant-tree-checkbox-checked:after { + border-radius: 2px; + border: 1px solid @primary-color; +} +.ant-tree-checkbox-inner { + border: 1px solid #d9d9d9; + border-radius: 2px; + background-color: #fff; +} +.ant-tree-checkbox-inner:after { + border: 2px solid #fff; + border-top: 0; + border-left: 0; +} +.ant-tree-checkbox-indeterminate .ant-tree-checkbox-inner:after { + border: 0; + background-color: @primary-color; +} +.ant-tree-checkbox-indeterminate.ant-tree-checkbox-disabled .ant-tree-checkbox-inner:after { + border-color: rgba(0, 0, 0, 0.25); +} +.ant-tree-checkbox-checked .ant-tree-checkbox-inner:after { + border: 2px solid #fff; + border-top: 0; + border-left: 0; +} +.ant-tree-checkbox-checked .ant-tree-checkbox-inner { + background-color: @primary-color; + border-color: @primary-color; +} +.ant-tree-checkbox-disabled.ant-tree-checkbox-checked .ant-tree-checkbox-inner:after { + border-color: rgba(0, 0, 0, 0.25); +} +.ant-tree-checkbox-disabled .ant-tree-checkbox-inner { + border-color: #d9d9d9 !important; + background-color: #f5f5f5; +} +.ant-tree-checkbox-disabled .ant-tree-checkbox-inner:after { + border-color: #f5f5f5; +} +.ant-tree-checkbox-disabled + span { + color: rgba(0, 0, 0, 0.25); +} +.ant-tree-checkbox-wrapper { + color: rgba(0, 0, 0, 0.65); +} +.ant-tree-checkbox-group { + color: rgba(0, 0, 0, 0.65); +} +.ant-tree { + color: rgba(0, 0, 0, 0.65); +} +.ant-tree li span[draggable], +.ant-tree li span[draggable="true"] { + border-top: 2px transparent solid; + border-bottom: 2px transparent solid; +} +.ant-tree li.drag-over > span[draggable] { + background-color: @primary-color; + color: white; +} +.ant-tree li.drag-over-gap-top > span[draggable] { + border-top-color: @primary-color; +} +.ant-tree li.drag-over-gap-bottom > span[draggable] { + border-bottom-color: @primary-color; +} +.ant-tree li.filter-node > span { + color: #f5222d !important; +} +.ant-tree li.ant-tree-treenode-loading span.ant-tree-switcher.ant-tree-switcher_open .ant-tree-switcher-loading-icon, +.ant-tree li.ant-tree-treenode-loading span.ant-tree-switcher.ant-tree-switcher_close .ant-tree-switcher-loading-icon { + color: @primary-color; +} +.ant-tree li .ant-tree-node-content-wrapper { + border-radius: 2px; + color: rgba(0, 0, 0, 0.65); +} +.ant-tree li .ant-tree-node-content-wrapper:hover { + background-color: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-tree li .ant-tree-node-content-wrapper.ant-tree-node-selected { + background-color: color(~`colorPalette("@{primary-color}", 2)`); +} +.ant-tree li span.ant-tree-switcher, +.ant-tree li span.ant-tree-iconEle { + border: 0 none; +} +li.ant-tree-treenode-disabled > span:not(.ant-tree-switcher), +li.ant-tree-treenode-disabled > .ant-tree-node-content-wrapper, +li.ant-tree-treenode-disabled > .ant-tree-node-content-wrapper span { + color: rgba(0, 0, 0, 0.25); +} +li.ant-tree-treenode-disabled > .ant-tree-node-content-wrapper:hover { + background: transparent; +} +.ant-tree.ant-tree-show-line li span.ant-tree-switcher { + background: #fff; + color: rgba(0, 0, 0, 0.45); +} +.ant-tree.ant-tree-show-line li:not(:last-child):before { + border-left: 1px solid #d9d9d9; +} +.ant-upload { + color: rgba(0, 0, 0, 0.65); +} +.ant-upload.ant-upload-select-picture-card { + border: 1px dashed #d9d9d9; + border-radius: 4px; + background-color: #fafafa; +} +.ant-upload.ant-upload-select-picture-card:hover { + border-color: @primary-color; +} +.ant-upload.ant-upload-drag { + border: 1px dashed #d9d9d9; + border-radius: 4px; + background: #fafafa; +} +.ant-upload.ant-upload-drag.ant-upload-drag-hover:not(.ant-upload-disabled) { + border: 2px dashed color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-upload.ant-upload-drag:not(.ant-upload-disabled):hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-upload.ant-upload-drag p.ant-upload-drag-icon .anticon { + color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-upload.ant-upload-drag p.ant-upload-text { + color: rgba(0, 0, 0, 0.85); +} +.ant-upload.ant-upload-drag p.ant-upload-hint { + color: rgba(0, 0, 0, 0.45); +} +.ant-upload.ant-upload-drag .anticon-plus { + color: rgba(0, 0, 0, 0.25); +} +.ant-upload.ant-upload-drag .anticon-plus:hover { + color: rgba(0, 0, 0, 0.45); +} +.ant-upload.ant-upload-drag:hover .anticon-plus { + color: rgba(0, 0, 0, 0.45); +} +.ant-upload-list { + color: rgba(0, 0, 0, 0.65); +} +.ant-upload-list-item-info .anticon-loading, +.ant-upload-list-item-info .anticon-paper-clip { + color: rgba(0, 0, 0, 0.45); +} +.ant-upload-list-item .anticon-close { + color: rgba(0, 0, 0, 0.45); +} +.ant-upload-list-item .anticon-close:hover { + color: rgba(0, 0, 0, 0.65); +} +.ant-upload-list-item:hover .ant-upload-list-item-info { + background-color: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-upload-list-item-error, +.ant-upload-list-item-error .anticon-paper-clip, +.ant-upload-list-item-error .ant-upload-list-item-name { + color: #f5222d; +} +.ant-upload-list-item-error .anticon-close { + color: #f5222d !important; +} +.ant-upload-list-picture .ant-upload-list-item, +.ant-upload-list-picture-card .ant-upload-list-item { + border-radius: 4px; + border: 1px solid #d9d9d9; +} +.ant-upload-list-picture .ant-upload-list-item:hover, +.ant-upload-list-picture-card .ant-upload-list-item:hover { + background: transparent; +} +.ant-upload-list-picture .ant-upload-list-item-error, +.ant-upload-list-picture-card .ant-upload-list-item-error { + border-color: #f5222d; +} +.ant-upload-list-picture .ant-upload-list-item:hover .ant-upload-list-item-info, +.ant-upload-list-picture-card .ant-upload-list-item:hover .ant-upload-list-item-info { + background: transparent; +} +.ant-upload-list-picture .ant-upload-list-item-uploading, +.ant-upload-list-picture-card .ant-upload-list-item-uploading { + border-style: dashed; +} +.ant-upload-list-picture .ant-upload-list-item-icon, +.ant-upload-list-picture-card .ant-upload-list-item-icon { + color: rgba(0, 0, 0, 0.25); +} +.ant-upload-list-picture .ant-upload-list-item-thumbnail.anticon:before, +.ant-upload-list-picture-card .ant-upload-list-item-thumbnail.anticon:before { + color: rgba(0, 0, 0, 0.45); +} +.ant-upload-list-picture-card .ant-upload-list-item-info:before { + background-color: rgba(0, 0, 0, 0.5); +} +.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-eye-o, +.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-delete { + color: rgba(255, 255, 255, 0.85); +} +.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-eye-o:hover, +.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-delete:hover { + color: #fff; +} +.ant-upload-list-picture-card .ant-upload-list-item-uploading.ant-upload-list-item { + background-color: #fafafa; +} +.ant-upload-list-picture-card .ant-upload-list-item-uploading-text { + color: rgba(0, 0, 0, 0.45); +} +.ant-upload-list .ant-upload-success-icon { + color: #52c41a; +} + +.drawer .drawer-content { + background: #001529; +} + +.ant-list-item-meta .taobao { + color: #ff4000; + border-radius: 4px; +} +.ant-list-item-meta .dingding { + background-color: #2eabff; + color: #fff; + border-radius: 4px; +} +.ant-list-item-meta .alipay { + color: #2eabff; + border-radius: 4px; +} +font.strong { + color: #52c41a; +} +font.medium { + color: #faad14; +} +font.weak { + color: #f5222d; +} diff --git a/ant-design-jeecg-vue/public/index.html b/ant-design-jeecg-vue/public/index.html new file mode 100644 index 00000000..05d0f5a0 --- /dev/null +++ b/ant-design-jeecg-vue/public/index.html @@ -0,0 +1,238 @@ + + + + + + + + Jeecg-Boot 快速开发平台(Ant Design Vue) + + + + + + + +
    +
    +
    +
    +
    +
    正在加载 Jeecg-Boot 快速开发平台(Ant Design Vue),请耐心等待 + +
    +
    +
    + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/public/logo.png b/ant-design-jeecg-vue/public/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e887375c355c8045315ca9f39de93ec21d5e71d9 GIT binary patch literal 20228 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"[object Function]"!=Object.prototype.toString.call(e))throw new TypeError(e+" is not a function");for(t&&(n=t),r=new Array(a),o=0;o>>0;if(0===r)return!1;for(var o=0|t,i=Math.max(o>=0?o:r-Math.abs(o),0);i>>0;if("function"!=typeof e)throw new TypeError("predicate must be a function");for(var r=arguments[1],o=0;o-1||r.indexOf("https://")>-1;return r.indexOf("?")<0&&(i="?"+i.slice(1)),a?""+r+i:""+e+t+r+i},o=function(e){var t=document.getElementsByTagName("head")[0],n=document.createElement("script");return n.charset="UTF-8",n.src=e,t.appendChild(n),{remove:function(){t.removeChild(n)}}},i=function(e,t){return t=t||{},new Promise(function(n){var i="VaptchaJsonp"+(new Date).valueOf();window[i]&&(i+="1"),a(t,{callback:i}),e=r(e,t);var c=o(e),u=setTimeout(function(){clearTimeout(u),window[i]=null,c.remove(),n({code:"0703",msg:"Time out,Refresh Again!"})},1e4);window[i]=function(){clearTimeout(u),n.apply(this,arguments),c.remove(),window[i]=null}})};return i.setConfig=function(n){e=n.protocol||e,t=n.api_server||t},i}(),g={getConfig:function(e){return y("/config",{id:e.vid,type:e.type,scene:e.scene||""})},refresh:function(e){return y("/refresh",e)},click:function(e){return y("/click",e)},get:function(e){return y("/get",e)},verify:function(e){return y("/verify",e)},userbehavior:function(e){return y("/userbehavior",e)}},w={"0201":"id empty","0202":"id error","0208":"scene error","0209":"request used up","0906":"params error","0702":"domain not match"},b=function(){var o=!1,c=function(e){var t=new v(e);return t.add("outage","required","please configure outage"),t.validate(),a(e,{js_path:"vaptcha-sdk-downtime.2.0.2.js",api_server:window.location.host,protocol:window.location.protocol+"//",mode:"DownTime"}),y.setConfig(e),y(e.outage,{action:"get"}).then(function(t){return t.code!==m.Success?(s(w[t.msg]||t.msg),Promise.reject(t.code)):(a(e,t),Promise.resolve())})},f=function(e){return l(e)?c(e):g.getConfig(e).then(function(t){return t.code!==m.Success?(s(w[t.msg]||t.msg),Promise.reject(t.code)):(t.type!==e.type&&(t.mode=t.type,t.type=e.type),a(e,t),l(e)?c(e):Promise.resolve())})},d=function(e,t){return""+e.protocol+e.cdn_servers[0]+"/"+t},p=function(t){var n=document.getElementsByTagName("head")[0],r=document.getElementById("vaptcha_style");return new Promise(function(o){e(r)?(r=document.createElement("link"),a(r,{rel:"stylesheet",type:"text/css",href:t,id:"vaptcha_style",onload:o}),n&&n.appendChild(r)):o()})},b=function C(e){var n=document.getElementsByTagName("head")[0],r=document.querySelector("script[src='"+e+"']");return new Promise(function(o){if(t(r))return void(r.loaded?o():setTimeout(function(){return C(e).then(o)}));r=document.createElement("script");var i=function(){r.readyState&&"loaded"!==r.readyState&&"complete"!==r.readyState||(o(),r.loaded=!0,r.onload=null,r.onreadystatechange=null)};a(r,{async:!0,charset:"utf-8",src:e,onerror:function(){return s("load sdk timeout")},onload:i,onreadystatechange:i}),n.appendChild(r)})},j=function T(e){var t=e.sdkName,n=e.config,r=d(n,n.js_path);return b(r).then(function(){var e=window["_"+h(t)+"Vaptcha"],r=new e(n);return r.vaptcha.resetCaptcha=function(e,t){a(n,t),T({sdkName:e,config:n}).then(function(e){r.destroy(),r.options=e.options,r.vaptcha=e.vaptcha,e.render(),"character"===n.mode&&["click","float","popup"].includes(n.type)&&e.vaptcha.dtClickCb({target:e.vaptcha.btnDiv})})},Promise.resolve(r)})},A=function(e){o=!0,e.https=!0,e.protocol="https://",y.setConfig(e),!["embed","popup","invisible"].includes(e.type)&&(e.type="popup"),i()<9&&b(d(e,e.canvas_path));var t=new v(e);if(t.addValidateRules({elementOrSelector:function(t,o){if("String"===u(e.container)&&(e.container=document.querySelector(e.container)),n(e.container)&&r(e.container[0])&&(e.container=e.container[0]),!r(e.container))return o}}),t.add("vid","required","please configure vid"),"invisible"!==e.type&&t.add("container","elementOrSelector","please configure container with element or selector"),t.validate())return f(e).then(function(){var t="theme_https."+e.css_version+".css",n=d(e,t);return p(n)}).then(function(){var t=e.mode||e.type;return o=!1,j({sdkName:t,config:e})})};return function S(e){return new Promise(function(t){o?setTimeout(function(){S(e).then(t)},1e3):A(e).then(t)})["catch"](function(e){return o=!1,s(e),Promise.reject(e)})}}(),j=function(){var e=function(e){var n=e.getAttribute("data-config"),r={};if(t(n))try{r=JSON.parse(n)}catch(o){s("dom config format error")}return r},n=function(e){var n=e.getAttribute("data-vid");return t(n)?{vid:n}:{}},r=function(e,n){var r=Object.create(f);r.container=e,a(r,n),t(r.vid)&&b(r).then(function(e){e.renderTokenInput(),e.render()})};return function(){for(var t=document.querySelectorAll("[data-vid]"),o=document.querySelectorAll("[data-config]"),i=0;i + +
    + +
    +
    + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/api/api.js b/ant-design-jeecg-vue/src/api/api.js new file mode 100644 index 00000000..19a4b00d --- /dev/null +++ b/ant-design-jeecg-vue/src/api/api.js @@ -0,0 +1,129 @@ +import { getAction,deleteAction,putAction,postAction} from '@/api/manage' + +//根路径 +const doMian = "/jeecg-boot/"; +//图片预览请求地址 +const imgView = "http://127.0.0.1:8080/jeecg-boot/sys/common/view/"; + + +//角色管理 +const addRole = (params)=>postAction("/sys/role/add",params); +const editRole = (params)=>putAction("/sys/role/edit",params); +const getRoleList = (params)=>getAction("/sys/role/list",params); +const deleteRole = (params)=>deleteAction("/sys/role/delete",params); +const deleteRoleList = (params)=>deleteAction("/sys/role/deleteBatch",params); +const checkRoleCode = (params)=>getAction("/sys/role/checkRoleCode",params); +const queryall = (params)=>getAction("/sys/role/queryall",params); + +//用户管理 +const addUser = (params)=>postAction("/sys/user/add",params); +const editUser = (params)=>putAction("/sys/user/edit",params); +const queryUserRole = (params)=>getAction("/sys/user/queryUserRole",params); +const getUserList = (params)=>getAction("/sys/user/list",params); +const deleteUser = (params)=>deleteAction("/sys/user/delete",params); +const deleteUserList = (params)=>deleteAction("/sys/user/deleteBatch",params); +const frozenBatch = (params)=>putAction("/sys/user/frozenBatch",params); +//验证用户账号是否唯一 +const checkUsername = (params)=>getAction("/sys/user/checkOnlyUser",params); +//改变密码 +const changPassword = (params)=>putAction("/sys/user/changPassword",params); + +//权限管理 +const addPermission= (params)=>postAction("/sys/permission/add",params); +const editPermission= (params)=>putAction("/sys/permission/edit",params); +const getPermissionList = (params)=>getAction("/sys/permission/list",params); +const deletePermission = (params)=>deleteAction("/sys/permission/delete",params); +const deletePermissionList = (params)=>deleteAction("/sys/permission/deleteBatch",params); +const queryTreeList = (params)=>getAction("/sys/permission/queryTreeList",params); +const queryListAsync = (params)=>getAction("/sys/permission/queryListAsync",params); +const queryRolePermission = (params)=>getAction("/sys/permission/queryRolePermission",params); +const saveRolePermission = (params)=>postAction("/sys/permission/saveRolePermission",params); +const queryPermissionsByUser = (params)=>getAction("/sys/permission/queryByUser",params); +const loadAllRoleIds = (params)=>getAction("/sys/permission/loadAllRoleIds",params); + +// 部门管理 +const queryDepartTreeList = (params)=>getAction("/sysdepart/sysDepart/queryTreeList",params); +const queryIdTree = (params)=>getAction("/sysdepart/sysDepart/queryIdTree",params); +const queryParentName = (params)=>getAction("/sysdepart/sysDepart/queryParentName",params); +const searchByKeywords = (params)=>getAction("/sysdepart/sysDepart/searchBy",params); + +//日志管理 +const getLogList = (params)=>getAction("/sys/log/list",params); +const deleteLog = (params)=>deleteAction("/sys/log/delete",params); +const deleteLogList = (params)=>deleteAction("/sys/log/deleteBatch",params); + +//数据字典 +const addDict = (params)=>postAction("/sys/dict/add",params); +const editDict = (params)=>putAction("/sys/dict/edit",params); +const getDictList = (params)=>getAction("/sys/dict/list",params); +const treeList = (params)=>getAction("/sys/dict/treeList",params); +const delDict = (params)=>deleteAction("/sys/dict/delete",params); +const getDictItemList = (params)=>getAction("/sys/dictItem/list",params); +const addDictItem = (params)=>postAction("/sys/dictItem/add",params); +const editDictItem = (params)=>putAction("/sys/dictItem/edit",params); +const delDictItem = (params)=>deleteAction("/sys/dictItem/delete",params); +const delDictItemList = (params)=>deleteAction("/sys/dictItem/deleteBatch",params); + +//字典标签专用(通过code获取字典数组) +export const ajaxGetDictItems = (code, params)=>getAction(`/sys/dict/getDictItems/${code}`,params); + +//系统通告 +const doReleaseData = (params)=>getAction("/sys/annountCement/doReleaseData",params); +const doReovkeData = (params)=>getAction("/sys/annountCement/doReovkeData",params); +//获取系统访问量 +const getLoginfo = (params)=>getAction("/sys/loginfo",params); + +export { + imgView, + doMian, + addRole, + editRole, + getRoleList, + deleteRole, + deleteRoleList, + checkRoleCode, + addUser, + editUser, + queryUserRole, + queryall, + getUserList, + deleteUser, + deleteUserList, + frozenBatch, + checkUsername, + changPassword, + getPermissionList, + deletePermission, + deletePermissionList, + addPermission, + editPermission, + queryTreeList, + queryListAsync, + queryRolePermission, + saveRolePermission, + queryPermissionsByUser, + loadAllRoleIds, + queryDepartTreeList, + queryIdTree, + queryParentName, + searchByKeywords, + getLogList, + deleteLog, + deleteLogList, + getDictList, + addDict, + editDict, + delDict, + treeList, + getDictItemList, + addDictItem, + editDictItem, + delDictItem, + delDictItemList, + doReleaseData, + doReovkeData, + getLoginfo +} + + + diff --git a/ant-design-jeecg-vue/src/api/index.js b/ant-design-jeecg-vue/src/api/index.js new file mode 100644 index 00000000..53d49854 --- /dev/null +++ b/ant-design-jeecg-vue/src/api/index.js @@ -0,0 +1,10 @@ +const api = { + Login: '/sys/login', + Logout: '/auth/logout', + ForgePassword: '/auth/forge-password', + Register: '/auth/register', + SendSms: '/account/sms', + // get my info + UserInfo: '/user/info' +} +export default api \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/api/login.js b/ant-design-jeecg-vue/src/api/login.js new file mode 100644 index 00000000..9e72c428 --- /dev/null +++ b/ant-design-jeecg-vue/src/api/login.js @@ -0,0 +1,49 @@ +import api from './index' +import { axios } from '@/utils/request' + +/** + * login func + * parameter: { + * username: '', + * password: '', + * remember_me: true, + * captcha: '12345' + * } + * @param parameter + * @returns {*} + */ +export function login(parameter) { + return axios({ + url: '/sys/login', + method: 'post', + data: parameter + }) +} + +export function getSmsCaptcha(parameter) { + return axios({ + url: api.SendSms, + method: 'post', + data: parameter + }) +} + +export function getInfo() { + return axios({ + url: '/api/user/info', + method: 'get', + headers: { + 'Content-Type': 'application/json;charset=UTF-8' + } + }) +} + +export function logout() { + return axios({ + url: '/api/auth/logout', + method: 'post', + headers: { + 'Content-Type': 'application/json;charset=UTF-8' + } + }) +} \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/api/manage.js b/ant-design-jeecg-vue/src/api/manage.js new file mode 100644 index 00000000..cc505181 --- /dev/null +++ b/ant-design-jeecg-vue/src/api/manage.js @@ -0,0 +1,99 @@ +import { axios } from '@/utils/request' + +const api = { + user: '/api/user', + role: '/api/role', + service: '/api/service', + permission: '/api/permission', + permissionNoPager: '/api/permission/no-pager' +} + +export default api + +//post +export function postAction(url,parameter) { + return axios({ + url: url, + method:'post' , + data: parameter + }) +} + +//post method= {post | put} +export function httpAction(url,parameter,method) { + return axios({ + url: url, + method:method , + data: parameter + }) +} + +//put +export function putAction(url,parameter) { + return axios({ + url: url, + method:'put', + data: parameter + }) +} + +//get +export function getAction(url,parameter) { + return axios({ + url: url, + method: 'get', + params: parameter + }) +} + +//deleteAction +export function deleteAction(url,parameter) { + return axios({ + url: url, + method: 'delete', + params: parameter + }) +} + +export function getUserList(parameter) { + return axios({ + url: api.user, + method: 'get', + params: parameter + }) +} + +export function getRoleList(parameter) { + return axios({ + url: api.role, + method: 'get', + params: parameter + }) +} + +export function getServiceList(parameter) { + return axios({ + url: api.service, + method: 'get', + params: parameter + }) +} + +export function getPermissions(parameter) { + return axios({ + url: api.permissionNoPager, + method: 'get', + params: parameter + }) +} + +// id == 0 add post +// id != 0 update put +export function saveService(parameter) { + return axios({ + url: api.service, + method: parameter.id == 0 ? 'post' : 'put', + data: parameter + }) +} + diff --git a/ant-design-jeecg-vue/src/assets/background.svg b/ant-design-jeecg-vue/src/assets/background.svg new file mode 100644 index 00000000..89c25976 --- /dev/null +++ b/ant-design-jeecg-vue/src/assets/background.svg @@ -0,0 +1,69 @@ + + + + Group 21 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/assets/less/index.less b/ant-design-jeecg-vue/src/assets/less/index.less new file mode 100644 index 00000000..ec5420d3 --- /dev/null +++ b/ant-design-jeecg-vue/src/assets/less/index.less @@ -0,0 +1,21 @@ +.search{ + margin-bottom: 54px; +} +.fold{ + width: calc(100% - 216px); + display: inline-block +} +.operator{ + margin-bottom: 18px; +} +@media screen and (max-width: 900px) { + .fold { + width: 100%; + } +} +.operator button { + margin-right: 5px; +} +i { + cursor: pointer; +} diff --git a/ant-design-jeecg-vue/src/assets/logo.png b/ant-design-jeecg-vue/src/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e887375c355c8045315ca9f39de93ec21d5e71d9 GIT binary patch literal 20228 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 + + + Group 28 Copy 5 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/AvatarList/Item.vue b/ant-design-jeecg-vue/src/components/AvatarList/Item.vue new file mode 100644 index 00000000..f7942950 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/AvatarList/Item.vue @@ -0,0 +1,46 @@ + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/AvatarList/List.vue b/ant-design-jeecg-vue/src/components/AvatarList/List.vue new file mode 100644 index 00000000..fb3412c8 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/AvatarList/List.vue @@ -0,0 +1,100 @@ + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/AvatarList/index.js b/ant-design-jeecg-vue/src/components/AvatarList/index.js new file mode 100644 index 00000000..9621de65 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/AvatarList/index.js @@ -0,0 +1,4 @@ +import AvatarList from './List' +import "./index.less" + +export default AvatarList \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/AvatarList/index.less b/ant-design-jeecg-vue/src/components/AvatarList/index.less new file mode 100644 index 00000000..9ce073fd --- /dev/null +++ b/ant-design-jeecg-vue/src/components/AvatarList/index.less @@ -0,0 +1,60 @@ +@import "../index"; + +@avatar-list-prefix-cls: ~"@{ant-pro-prefix}-avatar-list"; +@avatar-list-item-prefix-cls: ~"@{ant-pro-prefix}-avatar-list-item"; + +.@{avatar-list-prefix-cls} { + display: inline-block; + + ul { + list-style: none; + display: inline-block; + padding: 0; + margin: 0 0 0 8px; + font-size: 0; + } +} + +.@{avatar-list-item-prefix-cls} { + display: inline-block; + font-size: @font-size-base; + margin-left: -8px; + width: @avatar-size-base; + height: @avatar-size-base; + + :global { + .ant-avatar { + border: 1px solid #fff; + cursor: pointer; + } + } + + &.large { + width: @avatar-size-lg; + height: @avatar-size-lg; + } + + &.small { + width: @avatar-size-sm; + height: @avatar-size-sm; + } + + &.mini { + width: 20px; + height: 20px; + + :global { + .ant-avatar { + width: 20px; + height: 20px; + line-height: 20px; + + .ant-avatar-string { + font-size: 12px; + line-height: 18px; + } + } + } + } +} + diff --git a/ant-design-jeecg-vue/src/components/ChartCard.vue b/ant-design-jeecg-vue/src/components/ChartCard.vue new file mode 100644 index 00000000..8acb150d --- /dev/null +++ b/ant-design-jeecg-vue/src/components/ChartCard.vue @@ -0,0 +1,111 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/CountDown/CountDown.vue b/ant-design-jeecg-vue/src/components/CountDown/CountDown.vue new file mode 100644 index 00000000..91cf47e1 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/CountDown/CountDown.vue @@ -0,0 +1,103 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/CountDown/index.js b/ant-design-jeecg-vue/src/components/CountDown/index.js new file mode 100644 index 00000000..3015cc5b --- /dev/null +++ b/ant-design-jeecg-vue/src/components/CountDown/index.js @@ -0,0 +1,3 @@ +import CountDown from './CountDown' + +export default CountDown \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/Ellipsis/Ellipsis.vue b/ant-design-jeecg-vue/src/components/Ellipsis/Ellipsis.vue new file mode 100644 index 00000000..5fb14c2b --- /dev/null +++ b/ant-design-jeecg-vue/src/components/Ellipsis/Ellipsis.vue @@ -0,0 +1,63 @@ + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/Ellipsis/index.js b/ant-design-jeecg-vue/src/components/Ellipsis/index.js new file mode 100644 index 00000000..d257156b --- /dev/null +++ b/ant-design-jeecg-vue/src/components/Ellipsis/index.js @@ -0,0 +1,3 @@ +import Ellipsis from './Ellipsis' + +export default Ellipsis \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/NumberInfo/NumberInfo.vue b/ant-design-jeecg-vue/src/components/NumberInfo/NumberInfo.vue new file mode 100644 index 00000000..81508780 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/NumberInfo/NumberInfo.vue @@ -0,0 +1,54 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/NumberInfo/index.js b/ant-design-jeecg-vue/src/components/NumberInfo/index.js new file mode 100644 index 00000000..a471501a --- /dev/null +++ b/ant-design-jeecg-vue/src/components/NumberInfo/index.js @@ -0,0 +1,3 @@ +import NumberInfo from './NumberInfo' + +export default NumberInfo \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/NumberInfo/index.less b/ant-design-jeecg-vue/src/components/NumberInfo/index.less new file mode 100644 index 00000000..719113da --- /dev/null +++ b/ant-design-jeecg-vue/src/components/NumberInfo/index.less @@ -0,0 +1,55 @@ +@import "../index"; + +@numberInfo-prefix-cls: ~"@{ant-pro-prefix}-number-info"; + +.@{numberInfo-prefix-cls} { + + .ant-pro-number-info-subtitle { + color: @text-color-secondary; + font-size: @font-size-base; + height: 22px; + line-height: 22px; + overflow: hidden; + text-overflow: ellipsis; + word-break: break-all; + white-space: nowrap; + } + + .number-info-value { + margin-top: 4px; + font-size: 0; + overflow: hidden; + text-overflow: ellipsis; + word-break: break-all; + white-space: nowrap; + + & > span { + color: @heading-color; + display: inline-block; + line-height: 32px; + height: 32px; + font-size: 24px; + margin-right: 32px; + } + + .sub-total { + color: @text-color-secondary; + font-size: @font-size-lg; + vertical-align: top; + margin-right: 0; + i { + font-size: 12px; + transform: scale(0.82); + margin-left: 4px; + } + :global { + .anticon-caret-up { + color: @red-6; + } + .anticon-caret-down { + color: @green-6; + } + } + } + } +} \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/Trend/Trend.vue b/ant-design-jeecg-vue/src/components/Trend/Trend.vue new file mode 100644 index 00000000..4cc88538 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/Trend/Trend.vue @@ -0,0 +1,41 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/Trend/index.js b/ant-design-jeecg-vue/src/components/Trend/index.js new file mode 100644 index 00000000..761366d5 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/Trend/index.js @@ -0,0 +1,3 @@ +import Trend from './Trend.vue' + +export default Trend \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/Trend/index.less b/ant-design-jeecg-vue/src/components/Trend/index.less new file mode 100644 index 00000000..8a3d24cf --- /dev/null +++ b/ant-design-jeecg-vue/src/components/Trend/index.less @@ -0,0 +1,42 @@ +@import "../index"; + +@trend-prefix-cls: ~"@{ant-pro-prefix}-trend"; + +.@{trend-prefix-cls} { + display: inline-block; + font-size: @font-size-base; + line-height: 22px; + + .up, + .down { + margin-left: 4px; + position: relative; + top: 1px; + + i { + font-size: 12px; + transform: scale(0.83); + } + } + + .item-text { + display: inline-block; + margin-left: 8px; + color: rgba(0,0,0,.85); + } + + .up { + color: @red-6; + } + .down { + color: @green-6; + top: -1px; + } + + &.reverse-color .up { + color: @green-6; + } + &.reverse-color .down { + color: @red-6; + } +} \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/_util/StringUtil.js b/ant-design-jeecg-vue/src/components/_util/StringUtil.js new file mode 100644 index 00000000..29aed19b --- /dev/null +++ b/ant-design-jeecg-vue/src/components/_util/StringUtil.js @@ -0,0 +1,25 @@ + +export const getStrFullLength = (str = '') => + str.split('').reduce((pre, cur) => { + const charCode = cur.charCodeAt(0) + if (charCode >= 0 && charCode <= 128) { + return pre + 1 + } + return pre + 2 + }, 0) + +export const cutStrByFullLength = (str = '', maxLength) => { + let showLength = 0 + return str.split('').reduce((pre, cur) => { + const charCode = cur.charCodeAt(0) + if (charCode >= 0 && charCode <= 128) { + showLength += 1 + } else { + showLength += 2 + } + if (showLength <= maxLength) { + return pre + cur + } + return pre + }, '') +} \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/_util/util.js b/ant-design-jeecg-vue/src/components/_util/util.js new file mode 100644 index 00000000..98752a94 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/_util/util.js @@ -0,0 +1,12 @@ +/** + * components util + */ + +/** + * 清理空值,对象 + * @param children + * @returns {*[]} + */ +export function filterEmpty (children = []) { + return children.filter(c => c.tag || (c.text && c.text.trim() !== '')) +} \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/chart/Bar.vue b/ant-design-jeecg-vue/src/components/chart/Bar.vue new file mode 100644 index 00000000..0a103c63 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/chart/Bar.vue @@ -0,0 +1,57 @@ + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/chart/Liquid.vue b/ant-design-jeecg-vue/src/components/chart/Liquid.vue new file mode 100644 index 00000000..fdf58ee5 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/chart/Liquid.vue @@ -0,0 +1,67 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/chart/MiniArea.vue b/ant-design-jeecg-vue/src/components/chart/MiniArea.vue new file mode 100644 index 00000000..0f526ee2 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/chart/MiniArea.vue @@ -0,0 +1,67 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/chart/MiniBar.vue b/ant-design-jeecg-vue/src/components/chart/MiniBar.vue new file mode 100644 index 00000000..6fe85824 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/chart/MiniBar.vue @@ -0,0 +1,68 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/chart/MiniProgress.vue b/ant-design-jeecg-vue/src/components/chart/MiniProgress.vue new file mode 100644 index 00000000..c761982d --- /dev/null +++ b/ant-design-jeecg-vue/src/components/chart/MiniProgress.vue @@ -0,0 +1,75 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/chart/Radar.vue b/ant-design-jeecg-vue/src/components/chart/Radar.vue new file mode 100644 index 00000000..08752622 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/chart/Radar.vue @@ -0,0 +1,68 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/chart/RankList.vue b/ant-design-jeecg-vue/src/components/chart/RankList.vue new file mode 100644 index 00000000..d6744ae4 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/chart/RankList.vue @@ -0,0 +1,77 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/chart/TransferBar.vue b/ant-design-jeecg-vue/src/components/chart/TransferBar.vue new file mode 100644 index 00000000..33e178ab --- /dev/null +++ b/ant-design-jeecg-vue/src/components/chart/TransferBar.vue @@ -0,0 +1,64 @@ + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/chart/Trend.vue b/ant-design-jeecg-vue/src/components/chart/Trend.vue new file mode 100644 index 00000000..ca8f591c --- /dev/null +++ b/ant-design-jeecg-vue/src/components/chart/Trend.vue @@ -0,0 +1,82 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/chart/chart.scss b/ant-design-jeecg-vue/src/components/chart/chart.scss new file mode 100644 index 00000000..e04fa095 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/chart/chart.scss @@ -0,0 +1,13 @@ +.antv-chart-mini { + position: relative; + width: 100%; + + .chart-wrapper { + position: absolute; + bottom: -28px; + width: 100%; + +/* margin: 0 -5px; + overflow: hidden;*/ + } +} \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/dict/DictSelectTag.vue b/ant-design-jeecg-vue/src/components/dict/DictSelectTag.vue new file mode 100644 index 00000000..e5012546 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/dict/DictSelectTag.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/dict/DictSelectUtil.js b/ant-design-jeecg-vue/src/components/dict/DictSelectUtil.js new file mode 100644 index 00000000..e7d03389 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/dict/DictSelectUtil.js @@ -0,0 +1,61 @@ +/** + * 字典 util + * author: scott + * date: 20190109 + */ + +import {ajaxGetDictItems} from '@/api/api' +import {getAction} from '@/api/manage' + +/** + * 获取字典数组 + * @param dictCode 字典Code + * @return List + */ +export async function initDictOptions(dictCode) { + if (!dictCode) { + return '字典Code不能为空!'; + } + //获取字典数组 + let res = await ajaxGetDictItems(dictCode); + return res; +} + +/** + * 字典值替换文本通用方法 + * @param dictOptions 字典数组 + * @param text 字典值 + * @return String + */ +export function filterDictText(dictOptions, text) { + let re = ""; + dictOptions.forEach(function (option) { + if (text === option.value) { + re = option.text; + } + }); + return re; +} + +/** + * 翻译字段值对应的文本 + * @param children + * @returns string + */ +export async function ajaxFilterDictText(dictCode, key) { + if (!dictCode) { + return '字典Code不能为空!'; + } + //console.log(`key : ${key}`); + if (!key) { + return ''; + } + //通过请求读取字典文本 + let res = await getAction(`/sys/dict/getDictText/${dictCode}/${key}`); + if (res.success) { + // console.log('restult: '+ res.result); + return res.result; + } else { + return ''; + } +} \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/dict/README.md b/ant-design-jeecg-vue/src/components/dict/README.md new file mode 100644 index 00000000..fca4d571 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/dict/README.md @@ -0,0 +1,36 @@ +DictSelectTag 组件说明 +=== + +例子 +---- + + + + +DictSelectUtil.js 列表字典函数用法说明 +=== + +例子 +---- + +第一步: 引入依赖方法 + import {initDictOptions, filterDictText} from '@/components/dict/DictSelectUtil' + +第二步: 在created()初始化方法执行字典配置方法 + //初始化字典配置 + this.initDictConfig(); +第三步: 实现initDictConfig方法,加载列表所需要的字典(列表上有多个字典项,就执行多次initDictOptions方法) + //sexDictOptions 自行定义 + initDictConfig() { + //初始化字典 - 性别 + initDictOptions('sex').then((res) => { + if (res.success) { + this.sexDictOptions = res.result; + } + }); + }, +第四步:实现字段的customRender方法 + customRender: (text, record, index) => { + //字典值替换通用方法 + return filterDictText(this.sexDictOptions, text); + } \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/dict/UserInfoTag.vue b/ant-design-jeecg-vue/src/components/dict/UserInfoTag.vue new file mode 100644 index 00000000..867e5592 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/dict/UserInfoTag.vue @@ -0,0 +1,22 @@ + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/dict/index.js b/ant-design-jeecg-vue/src/components/dict/index.js new file mode 100644 index 00000000..8bb2a957 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/dict/index.js @@ -0,0 +1,7 @@ +import T from './DictSelectTag.vue' +const DictSelectTag = { + install: function (Vue) { + Vue.component('DictSelectTag',T); + } +} +export default DictSelectTag; \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/index.less b/ant-design-jeecg-vue/src/components/index.less new file mode 100644 index 00000000..d8c97bbd --- /dev/null +++ b/ant-design-jeecg-vue/src/components/index.less @@ -0,0 +1,4 @@ +@import "~ant-design-vue/lib/style/index"; + +// The prefix to use on all css classes from ant-pro. +@ant-pro-prefix : ant-pro; \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/jeecg/JDate.vue b/ant-design-jeecg-vue/src/components/jeecg/JDate.vue new file mode 100644 index 00000000..ed64d161 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/jeecg/JDate.vue @@ -0,0 +1,74 @@ + + diff --git a/ant-design-jeecg-vue/src/components/jeecg/README.md b/ant-design-jeecg-vue/src/components/jeecg/README.md new file mode 100644 index 00000000..0c1e3444 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/jeecg/README.md @@ -0,0 +1,43 @@ +日期组件 +说明:antd-vue日期组件需要用moment中转一下,用起来不是很方便,特二次封装,使用时只需要传字符串即可 +==== + +参数说明 +---- +placeholder:placeholder +readOnly:true/false +value:绑定v-model或是v-decorator后不需要设置 +showTime:是否展示时间true/false +dateFormat:日期格式 默认'YYYY-MM-DD' 若showTime设置为true则需要将其设置成对应的时间格式(如:YYYY-MM-DD HH:mm:ss) +triggerChange:触发组件值改变的事件是否是change,当使用v-decorator时且没有设置decorator的option.trigger为input需要设置该值为true + +使用示例 +---- +1.组件带有v-model的使用方法 + + +2.组件带有v-decorator的使用方法 + a).设置trigger-change属性为true + + b).设置decorator的option.trigger为input + + +3.其他使用 +添加style + +添加placeholder + +添加readOnly + + +备注: +script内需引入jdate + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/layouts/BasicLayout.vue b/ant-design-jeecg-vue/src/components/layouts/BasicLayout.vue new file mode 100644 index 00000000..48b3fc51 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/layouts/BasicLayout.vue @@ -0,0 +1,60 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/layouts/BlankLayout.vue b/ant-design-jeecg-vue/src/components/layouts/BlankLayout.vue new file mode 100644 index 00000000..90c03998 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/layouts/BlankLayout.vue @@ -0,0 +1,16 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/layouts/IframePageView.vue b/ant-design-jeecg-vue/src/components/layouts/IframePageView.vue new file mode 100644 index 00000000..89908f6e --- /dev/null +++ b/ant-design-jeecg-vue/src/components/layouts/IframePageView.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/layouts/PageView.vue b/ant-design-jeecg-vue/src/components/layouts/PageView.vue new file mode 100644 index 00000000..dc3ae085 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/layouts/PageView.vue @@ -0,0 +1,85 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/layouts/RouteView.vue b/ant-design-jeecg-vue/src/components/layouts/RouteView.vue new file mode 100644 index 00000000..6e99e630 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/layouts/RouteView.vue @@ -0,0 +1,17 @@ + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/layouts/TabLayout.vue b/ant-design-jeecg-vue/src/components/layouts/TabLayout.vue new file mode 100644 index 00000000..65c8e865 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/layouts/TabLayout.vue @@ -0,0 +1,213 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/layouts/UserLayout.vue b/ant-design-jeecg-vue/src/components/layouts/UserLayout.vue new file mode 100644 index 00000000..180d5b55 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/layouts/UserLayout.vue @@ -0,0 +1,150 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/layouts/index.js b/ant-design-jeecg-vue/src/components/layouts/index.js new file mode 100644 index 00000000..7cf0f77e --- /dev/null +++ b/ant-design-jeecg-vue/src/components/layouts/index.js @@ -0,0 +1,8 @@ +import UserLayout from '@/components/layouts/UserLayout' +import BlankLayout from '@/components/layouts/BlankLayout' +import BasicLayout from '@/components/layouts/BasicLayout' +import RouteView from '@/components/layouts/RouteView' +import PageView from '@/components/layouts/PageView' +import TabLayout from '@/components/layouts/TabLayout' + +export { UserLayout, BasicLayout, BlankLayout, RouteView, PageView, TabLayout } \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/menu/Contextmenu.vue b/ant-design-jeecg-vue/src/components/menu/Contextmenu.vue new file mode 100644 index 00000000..c3465cb4 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/menu/Contextmenu.vue @@ -0,0 +1,71 @@ + + + + + diff --git a/ant-design-jeecg-vue/src/components/menu/SideMenu.vue b/ant-design-jeecg-vue/src/components/menu/SideMenu.vue new file mode 100644 index 00000000..cd77a841 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/menu/SideMenu.vue @@ -0,0 +1,62 @@ + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/menu/index.js b/ant-design-jeecg-vue/src/components/menu/index.js new file mode 100644 index 00000000..5e3c901e --- /dev/null +++ b/ant-design-jeecg-vue/src/components/menu/index.js @@ -0,0 +1,162 @@ +import Menu from 'ant-design-vue/es/menu' +import Icon from 'ant-design-vue/es/icon' + +const { Item, SubMenu } = Menu + +export default { + name: 'SMenu', + props: { + menu: { + type: Array, + required: true + }, + theme: { + type: String, + required: false, + default: 'dark' + }, + mode: { + type: String, + required: false, + default: 'inline' + }, + collapsed: { + type: Boolean, + required: false, + default: false + } + }, + data () { + return { + openKeys: [], + selectedKeys: [], + cachedOpenKeys: [] + } + }, + computed: { + rootSubmenuKeys: (vm) => { + let keys = [] + vm.menu.forEach(item => keys.push(item.path)) + return keys + } + }, + created () { + this.updateMenu() + }, + watch: { + collapsed (val) { + if (val) { + this.cachedOpenKeys = this.openKeys + this.openKeys = [] + } else { + this.openKeys = this.cachedOpenKeys + } + }, + '$route': function () { + this.updateMenu() + } + }, + methods: { + renderIcon: function (h, icon) { + return icon === 'none' || icon === undefined ? null + : h(Icon, { props: { type: icon !== undefined ? icon : '' } }) + }, + renderMenuItem: function (h, menu, pIndex, index) { + return h(Item, { key: menu.path ? menu.path : 'item_' + pIndex + '_' + index }, + [ + h( + 'router-link', + { attrs: { to: { name: menu.name } } }, + [ + this.renderIcon(h, menu.meta.icon), + h('span', [ menu.meta.title ]) + ] + ) + ] + ) + }, + renderSubMenu: function (h, menu, pIndex, index) { + const this2_ = this; + let subItem = [ h('span', + { slot: 'title' }, + [ + this.renderIcon(h, menu.meta.icon), + h('span', [ menu.meta.title ]) + ] + ) ] + let itemArr = [] + let pIndex_ = pIndex + '_' + index + if (!menu.alwaysShow) { + menu.children.forEach(function (item, i) { + itemArr.push(this2_.renderItem(h, item, pIndex_, i)) + }) + } + return h( + SubMenu, + { key: menu.path ? menu.path : 'submenu_' + pIndex + '_' + index }, + subItem.concat(itemArr) + ) + }, + renderItem: function (h, menu, pIndex, index) { + if (!menu.hidden) { + return menu.children && !menu.alwaysShow ? this.renderSubMenu(h, menu, pIndex, index) : this.renderMenuItem(h, menu, pIndex, index) + } + }, + renderMenu: function (h, menuTree) { + const this2_ = this + let menuArr = [] + menuTree.forEach(function (menu, i) { + if (!menu.hidden) { + menuArr.push(this2_.renderItem(h, menu, '0', i)) + } + }) + return menuArr + }, + onOpenChange (openKeys) { + const latestOpenKey = openKeys.find(key => this.openKeys.indexOf(key) === -1) + if (this.rootSubmenuKeys.indexOf(latestOpenKey) === -1) { + this.openKeys = openKeys + } else { + this.openKeys = latestOpenKey ? [ latestOpenKey ] : [] + } + }, + updateMenu () { + let routes = this.$route.matched.concat() + if (routes.length >= 4 && this.$route.meta.hidden) { + routes.pop() + this.selectedKeys = [ routes[2].path ] + } else { + this.selectedKeys = [ routes.pop().path ] + } + + let openKeys = [] + if (this.mode === 'inline') { + routes.forEach((item) => { + openKeys.push(item.path) + }) + } + + this.collapsed ? this.cachedOpenKeys = openKeys : this.openKeys = openKeys + } + }, + render (h) { + return h( + Menu, + { + props: { + theme: this.$props.theme, + mode: this.$props.mode, + openKeys: this.openKeys, + selectedKeys: this.selectedKeys + }, + on: { + openChange: this.onOpenChange, + select: (obj) => { + this.selectedKeys = obj.selectedKeys + this.$emit('select', obj) + } + } + }, this.renderMenu(h, this.menu) + ) + } +} \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/page/GlobalFooter.vue b/ant-design-jeecg-vue/src/components/page/GlobalFooter.vue new file mode 100644 index 00000000..ba3f1d3e --- /dev/null +++ b/ant-design-jeecg-vue/src/components/page/GlobalFooter.vue @@ -0,0 +1,51 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/page/GlobalHeader.vue b/ant-design-jeecg-vue/src/components/page/GlobalHeader.vue new file mode 100644 index 00000000..39c72e88 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/page/GlobalHeader.vue @@ -0,0 +1,127 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/page/GlobalLayout.vue b/ant-design-jeecg-vue/src/components/page/GlobalLayout.vue new file mode 100644 index 00000000..ddc25705 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/page/GlobalLayout.vue @@ -0,0 +1,596 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/page/PageHeader.vue b/ant-design-jeecg-vue/src/components/page/PageHeader.vue new file mode 100644 index 00000000..596650f1 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/page/PageHeader.vue @@ -0,0 +1,238 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/page/PageLayout.vue b/ant-design-jeecg-vue/src/components/page/PageLayout.vue new file mode 100644 index 00000000..bff916e6 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/page/PageLayout.vue @@ -0,0 +1,127 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/page/SHeaderNotice.vue b/ant-design-jeecg-vue/src/components/page/SHeaderNotice.vue new file mode 100644 index 00000000..622636ad --- /dev/null +++ b/ant-design-jeecg-vue/src/components/page/SHeaderNotice.vue @@ -0,0 +1,58 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/setting/SettingDrawer.vue b/ant-design-jeecg-vue/src/components/setting/SettingDrawer.vue new file mode 100644 index 00000000..4f102994 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/setting/SettingDrawer.vue @@ -0,0 +1,314 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/setting/SettingItem.vue b/ant-design-jeecg-vue/src/components/setting/SettingItem.vue new file mode 100644 index 00000000..8d96dd6a --- /dev/null +++ b/ant-design-jeecg-vue/src/components/setting/SettingItem.vue @@ -0,0 +1,38 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/table/README.md b/ant-design-jeecg-vue/src/components/table/README.md new file mode 100644 index 00000000..ad5f6413 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/table/README.md @@ -0,0 +1,292 @@ +Table 重封装组件说明 +==== + + +封装说明 +---- + +> 基础的使用方式与 API 与 [官方版(Table)](https://vuecomponent.github.io/ant-design-vue/components/table-cn/) 本一致,在其基础上,封装了加载数据的方法。 +> +> 你无需在你是用表格的页面进行分页逻辑处理,仅需向 Table 组件传递绑定 `:data="Promise"` 对象即可 + + + +例子1 +---- +(基础使用) + +```vue + + + + + +``` + + + +例子2 +---- + +(简单的表格,最后一列是各种操作) + +```vue + + + +``` + + + +内置方法 +---- + +通过 `this.$refs.table` 调用 + +`this.$refs.table.refresh()` 刷新列表 (用户新增/修改数据后,重载列表数据) + +> 注意:要调用 `refresh()` 需要给表格组件设定 `ref` 值 + + + +注意事项 +---- + +> 你可能需要为了与后端提供的接口返回结果一致而去修改以下代码: +(需要注意的是,这里的修改是全局性的,意味着整个项目所有使用该 table 组件都需要遵守这个返回结果定义的字段。) + +修改 `@/components/table/index.js` 第 106 行起 + + + +```javascript +result.then(r => { + this.localPagination = Object.assign({}, this.localPagination, { + current: r.pageNo, // 返回结果中的当前分页数 + total: r.totalCount, // 返回结果中的总记录数 + showSizeChanger: this.showSizeChanger, + pageSize: (pagination && pagination.pageSize) || + this.localPagination.pageSize + }); + + !r.totalCount && ['auto', false].includes(this.showPagination) && (this.localPagination = false) + this.localDataSource = r.data; // 返回结果中的数组数据 + this.localLoading = false +}); +``` +返回 JSON 例子: +```json +{ + "message": "", + "result": { + "data": [{ + id: 1, + cover: 'https://gw.alipayobjects.com/zos/rmsportal/WdGqmHpayyMjiEhcKoVE.png', + title: 'Alipay', + description: '那是一种内在的东西, 他们到达不了,也无法触及的', + status: 1, + updatedAt: '2018-07-26 00:00:00' + }, + { + id: 2, + cover: 'https://gw.alipayobjects.com/zos/rmsportal/zOsKZmFRdUtvpqCImOVY.png', + title: 'Angular', + description: '希望是一个好东西,也许是最好的,好东西是不会消亡的', + status: 1, + updatedAt: '2018-07-26 00:00:00' + }, + { + id: 3, + cover: 'https://gw.alipayobjects.com/zos/rmsportal/dURIMkkrRFpPgTuzkwnB.png', + title: 'Ant Design', + description: '城镇中有那么多的酒馆,她却偏偏走进了我的酒馆', + status: 1, + updatedAt: '2018-07-26 00:00:00' + }, + { + id: 4, + cover: 'https://gw.alipayobjects.com/zos/rmsportal/sfjbOqnsXXJgNCjCzDBL.png', + title: 'Ant Design Pro', + description: '那时候我只会想自己想要什么,从不想自己拥有什么', + status: 1, + updatedAt: '2018-07-26 00:00:00' + }, + { + id: 5, + cover: 'https://gw.alipayobjects.com/zos/rmsportal/siCrBXXhmvTQGWPNLBow.png', + title: 'Bootstrap', + description: '凛冬将至', + status: 1, + updatedAt: '2018-07-26 00:00:00' + }, + { + id: 6, + cover: 'https://gw.alipayobjects.com/zos/rmsportal/ComBAopevLwENQdKWiIn.png', + title: 'Vue', + description: '生命就像一盒巧克力,结果往往出人意料', + status: 1, + updatedAt: '2018-07-26 00:00:00' + } + ], + "pageSize": 10, + "pageNo": 0, + "totalPage": 6, + "totalCount": 57 + }, + "status": 200, + "timestamp": 1534955098193 +} +``` + + + +更新时间 +---- + +该文档最后更新于: 2018-10-31 PM 08:15 \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/table/StandardTable.vue b/ant-design-jeecg-vue/src/components/table/StandardTable.vue new file mode 100644 index 00000000..bc6044ac --- /dev/null +++ b/ant-design-jeecg-vue/src/components/table/StandardTable.vue @@ -0,0 +1,252 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/table/index.js b/ant-design-jeecg-vue/src/components/table/index.js new file mode 100644 index 00000000..a2da3b06 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/table/index.js @@ -0,0 +1,265 @@ +import T from "ant-design-vue/es/table/Table"; +import get from "lodash.get" +export default { + data() { + return { + needTotalList: [], + + selectedRows: [], + selectedRowKeys: [], + + localLoading: false, + localDataSource: [], + localPagination: Object.assign({}, T.props.pagination) + }; + }, + props: Object.assign({}, T.props, { + rowKey: { + type: [String, Function], + default: 'id' + }, + data: { + type: Function, + required: true + }, + pageNum: { + type: Number, + default: 1 + }, + pageSize: { + type: Number, + default: 10 + }, + showSizeChanger: { + type: Boolean, + default: true + }, + showAlertInfo: { + type: Boolean, + default: false + }, + showPagination: { + default: 'auto' + } + }), + watch: { + 'localPagination.current'(val) { + this.$router.push({ + name: this.$route.name, + params: Object.assign({}, this.$route.params, { + pageNo: val + }), + }); + }, + pageNum(val) { + Object.assign(this.localPagination, { + current: val + }); + }, + pageSize(val) { + console.log('pageSize:', val) + Object.assign(this.localPagination, { + pageSize: val + }); + }, + showSizeChanger(val) { + console.log('showSizeChanger', val) + Object.assign(this.localPagination, { + showSizeChanger: val + }); + } + }, + created() { + this.localPagination = ['auto', true].includes(this.showPagination) && Object.assign({}, this.localPagination, { + current: this.pageNum, + pageSize: this.pageSize, + showSizeChanger: this.showSizeChanger + }); + this.needTotalList = this.initTotalList(this.columns) + this.loadData(); + }, + methods: { + refresh() { + this.loadData(); + }, + loadData(pagination, filters, sorter) { + + this.localLoading = true + var result = this.data( + Object.assign({ + pageNo: (pagination && pagination.current) || + this.localPagination.current, + pageSize: (pagination && pagination.pageSize) || + this.localPagination.pageSize + }, + (sorter && sorter.field && { + sortField: sorter.field + }) || {}, + (sorter && sorter.order && { + sortOrder: sorter.order + }) || {}, { + ...filters + } + ) + ); + + if (result instanceof Promise) { + result.then(r => { + this.localPagination = Object.assign({}, this.localPagination, { + current: r.pageNo, // 返回结果中的当前分页数 + total: r.totalCount, // 返回结果中的总记录数 + showSizeChanger: this.showSizeChanger, + pageSize: (pagination && pagination.pageSize) || + this.localPagination.pageSize + }); + + !r.totalCount && ['auto', false].includes(this.showPagination) && (this.localPagination = false) + this.localDataSource = r.data; // 返回结果中的数组数据 + this.localLoading = false + }); + } + }, + initTotalList(columns) { + const totalList = [] + columns && columns instanceof Array && columns.forEach(column => { + if (column.needTotal) { + totalList.push({ ...column, + total: 0 + }) + } + }) + return totalList + }, + updateSelect(selectedRowKeys, selectedRows) { + this.selectedRowKeys = selectedRowKeys + this.selectedRows = selectedRows + let list = this.needTotalList + this.needTotalList = list.map(item => { + return { + ...item, + total: selectedRows.reduce((sum, val) => { + let total = sum + get(val, item.dataIndex) + return isNaN(total) ? 0 : total + }, 0) + } + }) + // this.$emit('change', selectedRowKeys, selectedRows) + }, + updateEdit() { + this.selectedRows = [] + }, + onClearSelected() { + this.selectedRowKeys = [] + this.updateSelect([], []) + }, + renderMsg(h) { + const _vm = this + let d = [] + // 构建 已选择 + d.push( + h('span', { + style: { + marginRight: '12px' + } + }, ['已选择 ', h('a', { + style: { + fontWeight: 600 + } + }, this.selectedRows.length)]) + ); + + // 构建 列统计 + this.needTotalList.map(item => { + d.push(h('span', { + style: { + marginRight: '12px' + } + }, + [ + `${ item.title }总计 `, + h('a', { + style: { + fontWeight: 600 + } + }, `${ !item.customRender ? item.total : item.customRender(item.total) }`) + ])) + }); + + // 构建 清空选择 + d.push(h('a', { + style: { + marginLeft: '24px' + }, + on: { + click: _vm.onClearSelected + } + }, '清空')) + + return d + }, + renderAlert(h) { + return h('span', { + slot: 'message' + }, this.renderMsg(h)) + }, + }, + + render(h) { + const _vm = this + + let props = {}, + localKeys = Object.keys(this.$data); + + Object.keys(T.props).forEach(k => { + let localKey = `local${k.substring(0,1).toUpperCase()}${k.substring(1)}`; + if (localKeys.includes(localKey)) { + return props[k] = _vm[localKey]; + } + return props[k] = _vm[k]; + }) + + + // 显示信息提示 + if (this.showAlertInfo) { + + props.rowSelection = { + selectedRowKeys: this.selectedRowKeys, + onChange: (selectedRowKeys, selectedRows) => { + _vm.updateSelect(selectedRowKeys, selectedRows) + _vm.$emit('onSelect', { selectedRowKeys: selectedRowKeys, selectedRows: selectedRows }) + } + }; + + return h('div', {}, [ + h("a-alert", { + style: { + marginBottom: '16px' + }, + props: { + type: 'info', + showIcon: true + } + }, [_vm.renderAlert(h)]), + h("a-table", { + tag: "component", + attrs: props, + on: { + change: _vm.loadData + }, + scopedSlots: this.$scopedSlots + }, this.$slots.default) + ]); + + } + + return h("a-table", { + tag: "component", + attrs: props, + on: { + change: _vm.loadData + }, + scopedSlots: this.$scopedSlots + }, this.$slots.default); + + } +}; \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/tools/Breadcrumb.vue b/ant-design-jeecg-vue/src/components/tools/Breadcrumb.vue new file mode 100644 index 00000000..25e9cbc8 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/tools/Breadcrumb.vue @@ -0,0 +1,48 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/tools/DetailList.vue b/ant-design-jeecg-vue/src/components/tools/DetailList.vue new file mode 100644 index 00000000..16530ade --- /dev/null +++ b/ant-design-jeecg-vue/src/components/tools/DetailList.vue @@ -0,0 +1,147 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/tools/FooterToolBar.vue b/ant-design-jeecg-vue/src/components/tools/FooterToolBar.vue new file mode 100644 index 00000000..82d77b15 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/tools/FooterToolBar.vue @@ -0,0 +1,32 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/tools/HeadInfo.vue b/ant-design-jeecg-vue/src/components/tools/HeadInfo.vue new file mode 100644 index 00000000..c9fd462d --- /dev/null +++ b/ant-design-jeecg-vue/src/components/tools/HeadInfo.vue @@ -0,0 +1,67 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/tools/HeaderNotice.vue b/ant-design-jeecg-vue/src/components/tools/HeaderNotice.vue new file mode 100644 index 00000000..86624288 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/tools/HeaderNotice.vue @@ -0,0 +1,85 @@ + + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/tools/Logo.vue b/ant-design-jeecg-vue/src/components/tools/Logo.vue new file mode 100644 index 00000000..68c71b83 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/tools/Logo.vue @@ -0,0 +1,33 @@ + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/tools/TwoStepCaptcha.vue b/ant-design-jeecg-vue/src/components/tools/TwoStepCaptcha.vue new file mode 100644 index 00000000..52c93a03 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/tools/TwoStepCaptcha.vue @@ -0,0 +1,89 @@ + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/tools/UserMenu.vue b/ant-design-jeecg-vue/src/components/tools/UserMenu.vue new file mode 100644 index 00000000..70d9c6f8 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/tools/UserMenu.vue @@ -0,0 +1,93 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/tools/setting.js b/ant-design-jeecg-vue/src/components/tools/setting.js new file mode 100644 index 00000000..8e41253d --- /dev/null +++ b/ant-design-jeecg-vue/src/components/tools/setting.js @@ -0,0 +1,95 @@ +import { message } from 'ant-design-vue/es'; +// import defaultSettings from '../defaultSettings'; + +let lessNodesAppended; + +const colorList = [ + { + key: '薄暮', color: '#F5222D', + }, + { + key: '火山', color: '#FA541C', + }, + { + key: '日暮', color: '#FAAD14', + }, + { + key: '明青', color: '#13C2C2', + }, + { + key: '极光绿', color: '#52C41A', + }, + { + key: '拂晓蓝(默认)', color: '#1890FF', + }, + { + key: '极客蓝', color: '#2F54EB', + }, + { + key: '酱紫', color: '#722ED1', + }, +]; + +const updateTheme = primaryColor => { + // Don't compile less in production! + /* if (process.env.NODE_ENV === 'production') { + return; + } */ + // Determine if the component is remounted + if (!primaryColor) { + return; + } + const hideMessage = message.loading('正在编译主题!', 0); + function buildIt() { + if (!window.less) { + return; + } + setTimeout(() => { + window.less + .modifyVars({ + '@primary-color': primaryColor, + }) + .then(() => { + hideMessage(); + }) + .catch(() => { + message.error('Failed to update theme'); + hideMessage(); + }); + }, 200); + } + if (!lessNodesAppended) { + // insert less.js and color.less + const lessStyleNode = document.createElement('link'); + const lessConfigNode = document.createElement('script'); + const lessScriptNode = document.createElement('script'); + lessStyleNode.setAttribute('rel', 'stylesheet/less'); + lessStyleNode.setAttribute('href', '/color.less'); + lessConfigNode.innerHTML = ` + window.less = { + async: true, + env: 'production', + javascriptEnabled: true + }; + `; + lessScriptNode.src = 'https://gw.alipayobjects.com/os/lib/less.js/3.8.1/less.min.js'; + lessScriptNode.async = true; + lessScriptNode.onload = () => { + buildIt(); + lessScriptNode.onload = null; + }; + document.body.appendChild(lessStyleNode); + document.body.appendChild(lessConfigNode); + document.body.appendChild(lessScriptNode); + lessNodesAppended = true; + } else { + buildIt(); + } +}; + +const updateColorWeak = colorWeak => { + // document.body.className = colorWeak ? 'colorWeak' : ''; + colorWeak ? document.body.classList.add('colorWeak') : document.body.classList.remove('colorWeak') +}; + +export { updateTheme, colorList, updateColorWeak } \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/config/router.config.js b/ant-design-jeecg-vue/src/config/router.config.js new file mode 100644 index 00000000..a7e25464 --- /dev/null +++ b/ant-design-jeecg-vue/src/config/router.config.js @@ -0,0 +1,394 @@ +import { UserLayout, TabLayout, RouteView, BlankLayout, PageView } from '@/components/layouts' + +/** + * 走菜单,走权限控制 + * @type {[null,null]} + */ +export const asyncRouterMap = [ + + { + path: '/', + name: 'index', + component: TabLayout, + meta: { title: '首页' }, + redirect: '/dashboard/workplace', + children: [ + + //系统管理 + { + path: '/system', + name: 'system', + redirect: '/isystem/user', + component: RouteView, + meta: { title: '系统管理', icon: 'dashboard', permission: [ 'dashboard' ] }, + children: [ + { + path: '/system/user', + name: 'user', + component: () => import('@/views/system/UserList'), + meta: { title: '用户管理', permission: [ 'dashboard' ] } + }, + + { + path: '/system/role', + name: 'role', + component: () => import('@/views/system/RoleList'), + meta: { title: '角色管理', permission: [ 'dashboard' ] } + }, + { + path: '/system/log', + name: 'log', + component: () => import('@/views/system/LogList'), + meta: { title: '日志管理', permission: [ 'dashboard' ] } + }, + + + ] + }, + + // dashboard + { + path: '/dashboard', + name: 'dashboard', + redirect: '/dashboard/workplace', + component: RouteView, + meta: { title: '仪表盘', icon: 'dashboard', permission: [ 'dashboard' ] }, + children: [ + { + path: '/dashboard/analysis', + name: 'Analysis', + component: () => import('@/views/dashboard/Analysis'), + meta: { title: '分析页', permission: [ 'dashboard' ] } + }, + { + path: '/dashboard/monitor', + name: 'Monitor', + hidden: true, + component: () => import('@/views/dashboard/Monitor'), + meta: { title: '监控页', permission: [ 'dashboard' ] } + }, + { + path: '/dashboard/workplace', + name: 'Workplace', + component: () => import('@/views/dashboard/Workplace'), + meta: { title: '工作台', permission: [ 'dashboard' ] } + } + ] + }, + + //jeecg + { + path: '/jeecg', + name: 'jeecg', + redirect: '/jeecg', + component: RouteView, + meta: { title: 'JEECG案例', icon: 'dashboard', permission: [ 'dashboard' ] }, + children: [ + { + path: '/jeecg/JeecgDemoList', + name: 'DemoList', + component: () => import('@/views/jeecg/JeecgDemoList'), + meta: { title: '列表例子', permission: [ 'dashboard' ] } + }, + { + path: '/jeecg/helloworld', + name: 'helloworld', + hidden : true, + component: () => import('@/views/jeecg/helloworld'), + meta: { title: 'helloworld', permission: [ 'dashboard' ] } + } + ] + }, + // forms + { + path: '/form', + redirect: '/form/basic-form', + component: PageView, + meta: { title: '表单页', icon: 'form', permission: [ 'form' ] }, + children: [ + { + path: '/form/base-form', + name: 'BaseForm', + component: () => import('@/views/form/BasicForm'), + meta: { title: '基础表单', permission: [ 'form' ] } + }, + { + path: '/form/step-form', + name: 'StepForm', + component: () => import('@/views/form/stepForm/StepForm'), + meta: { title: '分步表单', permission: [ 'form' ] } + }, + { + path: '/form/advanced-form', + name: 'AdvanceForm', + component: () => import('@/views/form/advancedForm/AdvancedForm'), + meta: { title: '高级表单', permission: [ 'form' ] } + } + ] + }, + + // list + { + path: '/list', + name: 'list', + component: PageView, + redirect: '/list/query-list', + meta: { title: '列表页', icon: 'table', permission: [ 'table' ] }, + children: [ + { + path: '/list/query-list', + name: 'QueryList', + component: () => import('@/views/list/TableList'), + meta: { title: '查询表格', permission: [ 'table' ] } + }, + { + path: '/list/edit-table', + name: 'EditList', + component: () => import('@/views/list/TableInnerEditList'), + meta: { title: '内联编辑表格', permission: [ 'table' ] } + }, + { + path: '/list/user-list', + name: 'UserList', + component: () => import('@/views/list/UserList'), + meta: { title: '用户列表', permission: [ 'table' ] } + }, + { + path: '/list/role-list', + name: 'RoleList', + component: () => import('@/views/list/RoleList'), + meta: { title: '角色列表', permission: [ 'table' ] } + }, + { + path: '/list/permission-list', + name: 'PermissionList', + component: () => import('@/views/list/PermissionList'), + meta: { title: '权限列表', permission: [ 'table' ] } + }, + { + path: '/list/basic-list', + name: 'BasicList', + component: () => import('@/views/list/StandardList'), + meta: { title: '标准列表', permission: [ 'table' ] } + }, + { + path: '/list/card', + name: 'CardList', + component: () => import('@/views/list/CardList'), + meta: { title: '卡片列表', permission: [ 'table' ] } + }, + { + path: '/list/search', + name: 'SearchList', + component: () => import('@/views/list/search/SearchLayout'), + redirect: '/list/search/article', + meta: { title: '搜索列表', permission: [ 'table' ] }, + children: [ + { + path: '/list/search/article', + name: 'SearchArticles', + component: () => import('../views/list/TableList'), + meta: { title: '搜索列表(文章)', permission: [ 'table' ] } + }, + { + path: '/list/search/project', + name: 'SearchProjects', + component: () => import('../views/list/TableList'), + meta: { title: '搜索列表(项目)', permission: [ 'table' ] } + }, + { + path: '/list/search/application', + name: 'SearchApplications', + component: () => import('../views/list/TableList'), + meta: { title: '搜索列表(应用)', permission: [ 'table' ] } + }, + ] + }, + ] + }, + + // profile + { + path: '/profile', + name: 'profile', + component: RouteView, + redirect: '/profile/basic', + meta: { title: '详情页', icon: 'profile', permission: [ 'profile' ] }, + children: [ + { + path: '/profile/basic', + name: 'ProfileBasic', + component: () => import('@/views/profile/basic/Index'), + meta: { title: '基础详情页', permission: [ 'profile' ] } + }, + { + path: '/profile/advanced', + name: 'ProfileAdvanced', + component: () => import('@/views/profile/advanced/Advanced'), + meta: { title: '高级详情页', permission: [ 'profile' ] } + } + ] + }, + + // result + { + path: '/result', + name: 'result', + component: PageView, + redirect: '/result/success', + meta: { title: '结果页', icon: 'check-circle-o', permission: [ 'result' ] }, + children: [ + { + path: '/result/success', + name: 'ResultSuccess', + component: () => import(/* webpackChunkName: "result" */ '@/views/result/Success'), + meta: { title: '成功', hiddenHeaderContent: true, permission: [ 'result' ] } + }, + { + path: '/result/fail', + name: 'ResultFail', + component: () => import(/* webpackChunkName: "result" */ '@/views/result/Error'), + meta: { title: '失败', hiddenHeaderContent: true, permission: [ 'result' ] } + } + ] + }, + + // Exception + { + path: '/exception', + name: 'exception', + component: RouteView, + redirect: '/exception/403', + meta: { title: '异常页', icon: 'warning', permission: [ 'exception' ] }, + children: [ + { + path: '/exception/403', + name: 'Exception403', + component: () => import(/* webpackChunkName: "fail" */ '@/views/exception/403'), + meta: { title: '403', permission: [ 'exception' ] } + }, + { + path: '/exception/404', + name: 'Exception404', + component: () => import(/* webpackChunkName: "fail" */ '@/views/exception/404'), + meta: { title: '404', permission: [ 'exception' ] } + }, + { + path: '/exception/500', + name: 'Exception500', + component: () => import(/* webpackChunkName: "fail" */ '@/views/exception/500'), + meta: { title: '500', permission: [ 'exception' ] } + } + ] + }, + + // account + { + path: '/account', + component: RouteView, + name: 'account', + meta: { title: '个人页', icon: 'user', keepAlive: true, permission: [ 'user' ] }, + children: [ + { + path: '/account/center', + name: 'center', + component: () => import('@/views/account/center/Index'), + meta: { title: '个人中心', keepAlive: true, permission: [ 'user' ] } + }, + { + path: '/account/settings', + name: 'settings', + component: () => import('@/views/account/settings/Index'), + meta: { title: '个人设置', hideHeader: true, keepAlive: true, permission: [ 'user' ] }, + redirect: '/account/settings/base', + alwaysShow: true, + children: [ + { + path: '/account/settings/base', + name: 'BaseSettings', + component: () => import('@/views/account/settings/BaseSetting'), + meta: { title: '基本设置', hidden: true, keepAlive: true, permission: [ 'user' ] } + }, + { + path: '/account/settings/security', + name: 'SecuritySettings', + component: () => import('@/views/account/settings/Security'), + meta: { title: '安全设置', hidden: true, keepAlive: true, permission: [ 'user' ] } + }, + { + path: '/account/settings/custom', + name: 'CustomSettings', + component: () => import('@/views/account/settings/Custom'), + meta: { title: '个性化设置', hidden: true, keepAlive: true, permission: [ 'user' ] } + }, + { + path: '/account/settings/binding', + name: 'BindingSettings', + component: () => import('@/views/account/settings/Binding'), + meta: { title: '账户绑定', hidden: true, keepAlive: true, permission: [ 'user' ] } + }, + { + path: '/account/settings/notification', + name: 'NotificationSettings', + component: () => import('@/views/account/settings/Notification'), + meta: { title: '新消息通知', hidden: true, keepAlive: true, permission: [ 'user' ] } + }, + ] + }, + ] + } + ] + }, + { + path: '*', redirect: '/404', hidden: true + } +] + +/** + * 基础路由 + * @type { *[] } + */ +export const constantRouterMap = [ + { + path: '/user', + component: UserLayout, + redirect: '/user/login', + hidden: true, + children: [ + { + path: 'login', + name: 'login', + component: () => import(/* webpackChunkName: "user" */ '@/views/user/Login') + }, + { + path: 'register', + name: 'register', + component: () => import(/* webpackChunkName: "user" */ '@/views/user/Register') + }, + { + path: 'register-result', + name: 'registerResult', + component: () => import(/* webpackChunkName: "user" */ '@/views/user/RegisterResult') + } + ] + }, + + { + path: '/test', + component: BlankLayout, + redirect: '/test/home', + children: [ + { + path: 'home', + name: 'TestHome', + component: () => import('@/views/Home') + } + ] + }, + + { + path: '/404', + component: () => import(/* webpackChunkName: "fail" */ '@/views/exception/404') + }, + +] diff --git a/ant-design-jeecg-vue/src/defaultSettings.js b/ant-design-jeecg-vue/src/defaultSettings.js new file mode 100644 index 00000000..62adddd0 --- /dev/null +++ b/ant-design-jeecg-vue/src/defaultSettings.js @@ -0,0 +1,31 @@ +/** + * 项目默认配置项 + * primaryColor - 默认主题色 + * navTheme - sidebar theme ['dark', 'light'] 两种主题 + * colorWeak - 色盲模式 + * layout - 整体布局方式 ['sidemenu', 'topmenu'] 两种布局 + * fixedHeader - 固定 Header : boolean + * fixSiderbar - 固定左侧菜单栏 : boolean + * autoHideHeader - 向下滚动时,隐藏 Header : boolean + * contentWidth - 内容区布局: 流式 | 固定 + * + * storageOptions: {} - Vue-ls 插件配置项 (localStorage/sessionStorage) + * + */ + +export default { + primaryColor: '#1890FF', // primary color of ant design + navTheme: 'light', // theme for nav menu + layout: 'sidemenu', // nav menu position: sidemenu or topmenu + contentWidth: 'Fixed', // layout of content: Fluid or Fixed, only works when layout is topmenu + fixedHeader: false, // sticky header + fixSiderbar: false, // sticky siderbar + autoHideHeader: false, // auto hide header + colorWeak: false, + // vue-ls options + storageOptions: { + namespace: 'pro__', // key prefix + name: 'ls', // name variable Vue.[ls] or this.[$ls], + storage: 'local', // storage name session, local, memory + } +} \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/main.js b/ant-design-jeecg-vue/src/main.js new file mode 100644 index 00000000..31c7778f --- /dev/null +++ b/ant-design-jeecg-vue/src/main.js @@ -0,0 +1,61 @@ +import Vue from 'vue' +import App from './App.vue' +import Storage from 'vue-ls' +import router from './router' +import store from './store/' + +import { VueAxios } from "@/utils/request" + +import Antd from 'ant-design-vue' +import Viser from 'viser-vue' +import 'ant-design-vue/dist/antd.less'; // or 'ant-design-vue/dist/antd.less' + +import '@/permission' // permission control +import '@/utils/filter' // base filter +import DictSelectTag from './components/dict/index.js' +import Print from 'vue-print-nb' +/*import '@babel/polyfill'*/ + +import { + ACCESS_TOKEN, + DEFAULT_COLOR, + DEFAULT_THEME, + DEFAULT_LAYOUT_MODE, + DEFAULT_COLOR_WEAK, + SIDEBAR_TYPE, + DEFAULT_FIXED_HEADER, + DEFAULT_FIXED_HEADER_HIDDEN, + DEFAULT_FIXED_SIDEMENU, + DEFAULT_CONTENT_WIDTH_TYPE +} from "@/store/mutation-types" +import config from '@/defaultSettings' + +import hasPermission from '@/utils/hasPermission' + +Vue.config.productionTip = false + +Vue.use(Storage, config.storageOptions) +Vue.use(Antd) +Vue.use(VueAxios, router) +Vue.use(Viser) +Vue.use(hasPermission) +Vue.use(DictSelectTag) +Vue.use(Print) + +new Vue({ + router, + store, + mounted () { + store.commit('SET_SIDEBAR_TYPE', Vue.ls.get(SIDEBAR_TYPE, true)) + store.commit('TOGGLE_THEME', Vue.ls.get(DEFAULT_THEME, config.navTheme)) + store.commit('TOGGLE_LAYOUT_MODE', Vue.ls.get(DEFAULT_LAYOUT_MODE, config.layout)) + store.commit('TOGGLE_FIXED_HEADER', Vue.ls.get(DEFAULT_FIXED_HEADER, config.fixedHeader)) + store.commit('TOGGLE_FIXED_SIDERBAR', Vue.ls.get(DEFAULT_FIXED_SIDEMENU, config.fixSiderbar)) + store.commit('TOGGLE_CONTENT_WIDTH', Vue.ls.get(DEFAULT_CONTENT_WIDTH_TYPE, config.contentWidth)) + store.commit('TOGGLE_FIXED_HEADER_HIDDEN', Vue.ls.get(DEFAULT_FIXED_HEADER_HIDDEN, config.autoHideHeader)) + store.commit('TOGGLE_WEAK', Vue.ls.get(DEFAULT_COLOR_WEAK, config.colorWeak)) + store.commit('TOGGLE_COLOR', Vue.ls.get(DEFAULT_COLOR, config.primaryColor)) + store.commit('SET_TOKEN', Vue.ls.get(ACCESS_TOKEN)) + }, + render: h => h(App) +}).$mount('#app') diff --git a/ant-design-jeecg-vue/src/permission.js b/ant-design-jeecg-vue/src/permission.js new file mode 100644 index 00000000..198f6633 --- /dev/null +++ b/ant-design-jeecg-vue/src/permission.js @@ -0,0 +1,75 @@ +import Vue from 'vue' +import router from './router' +import store from './store' +import NProgress from 'nprogress' // progress bar +import 'nprogress/nprogress.css' // progress bar style +import notification from 'ant-design-vue/es/notification' +import { ACCESS_TOKEN } from '@/store/mutation-types' +import { generateIndexRouter } from "@/utils/util" + +NProgress.configure({ showSpinner: false }) // NProgress Configuration + +const whiteList = ['/user/login', '/user/register', '/user/register-result'] // no redirect whitelist + +router.beforeEach((to, from, next) => { + NProgress.start() // start progress bar + + if (Vue.ls.get(ACCESS_TOKEN)) { + /* has token */ + if (to.path === '/user/login') { + next({ path: '/dashboard/workplace' }) + NProgress.done() + } else { + if (store.getters.permissionList.length === 0) { + store.dispatch('GetPermissionList').then(res => { + const menuData = res.result; + console.log(res.message) + if (menuData === null || menuData === "" || menuData === undefined) { + return; + } + let constRoutes = []; + constRoutes = generateIndexRouter(menuData); + // 添加主界面路由 + store.dispatch('UpdateAppRouter', { constRoutes }).then(() => { + // 根据roles权限生成可访问的路由表 + // 动态添加可访问路由表 + router.addRoutes(store.getters.addRouters) + const redirect = decodeURIComponent(from.query.redirect || to.path) + if (to.path === redirect) { + // hack方法 确保addRoutes已完成 ,set the replace: true so the navigation will not leave a history record + next({ ...to, replace: true }) + } else { + // 跳转到目的路由 + next({ path: redirect }) + } + }) + }) + .catch(() => { + notification.error({ + message: '系统提示', + description: '请求用户信息失败,请重试!' + }) + // update-begin- --- author:scott ------ date:20190225 ---- for:Token失效跳转登录逻辑修改---- + // store.dispatch('Logout').then(() => { + // next({ path: '/user/login', query: { redirect: to.fullPath } }) + // }) + // update-end- --- author:scott ------ date:20190225 ---- for:Token失效跳转登录逻辑修改---- + }) + } else { + next() + } + } + } else { + if (whiteList.indexOf(to.path) !== -1) { + // 在免登录白名单,直接进入 + next() + } else { + next({ path: '/user/login', query: { redirect: to.fullPath } }) + NProgress.done() // if current page is login will not trigger afterEach hook, so manually handle it + } + } +}) + +router.afterEach(() => { + NProgress.done() // finish progress bar +}) diff --git a/ant-design-jeecg-vue/src/router/README.md b/ant-design-jeecg-vue/src/router/README.md new file mode 100644 index 00000000..9e82538c --- /dev/null +++ b/ant-design-jeecg-vue/src/router/README.md @@ -0,0 +1,139 @@ +路由/菜单说明 +==== + + + +配置文件路径 +---- + +`@/config/router.config.js` + + + +格式和说明 +---- + +```javascript +/** + * 路由配置说明: + * 建议:sider menu 请不要超过三级菜单,若超过三级菜单,则应该设计为顶部主菜单 配合左侧次级菜单 + * + **/ + { + redirect: noredirect, + name: 'router-name', + hidden: true, + meta: { + title: 'title', + icon: 'a-icon', + keepAlive: true, + hiddenHeaderContent: true, + } +} +``` + + + +`{ Route }` 对象 + +| 参数 | 说明 | 类型 | 默认值 | +| -------- | ----------------------------------------- | ------- | ------ | +| hidden | 控制路由是否显示在 sidebar | boolean | falase | +| redirect | 重定向地址, 访问这个路由时,自定进行重定向 | string | - | +| name | 路由名称, 建议设置,且不能重名 | string | - | +| meta | 路由元信息(路由附带扩展信息) | object | {} | + + + +`{ Meta }` 路由元信息对象 + +| 参数 | 说明 | 类型 | 默认值 | +| ------------------- | ------------------------------------------------------------ | ------- | ------ | +| title | 路由标题, 用于显示面包屑, 页面标题 *推荐设置 | string | - | +| icon | 路由在 menu 上显示的图标 | string | - | +| keepAlive | 缓存该路由 | boolean | false | +| hiddenHeaderContent | *特殊 隐藏 [PageHeader](https://github.com/sendya/ant-design-pro-vue/blob/master/src/components/layout/PageHeader.vue#L14) 组件中的页面带的 面包屑和页面标题栏 | boolean | false | +| permission | 与项目提供的权限拦截匹配的权限,如果不匹配,则会被禁止访问该路由页面 | array | [] | + + + +路由例子 +---- + +```ecmascript 6 +const asyncRouterMap = [ + { + path: '/', + name: 'index', + component: BasicLayout, + meta: { title: '首页' }, + redirect: '/dashboard/analysis', + children: [ + { + path: '/dashboard', + component: Layout, + name: 'dashboard', + redirect: '/dashboard/workplace', + meta: {title: '仪表盘', icon: 'dashboard', permission: ['dashboard']}, + children: [ + { + path: '/dashboard/analysis', + name: 'Analysis', + component: () => import('@/views/dashboard/Analysis'), + meta: {title: '分析页', permission: ['dashboard']} + }, + { + path: '/dashboard/monitor', + name: 'Monitor', + hidden: true, + component: () => import('@/views/dashboard/Monitor'), + meta: {title: '监控页', permission: ['dashboard']} + }, + { + path: '/dashboard/workplace', + name: 'Workplace', + component: () => import('@/views/dashboard/Workplace'), + meta: {title: '工作台', permission: ['dashboard']} + } + ] + }, + + // result + { + path: '/result', + name: 'result', + component: PageView, + redirect: '/result/success', + meta: { title: '结果页', icon: 'check-circle-o', permission: [ 'result' ] }, + children: [ + { + path: '/result/success', + name: 'ResultSuccess', + component: () => import(/* webpackChunkName: "result" */ '@/views/result/Success'), + // 该页面隐藏面包屑和页面标题栏 + meta: { title: '成功', hiddenHeaderContent: true, permission: [ 'result' ] } + }, + { + path: '/result/fail', + name: 'ResultFail', + component: () => import(/* webpackChunkName: "result" */ '@/views/result/Error'), + // 该页面隐藏面包屑和页面标题栏 + meta: { title: '失败', hiddenHeaderContent: true, permission: [ 'result' ] } + } + ] + }, + ... + ] + }, +] +``` + +> 1. 请注意 `component: () => import('..') ` 方式引入路由的页面组件为 懒加载模式。具体可以看 [Vue 官方文档](https://router.vuejs.org/zh/guide/advanced/lazy-loading.html) +> 2. 增加新的路由应该增加在 '/' (index) 路由的 `children` 内 +> 3. `permission` 可以进行自定义修改,只需要对这个模块进行自定义修改即可 [src/store/modules/permission.js#L10](https://github.com/sendya/ant-design-pro-vue/blob/master/src/store/modules/permission.js#L10) + + + +附权限路由结构: + +![权限结构](https://static-2.loacg.com/open/static/github/permissions.png) \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/router/index.js b/ant-design-jeecg-vue/src/router/index.js new file mode 100644 index 00000000..bdbe3740 --- /dev/null +++ b/ant-design-jeecg-vue/src/router/index.js @@ -0,0 +1,12 @@ +import Vue from 'vue' +import Router from 'vue-router' +import { constantRouterMap } from '@/config/router.config' + +Vue.use(Router) + +export default new Router({ + mode: 'history', + base: process.env.BASE_URL, + scrollBehavior: () => ({ y: 0 }), + routes: constantRouterMap +}) \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/store/getters.js b/ant-design-jeecg-vue/src/store/getters.js new file mode 100644 index 00000000..3d213a6f --- /dev/null +++ b/ant-design-jeecg-vue/src/store/getters.js @@ -0,0 +1,17 @@ +import Vue from 'vue' +import { USER_INFO} from "@/store/mutation-types" +const getters = { + device: state => state.app.device, + theme: state => state.app.theme, + color: state => state.app.color, + token: state => state.user.token, + avatar: state => {state.user.avatar = Vue.ls.get(USER_INFO).avatar; return state.user.avatar}, + username: state => state.user.username, + nickname: state => {state.user.realname = Vue.ls.get(USER_INFO).realname; return state.user.realname}, + welcome: state => state.user.welcome, + permissionList: state => state.user.permissionList, + userInfo: state => {state.user.info = Vue.ls.get(USER_INFO); return state.user.info}, + addRouters: state => state.permission.addRouters +} + +export default getters \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/store/index.js b/ant-design-jeecg-vue/src/store/index.js new file mode 100644 index 00000000..4e8529a2 --- /dev/null +++ b/ant-design-jeecg-vue/src/store/index.js @@ -0,0 +1,27 @@ +import Vue from 'vue' +import Vuex from 'vuex' + +import app from './modules/app' +import user from './modules/user' +import permission from './modules/permission' +import getters from './getters' + +Vue.use(Vuex) + +export default new Vuex.Store({ + modules: { + app, + user, + permission + }, + state: { + + }, + mutations: { + + }, + actions: { + + }, + getters +}) diff --git a/ant-design-jeecg-vue/src/store/modules/app.js b/ant-design-jeecg-vue/src/store/modules/app.js new file mode 100644 index 00000000..d8ce233a --- /dev/null +++ b/ant-design-jeecg-vue/src/store/modules/app.js @@ -0,0 +1,121 @@ +import Vue from 'vue' +import { + SIDEBAR_TYPE, + DEFAULT_THEME, + DEFAULT_LAYOUT_MODE, + DEFAULT_COLOR, + DEFAULT_COLOR_WEAK, + DEFAULT_FIXED_HEADER, + DEFAULT_FIXED_SIDEMENU, + DEFAULT_FIXED_HEADER_HIDDEN, + DEFAULT_CONTENT_WIDTH_TYPE +} from "@/store/mutation-types" + +const app = { + state: { + sidebar: { + opened: true, + withoutAnimation: false + }, + device: 'desktop', + theme: '', + layout: '', + contentWidth: '', + fixedHeader: false, + fixSiderbar: false, + autoHideHeader: false, + color: null, + weak: false, + multipage: true + }, + mutations: { + SET_SIDEBAR_TYPE: (state, type) => { + state.sidebar.opened = type + Vue.ls.set(SIDEBAR_TYPE, type) + }, + CLOSE_SIDEBAR: (state, withoutAnimation) => { + Vue.ls.set(SIDEBAR_TYPE, true) + state.sidebar.opened = false + state.sidebar.withoutAnimation = withoutAnimation + }, + TOGGLE_DEVICE: (state, device) => { + state.device = device + }, + TOGGLE_THEME: (state, theme) => { + // setStore('_DEFAULT_THEME', theme) + Vue.ls.set(DEFAULT_THEME, theme) + state.theme = theme + }, + TOGGLE_LAYOUT_MODE: (state, layout) => { + Vue.ls.set(DEFAULT_LAYOUT_MODE, layout) + state.layout = layout + }, + TOGGLE_FIXED_HEADER: (state, fixed) => { + Vue.ls.set(DEFAULT_FIXED_HEADER, fixed) + state.fixedHeader = fixed + }, + TOGGLE_FIXED_SIDERBAR: (state, fixed) => { + Vue.ls.set(DEFAULT_FIXED_SIDEMENU, fixed) + state.fixSiderbar = fixed + }, + TOGGLE_FIXED_HEADER_HIDDEN: (state, show) => { + Vue.ls.set(DEFAULT_FIXED_HEADER_HIDDEN, show) + state.autoHideHeader = show + }, + TOGGLE_CONTENT_WIDTH: (state, type) => { + Vue.ls.set(DEFAULT_CONTENT_WIDTH_TYPE, type) + state.contentWidth = type + }, + TOGGLE_COLOR: (state, color) => { + Vue.ls.set(DEFAULT_COLOR, color) + state.color = color + }, + TOGGLE_WEAK: (state, flag) => { + Vue.ls.set(DEFAULT_COLOR_WEAK, flag) + state.weak = flag + }, + setMultipage (state, multipage) { + state.multipage = multipage + } + }, + actions: { + setSidebar: ({ commit }, type) => { + commit('SET_SIDEBAR_TYPE', type) + }, + CloseSidebar({ commit }, { withoutAnimation }) { + commit('CLOSE_SIDEBAR', withoutAnimation) + }, + ToggleDevice({ commit }, device) { + commit('TOGGLE_DEVICE', device) + }, + ToggleTheme({ commit }, theme) { + commit('TOGGLE_THEME', theme) + }, + ToggleLayoutMode({ commit }, mode) { + commit('TOGGLE_LAYOUT_MODE', mode) + }, + ToggleFixedHeader({ commit }, fixedHeader) { + if (!fixedHeader) { + commit('TOGGLE_FIXED_HEADER_HIDDEN', false) + } + commit('TOGGLE_FIXED_HEADER', fixedHeader) + }, + ToggleFixSiderbar({ commit }, fixSiderbar) { + commit( 'TOGGLE_FIXED_SIDERBAR', fixSiderbar) + }, + ToggleFixedHeaderHidden({ commit }, show) { + commit('TOGGLE_FIXED_HEADER_HIDDEN', show) + }, + ToggleContentWidth({ commit }, type) { + commit('TOGGLE_CONTENT_WIDTH', type) + }, + ToggleColor({ commit }, color) { + commit('TOGGLE_COLOR', color) + }, + ToggleWeak({ commit }, weakFlag) { + commit('TOGGLE_WEAK', weakFlag) + } + } +} + +export default app \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/store/modules/permission.js b/ant-design-jeecg-vue/src/store/modules/permission.js new file mode 100644 index 00000000..895e14b3 --- /dev/null +++ b/ant-design-jeecg-vue/src/store/modules/permission.js @@ -0,0 +1,90 @@ +import { asyncRouterMap, constantRouterMap } from "@/config/router.config" + +/** + * 过滤账户是否拥有某一个权限,并将菜单从加载列表移除 + * + * @param permission + * @param route + * @returns {boolean} + */ +function hasPermission(permission, route) { + if (route.meta && route.meta.permission) { + let flag = -1 + for (let i = 0, len = permission.length; i < len; i++) { + flag = route.meta.permission.indexOf(permission[i]) + if (flag >= 0) { + return true + } + } + return false + } + return true +} + +/** + * 单账户多角色时,使用该方法可过滤角色不存在的菜单 + * + * @param roles + * @param route + * @returns {*} + */ +// eslint-disable-next-line +function hasRole(roles, route) { + if (route.meta && route.meta.roles) { + return route.meta.roles.indexOf(roles.id) + } else { + return true + } +} + +function filterAsyncRouter(routerMap, roles) { + const accessedRouters = routerMap.filter(route => { + if (hasPermission(roles.permissionList, route)) { + if (route.children && route.children.length) { + route.children = filterAsyncRouter(route.children, roles) + } + return true + } + return false + }) + return accessedRouters +} + + +const permission = { + state: { + routers: constantRouterMap, + addRouters: [] + }, + mutations: { + SET_ROUTERS: (state, data) => { + state.addRouters = data + state.routers = constantRouterMap.concat(data) + console.log('-----mutations---SET_ROUTERS----', data) + } + }, + actions: { + GenerateRoutes({ commit }, data) { + return new Promise(resolve => { + const { roles } = data + console.log('-----mutations---data----', data) + let accessedRouters + accessedRouters = filterAsyncRouter(asyncRouterMap, roles) + console.log('-----mutations---accessedRouters----', accessedRouters) + commit('SET_ROUTERS', accessedRouters) + resolve() + }) + }, + // 动态添加主界面路由,需要缓存 + UpdateAppRouter({ commit }, routes) { + return new Promise(resolve => { + //const [ roles ] = routes.constRoutes + let routelist = routes.constRoutes; + commit('SET_ROUTERS', routelist) + resolve() + }) + } + } +} + +export default permission \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/store/modules/user.js b/ant-design-jeecg-vue/src/store/modules/user.js new file mode 100644 index 00000000..cf799883 --- /dev/null +++ b/ant-design-jeecg-vue/src/store/modules/user.js @@ -0,0 +1,100 @@ +import Vue from 'vue' +import { login, logout } from "@/api/login" +import { ACCESS_TOKEN, USER_NAME,USER_INFO } from "@/store/mutation-types" +import { welcome } from "@/utils/util" +import { queryPermissionsByUser } from '@/api/api' + +const user = { + state: { + token: '', + username: '', + realname: '', + welcome: '', + avatar: '', + permissionList: [], + info: {} + }, + + mutations: { + SET_TOKEN: (state, token) => { + state.token = token + }, + SET_NAME: (state, { username, realname, welcome }) => { + state.username = username + state.realname = realname + state.welcome = welcome + }, + SET_AVATAR: (state, avatar) => { + state.avatar = avatar + }, + SET_PERMISSIONLIST: (state, permissionList) => { + state.permissionList = permissionList + }, + SET_INFO: (state, info) => { + state.info = info + }, + }, + + actions: { + // 登录 + Login({ commit }, userInfo) { + return new Promise((resolve, reject) => { + login(userInfo).then(response => { + if(response.code =='200'){ + const result = response.result + const userInfo = result.userInfo + Vue.ls.set(ACCESS_TOKEN, result.token, 7 * 24 * 60 * 60 * 1000) + Vue.ls.set(USER_NAME, userInfo.username, 7 * 24 * 60 * 60 * 1000) + Vue.ls.set(USER_INFO, userInfo, 7 * 24 * 60 * 60 * 1000) + commit('SET_TOKEN', result.token) + commit('SET_INFO', userInfo) + commit('SET_NAME', { username: userInfo.username,realname: userInfo.realname, welcome: welcome() }) + commit('SET_AVATAR', userInfo.avatar) + resolve() + }else{ + reject(response) + } + }).catch(error => { + reject(error) + }) + }) + }, + + // 获取用户信息 + GetPermissionList({ commit }) { + return new Promise((resolve, reject) => { + let username = Vue.ls.get(USER_NAME); + let params = {username:username}; + queryPermissionsByUser(params).then(response => { + const menuData = response.result; + if (menuData && menuData.length > 0) { + commit('SET_PERMISSIONLIST', menuData) + } else { + reject('getPermissionList: permissions must be a non-null array !') + } + resolve(response) + }).catch(error => { + reject(error) + }) + }) + }, + + // 登出 + Logout({ commit, state }) { + return new Promise((resolve) => { + commit('SET_TOKEN', '') + commit('SET_PERMISSIONLIST', []) + Vue.ls.remove(ACCESS_TOKEN) + + logout(state.token).then(() => { + resolve() + }).catch(() => { + resolve() + }) + }) + }, + + } +} + +export default user \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/store/mutation-types.js b/ant-design-jeecg-vue/src/store/mutation-types.js new file mode 100644 index 00000000..2fa98ae2 --- /dev/null +++ b/ant-design-jeecg-vue/src/store/mutation-types.js @@ -0,0 +1,17 @@ +export const ACCESS_TOKEN = 'Access-Token' +export const SIDEBAR_TYPE = 'SIDEBAR_TYPE' +export const DEFAULT_THEME = 'DEFAULT_THEME' +export const DEFAULT_LAYOUT_MODE = 'DEFAULT_LAYOUT_MODE' +export const DEFAULT_COLOR = 'DEFAULT_COLOR' +export const DEFAULT_COLOR_WEAK = 'DEFAULT_COLOR_WEAK' +export const DEFAULT_FIXED_HEADER = 'DEFAULT_FIXED_HEADER' +export const DEFAULT_FIXED_SIDEMENU= 'DEFAULT_FIXED_SIDEMENU' +export const DEFAULT_FIXED_HEADER_HIDDEN = 'DEFAULT_FIXED_HEADER_HIDDEN' +export const DEFAULT_CONTENT_WIDTH_TYPE = 'DEFAULT_CONTENT_WIDTH_TYPE' +export const USER_NAME = 'Login_Username' +export const USER_INFO = 'Login_Userinfo' + +export const CONTENT_WIDTH_TYPE = { + Fluid: 'Fluid', + Fixed: 'Fixed' +} \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/utils/auth.js b/ant-design-jeecg-vue/src/utils/auth.js new file mode 100644 index 00000000..03ae469f --- /dev/null +++ b/ant-design-jeecg-vue/src/utils/auth.js @@ -0,0 +1,19 @@ +/** + * 弃用 + */ +import { setStore, getStore, clearStore } from "@/utils/storage" + +export const TokenKey = 'Access-Token' + +export function getToken() { + return getStore(TokenKey) +} + +export function setToken(token) { + // key, token, timeout = 86400s + return setStore(TokenKey, token, 86400) +} + +export function removeToken() { + return clearStore(TokenKey) +} \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/utils/axios.js b/ant-design-jeecg-vue/src/utils/axios.js new file mode 100644 index 00000000..d775940a --- /dev/null +++ b/ant-design-jeecg-vue/src/utils/axios.js @@ -0,0 +1,37 @@ +const VueAxios = { + vm: {}, + // eslint-disable-next-line no-unused-vars + install(Vue, router = {}, instance) { + if (this.installed) { + return; + } + this.installed = true; + + if (!instance) { + // eslint-disable-next-line no-console + console.error('You have to install axios'); + return; + } + + Vue.axios = instance; + + Object.defineProperties(Vue.prototype, { + axios: { + get: function get() { + return instance; + } + }, + $http: { + get: function get() { + return instance; + } + } + }); + } +}; + +export { + VueAxios, + // eslint-disable-next-line no-undef + instance as axios +} \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/utils/device.js b/ant-design-jeecg-vue/src/utils/device.js new file mode 100644 index 00000000..6bf15fc0 --- /dev/null +++ b/ant-design-jeecg-vue/src/utils/device.js @@ -0,0 +1,23 @@ +import enquireJs from 'enquire.js' + +const enquireScreen = function (call) { + // tablet + const handler = { + match: function () { + call && call(0) + }, + unmatch: function () { + call && call(-1) + } + } + // mobile + const handler2 = { + match: () => { + call && call(1) + } + } + enquireJs.register('screen and (max-width: 1087.99px)', handler) + enquireJs.register('screen and (max-width: 767.99px)', handler2) +} + +export default enquireScreen \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/utils/filter.js b/ant-design-jeecg-vue/src/utils/filter.js new file mode 100644 index 00000000..f4aa4ce6 --- /dev/null +++ b/ant-design-jeecg-vue/src/utils/filter.js @@ -0,0 +1,18 @@ +import Vue from "vue"; +import * as dayjs from "dayjs"; + +Vue.filter('NumberFormat', function (value) { + if (!value) { + return '0' + } + let intPartFormat = value.toString().replace(/(\d)(?=(?:\d{3})+$)/g, '$1,') //将整数部分逢三一断 + return intPartFormat +}) + +Vue.filter('dayjs', function(dataStr, pattern = 'YYYY-MM-DD HH:mm:ss') { + return dayjs(dataStr).format(pattern) +}) + +Vue.filter('moment', function(dataStr, pattern = 'YYYY-MM-DD HH:mm:ss') { + return dayjs(dataStr).format(pattern) +}) \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/utils/hasPermission.js b/ant-design-jeecg-vue/src/utils/hasPermission.js new file mode 100644 index 00000000..8e821eb8 --- /dev/null +++ b/ant-design-jeecg-vue/src/utils/hasPermission.js @@ -0,0 +1,26 @@ +const hasPermission = { + install (Vue, options) { + console.log(options); + Vue.directive('has', { + inserted: (el, binding, vnode)=>{ + //console.log("页面权限----",el); + let permissionList = vnode.context.$route.meta.permissionList; + if (permissionList === null || permissionList === "" || permissionList === undefined) { + el.parentNode.removeChild(el) + } + let permissions = []; + for (var item of permissionList) { + permissions.push(item.action); + } + //console.log("页面权限----"+permissions); + //console.log("页面权限----"+binding.value); + if (!permissions.includes(binding.value)) { + //if(el.parentNode) + el.parentNode.removeChild(el) + } + } + }); + } +}; + +export default hasPermission; diff --git a/ant-design-jeecg-vue/src/utils/mixin.js b/ant-design-jeecg-vue/src/utils/mixin.js new file mode 100644 index 00000000..8417db6f --- /dev/null +++ b/ant-design-jeecg-vue/src/utils/mixin.js @@ -0,0 +1,39 @@ +// import Vue from 'vue' +import { mapState } from "vuex"; + +// const mixinsComputed = Vue.config.optionMergeStrategies.computed +// const mixinsMethods = Vue.config.optionMergeStrategies.methods + +const mixin = { + computed: { + ...mapState({ + layoutMode: state => state.app.layout, + navTheme: state => state.app.theme, + primaryColor: state => state.app.color, + colorWeak: state => state.app.weak, + fixedHeader: state => state.app.fixedHeader, + fixSiderbar: state => state.app.fixSiderbar, + contentWidth: state => state.app.contentWidth, + autoHideHeader: state => state.app.autoHideHeader, + sidebarOpened: state => state.app.sidebar.opened + }) + } +} + +const mixinDevice = { + computed: { + ...mapState({ + device: state => state.app.device, + }) + }, + methods: { + isMobile () { + return this.device === 'mobile' + }, + isDesktop () { + return this.device === 'desktop' + } + } +} + +export { mixin, mixinDevice } \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/utils/permissions.js b/ant-design-jeecg-vue/src/utils/permissions.js new file mode 100644 index 00000000..e4b60bcd --- /dev/null +++ b/ant-design-jeecg-vue/src/utils/permissions.js @@ -0,0 +1,8 @@ +export function actionToObject(json) { + try { + return JSON.parse(json) + } catch (e) { + console.log('err', e.message) + } + return [] +} \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/utils/request.js b/ant-design-jeecg-vue/src/utils/request.js new file mode 100644 index 00000000..4765bb3c --- /dev/null +++ b/ant-design-jeecg-vue/src/utils/request.js @@ -0,0 +1,99 @@ +import Vue from 'vue' +import axios from 'axios' +import store from '@/store' +import { VueAxios } from './axios' +import {Modal, notification} from 'ant-design-vue' +import { ACCESS_TOKEN } from "@/store/mutation-types" + +// 创建 axios 实例 +const service = axios.create({ + baseURL: '/jeecg-boot', // api base_url + timeout: 6000 // 请求超时时间 +}) + +const err = (error) => { + if (error.response) { + let data = error.response.data + const token = Vue.ls.get(ACCESS_TOKEN) + console.log("------异常响应------",token) + console.log("------异常响应------",error.response.status) + switch (error.response.status) { + case 403: + notification.error({ message: '系统提示', description: '拒绝访问',duration: 4}) + break + case 500: + //notification.error({ message: '系统提示', description:'Token失效,请重新登录!',duration: 4}) + if(data.message=="Token失效,请重新登录"){ + // update-begin- --- author:scott ------ date:20190225 ---- for:Token失效采用弹框模式,不直接跳转---- + // store.dispatch('Logout').then(() => { + // window.location.reload() + // }) + Modal.error({ + title: '登录已过期', + content: '很抱歉,登录已过期,请重新登录', + okText: '重新登录', + mask: false, + onOk: () => { + store.dispatch('Logout').then(() => { + window.location.reload() + }) + } + }) + // update-end- --- author:scott ------ date:20190225 ---- for:Token失效采用弹框模式,不直接跳转---- + } + break + case 404: + notification.error({ message: '系统提示', description:'很抱歉,资源未找到!',duration: 4}) + break + case 504: + notification.error({ message: '系统提示', description: '网络超时'}) + break + case 401: + notification.error({ message: '系统提示', description:'未授权,请重新登录',duration: 4}) + if (token) { + store.dispatch('Logout').then(() => { + setTimeout(() => { + window.location.reload() + }, 1500) + }) + } + break + default: + notification.error({ + message: '系统提示', + description: data.message, + duration: 4 + }) + break + } + } + return Promise.reject(error) +}; + +// request interceptor +service.interceptors.request.use(config => { + const token = Vue.ls.get(ACCESS_TOKEN) + if (token) { + config.headers[ 'X-Access-Token' ] = token // 让每个请求携带自定义 token 请根据实际情况自行修改 + } + return config +},(error) => { + return Promise.reject(error) +}) + +// response interceptor +service.interceptors.response.use((response) => { + return response.data + }, err) + +const installer = { + vm: {}, + install (Vue, router = {}) { + Vue.use(VueAxios, router, service) + } +} + +export { + installer as VueAxios, + service as axios +} \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/utils/storage.js b/ant-design-jeecg-vue/src/utils/storage.js new file mode 100644 index 00000000..b3c29ab3 --- /dev/null +++ b/ant-design-jeecg-vue/src/utils/storage.js @@ -0,0 +1,78 @@ +/** + * Set storage + * + * @param name + * @param content + * @param maxAge + */ +export const setStore = (name, content, maxAge = null) => { + if (!global.window || !name) { + return; + } + + if (typeof content !== 'string') { + content = JSON.stringify(content) + } + + let storage = global.window.localStorage + + storage.setItem(name, content) + if (maxAge && !isNaN(parseInt(maxAge))) { + let timeout = parseInt(new Date().getTime() / 1000) + storage.setItem(`${name}_expire`, timeout + maxAge) + } +}; + +/** + * Get storage + * + * @param name + * @returns {*} + */ +export const getStore = name => { + if (!global.window || !name) { + return; + } + + let content = window.localStorage.getItem(name) + let _expire = window.localStorage.getItem(`${name}_expire`) + + if (_expire) { + let now = parseInt(new Date().getTime() / 1000) + if (now > _expire) { + return; + } + } + + try { + return JSON.parse(content) + } catch (e) { + return content + } +}; + +/** + * Clear storage + * + * @param name + */ +export const clearStore = name => { + if (!global.window || !name) { + return; + } + + window.localStorage.removeItem(name) + window.localStorage.removeItem(`${name}_expire`) +}; + +/** + * Clear all storage + */ +export const clearAll = () => { + if (!global.window || !name) { + return; + } + + window.localStorage.clear() +} + diff --git a/ant-design-jeecg-vue/src/utils/util.js b/ant-design-jeecg-vue/src/utils/util.js new file mode 100644 index 00000000..c9287cd5 --- /dev/null +++ b/ant-design-jeecg-vue/src/utils/util.js @@ -0,0 +1,131 @@ + +export function timeFix() { + const time = new Date() + const hour = time.getHours() + return hour < 9 ? '早上好' : (hour <= 11 ? '上午好' : (hour <= 13 ? '中午好' : (hour < 20 ? '下午好' : '晚上好'))) +} + +export function welcome() { + const arr = ['休息一会儿吧', '准备吃什么呢?', '要不要打一把 DOTA', '我猜你可能累了'] + let index = Math.floor((Math.random()*arr.length)) + return arr[index] +} + +/** + * 触发 window.resize + */ +export function triggerWindowResizeEvent() { + let event = document.createEvent('HTMLEvents') + event.initEvent('resize', true, true) + event.eventType = 'message' + window.dispatchEvent(event) +} + +/** + * 过滤对象中为空的属性 + * @param obj + * @returns {*} + */ +export function filterObj(obj) { + if (!(typeof obj == 'object')) { + return; + } + + for ( var key in obj) { + if (obj.hasOwnProperty(key) + && (obj[key] == null || obj[key] == undefined || obj[key] == '')) { + delete obj[key]; + } + } + return obj; +} + +/** + * 时间格式化 + * @param value + * @param fmt + * @returns {*} + */ +export function formatDate(value, fmt) { + var regPos = /^\d+(\.\d+)?$/; + if(regPos.test(value)){ + //如果是数字 + let getDate = new Date(value); + let o = { + 'M+': getDate.getMonth() + 1, + 'd+': getDate.getDate(), + 'h+': getDate.getHours(), + 'm+': getDate.getMinutes(), + 's+': getDate.getSeconds(), + 'q+': Math.floor((getDate.getMonth() + 3) / 3), + 'S': getDate.getMilliseconds() + }; + if (/(y+)/.test(fmt)) { + fmt = fmt.replace(RegExp.$1, (getDate.getFullYear() + '').substr(4 - RegExp.$1.length)) + } + for (let k in o) { + if (new RegExp('(' + k + ')').test(fmt)) { + fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length))) + } + } + return fmt; + }else{ + //TODO + value = value.trim(); + return value.substr(0,fmt.length); + } +} + +// 生成首页路由 +export function generateIndexRouter(data) { +let indexRouter = [{ + path: '/', + name: 'dashboard', + //component: () => import('@/components/layouts/BasicLayout'), + component: resolve => require(['@/components/layouts/TabLayout'], resolve), + meta: { title: '首页' }, + redirect: '/dashboard/analysis', + children: [ + ...generateChildRouters(data) + ] + },{ + "path": "*", "redirect": "/404", "hidden": true + }] + return indexRouter; +} + +// 生成嵌套路由(子路由) + +function generateChildRouters (data) { + const routers = []; + for (var item of data) { + let component = ""; + if(item.component.indexOf("layouts")>=0){ + component = "components/"+item.component; + }else{ + component = "views/"+item.component; + } + let menu = { + path: item.path, + name: item.name, + redirect:item.redirect, + component: resolve => require(['@/' + component+'.vue'], resolve), + hidden:item.hidden, + //component:()=> import(`@/views/${item.component}.vue`), + meta: { + title:item.meta.title , + icon: item.meta.icon, + url:item.meta.url , + permissionList:item.meta.permissionList + } + } + if(item.alwaysShow){ + menu.alwaysShow = true; + } + if (item.children && item.children.length > 0) { + menu.children = [...generateChildRouters( item.children)]; + } + routers.push(menu); + } + return routers +} \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/404.vue b/ant-design-jeecg-vue/src/views/404.vue new file mode 100644 index 00000000..90fe0659 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/404.vue @@ -0,0 +1,15 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/Home.vue b/ant-design-jeecg-vue/src/views/Home.vue new file mode 100644 index 00000000..c9cab99c --- /dev/null +++ b/ant-design-jeecg-vue/src/views/Home.vue @@ -0,0 +1,163 @@ + + + + + diff --git a/ant-design-jeecg-vue/src/views/account/center/Index.vue b/ant-design-jeecg-vue/src/views/account/center/Index.vue new file mode 100644 index 00000000..024b0b89 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/account/center/Index.vue @@ -0,0 +1,287 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/account/center/page/App.vue b/ant-design-jeecg-vue/src/views/account/center/page/App.vue new file mode 100644 index 00000000..57dbaa20 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/account/center/page/App.vue @@ -0,0 +1,113 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/account/center/page/Article.vue b/ant-design-jeecg-vue/src/views/account/center/page/Article.vue new file mode 100644 index 00000000..0d743ef5 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/account/center/page/Article.vue @@ -0,0 +1,24 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/account/center/page/Project.vue b/ant-design-jeecg-vue/src/views/account/center/page/Project.vue new file mode 100644 index 00000000..460e02fd --- /dev/null +++ b/ant-design-jeecg-vue/src/views/account/center/page/Project.vue @@ -0,0 +1,17 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/account/center/page/index.js b/ant-design-jeecg-vue/src/views/account/center/page/index.js new file mode 100644 index 00000000..e80351ad --- /dev/null +++ b/ant-design-jeecg-vue/src/views/account/center/page/index.js @@ -0,0 +1,5 @@ +import AppPage from './App' +import ArticlePage from './Article' +import ProjectPage from './Project' + +export { AppPage, ArticlePage, ProjectPage } \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/account/settings/AvatarModal.vue b/ant-design-jeecg-vue/src/views/account/settings/AvatarModal.vue new file mode 100644 index 00000000..6fe58e51 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/account/settings/AvatarModal.vue @@ -0,0 +1,103 @@ + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/account/settings/BaseSetting.vue b/ant-design-jeecg-vue/src/views/account/settings/BaseSetting.vue new file mode 100644 index 00000000..8e9d4bef --- /dev/null +++ b/ant-design-jeecg-vue/src/views/account/settings/BaseSetting.vue @@ -0,0 +1,161 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/account/settings/Binding.vue b/ant-design-jeecg-vue/src/views/account/settings/Binding.vue new file mode 100644 index 00000000..273825ba --- /dev/null +++ b/ant-design-jeecg-vue/src/views/account/settings/Binding.vue @@ -0,0 +1,25 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/account/settings/Custom.vue b/ant-design-jeecg-vue/src/views/account/settings/Custom.vue new file mode 100644 index 00000000..8734c6f8 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/account/settings/Custom.vue @@ -0,0 +1,75 @@ + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/account/settings/Index.vue b/ant-design-jeecg-vue/src/views/account/settings/Index.vue new file mode 100644 index 00000000..fb9fd4a5 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/account/settings/Index.vue @@ -0,0 +1,154 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/account/settings/Notification.vue b/ant-design-jeecg-vue/src/views/account/settings/Notification.vue new file mode 100644 index 00000000..273825ba --- /dev/null +++ b/ant-design-jeecg-vue/src/views/account/settings/Notification.vue @@ -0,0 +1,25 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/account/settings/Security.vue b/ant-design-jeecg-vue/src/views/account/settings/Security.vue new file mode 100644 index 00000000..35aedb13 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/account/settings/Security.vue @@ -0,0 +1,41 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/dashboard/Analysis.vue b/ant-design-jeecg-vue/src/views/dashboard/Analysis.vue new file mode 100644 index 00000000..6313e6da --- /dev/null +++ b/ant-design-jeecg-vue/src/views/dashboard/Analysis.vue @@ -0,0 +1,267 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/dashboard/Monitor.vue b/ant-design-jeecg-vue/src/views/dashboard/Monitor.vue new file mode 100644 index 00000000..144e237e --- /dev/null +++ b/ant-design-jeecg-vue/src/views/dashboard/Monitor.vue @@ -0,0 +1,15 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/dashboard/Workplace.vue b/ant-design-jeecg-vue/src/views/dashboard/Workplace.vue new file mode 100644 index 00000000..0042c0bd --- /dev/null +++ b/ant-design-jeecg-vue/src/views/dashboard/Workplace.vue @@ -0,0 +1,361 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/exception/403.vue b/ant-design-jeecg-vue/src/views/exception/403.vue new file mode 100644 index 00000000..e9fc3992 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/exception/403.vue @@ -0,0 +1,17 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/exception/404.vue b/ant-design-jeecg-vue/src/views/exception/404.vue new file mode 100644 index 00000000..bc747b5e --- /dev/null +++ b/ant-design-jeecg-vue/src/views/exception/404.vue @@ -0,0 +1,17 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/exception/500.vue b/ant-design-jeecg-vue/src/views/exception/500.vue new file mode 100644 index 00000000..a36cabeb --- /dev/null +++ b/ant-design-jeecg-vue/src/views/exception/500.vue @@ -0,0 +1,17 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/exception/ExceptionPage.vue b/ant-design-jeecg-vue/src/views/exception/ExceptionPage.vue new file mode 100644 index 00000000..a3a3357a --- /dev/null +++ b/ant-design-jeecg-vue/src/views/exception/ExceptionPage.vue @@ -0,0 +1,88 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/exception/type.js b/ant-design-jeecg-vue/src/views/exception/type.js new file mode 100644 index 00000000..3fc7b1f8 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/exception/type.js @@ -0,0 +1,19 @@ +const types = { + 403: { + img: 'https://gw.alipayobjects.com/zos/rmsportal/wZcnGqRDyhPOEYFcZDnb.svg', + title: '403', + desc: '抱歉,你无权访问该页面' + }, + 404: { + img: 'https://gw.alipayobjects.com/zos/rmsportal/KpnpchXsobRgLElEozzI.svg', + title: '404', + desc: '抱歉,你访问的页面不存在或仍在开发中' + }, + 500: { + img: 'https://gw.alipayobjects.com/zos/rmsportal/RVRUAYdCGeYNBWoKiIwB.svg', + title: '500', + desc: '抱歉,服务器出错了' + } +} + +export default types \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/form/BasicForm.vue b/ant-design-jeecg-vue/src/views/form/BasicForm.vue new file mode 100644 index 00000000..0e4bedc8 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/form/BasicForm.vue @@ -0,0 +1,138 @@ + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/form/advancedForm/AdvancedForm.vue b/ant-design-jeecg-vue/src/views/form/advancedForm/AdvancedForm.vue new file mode 100644 index 00000000..45589844 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/form/advancedForm/AdvancedForm.vue @@ -0,0 +1,206 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/form/advancedForm/RepositoryForm.vue b/ant-design-jeecg-vue/src/views/form/advancedForm/RepositoryForm.vue new file mode 100644 index 00000000..0ad1fad1 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/form/advancedForm/RepositoryForm.vue @@ -0,0 +1,119 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/form/advancedForm/TaskForm.vue b/ant-design-jeecg-vue/src/views/form/advancedForm/TaskForm.vue new file mode 100644 index 00000000..e1af2aeb --- /dev/null +++ b/ant-design-jeecg-vue/src/views/form/advancedForm/TaskForm.vue @@ -0,0 +1,107 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/form/stepForm/Step1.vue b/ant-design-jeecg-vue/src/views/form/stepForm/Step1.vue new file mode 100644 index 00000000..384602c4 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/form/stepForm/Step1.vue @@ -0,0 +1,60 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/form/stepForm/Step2.vue b/ant-design-jeecg-vue/src/views/form/stepForm/Step2.vue new file mode 100644 index 00000000..dd1002d2 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/form/stepForm/Step2.vue @@ -0,0 +1,82 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/form/stepForm/Step3.vue b/ant-design-jeecg-vue/src/views/form/stepForm/Step3.vue new file mode 100644 index 00000000..513af0f9 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/form/stepForm/Step3.vue @@ -0,0 +1,69 @@ + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/form/stepForm/StepForm.vue b/ant-design-jeecg-vue/src/views/form/stepForm/StepForm.vue new file mode 100644 index 00000000..e1ab1168 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/form/stepForm/StepForm.vue @@ -0,0 +1,62 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/jeecg/FlowTest.vue b/ant-design-jeecg-vue/src/views/jeecg/FlowTest.vue new file mode 100644 index 00000000..19f832d4 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/jeecg/FlowTest.vue @@ -0,0 +1,93 @@ + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/jeecg/JeecgDemoList.vue b/ant-design-jeecg-vue/src/views/jeecg/JeecgDemoList.vue new file mode 100644 index 00000000..63dd8274 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/jeecg/JeecgDemoList.vue @@ -0,0 +1,404 @@ + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/jeecg/JeecgOrderMainList.vue b/ant-design-jeecg-vue/src/views/jeecg/JeecgOrderMainList.vue new file mode 100644 index 00000000..5ab3830e --- /dev/null +++ b/ant-design-jeecg-vue/src/views/jeecg/JeecgOrderMainList.vue @@ -0,0 +1,316 @@ + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/jeecg/PrintDemoList.vue b/ant-design-jeecg-vue/src/views/jeecg/PrintDemoList.vue new file mode 100644 index 00000000..e9d483d2 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/jeecg/PrintDemoList.vue @@ -0,0 +1,208 @@ + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/jeecg/helloworld.vue b/ant-design-jeecg-vue/src/views/jeecg/helloworld.vue new file mode 100644 index 00000000..9b73f065 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/jeecg/helloworld.vue @@ -0,0 +1,66 @@ + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/jeecg/helloworld2.vue b/ant-design-jeecg-vue/src/views/jeecg/helloworld2.vue new file mode 100644 index 00000000..3f567ef7 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/jeecg/helloworld2.vue @@ -0,0 +1,31 @@ + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/jeecg/modules/JeecgDemoModal.vue b/ant-design-jeecg-vue/src/views/jeecg/modules/JeecgDemoModal.vue new file mode 100644 index 00000000..f4c7ef44 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/jeecg/modules/JeecgDemoModal.vue @@ -0,0 +1,181 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/jeecg/modules/JeecgDemoTabsModal.vue b/ant-design-jeecg-vue/src/views/jeecg/modules/JeecgDemoTabsModal.vue new file mode 100644 index 00000000..8d39b30b --- /dev/null +++ b/ant-design-jeecg-vue/src/views/jeecg/modules/JeecgDemoTabsModal.vue @@ -0,0 +1,285 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/jeecg/modules/JeecgOrderMainModal.vue b/ant-design-jeecg-vue/src/views/jeecg/modules/JeecgOrderMainModal.vue new file mode 100644 index 00000000..1bfec52b --- /dev/null +++ b/ant-design-jeecg-vue/src/views/jeecg/modules/JeecgOrderMainModal.vue @@ -0,0 +1,304 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/jeecg/modules/SuperQueryModal.vue b/ant-design-jeecg-vue/src/views/jeecg/modules/SuperQueryModal.vue new file mode 100644 index 00000000..87909cfe --- /dev/null +++ b/ant-design-jeecg-vue/src/views/jeecg/modules/SuperQueryModal.vue @@ -0,0 +1,95 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/jeecg/tablist/JeecgOrderCustomerList.vue b/ant-design-jeecg-vue/src/views/jeecg/tablist/JeecgOrderCustomerList.vue new file mode 100644 index 00000000..170323b5 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/jeecg/tablist/JeecgOrderCustomerList.vue @@ -0,0 +1,293 @@ + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/jeecg/tablist/JeecgOrderDMainList.vue b/ant-design-jeecg-vue/src/views/jeecg/tablist/JeecgOrderDMainList.vue new file mode 100644 index 00000000..964e414a --- /dev/null +++ b/ant-design-jeecg-vue/src/views/jeecg/tablist/JeecgOrderDMainList.vue @@ -0,0 +1,347 @@ + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/jeecg/tablist/JeecgOrderTicketList.vue b/ant-design-jeecg-vue/src/views/jeecg/tablist/JeecgOrderTicketList.vue new file mode 100644 index 00000000..e70ec9f3 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/jeecg/tablist/JeecgOrderTicketList.vue @@ -0,0 +1,273 @@ + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/jeecg/tablist/form/JeecgOrderCustomerModal.vue b/ant-design-jeecg-vue/src/views/jeecg/tablist/form/JeecgOrderCustomerModal.vue new file mode 100644 index 00000000..23337009 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/jeecg/tablist/form/JeecgOrderCustomerModal.vue @@ -0,0 +1,383 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/jeecg/tablist/form/JeecgOrderDMainModal.vue b/ant-design-jeecg-vue/src/views/jeecg/tablist/form/JeecgOrderDMainModal.vue new file mode 100644 index 00000000..3e8bc08a --- /dev/null +++ b/ant-design-jeecg-vue/src/views/jeecg/tablist/form/JeecgOrderDMainModal.vue @@ -0,0 +1,304 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/jeecg/tablist/form/JeecgOrderTicketModal.vue b/ant-design-jeecg-vue/src/views/jeecg/tablist/form/JeecgOrderTicketModal.vue new file mode 100644 index 00000000..939df14c --- /dev/null +++ b/ant-design-jeecg-vue/src/views/jeecg/tablist/form/JeecgOrderTicketModal.vue @@ -0,0 +1,184 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/list/CardList.vue b/ant-design-jeecg-vue/src/views/list/CardList.vue new file mode 100644 index 00000000..bb3771ab --- /dev/null +++ b/ant-design-jeecg-vue/src/views/list/CardList.vue @@ -0,0 +1,110 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/list/PermissionList.vue b/ant-design-jeecg-vue/src/views/list/PermissionList.vue new file mode 100644 index 00000000..0eb7cc12 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/list/PermissionList.vue @@ -0,0 +1,272 @@ + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/list/RoleList.vue b/ant-design-jeecg-vue/src/views/list/RoleList.vue new file mode 100644 index 00000000..77c29f93 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/list/RoleList.vue @@ -0,0 +1,182 @@ + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/list/StandardList.vue b/ant-design-jeecg-vue/src/views/list/StandardList.vue new file mode 100644 index 00000000..03e7aade --- /dev/null +++ b/ant-design-jeecg-vue/src/views/list/StandardList.vue @@ -0,0 +1,164 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/list/TableInnerEditList.vue b/ant-design-jeecg-vue/src/views/list/TableInnerEditList.vue new file mode 100644 index 00000000..2520b20e --- /dev/null +++ b/ant-design-jeecg-vue/src/views/list/TableInnerEditList.vue @@ -0,0 +1,270 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/list/TableList.vue b/ant-design-jeecg-vue/src/views/list/TableList.vue new file mode 100644 index 00000000..ac9e0649 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/list/TableList.vue @@ -0,0 +1,337 @@ + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/list/UserList.vue b/ant-design-jeecg-vue/src/views/list/UserList.vue new file mode 100644 index 00000000..a3b95be8 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/list/UserList.vue @@ -0,0 +1,264 @@ + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/list/modules/RoleModal.vue b/ant-design-jeecg-vue/src/views/list/modules/RoleModal.vue new file mode 100644 index 00000000..4f9f832d --- /dev/null +++ b/ant-design-jeecg-vue/src/views/list/modules/RoleModal.vue @@ -0,0 +1,203 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/list/search/SearchLayout.vue b/ant-design-jeecg-vue/src/views/list/search/SearchLayout.vue new file mode 100644 index 00000000..16aa0f57 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/list/search/SearchLayout.vue @@ -0,0 +1,78 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/profile/advanced/Advanced.vue b/ant-design-jeecg-vue/src/views/profile/advanced/Advanced.vue new file mode 100644 index 00000000..f584292e --- /dev/null +++ b/ant-design-jeecg-vue/src/views/profile/advanced/Advanced.vue @@ -0,0 +1,342 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/profile/basic/Index.vue b/ant-design-jeecg-vue/src/views/profile/basic/Index.vue new file mode 100644 index 00000000..c43ee3a2 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/profile/basic/Index.vue @@ -0,0 +1,255 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/result/Error.vue b/ant-design-jeecg-vue/src/views/result/Error.vue new file mode 100644 index 00000000..634c4b6e --- /dev/null +++ b/ant-design-jeecg-vue/src/views/result/Error.vue @@ -0,0 +1,45 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/result/Result.vue b/ant-design-jeecg-vue/src/views/result/Result.vue new file mode 100644 index 00000000..85f81fb7 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/result/Result.vue @@ -0,0 +1,91 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/result/Success.vue b/ant-design-jeecg-vue/src/views/result/Success.vue new file mode 100644 index 00000000..b5061e31 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/result/Success.vue @@ -0,0 +1,92 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/system/DepartList.vue b/ant-design-jeecg-vue/src/views/system/DepartList.vue new file mode 100644 index 00000000..fdc7aec1 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/system/DepartList.vue @@ -0,0 +1,417 @@ + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/system/DepartList2.vue b/ant-design-jeecg-vue/src/views/system/DepartList2.vue new file mode 100644 index 00000000..ed912125 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/system/DepartList2.vue @@ -0,0 +1,270 @@ + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/system/DictList.vue b/ant-design-jeecg-vue/src/views/system/DictList.vue new file mode 100644 index 00000000..30c9346c --- /dev/null +++ b/ant-design-jeecg-vue/src/views/system/DictList.vue @@ -0,0 +1,460 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/system/LogList.vue b/ant-design-jeecg-vue/src/views/system/LogList.vue new file mode 100644 index 00000000..292ead4a --- /dev/null +++ b/ant-design-jeecg-vue/src/views/system/LogList.vue @@ -0,0 +1,260 @@ + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/system/PermissionList.vue b/ant-design-jeecg-vue/src/views/system/PermissionList.vue new file mode 100644 index 00000000..8cadc67a --- /dev/null +++ b/ant-design-jeecg-vue/src/views/system/PermissionList.vue @@ -0,0 +1,256 @@ + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/system/QuartzJobList.vue b/ant-design-jeecg-vue/src/views/system/QuartzJobList.vue new file mode 100644 index 00000000..635274e3 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/system/QuartzJobList.vue @@ -0,0 +1,365 @@ + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/system/RoleList.vue b/ant-design-jeecg-vue/src/views/system/RoleList.vue new file mode 100644 index 00000000..68ecfbb2 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/system/RoleList.vue @@ -0,0 +1,327 @@ + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/system/SysAnnouncementList.vue b/ant-design-jeecg-vue/src/views/system/SysAnnouncementList.vue new file mode 100644 index 00000000..27467f63 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/system/SysAnnouncementList.vue @@ -0,0 +1,406 @@ + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/system/UserList.vue b/ant-design-jeecg-vue/src/views/system/UserList.vue new file mode 100644 index 00000000..d432adea --- /dev/null +++ b/ant-design-jeecg-vue/src/views/system/UserList.vue @@ -0,0 +1,502 @@ + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/system/modules/DepartModal.vue b/ant-design-jeecg-vue/src/views/system/modules/DepartModal.vue new file mode 100644 index 00000000..70a57b3e --- /dev/null +++ b/ant-design-jeecg-vue/src/views/system/modules/DepartModal.vue @@ -0,0 +1,194 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/system/modules/DictItemModal.vue b/ant-design-jeecg-vue/src/views/system/modules/DictItemModal.vue new file mode 100644 index 00000000..80e4b9f7 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/system/modules/DictItemModal.vue @@ -0,0 +1,154 @@ + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/system/modules/DictModal.vue b/ant-design-jeecg-vue/src/views/system/modules/DictModal.vue new file mode 100644 index 00000000..20ca328e --- /dev/null +++ b/ant-design-jeecg-vue/src/views/system/modules/DictModal.vue @@ -0,0 +1,130 @@ + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/system/modules/PasswordModal.vue b/ant-design-jeecg-vue/src/views/system/modules/PasswordModal.vue new file mode 100644 index 00000000..d419f940 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/system/modules/PasswordModal.vue @@ -0,0 +1,136 @@ + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/system/modules/PermissionModal.vue b/ant-design-jeecg-vue/src/views/system/modules/PermissionModal.vue new file mode 100644 index 00000000..7a13604e --- /dev/null +++ b/ant-design-jeecg-vue/src/views/system/modules/PermissionModal.vue @@ -0,0 +1,283 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/system/modules/QuartzJobModal.vue b/ant-design-jeecg-vue/src/views/system/modules/QuartzJobModal.vue new file mode 100644 index 00000000..b7c4cc7e --- /dev/null +++ b/ant-design-jeecg-vue/src/views/system/modules/QuartzJobModal.vue @@ -0,0 +1,157 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/system/modules/RoleModal.vue b/ant-design-jeecg-vue/src/views/system/modules/RoleModal.vue new file mode 100644 index 00000000..f8c934e4 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/system/modules/RoleModal.vue @@ -0,0 +1,155 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/system/modules/SysAnnouncementModal.vue b/ant-design-jeecg-vue/src/views/system/modules/SysAnnouncementModal.vue new file mode 100644 index 00000000..34810b11 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/system/modules/SysAnnouncementModal.vue @@ -0,0 +1,225 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/system/modules/UserModal.vue b/ant-design-jeecg-vue/src/views/system/modules/UserModal.vue new file mode 100644 index 00000000..167c75b8 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/system/modules/UserModal.vue @@ -0,0 +1,378 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/system/modules/UserRoleModal.vue b/ant-design-jeecg-vue/src/views/system/modules/UserRoleModal.vue new file mode 100644 index 00000000..e3421536 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/system/modules/UserRoleModal.vue @@ -0,0 +1,168 @@ + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/system/modules/icon/Icon.less b/ant-design-jeecg-vue/src/views/system/modules/icon/Icon.less new file mode 100644 index 00000000..5e371874 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/system/modules/icon/Icon.less @@ -0,0 +1,35 @@ +@active-color: #4a4a48; +ul { + max-height: 700px; + overflow-y: auto; + padding-left: .5rem; + i { + font-size: 1.5rem; + border: 1px solid #f1f1f1; + padding: .2rem; + margin: .3rem; + cursor: pointer; + &.active, &:hover { + border-radius: 2px; + border-color: @active-color; + background-color: @active-color; + color: #fff; + transition: all .3s; + } + } + li { + list-style: none; + float: left; + width: 5%; + text-align: center; + cursor: pointer; + color: #555; + transition: color .3s ease-in-out,background-color .3s ease-in-out; + position: relative; + margin: 3px 0; + border-radius: 4px; + background-color: #fff; + overflow: hidden; + padding: 10px 0 0; + } +} diff --git a/ant-design-jeecg-vue/src/views/system/modules/icon/Icons.vue b/ant-design-jeecg-vue/src/views/system/modules/icon/Icons.vue new file mode 100644 index 00000000..4b18ced5 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/system/modules/icon/Icons.vue @@ -0,0 +1,123 @@ + + + diff --git a/ant-design-jeecg-vue/src/views/user/Login.vue b/ant-design-jeecg-vue/src/views/user/Login.vue new file mode 100644 index 00000000..7a84ccd5 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/user/Login.vue @@ -0,0 +1,314 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/user/Register.vue b/ant-design-jeecg-vue/src/views/user/Register.vue new file mode 100644 index 00000000..52008b76 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/user/Register.vue @@ -0,0 +1,316 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/user/RegisterResult.vue b/ant-design-jeecg-vue/src/views/user/RegisterResult.vue new file mode 100644 index 00000000..e471f192 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/user/RegisterResult.vue @@ -0,0 +1,50 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/vue.config.js b/ant-design-jeecg-vue/vue.config.js new file mode 100644 index 00000000..f3cf6da9 --- /dev/null +++ b/ant-design-jeecg-vue/vue.config.js @@ -0,0 +1,73 @@ +const path = require('path') + +function resolve(dir) { + return path.join(__dirname, dir) +} + +// vue.config.js +module.exports = { + /* + Vue-cli3: + Crashed when using Webpack `import()` #2463 + https://github.com/vuejs/vue-cli/issues/2463 + + */ + /* + pages: { + index: { + entry: 'src/main.js', + chunks: ['chunk-vendors', 'chunk-common', 'index'] + } + }, + */ + configureWebpack: {}, + + chainWebpack: (config) => { + config.resolve.alias + .set('@$', resolve('src')) + .set('@api', resolve('src/api')) + .set('@assets', resolve('src/assets')) + .set('@comp', resolve('src/components')) + .set('@views', resolve('src/views')) + .set('@layout', resolve('src/layout')) + .set('@static', resolve('src/static')) + }, + + css: { + loaderOptions: { + less: { + modifyVars: { + /* less 变量覆盖,用于自定义 ant design 主题 */ + + /* + 'primary-color': '#F5222D', + 'link-color': '#F5222D', + 'border-radius-base': '4px', + */ + }, + javascriptEnabled: true, + } + } + }, + + devServer: { + port: 3000, + proxy: { + /* '/api': { + target: 'https://mock.ihx.me/mock/5baf3052f7da7e07e04a5116/antd-pro', //mock API接口系统 + ws: false, + changeOrigin: true, + pathRewrite: { + '/jeecg-boot': '' //默认所有请求都加了jeecg-boot前缀,需要去掉 + } + },*/ + '/jeecg-boot': { + target: 'http://localhost:8080', //请求本地 需要jeecg-boot后台项目 + ws: false, + changeOrigin: true + }, + } + }, + + lintOnSave: undefined +} \ No newline at end of file diff --git a/ant-design-jeecg-vue/yarn.lock b/ant-design-jeecg-vue/yarn.lock new file mode 100644 index 00000000..73e32fe4 --- /dev/null +++ b/ant-design-jeecg-vue/yarn.lock @@ -0,0 +1,9448 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@antv/adjust@~0.1.0": + version "0.1.0" + resolved "http://registry.npm.taobao.org/@antv/adjust/download/@antv/adjust-0.1.0.tgz#c4bce8ba0aef7cd5b3bf271f75f434c07bd215a0" + integrity sha1-xLzougrvfNWzvycfdfQ0wHvSFaA= + dependencies: + "@antv/util" "~1.3.1" + +"@antv/attr@~0.1.2": + version "0.1.2" + resolved "http://registry.npm.taobao.org/@antv/attr/download/@antv/attr-0.1.2.tgz#2eeb122fcaaf851a2d8749abc7c60519d3f77e37" + integrity sha1-LusSL8qvhRoth0mrx8YFGdP3fjc= + dependencies: + "@antv/util" "~1.3.1" + +"@antv/component@~0.3.1": + version "0.3.1" + resolved "http://registry.npm.taobao.org/@antv/component/download/@antv/component-0.3.1.tgz#25eb53e3ed3a0f413896be2f83e7e704bfb6b097" + integrity sha1-JetT4+06D0E4lr4vg+fnBL+2sJc= + dependencies: + "@antv/attr" "~0.1.2" + "@antv/g" "~3.3.5" + "@antv/util" "~1.3.1" + wolfy87-eventemitter "~5.1.0" + +"@antv/coord@~0.1.0": + version "0.1.0" + resolved "http://registry.npm.taobao.org/@antv/coord/download/@antv/coord-0.1.0.tgz#48a80ae36d07552f96657e7f8095227c63f0c0a9" + integrity sha1-SKgK420HVS+WZX5/gJUifGPwwKk= + dependencies: + "@antv/util" "~1.3.1" + +"@antv/data-set@^0.10.1": + version "0.10.1" + resolved "https://registry.yarnpkg.com/@antv/data-set/-/data-set-0.10.1.tgz#b8b103f166362508a91f69c8d0a989dbcf046ed5" + integrity sha512-Pg2VO2i3euZke9sUZgU84Ywb/zrYQTBPMRKOgRJTvyBaTHJXAzbKYSJII5e+a2tkOR4t/sHcp0zE4Lwkrb4RRw== + dependencies: + "@antv/hierarchy" "~0.4.0" + "@antv/util" "~1.3.1" + d3-array "~1.2.0" + d3-composite-projections "~1.2.0" + d3-dsv "~1.0.5" + d3-geo "~1.6.4" + d3-geo-projection "~2.1.2" + d3-hexjson "~1.0.1" + d3-hierarchy "~1.1.5" + d3-sankey "~0.7.1" + d3-voronoi "~1.1.2" + dagre "~0.8.2" + point-at-length "~1.0.2" + regression "~2.0.0" + simple-statistics "~6.1.0" + topojson-client "~3.0.0" + wolfy87-eventemitter "~5.1.0" + +"@antv/g2-brush@^0.0.2": + version "0.0.2" + resolved "http://registry.npm.taobao.org/@antv/g2-brush/download/@antv/g2-brush-0.0.2.tgz#0b65f3ebbf82690202913d0b6759ab2900faa841" + integrity sha1-C2Xz67+CaQICkT0LZ1mrKQD6qEE= + +"@antv/g2-plugin-slider@^2.1.0": + version "2.1.0" + resolved "http://registry.npm.taobao.org/@antv/g2-plugin-slider/download/@antv/g2-plugin-slider-2.1.0.tgz#7f2f5879d33dcfb14dd2b955092ca198ad9152b9" + integrity sha1-fy9YedM9z7FN0rlVCSyhmK2RUrk= + +"@antv/g2@^3.3.0": + version "3.4.5" + resolved "http://registry.npm.taobao.org/@antv/g2/download/@antv/g2-3.4.5.tgz#87b8b169f38af318b42e93c4cd5323f20d2d01fb" + integrity sha1-h7ixafOK8xi0LpPEzVMj8g0tAfs= + dependencies: + "@antv/adjust" "~0.1.0" + "@antv/attr" "~0.1.2" + "@antv/component" "~0.3.1" + "@antv/coord" "~0.1.0" + "@antv/g" "~3.3.5" + "@antv/scale" "~0.1.0" + "@antv/util" "~1.3.1" + venn.js "~0.2.20" + wolfy87-eventemitter "~5.1.0" + +"@antv/g@~3.3.5": + version "3.3.5" + resolved "http://registry.npm.taobao.org/@antv/g/download/@antv/g-3.3.5.tgz#9959baad1b85199614e591c9926879afb1fbb943" + integrity sha1-mVm6rRuFGZYU5ZHJkmh5r7H7uUM= + dependencies: + "@antv/gl-matrix" "~2.7.1" + "@antv/util" "~1.3.1" + d3-ease "~1.0.3" + d3-interpolate "~1.1.5" + d3-timer "~1.0.6" + wolfy87-eventemitter "~5.1.0" + +"@antv/gl-matrix@^2.7.1", "@antv/gl-matrix@~2.7.1": + version "2.7.1" + resolved "http://registry.npm.taobao.org/@antv/gl-matrix/download/@antv/gl-matrix-2.7.1.tgz#acb8e37f7ab3df01345aba4372d7942be42eba14" + integrity sha1-rLjjf3qz3wE0WrpDcteUK+QuuhQ= + +"@antv/hierarchy@~0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@antv/hierarchy/-/hierarchy-0.4.0.tgz#712b5b4477ee0b8b8db174c682b5356b0411aab6" + integrity sha512-ols+m+Z8QA4895SWMTOSjVImOX4tEbWQTwJ0NE+WATc0WLSKs6D9y2yaR+ZWt6P60BMGVIKS6lIfabO3CwGgnQ== + dependencies: + "@antv/util" "~1.3.1" + +"@antv/scale@~0.1.0": + version "0.1.0" + resolved "http://registry.npm.taobao.org/@antv/scale/download/@antv/scale-0.1.0.tgz#2b5459a100f97aac04781376d53904ccab18aab7" + integrity sha1-K1RZoQD5eqwEeBN21TkEzKsYqrc= + dependencies: + "@antv/util" "~1.3.1" + fecha "~2.3.3" + +"@antv/util@~1.3.1": + version "1.3.1" + resolved "http://registry.npm.taobao.org/@antv/util/download/@antv/util-1.3.1.tgz#30a34b201ff9126ec0d58c72c8166a9c3e644ccd" + integrity sha1-MKNLIB/5Em7A1YxyyBZqnD5kTM0= + dependencies: + "@antv/gl-matrix" "^2.7.1" + +"@babel/code-frame@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz#2a02643368de80916162be70865c97774f3adbd9" + integrity sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g== + dependencies: + "@babel/highlight" "7.0.0-beta.44" + +"@babel/code-frame@^7.0.0": + version "7.0.0" + resolved "http://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" + integrity sha1-BuKrGb21NThVWaq7W6WXKUgoAPg= + dependencies: + "@babel/highlight" "^7.0.0" + +"@babel/core@^7.0.0", "@babel/core@^7.1.2": + version "7.1.6" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.1.6.tgz#3733cbee4317429bc87c62b29cf8587dba7baeb3" + integrity sha512-Hz6PJT6e44iUNpAn8AoyAs6B3bl60g7MJQaI0rZEar6ECzh6+srYO1xlIdssio34mPaUtAb1y+XlkkSJzok3yw== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.1.6" + "@babel/helpers" "^7.1.5" + "@babel/parser" "^7.1.6" + "@babel/template" "^7.1.2" + "@babel/traverse" "^7.1.6" + "@babel/types" "^7.1.6" + convert-source-map "^1.1.0" + debug "^4.1.0" + json5 "^2.1.0" + lodash "^4.17.10" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0-beta.44.tgz#c7e67b9b5284afcf69b309b50d7d37f3e5033d42" + integrity sha512-5xVb7hlhjGcdkKpMXgicAVgx8syK5VJz193k0i/0sLP6DzE6lRrU1K3B/rFefgdo9LPGMAOOOAWW4jycj07ShQ== + dependencies: + "@babel/types" "7.0.0-beta.44" + jsesc "^2.5.1" + lodash "^4.2.0" + source-map "^0.5.0" + trim-right "^1.0.1" + +"@babel/generator@^7.1.6": + version "7.1.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.1.6.tgz#001303cf87a5b9d093494a4bf251d7b5d03d3999" + integrity sha512-brwPBtVvdYdGxtenbQgfCdDPmtkmUBZPjUoK5SXJEBuHaA5BCubh9ly65fzXz7R6o5rA76Rs22ES8Z+HCc0YIQ== + dependencies: + "@babel/types" "^7.1.6" + jsesc "^2.5.1" + lodash "^4.17.10" + source-map "^0.5.0" + trim-right "^1.0.1" + +"@babel/helper-annotate-as-pure@^7.0.0": + version "7.0.0" + resolved "http://registry.npm.taobao.org/@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" + integrity sha1-Mj053QtQ4Qx8Bsp9djjmhk2MXDI= + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0": + version "7.1.0" + resolved "http://registry.npm.taobao.org/@babel/helper-builder-binary-assignment-operator-visitor/download/@babel/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f" + integrity sha1-a2lijf5Ah3mODE7Zjj1Kay+9L18= + dependencies: + "@babel/helper-explode-assignable-expression" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helper-call-delegate@^7.1.0": + version "7.1.0" + resolved "http://registry.npm.taobao.org/@babel/helper-call-delegate/download/@babel/helper-call-delegate-7.1.0.tgz#6a957f105f37755e8645343d3038a22e1449cc4a" + integrity sha1-apV/EF83dV6GRTQ9MDiiLhRJzEo= + dependencies: + "@babel/helper-hoist-variables" "^7.0.0" + "@babel/traverse" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helper-define-map@^7.1.0": + version "7.1.0" + resolved "http://registry.npm.taobao.org/@babel/helper-define-map/download/@babel/helper-define-map-7.1.0.tgz#3b74caec329b3c80c116290887c0dd9ae468c20c" + integrity sha1-O3TK7DKbPIDBFikIh8DdmuRowgw= + dependencies: + "@babel/helper-function-name" "^7.1.0" + "@babel/types" "^7.0.0" + lodash "^4.17.10" + +"@babel/helper-explode-assignable-expression@^7.1.0": + version "7.1.0" + resolved "http://registry.npm.taobao.org/@babel/helper-explode-assignable-expression/download/@babel/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6" + integrity sha1-U3+hP28WdN90WwwA7I/k6ZaByPY= + dependencies: + "@babel/traverse" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helper-function-name@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz#e18552aaae2231100a6e485e03854bc3532d44dd" + integrity sha512-MHRG2qZMKMFaBavX0LWpfZ2e+hLloT++N7rfM3DYOMUOGCD8cVjqZpwiL8a0bOX3IYcQev1ruciT0gdFFRTxzg== + dependencies: + "@babel/helper-get-function-arity" "7.0.0-beta.44" + "@babel/template" "7.0.0-beta.44" + "@babel/types" "7.0.0-beta.44" + +"@babel/helper-function-name@^7.1.0": + version "7.1.0" + resolved "http://registry.npm.taobao.org/@babel/helper-function-name/download/@babel/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" + integrity sha1-oM6wFoX3M1XUNgwSR/WCv6/I/1M= + dependencies: + "@babel/helper-get-function-arity" "^7.0.0" + "@babel/template" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helper-get-function-arity@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz#d03ca6dd2b9f7b0b1e6b32c56c72836140db3a15" + integrity sha512-w0YjWVwrM2HwP6/H3sEgrSQdkCaxppqFeJtAnB23pRiJB5E/O9Yp7JAAeWBl+gGEgmBFinnTyOv2RN7rcSmMiw== + dependencies: + "@babel/types" "7.0.0-beta.44" + +"@babel/helper-get-function-arity@^7.0.0": + version "7.0.0" + resolved "http://registry.npm.taobao.org/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" + integrity sha1-g1ctQyDipGVyY3NBE8QoaLZOScM= + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-hoist-variables@^7.0.0": + version "7.0.0" + resolved "http://registry.npm.taobao.org/@babel/helper-hoist-variables/download/@babel/helper-hoist-variables-7.0.0.tgz#46adc4c5e758645ae7a45deb92bab0918c23bb88" + integrity sha1-Rq3ExedYZFrnpF3rkrqwkYwju4g= + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-member-expression-to-functions@^7.0.0": + version "7.0.0" + resolved "http://registry.npm.taobao.org/@babel/helper-member-expression-to-functions/download/@babel/helper-member-expression-to-functions-7.0.0.tgz#8cd14b0a0df7ff00f009e7d7a436945f47c7a16f" + integrity sha1-jNFLCg33/wDwCefXpDaUX0fHoW8= + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-module-imports@^7.0.0": + version "7.0.0" + resolved "http://registry.npm.taobao.org/@babel/helper-module-imports/download/@babel/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d" + integrity sha1-lggbcRHkhtpNLNlxrRpP4hbMLj0= + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-module-transforms@^7.1.0": + version "7.1.0" + resolved "http://registry.npm.taobao.org/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.1.0.tgz#470d4f9676d9fad50b324cdcce5fbabbc3da5787" + integrity sha1-Rw1PlnbZ+tULMkzczl+6u8PaV4c= + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-simple-access" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.0.0" + "@babel/template" "^7.1.0" + "@babel/types" "^7.0.0" + lodash "^4.17.10" + +"@babel/helper-optimise-call-expression@^7.0.0": + version "7.0.0" + resolved "http://registry.npm.taobao.org/@babel/helper-optimise-call-expression/download/@babel/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5" + integrity sha1-opIMVwKwc8Fd5REGIAqoytIEl9U= + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-plugin-utils@^7.0.0": + version "7.0.0" + resolved "http://registry.npm.taobao.org/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" + integrity sha1-u7P77phmHFaQNCN8wDlnupm08lA= + +"@babel/helper-regex@^7.0.0": + version "7.0.0" + resolved "http://registry.npm.taobao.org/@babel/helper-regex/download/@babel/helper-regex-7.0.0.tgz#2c1718923b57f9bbe64705ffe5640ac64d9bdb27" + integrity sha1-LBcYkjtX+bvmRwX/5WQKxk2b2yc= + dependencies: + lodash "^4.17.10" + +"@babel/helper-remap-async-to-generator@^7.1.0": + version "7.1.0" + resolved "http://registry.npm.taobao.org/@babel/helper-remap-async-to-generator/download/@babel/helper-remap-async-to-generator-7.1.0.tgz#361d80821b6f38da75bd3f0785ece20a88c5fe7f" + integrity sha1-Nh2AghtvONp1vT8HheziCojF/n8= + dependencies: + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-wrap-function" "^7.1.0" + "@babel/template" "^7.1.0" + "@babel/traverse" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helper-replace-supers@^7.1.0": + version "7.1.0" + resolved "http://registry.npm.taobao.org/@babel/helper-replace-supers/download/@babel/helper-replace-supers-7.1.0.tgz#5fc31de522ec0ef0899dc9b3e7cf6a5dd655f362" + integrity sha1-X8Md5SLsDvCJncmz589qXdZV82I= + dependencies: + "@babel/helper-member-expression-to-functions" "^7.0.0" + "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/traverse" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helper-simple-access@^7.1.0": + version "7.1.0" + resolved "http://registry.npm.taobao.org/@babel/helper-simple-access/download/@babel/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c" + integrity sha1-Ze65VMjCRb6qToWdphiPOdceWFw= + dependencies: + "@babel/template" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helper-split-export-declaration@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz#c0b351735e0fbcb3822c8ad8db4e583b05ebd9dc" + integrity sha512-aQ7QowtkgKKzPGf0j6u77kBMdUFVBKNHw2p/3HX/POt5/oz8ec5cs0GwlgM8Hz7ui5EwJnzyfRmkNF1Nx1N7aA== + dependencies: + "@babel/types" "7.0.0-beta.44" + +"@babel/helper-split-export-declaration@^7.0.0": + version "7.0.0" + resolved "http://registry.npm.taobao.org/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.0.0.tgz#3aae285c0311c2ab095d997b8c9a94cad547d813" + integrity sha1-Oq4oXAMRwqsJXZl7jJqUytVH2BM= + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-wrap-function@^7.1.0": + version "7.1.0" + resolved "http://registry.npm.taobao.org/@babel/helper-wrap-function/download/@babel/helper-wrap-function-7.1.0.tgz#8cf54e9190706067f016af8f75cb3df829cc8c66" + integrity sha1-jPVOkZBwYGfwFq+Pdcs9+CnMjGY= + dependencies: + "@babel/helper-function-name" "^7.1.0" + "@babel/template" "^7.1.0" + "@babel/traverse" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helpers@^7.1.5": + version "7.1.5" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.1.5.tgz#68bfc1895d685f2b8f1995e788dbfe1f6ccb1996" + integrity sha512-2jkcdL02ywNBry1YNFAH/fViq4fXG0vdckHqeJk+75fpQ2OH+Az6076tX/M0835zA45E0Cqa6pV5Kiv9YOqjEg== + dependencies: + "@babel/template" "^7.1.2" + "@babel/traverse" "^7.1.5" + "@babel/types" "^7.1.5" + +"@babel/highlight@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.44.tgz#18c94ce543916a80553edcdcf681890b200747d5" + integrity sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ== + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^3.0.0" + +"@babel/highlight@^7.0.0": + version "7.0.0" + resolved "http://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" + integrity sha1-9xDDjI1Fjm3ZogGvtjf8t4HOmeQ= + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^4.0.0" + +"@babel/parser@^7.0.0", "@babel/parser@^7.1.2", "@babel/parser@^7.1.6": + version "7.1.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.1.6.tgz#16e97aca1ec1062324a01c5a6a7d0df8dd189854" + integrity sha512-dWP6LJm9nKT6ALaa+bnL247GHHMWir3vSlZ2+IHgHgktZQx0L3Uvq2uAWcuzIe+fujRsYWBW2q622C5UvGK9iQ== + +"@babel/plugin-proposal-async-generator-functions@^7.1.0": + version "7.1.0" + resolved "http://registry.npm.taobao.org/@babel/plugin-proposal-async-generator-functions/download/@babel/plugin-proposal-async-generator-functions-7.1.0.tgz#41c1a702e10081456e23a7b74d891922dd1bb6ce" + integrity sha1-QcGnAuEAgUVuI6e3TYkZIt0bts4= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-remap-async-to-generator" "^7.1.0" + "@babel/plugin-syntax-async-generators" "^7.0.0" + +"@babel/plugin-proposal-class-properties@^7.0.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.1.0.tgz#9af01856b1241db60ec8838d84691aa0bd1e8df4" + integrity sha512-/PCJWN+CKt5v1xcGn4vnuu13QDoV+P7NcICP44BoonAJoPSGwVkgrXihFIQGiEjjPlUDBIw1cM7wYFLARS2/hw== + dependencies: + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-member-expression-to-functions" "^7.0.0" + "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.1.0" + "@babel/plugin-syntax-class-properties" "^7.0.0" + +"@babel/plugin-proposal-decorators@^7.1.0": + version "7.1.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.1.6.tgz#460c31edbd01953efe45d491583b3ec31661d689" + integrity sha512-U42f8KhUbtlhUDyV/wK4Rq/wWh8vWyttYABckG/v0vVnMPvayOewZC/83CbVdmyP+UhEqI368FEQ7hHMfhBpQA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.0.0" + "@babel/plugin-syntax-decorators" "^7.1.0" + +"@babel/plugin-proposal-json-strings@^7.0.0": + version "7.0.0" + resolved "http://registry.npm.taobao.org/@babel/plugin-proposal-json-strings/download/@babel/plugin-proposal-json-strings-7.0.0.tgz#3b4d7b5cf51e1f2e70f52351d28d44fc2970d01e" + integrity sha1-O017XPUeHy5w9SNR0o1E/Clw0B4= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-json-strings" "^7.0.0" + +"@babel/plugin-proposal-object-rest-spread@^7.0.0": + version "7.0.0" + resolved "http://registry.npm.taobao.org/@babel/plugin-proposal-object-rest-spread/download/@babel/plugin-proposal-object-rest-spread-7.0.0.tgz#9a17b547f64d0676b6c9cecd4edf74a82ab85e7e" + integrity sha1-mhe1R/ZNBna2yc7NTt90qCq4Xn4= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-object-rest-spread" "^7.0.0" + +"@babel/plugin-proposal-optional-catch-binding@^7.0.0": + version "7.0.0" + resolved "http://registry.npm.taobao.org/@babel/plugin-proposal-optional-catch-binding/download/@babel/plugin-proposal-optional-catch-binding-7.0.0.tgz#b610d928fe551ff7117d42c8bb410eec312a6425" + integrity sha1-thDZKP5VH/cRfULIu0EO7DEqZCU= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.0.0" + +"@babel/plugin-proposal-unicode-property-regex@^7.0.0": + version "7.0.0" + resolved "http://registry.npm.taobao.org/@babel/plugin-proposal-unicode-property-regex/download/@babel/plugin-proposal-unicode-property-regex-7.0.0.tgz#498b39cd72536cd7c4b26177d030226eba08cd33" + integrity sha1-SYs5zXJTbNfEsmF30DAibroIzTM= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.0.0" + regexpu-core "^4.2.0" + +"@babel/plugin-syntax-async-generators@^7.0.0": + version "7.0.0" + resolved "http://registry.npm.taobao.org/@babel/plugin-syntax-async-generators/download/@babel/plugin-syntax-async-generators-7.0.0.tgz#bf0891dcdbf59558359d0c626fdc9490e20bc13c" + integrity sha1-vwiR3Nv1lVg1nQxib9yUkOILwTw= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-class-properties@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.0.0.tgz#e051af5d300cbfbcec4a7476e37a803489881634" + integrity sha512-cR12g0Qzn4sgkjrbrzWy2GE7m9vMl/sFkqZ3gIpAQdrvPDnLM8180i+ANDFIXfjHo9aqp0ccJlQ0QNZcFUbf9w== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-decorators@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.1.0.tgz#2fa7c1a7905a299c9853ebcef340306675f9cbdc" + integrity sha512-uQvRSbgQ0nQg3jsmIixXXDCgSpkBolJ9X7NYThMKCcjvE8dN2uWJUzTUNNAeuKOjARTd+wUQV0ztXpgunZYKzQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-dynamic-import@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.0.0.tgz#6dfb7d8b6c3be14ce952962f658f3b7eb54c33ee" + integrity sha512-Gt9xNyRrCHCiyX/ZxDGOcBnlJl0I3IWicpZRC4CdC0P5a/I07Ya2OAMEBU+J7GmRFVmIetqEYRko6QYRuKOESw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-json-strings@^7.0.0": + version "7.0.0" + resolved "http://registry.npm.taobao.org/@babel/plugin-syntax-json-strings/download/@babel/plugin-syntax-json-strings-7.0.0.tgz#0d259a68090e15b383ce3710e01d5b23f3770cbd" + integrity sha1-DSWaaAkOFbODzjcQ4B1bI/N3DL0= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-jsx@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.0.0.tgz#034d5e2b4e14ccaea2e4c137af7e4afb39375ffd" + integrity sha512-PdmL2AoPsCLWxhIr3kG2+F9v4WH06Q3z+NoGVpQgnUNGcagXHq5sB3OXxkSahKq9TLdNMN/AJzFYSOo8UKDMHg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-object-rest-spread@^7.0.0": + version "7.0.0" + resolved "http://registry.npm.taobao.org/@babel/plugin-syntax-object-rest-spread/download/@babel/plugin-syntax-object-rest-spread-7.0.0.tgz#37d8fbcaf216bd658ea1aebbeb8b75e88ebc549b" + integrity sha1-N9j7yvIWvWWOoa6764t16I68VJs= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.0.0": + version "7.0.0" + resolved "http://registry.npm.taobao.org/@babel/plugin-syntax-optional-catch-binding/download/@babel/plugin-syntax-optional-catch-binding-7.0.0.tgz#886f72008b3a8b185977f7cb70713b45e51ee475" + integrity sha1-iG9yAIs6ixhZd/fLcHE7ReUe5HU= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-arrow-functions@^7.0.0": + version "7.0.0" + resolved "http://registry.npm.taobao.org/@babel/plugin-transform-arrow-functions/download/@babel/plugin-transform-arrow-functions-7.0.0.tgz#a6c14875848c68a3b4b3163a486535ef25c7e749" + integrity sha1-psFIdYSMaKO0sxY6SGU17yXH50k= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-async-to-generator@^7.1.0": + version "7.1.0" + resolved "http://registry.npm.taobao.org/@babel/plugin-transform-async-to-generator/download/@babel/plugin-transform-async-to-generator-7.1.0.tgz#109e036496c51dd65857e16acab3bafdf3c57811" + integrity sha1-EJ4DZJbFHdZYV+FqyrO6/fPFeBE= + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-remap-async-to-generator" "^7.1.0" + +"@babel/plugin-transform-block-scoped-functions@^7.0.0": + version "7.0.0" + resolved "http://registry.npm.taobao.org/@babel/plugin-transform-block-scoped-functions/download/@babel/plugin-transform-block-scoped-functions-7.0.0.tgz#482b3f75103927e37288b3b67b65f848e2aa0d07" + integrity sha1-SCs/dRA5J+NyiLO2e2X4SOKqDQc= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-block-scoping@^7.1.5": + version "7.1.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.1.5.tgz#3e8e0bc9a5104519923302a24f748f72f2f61f37" + integrity sha512-jlYcDrz+5ayWC7mxgpn1Wj8zj0mmjCT2w0mPIMSwO926eXBRxpEgoN/uQVRBfjtr8ayjcmS+xk2G1jaP8JjMJQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + lodash "^4.17.10" + +"@babel/plugin-transform-classes@^7.1.0": + version "7.1.0" + resolved "http://registry.npm.taobao.org/@babel/plugin-transform-classes/download/@babel/plugin-transform-classes-7.1.0.tgz#ab3f8a564361800cbc8ab1ca6f21108038432249" + integrity sha1-qz+KVkNhgAy8irHKbyEQgDhDIkk= + dependencies: + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-define-map" "^7.1.0" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.0.0" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.0.0": + version "7.0.0" + resolved "http://registry.npm.taobao.org/@babel/plugin-transform-computed-properties/download/@babel/plugin-transform-computed-properties-7.0.0.tgz#2fbb8900cd3e8258f2a2ede909b90e7556185e31" + integrity sha1-L7uJAM0+gljyou3pCbkOdVYYXjE= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-destructuring@^7.0.0": + version "7.1.3" + resolved "http://registry.npm.taobao.org/@babel/plugin-transform-destructuring/download/@babel/plugin-transform-destructuring-7.1.3.tgz#e69ff50ca01fac6cb72863c544e516c2b193012f" + integrity sha1-5p/1DKAfrGy3KGPFROUWwrGTAS8= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-dotall-regex@^7.0.0": + version "7.0.0" + resolved "http://registry.npm.taobao.org/@babel/plugin-transform-dotall-regex/download/@babel/plugin-transform-dotall-regex-7.0.0.tgz#73a24da69bc3c370251f43a3d048198546115e58" + integrity sha1-c6JNppvDw3AlH0Oj0EgZhUYRXlg= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.0.0" + regexpu-core "^4.1.3" + +"@babel/plugin-transform-duplicate-keys@^7.0.0": + version "7.0.0" + resolved "http://registry.npm.taobao.org/@babel/plugin-transform-duplicate-keys/download/@babel/plugin-transform-duplicate-keys-7.0.0.tgz#a0601e580991e7cace080e4cf919cfd58da74e86" + integrity sha1-oGAeWAmR58rOCA5M+RnP1Y2nToY= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-exponentiation-operator@^7.1.0": + version "7.1.0" + resolved "http://registry.npm.taobao.org/@babel/plugin-transform-exponentiation-operator/download/@babel/plugin-transform-exponentiation-operator-7.1.0.tgz#9c34c2ee7fd77e02779cfa37e403a2e1003ccc73" + integrity sha1-nDTC7n/XfgJ3nPo35AOi4QA8zHM= + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-for-of@^7.0.0": + version "7.0.0" + resolved "http://registry.npm.taobao.org/@babel/plugin-transform-for-of/download/@babel/plugin-transform-for-of-7.0.0.tgz#f2ba4eadb83bd17dc3c7e9b30f4707365e1c3e39" + integrity sha1-8rpOrbg70X3Dx+mzD0cHNl4cPjk= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-function-name@^7.1.0": + version "7.1.0" + resolved "http://registry.npm.taobao.org/@babel/plugin-transform-function-name/download/@babel/plugin-transform-function-name-7.1.0.tgz#29c5550d5c46208e7f730516d41eeddd4affadbb" + integrity sha1-KcVVDVxGII5/cwUW1B7t3Ur/rbs= + dependencies: + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-literals@^7.0.0": + version "7.0.0" + resolved "http://registry.npm.taobao.org/@babel/plugin-transform-literals/download/@babel/plugin-transform-literals-7.0.0.tgz#2aec1d29cdd24c407359c930cdd89e914ee8ff86" + integrity sha1-KuwdKc3STEBzWckwzdiekU7o/4Y= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-modules-amd@^7.1.0": + version "7.1.0" + resolved "http://registry.npm.taobao.org/@babel/plugin-transform-modules-amd/download/@babel/plugin-transform-modules-amd-7.1.0.tgz#f9e0a7072c12e296079b5a59f408ff5b97bf86a8" + integrity sha1-+eCnBywS4pYHm1pZ9Aj/W5e/hqg= + dependencies: + "@babel/helper-module-transforms" "^7.1.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-modules-commonjs@^7.1.0": + version "7.1.0" + resolved "http://registry.npm.taobao.org/@babel/plugin-transform-modules-commonjs/download/@babel/plugin-transform-modules-commonjs-7.1.0.tgz#0a9d86451cbbfb29bd15186306897c67f6f9a05c" + integrity sha1-Cp2GRRy7+ym9FRhjBol8Z/b5oFw= + dependencies: + "@babel/helper-module-transforms" "^7.1.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-simple-access" "^7.1.0" + +"@babel/plugin-transform-modules-systemjs@^7.0.0": + version "7.1.3" + resolved "http://registry.npm.taobao.org/@babel/plugin-transform-modules-systemjs/download/@babel/plugin-transform-modules-systemjs-7.1.3.tgz#2119a3e3db612fd74a19d88652efbfe9613a5db0" + integrity sha1-IRmj49thL9dKGdiGUu+/6WE6XbA= + dependencies: + "@babel/helper-hoist-variables" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-modules-umd@^7.1.0": + version "7.1.0" + resolved "http://registry.npm.taobao.org/@babel/plugin-transform-modules-umd/download/@babel/plugin-transform-modules-umd-7.1.0.tgz#a29a7d85d6f28c3561c33964442257cc6a21f2a8" + integrity sha1-opp9hdbyjDVhwzlkRCJXzGoh8qg= + dependencies: + "@babel/helper-module-transforms" "^7.1.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-new-target@^7.0.0": + version "7.0.0" + resolved "http://registry.npm.taobao.org/@babel/plugin-transform-new-target/download/@babel/plugin-transform-new-target-7.0.0.tgz#ae8fbd89517fa7892d20e6564e641e8770c3aa4a" + integrity sha1-ro+9iVF/p4ktIOZWTmQeh3DDqko= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-object-super@^7.1.0": + version "7.1.0" + resolved "http://registry.npm.taobao.org/@babel/plugin-transform-object-super/download/@babel/plugin-transform-object-super-7.1.0.tgz#b1ae194a054b826d8d4ba7ca91486d4ada0f91bb" + integrity sha1-sa4ZSgVLgm2NS6fKkUhtStoPkbs= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.1.0" + +"@babel/plugin-transform-parameters@^7.1.0": + version "7.1.0" + resolved "http://registry.npm.taobao.org/@babel/plugin-transform-parameters/download/@babel/plugin-transform-parameters-7.1.0.tgz#44f492f9d618c9124026e62301c296bf606a7aed" + integrity sha1-RPSS+dYYyRJAJuYjAcKWv2Bqeu0= + dependencies: + "@babel/helper-call-delegate" "^7.1.0" + "@babel/helper-get-function-arity" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-regenerator@^7.0.0": + version "7.0.0" + resolved "http://registry.npm.taobao.org/@babel/plugin-transform-regenerator/download/@babel/plugin-transform-regenerator-7.0.0.tgz#5b41686b4ed40bef874d7ed6a84bdd849c13e0c1" + integrity sha1-W0Foa07UC++HTX7WqEvdhJwT4ME= + dependencies: + regenerator-transform "^0.13.3" + +"@babel/plugin-transform-runtime@^7.0.0", "@babel/plugin-transform-runtime@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.1.0.tgz#9f76920d42551bb577e2dc594df229b5f7624b63" + integrity sha512-WFLMgzu5DLQEah0lKTJzYb14vd6UiES7PTnXcvrPZ1VrwFeJ+mTbvr65fFAsXYMt2bIoOoC0jk76zY1S7HZjUg== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + resolve "^1.8.1" + semver "^5.5.1" + +"@babel/plugin-transform-shorthand-properties@^7.0.0": + version "7.0.0" + resolved "http://registry.npm.taobao.org/@babel/plugin-transform-shorthand-properties/download/@babel/plugin-transform-shorthand-properties-7.0.0.tgz#85f8af592dcc07647541a0350e8c95c7bf419d15" + integrity sha1-hfivWS3MB2R1QaA1DoyVx79BnRU= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-spread@^7.0.0": + version "7.0.0" + resolved "http://registry.npm.taobao.org/@babel/plugin-transform-spread/download/@babel/plugin-transform-spread-7.0.0.tgz#93583ce48dd8c85e53f3a46056c856e4af30b49b" + integrity sha1-k1g85I3YyF5T86RgVshW5K8wtJs= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-sticky-regex@^7.0.0": + version "7.0.0" + resolved "http://registry.npm.taobao.org/@babel/plugin-transform-sticky-regex/download/@babel/plugin-transform-sticky-regex-7.0.0.tgz#30a9d64ac2ab46eec087b8530535becd90e73366" + integrity sha1-MKnWSsKrRu7Ah7hTBTW+zZDnM2Y= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.0.0" + +"@babel/plugin-transform-template-literals@^7.0.0": + version "7.0.0" + resolved "http://registry.npm.taobao.org/@babel/plugin-transform-template-literals/download/@babel/plugin-transform-template-literals-7.0.0.tgz#084f1952efe5b153ddae69eb8945f882c7a97c65" + integrity sha1-CE8ZUu/lsVPdrmnriUX4gsepfGU= + dependencies: + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-typeof-symbol@^7.0.0": + version "7.0.0" + resolved "http://registry.npm.taobao.org/@babel/plugin-transform-typeof-symbol/download/@babel/plugin-transform-typeof-symbol-7.0.0.tgz#4dcf1e52e943e5267b7313bff347fdbe0f81cec9" + integrity sha1-Tc8eUulD5SZ7cxO/80f9vg+Bzsk= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-unicode-regex@^7.0.0": + version "7.0.0" + resolved "http://registry.npm.taobao.org/@babel/plugin-transform-unicode-regex/download/@babel/plugin-transform-unicode-regex-7.0.0.tgz#c6780e5b1863a76fe792d90eded9fcd5b51d68fc" + integrity sha1-xngOWxhjp2/nktkO3tn81bUdaPw= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.0.0" + regexpu-core "^4.1.3" + +"@babel/preset-env@^7.0.0", "@babel/preset-env@^7.1.0": + version "7.1.6" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.1.6.tgz#a0bf4b96b6bfcf6e000afc5b72b4abe7cc13ae97" + integrity sha512-YIBfpJNQMBkb6MCkjz/A9J76SNCSuGVamOVBgoUkLzpJD/z8ghHi9I42LQ4pulVX68N/MmImz6ZTixt7Azgexw== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-async-generator-functions" "^7.1.0" + "@babel/plugin-proposal-json-strings" "^7.0.0" + "@babel/plugin-proposal-object-rest-spread" "^7.0.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.0.0" + "@babel/plugin-syntax-async-generators" "^7.0.0" + "@babel/plugin-syntax-object-rest-spread" "^7.0.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.0.0" + "@babel/plugin-transform-arrow-functions" "^7.0.0" + "@babel/plugin-transform-async-to-generator" "^7.1.0" + "@babel/plugin-transform-block-scoped-functions" "^7.0.0" + "@babel/plugin-transform-block-scoping" "^7.1.5" + "@babel/plugin-transform-classes" "^7.1.0" + "@babel/plugin-transform-computed-properties" "^7.0.0" + "@babel/plugin-transform-destructuring" "^7.0.0" + "@babel/plugin-transform-dotall-regex" "^7.0.0" + "@babel/plugin-transform-duplicate-keys" "^7.0.0" + "@babel/plugin-transform-exponentiation-operator" "^7.1.0" + "@babel/plugin-transform-for-of" "^7.0.0" + "@babel/plugin-transform-function-name" "^7.1.0" + "@babel/plugin-transform-literals" "^7.0.0" + "@babel/plugin-transform-modules-amd" "^7.1.0" + "@babel/plugin-transform-modules-commonjs" "^7.1.0" + "@babel/plugin-transform-modules-systemjs" "^7.0.0" + "@babel/plugin-transform-modules-umd" "^7.1.0" + "@babel/plugin-transform-new-target" "^7.0.0" + "@babel/plugin-transform-object-super" "^7.1.0" + "@babel/plugin-transform-parameters" "^7.1.0" + "@babel/plugin-transform-regenerator" "^7.0.0" + "@babel/plugin-transform-shorthand-properties" "^7.0.0" + "@babel/plugin-transform-spread" "^7.0.0" + "@babel/plugin-transform-sticky-regex" "^7.0.0" + "@babel/plugin-transform-template-literals" "^7.0.0" + "@babel/plugin-transform-typeof-symbol" "^7.0.0" + "@babel/plugin-transform-unicode-regex" "^7.0.0" + browserslist "^4.1.0" + invariant "^2.2.2" + js-levenshtein "^1.1.3" + semver "^5.3.0" + +"@babel/runtime@^7.0.0": + version "7.1.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.1.5.tgz#4170907641cf1f61508f563ece3725150cc6fe39" + integrity sha512-xKnPpXG/pvK1B90JkwwxSGii90rQGKtzcMt2gI5G6+M0REXaq6rOHsGC2ay6/d0Uje7zzvSzjEzfR3ENhFlrfA== + dependencies: + regenerator-runtime "^0.12.0" + +"@babel/template@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.44.tgz#f8832f4fdcee5d59bf515e595fc5106c529b394f" + integrity sha512-w750Sloq0UNifLx1rUqwfbnC6uSUk0mfwwgGRfdLiaUzfAOiH0tHJE6ILQIUi3KYkjiCDTskoIsnfqZvWLBDng== + dependencies: + "@babel/code-frame" "7.0.0-beta.44" + "@babel/types" "7.0.0-beta.44" + babylon "7.0.0-beta.44" + lodash "^4.2.0" + +"@babel/template@^7.1.0", "@babel/template@^7.1.2": + version "7.1.2" + resolved "http://registry.npm.taobao.org/@babel/template/download/@babel/template-7.1.2.tgz#090484a574fef5a2d2d7726a674eceda5c5b5644" + integrity sha1-CQSEpXT+9aLS13JqZ07O2lxbVkQ= + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.1.2" + "@babel/types" "^7.1.2" + +"@babel/traverse@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.44.tgz#a970a2c45477ad18017e2e465a0606feee0d2966" + integrity sha512-UHuDz8ukQkJCDASKHf+oDt3FVUzFd+QYfuBIsiNu/4+/ix6pP/C+uQZJ6K1oEfbCMv/IKWbgDEh7fcsnIE5AtA== + dependencies: + "@babel/code-frame" "7.0.0-beta.44" + "@babel/generator" "7.0.0-beta.44" + "@babel/helper-function-name" "7.0.0-beta.44" + "@babel/helper-split-export-declaration" "7.0.0-beta.44" + "@babel/types" "7.0.0-beta.44" + babylon "7.0.0-beta.44" + debug "^3.1.0" + globals "^11.1.0" + invariant "^2.2.0" + lodash "^4.2.0" + +"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.1.5", "@babel/traverse@^7.1.6": + version "7.1.6" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.1.6.tgz#c8db9963ab4ce5b894222435482bd8ea854b7b5c" + integrity sha512-CXedit6GpISz3sC2k2FsGCUpOhUqKdyL0lqNrImQojagnUMXf8hex4AxYFRuMkNGcvJX5QAFGzB5WJQmSv8SiQ== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.1.6" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.0.0" + "@babel/parser" "^7.1.6" + "@babel/types" "^7.1.6" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.10" + +"@babel/types@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.44.tgz#6b1b164591f77dec0a0342aca995f2d046b3a757" + integrity sha512-5eTV4WRmqbaFM3v9gHAIljEQJU4Ssc6fxL61JN+Oe2ga/BwyjzjamwkCVVAQjHGuAX8i0BWo42dshL8eO5KfLQ== + dependencies: + esutils "^2.0.2" + lodash "^4.2.0" + to-fast-properties "^2.0.0" + +"@babel/types@^7.0.0", "@babel/types@^7.1.2", "@babel/types@^7.1.5", "@babel/types@^7.1.6": + version "7.1.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.1.6.tgz#0adb330c3a281348a190263aceb540e10f04bcce" + integrity sha512-DMiUzlY9DSjVsOylJssxLHSgj6tWM9PRFJOGW/RaOglVOK9nzTxoOMfTfRQXGUCUQ/HmlG2efwC+XqUEJ5ay4w== + dependencies: + esutils "^2.0.2" + lodash "^4.17.10" + to-fast-properties "^2.0.0" + +"@intervolga/optimize-cssnano-plugin@^1.0.5": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@intervolga/optimize-cssnano-plugin/-/optimize-cssnano-plugin-1.0.6.tgz#be7c7846128b88f6a9b1d1261a0ad06eb5c0fdf8" + integrity sha512-zN69TnSr0viRSU6cEDIcuPcP67QcpQ6uHACg58FiN9PDrU6SLyGW3MR4tiISbYxy1kDWAVPwD+XwQTWE5cigAA== + dependencies: + cssnano "^4.0.0" + cssnano-preset-default "^4.0.0" + postcss "^7.0.0" + +"@mrmlnc/readdir-enhanced@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" + integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== + dependencies: + call-me-maybe "^1.0.1" + glob-to-regexp "^0.3.0" + +"@nodelib/fs.stat@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.2.tgz#54c5a964462be3d4d78af631363c18d6fa91ac26" + integrity sha512-yprFYuno9FtNsSHVlSWd+nRlmGoAbqbeCwOryP6sC/zoCjhpArcRMYp19EvpSUSizJAlsXEwJv+wcWS9XaXdMw== + +"@types/d3-format@*": + version "1.3.0" + resolved "http://registry.npm.taobao.org/@types/d3-format/download/@types/d3-format-1.3.0.tgz#c5e115fac8e6861ce656fe9861892b22f6b0cfcb" + integrity sha1-xeEV+sjmhhzmVv6YYYkrIvawz8s= + +"@types/lodash@*": + version "4.14.118" + resolved "http://registry.npm.taobao.org/@types/lodash/download/@types/lodash-4.14.118.tgz#247bab39bfcc6d910d4927c6e06cbc70ec376f27" + integrity sha1-JHurOb/MbZENSSfG4Gy8cOw3byc= + +"@types/node@*": + version "10.12.11" + resolved "http://registry.npm.taobao.org/@types/node/download/@types/node-10.12.11.tgz#715c476c99a5f6898a1ae61caf9825e43c03912e" + integrity sha1-cVxHbJml9omKGuYcr5gl5DwDkS4= + +"@types/node@^8.0.53": + version "8.10.38" + resolved "http://registry.npm.taobao.org/@types/node/download/@types/node-8.10.38.tgz#e05c201a668492e534b48102aca0294898f449f6" + integrity sha1-4FwgGmaEkuU0tIECrKApSJj0SfY= + +"@vue/babel-preset-app@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@vue/babel-preset-app/-/babel-preset-app-3.2.0.tgz#a443acdbd34f66d7645db271d9ac58fbe4fe870d" + integrity sha512-yDPMhdeOnQ49EOsOnHXJZQ4aR+g+TZVkImUjRBN90MKv9V1C9HXxhU73Je6pWUQaJ0yugMr5jl058ns6Mx6mNA== + dependencies: + "@babel/plugin-proposal-class-properties" "^7.0.0" + "@babel/plugin-proposal-decorators" "^7.1.0" + "@babel/plugin-syntax-dynamic-import" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.0.0" + "@babel/plugin-transform-runtime" "^7.0.0" + "@babel/preset-env" "^7.0.0" + "@babel/runtime" "^7.0.0" + babel-helper-vue-jsx-merge-props "^2.0.3" + babel-plugin-dynamic-import-node "^2.2.0" + babel-plugin-transform-vue-jsx "^4.0.1" + core-js "^2.5.7" + +"@vue/cli-overlay@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@vue/cli-overlay/-/cli-overlay-3.2.0.tgz#bb5d781914bb5af97d92410babbaa3720707b728" + integrity sha512-RKMSfgTtRs4VOXQhmbrNZJaCCheshebji9NcPNGyXzukCMBtoAbu3cG9HxizCSUA//oFFAdPP5BGeHvv0cpu/A== + +"@vue/cli-plugin-babel@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@vue/cli-plugin-babel/-/cli-plugin-babel-3.2.0.tgz#5548e052f07512156942f50dcf18948ad29be7ec" + integrity sha512-HRhwsUIZ9DZYH+cVS8O0Qfk2W43vKpl5/JcvCS8YWWmRjwZjjHtRDifnfQuLC3Q0cUMTcv4bv8vnPMtkAbvXKg== + dependencies: + "@babel/core" "^7.0.0" + "@vue/babel-preset-app" "^3.2.0" + babel-loader "^8.0.4" + +"@vue/cli-plugin-eslint@^3.2.0": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@vue/cli-plugin-eslint/-/cli-plugin-eslint-3.2.1.tgz#4dc353add93023363bf4c6b347e64472d1f2f432" + integrity sha512-Z/eQw18FjTypMMryNg8WCYJxEBmSAtnzukRWWNFwqNnh2zM/2J6yR4dYhsyjNtMEMUOnQsAsJnqgw45rLu8sJg== + dependencies: + "@vue/cli-shared-utils" "^3.2.0" + babel-eslint "^10.0.1" + eslint "^4.19.1" + eslint-loader "^2.1.1" + eslint-plugin-vue "^4.7.1" + globby "^8.0.1" + +"@vue/cli-service@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@vue/cli-service/-/cli-service-3.2.0.tgz#96e8ee7b33a911ab71710c126ab55cd64c2a4c51" + integrity sha512-HTiaz1IBXV/JCfrmyhHJvDOYpPTBK0uQAekSVRTt5AddCeOV68ktdUqHbDe3VPDfrWFA5x3d3kIHlJd6WK31mA== + dependencies: + "@intervolga/optimize-cssnano-plugin" "^1.0.5" + "@vue/cli-overlay" "^3.2.0" + "@vue/cli-shared-utils" "^3.2.0" + "@vue/preload-webpack-plugin" "^1.1.0" + "@vue/web-component-wrapper" "^1.2.0" + acorn "^6.0.4" + acorn-walk "^6.1.1" + address "^1.0.3" + autoprefixer "^8.6.5" + cache-loader "^1.2.5" + case-sensitive-paths-webpack-plugin "^2.1.2" + chalk "^2.4.1" + clipboardy "^1.2.3" + cliui "^4.1.0" + copy-webpack-plugin "^4.6.0" + css-loader "^1.0.1" + cssnano "^4.1.7" + debug "^4.1.0" + escape-string-regexp "^1.0.5" + file-loader "^2.0.0" + friendly-errors-webpack-plugin "^1.7.0" + fs-extra "^7.0.1" + globby "^8.0.1" + hash-sum "^1.0.2" + html-webpack-plugin "^3.2.0" + launch-editor-middleware "^2.2.1" + lodash.defaultsdeep "^4.6.0" + lodash.mapvalues "^4.6.0" + lodash.transform "^4.6.0" + mini-css-extract-plugin "^0.4.5" + minimist "^1.2.0" + ora "^3.0.0" + portfinder "^1.0.19" + postcss-loader "^3.0.0" + read-pkg "^4.0.1" + semver "^5.6.0" + slash "^2.0.0" + source-map-url "^0.4.0" + ssri "^6.0.1" + string.prototype.padend "^3.0.0" + terser-webpack-plugin "^1.1.0" + thread-loader "^1.2.0" + url-loader "^1.1.2" + vue-loader "^15.4.2" + webpack "^4.26.1" + webpack-bundle-analyzer "^3.0.3" + webpack-chain "^4.11.0" + webpack-dev-server "^3.1.10" + webpack-merge "^4.1.4" + yorkie "^2.0.0" + +"@vue/cli-shared-utils@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@vue/cli-shared-utils/-/cli-shared-utils-3.2.0.tgz#504037063c2a4a346dc35c9652bd3863da4816e7" + integrity sha512-FCX5ABFg5pWhomyXLpCaogJktMvjsS5d4Mn5BfvqcJxCvzOX6ze8ihFK3u//XMeM78dOFpHSjxnRSvHtkEwgsg== + dependencies: + chalk "^2.4.1" + execa "^1.0.0" + joi "^13.0.0" + launch-editor "^2.2.1" + lru-cache "^4.1.3" + node-ipc "^9.1.1" + opn "^5.3.0" + ora "^2.1.0" + request "^2.87.0" + request-promise-native "^1.0.5" + semver "^5.5.0" + string.prototype.padstart "^3.0.0" + +"@vue/component-compiler-utils@^2.0.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-2.2.0.tgz#bbbb7ed38a9a8a7c93abe7ef2e54a90a04b631b4" + integrity sha512-pS4zlcdD7BvedyB+IfiTfrbi6C977UMIfulSk8r6uL0BU46ZE2+fUj/zbSNSfVxeaj9ElmnSni5OMwF9np+b+w== + dependencies: + consolidate "^0.15.1" + hash-sum "^1.0.2" + lru-cache "^4.1.2" + merge-source-map "^1.1.0" + postcss "^6.0.20" + postcss-selector-parser "^3.1.1" + prettier "1.13.7" + source-map "^0.5.6" + vue-template-es2015-compiler "^1.6.0" + +"@vue/eslint-config-standard@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@vue/eslint-config-standard/-/eslint-config-standard-4.0.0.tgz#6be447ee674e3b0f733c584098fd9a22e6d76fcd" + integrity sha512-bQghq1cw1BuMRHNhr3tRpAJx1tpGy0QtajQX873kLtA9YVuOIoXR7nAWnTN09bBHnSUh2N288vMsqPi2fI4Hzg== + dependencies: + eslint-config-standard "^12.0.0" + eslint-plugin-import "^2.14.0" + eslint-plugin-node "^8.0.0" + eslint-plugin-promise "^4.0.1" + eslint-plugin-standard "^4.0.0" + +"@vue/preload-webpack-plugin@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.0.tgz#d768dba004261c029b53a77c5ea2d5f9ee4f3cce" + integrity sha512-rcn2KhSHESBFMPj5vc5X2pI9bcBNQQixvJXhD5gZ4rN2iym/uH2qfDSQfUS5+qwiz0a85TCkeUs6w6jxFDudbw== + +"@vue/web-component-wrapper@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@vue/web-component-wrapper/-/web-component-wrapper-1.2.0.tgz#bb0e46f1585a7e289b4ee6067dcc5a6ae62f1dd1" + integrity sha512-Xn/+vdm9CjuC9p3Ae+lTClNutrVhsXpzxvoTXXtoys6kVRX9FkueSUAqSWAyZntmVLlR4DosBV4pH8y5Z/HbUw== + +"@webassemblyjs/ast@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.7.11.tgz#b988582cafbb2b095e8b556526f30c90d057cace" + integrity sha512-ZEzy4vjvTzScC+SH8RBssQUawpaInUdMTYwYYLh54/s8TuT0gBLuyUnppKsVyZEi876VmmStKsUs28UxPgdvrA== + dependencies: + "@webassemblyjs/helper-module-context" "1.7.11" + "@webassemblyjs/helper-wasm-bytecode" "1.7.11" + "@webassemblyjs/wast-parser" "1.7.11" + +"@webassemblyjs/floating-point-hex-parser@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.11.tgz#a69f0af6502eb9a3c045555b1a6129d3d3f2e313" + integrity sha512-zY8dSNyYcgzNRNT666/zOoAyImshm3ycKdoLsyDw/Bwo6+/uktb7p4xyApuef1dwEBo/U/SYQzbGBvV+nru2Xg== + +"@webassemblyjs/helper-api-error@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.11.tgz#c7b6bb8105f84039511a2b39ce494f193818a32a" + integrity sha512-7r1qXLmiglC+wPNkGuXCvkmalyEstKVwcueZRP2GNC2PAvxbLYwLLPr14rcdJaE4UtHxQKfFkuDFuv91ipqvXg== + +"@webassemblyjs/helper-buffer@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.11.tgz#3122d48dcc6c9456ed982debe16c8f37101df39b" + integrity sha512-MynuervdylPPh3ix+mKZloTcL06P8tenNH3sx6s0qE8SLR6DdwnfgA7Hc9NSYeob2jrW5Vql6GVlsQzKQCa13w== + +"@webassemblyjs/helper-code-frame@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.11.tgz#cf8f106e746662a0da29bdef635fcd3d1248364b" + integrity sha512-T8ESC9KMXFTXA5urJcyor5cn6qWeZ4/zLPyWeEXZ03hj/x9weSokGNkVCdnhSabKGYWxElSdgJ+sFa9G/RdHNw== + dependencies: + "@webassemblyjs/wast-printer" "1.7.11" + +"@webassemblyjs/helper-fsm@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.11.tgz#df38882a624080d03f7503f93e3f17ac5ac01181" + integrity sha512-nsAQWNP1+8Z6tkzdYlXT0kxfa2Z1tRTARd8wYnc/e3Zv3VydVVnaeePgqUzFrpkGUyhUUxOl5ML7f1NuT+gC0A== + +"@webassemblyjs/helper-module-context@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.11.tgz#d874d722e51e62ac202476935d649c802fa0e209" + integrity sha512-JxfD5DX8Ygq4PvXDucq0M+sbUFA7BJAv/GGl9ITovqE+idGX+J3QSzJYz+LwQmL7fC3Rs+utvWoJxDb6pmC0qg== + +"@webassemblyjs/helper-wasm-bytecode@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.11.tgz#dd9a1e817f1c2eb105b4cf1013093cb9f3c9cb06" + integrity sha512-cMXeVS9rhoXsI9LLL4tJxBgVD/KMOKXuFqYb5oCJ/opScWpkCMEz9EJtkonaNcnLv2R3K5jIeS4TRj/drde1JQ== + +"@webassemblyjs/helper-wasm-section@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.11.tgz#9c9ac41ecf9fbcfffc96f6d2675e2de33811e68a" + integrity sha512-8ZRY5iZbZdtNFE5UFunB8mmBEAbSI3guwbrsCl4fWdfRiAcvqQpeqd5KHhSWLL5wuxo53zcaGZDBU64qgn4I4Q== + dependencies: + "@webassemblyjs/ast" "1.7.11" + "@webassemblyjs/helper-buffer" "1.7.11" + "@webassemblyjs/helper-wasm-bytecode" "1.7.11" + "@webassemblyjs/wasm-gen" "1.7.11" + +"@webassemblyjs/ieee754@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.7.11.tgz#c95839eb63757a31880aaec7b6512d4191ac640b" + integrity sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.7.11.tgz#d7267a1ee9c4594fd3f7e37298818ec65687db63" + integrity sha512-vuGmgZjjp3zjcerQg+JA+tGOncOnJLWVkt8Aze5eWQLwTQGNgVLcyOTqgSCxWTR4J42ijHbBxnuRaL1Rv7XMdw== + dependencies: + "@xtuc/long" "4.2.1" + +"@webassemblyjs/utf8@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.7.11.tgz#06d7218ea9fdc94a6793aa92208160db3d26ee82" + integrity sha512-C6GFkc7aErQIAH+BMrIdVSmW+6HSe20wg57HEC1uqJP8E/xpMjXqQUxkQw07MhNDSDcGpxI9G5JSNOQCqJk4sA== + +"@webassemblyjs/wasm-edit@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.11.tgz#8c74ca474d4f951d01dbae9bd70814ee22a82005" + integrity sha512-FUd97guNGsCZQgeTPKdgxJhBXkUbMTY6hFPf2Y4OedXd48H97J+sOY2Ltaq6WGVpIH8o/TGOVNiVz/SbpEMJGg== + dependencies: + "@webassemblyjs/ast" "1.7.11" + "@webassemblyjs/helper-buffer" "1.7.11" + "@webassemblyjs/helper-wasm-bytecode" "1.7.11" + "@webassemblyjs/helper-wasm-section" "1.7.11" + "@webassemblyjs/wasm-gen" "1.7.11" + "@webassemblyjs/wasm-opt" "1.7.11" + "@webassemblyjs/wasm-parser" "1.7.11" + "@webassemblyjs/wast-printer" "1.7.11" + +"@webassemblyjs/wasm-gen@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.11.tgz#9bbba942f22375686a6fb759afcd7ac9c45da1a8" + integrity sha512-U/KDYp7fgAZX5KPfq4NOupK/BmhDc5Kjy2GIqstMhvvdJRcER/kUsMThpWeRP8BMn4LXaKhSTggIJPOeYHwISA== + dependencies: + "@webassemblyjs/ast" "1.7.11" + "@webassemblyjs/helper-wasm-bytecode" "1.7.11" + "@webassemblyjs/ieee754" "1.7.11" + "@webassemblyjs/leb128" "1.7.11" + "@webassemblyjs/utf8" "1.7.11" + +"@webassemblyjs/wasm-opt@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.11.tgz#b331e8e7cef8f8e2f007d42c3a36a0580a7d6ca7" + integrity sha512-XynkOwQyiRidh0GLua7SkeHvAPXQV/RxsUeERILmAInZegApOUAIJfRuPYe2F7RcjOC9tW3Cb9juPvAC/sCqvg== + dependencies: + "@webassemblyjs/ast" "1.7.11" + "@webassemblyjs/helper-buffer" "1.7.11" + "@webassemblyjs/wasm-gen" "1.7.11" + "@webassemblyjs/wasm-parser" "1.7.11" + +"@webassemblyjs/wasm-parser@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.11.tgz#6e3d20fa6a3519f6b084ef9391ad58211efb0a1a" + integrity sha512-6lmXRTrrZjYD8Ng8xRyvyXQJYUQKYSXhJqXOBLw24rdiXsHAOlvw5PhesjdcaMadU/pyPQOJ5dHreMjBxwnQKg== + dependencies: + "@webassemblyjs/ast" "1.7.11" + "@webassemblyjs/helper-api-error" "1.7.11" + "@webassemblyjs/helper-wasm-bytecode" "1.7.11" + "@webassemblyjs/ieee754" "1.7.11" + "@webassemblyjs/leb128" "1.7.11" + "@webassemblyjs/utf8" "1.7.11" + +"@webassemblyjs/wast-parser@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.7.11.tgz#25bd117562ca8c002720ff8116ef9072d9ca869c" + integrity sha512-lEyVCg2np15tS+dm7+JJTNhNWq9yTZvi3qEhAIIOaofcYlUp0UR5/tVqOwa/gXYr3gjwSZqw+/lS9dscyLelbQ== + dependencies: + "@webassemblyjs/ast" "1.7.11" + "@webassemblyjs/floating-point-hex-parser" "1.7.11" + "@webassemblyjs/helper-api-error" "1.7.11" + "@webassemblyjs/helper-code-frame" "1.7.11" + "@webassemblyjs/helper-fsm" "1.7.11" + "@xtuc/long" "4.2.1" + +"@webassemblyjs/wast-printer@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.7.11.tgz#c4245b6de242cb50a2cc950174fdbf65c78d7813" + integrity sha512-m5vkAsuJ32QpkdkDOUPGSltrg8Cuk3KBx4YrmAGQwCZPRdUHXxG4phIOuuycLemHFr74sWL9Wthqss4fzdzSwg== + dependencies: + "@webassemblyjs/ast" "1.7.11" + "@webassemblyjs/wast-parser" "1.7.11" + "@xtuc/long" "4.2.1" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "http://registry.npm.taobao.org/@xtuc/ieee754/download/@xtuc/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha1-7vAUoxRa5Hehy8AM0eVSM23Ot5A= + +"@xtuc/long@4.2.1": + version "4.2.1" + resolved "http://registry.npm.taobao.org/@xtuc/long/download/@xtuc/long-4.2.1.tgz#5c85d662f76fa1d34575766c5dcd6615abcd30d8" + integrity sha1-XIXWYvdvodNFdXZsXc1mFavNMNg= + +abbrev@1: + version "1.1.1" + resolved "http://registry.npm.taobao.org/abbrev/download/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg= + +abs-svg-path@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/abs-svg-path/-/abs-svg-path-0.1.1.tgz#df601c8e8d2ba10d4a76d625e236a9a39c2723bf" + integrity sha1-32Acjo0roQ1KdtYl4japo5wnI78= + +accepts@~1.3.4, accepts@~1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" + integrity sha1-63d99gEXI6OxTopywIBcjoZ0a9I= + dependencies: + mime-types "~2.1.18" + negotiator "0.6.1" + +acorn-dynamic-import@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/acorn-dynamic-import/download/acorn-dynamic-import-3.0.0.tgz#901ceee4c7faaef7e07ad2a47e890675da50a278" + integrity sha1-kBzu5Mf6rvfgetKkfokGddpQong= + dependencies: + acorn "^5.0.0" + +acorn-jsx@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" + integrity sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s= + dependencies: + acorn "^3.0.4" + +acorn-jsx@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e" + integrity sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg== + +acorn-walk@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.1.1.tgz#d363b66f5fac5f018ff9c3a1e7b6f8e310cc3913" + integrity sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw== + +acorn@^3.0.4: + version "3.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" + integrity sha1-ReN/s56No/JbruP/U2niu18iAXo= + +acorn@^5.0.0, acorn@^5.5.0, acorn@^5.6.2, acorn@^5.7.3: + version "5.7.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" + integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== + +acorn@^6.0.2, acorn@^6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.0.4.tgz#77377e7353b72ec5104550aa2d2097a2fd40b754" + integrity sha512-VY4i5EKSKkofY2I+6QLTbTTN/UvEQPCo6eiwzzSaSWfpaDhOmStMCMod6wmuPciNq+XS0faCglFu2lHZpdHUtg== + +add-dom-event-listener@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/add-dom-event-listener/-/add-dom-event-listener-1.1.0.tgz#6a92db3a0dd0abc254e095c0f1dc14acbbaae310" + integrity sha512-WCxx1ixHT0GQU9hb0KI/mhgRQhnU+U3GvwY6ZvVjYq8rsihIGoaIOUbY0yMPBxLH5MDtr0kz3fisWGNcbWW7Jw== + dependencies: + object-assign "4.x" + +address@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/address/-/address-1.0.3.tgz#b5f50631f8d6cec8bd20c963963afb55e06cbce9" + integrity sha512-z55ocwKBRLryBs394Sm3ushTtBeg6VAeuku7utSoSnsJKvKcnXFIyC6vh27n3rXyxSgkJBBCAvyOn7gSUcTYjg== + +ajv-errors@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/ajv-errors/download/ajv-errors-1.0.0.tgz#ecf021fa108fd17dfb5e6b383f2dd233e31ffc59" + integrity sha1-7PAh+hCP0X37Xms4Py3SM+Mf/Fk= + +ajv-keywords@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" + integrity sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I= + +ajv-keywords@^3.1.0: + version "3.2.0" + resolved "http://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a" + integrity sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo= + +ajv@^5.2.3, ajv@^5.3.0: + version "5.5.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" + integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU= + dependencies: + co "^4.6.0" + fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" + +ajv@^6.1.0, ajv@^6.5.3, ajv@^6.5.5, ajv@^6.6.1: + version "6.6.1" + resolved "http://registry.npm.taobao.org/ajv/download/ajv-6.6.1.tgz#6360f5ed0d80f232cc2b294c362d5dc2e538dd61" + integrity sha1-Y2D17Q2A8jLMKylMNi1dwuU43WE= + dependencies: + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "http://registry.npm.taobao.org/align-text/download/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + integrity sha1-DNkKVhCT810KmSVsIrcGlDP60Rc= + dependencies: + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" + +alphanum-sort@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" + integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= + +amdefine@>=0.0.4: + version "1.0.1" + resolved "http://registry.npm.taobao.org/amdefine/download/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= + +ansi-colors@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.1.0.tgz#dcfaacc90ef9187de413ec3ef8d5eb981a98808f" + integrity sha512-hTv1qPdi+sVEk3jYsdjox5nQI0C9HTbjKShbCdYLKb1LOfNbb7wsF4d7OEKIZoxIHx02tSp3m94jcPW2EfMjmA== + +ansi-escapes@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30" + integrity sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw== + +ansi-html@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.0.0.tgz#70de791edf021404c3fd615aa89118ae0432e5a9" + integrity sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w== + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0= + dependencies: + color-convert "^1.9.0" + +ant-design-vue@^1.1.10: + version "1.1.10" + resolved "https://registry.yarnpkg.com/ant-design-vue/-/ant-design-vue-1.1.10.tgz#b9ebcbab6dc72e0576920f8dc3fe7498e9d4bf61" + integrity sha512-NJefmFr1WZO6HQVtENDyIquTYMx+3NLKgQdb0PY/U1+VYfnCw21TBl3eOLJTFDC7YKamnCH3pz0Ok0OKr7IVfw== + dependencies: + add-dom-event-listener "^1.0.2" + array-tree-filter "^2.1.0" + async-validator "^1.8.2" + babel-helper-vue-jsx-merge-props "^2.0.3" + babel-runtime "6.x" + classnames "^2.2.5" + component-classes "^1.2.6" + dom-align "^1.7.0" + dom-closest "^0.2.0" + dom-scroll-into-view "^1.2.1" + enquire.js "^2.1.6" + intersperse "^1.0.0" + is-negative-zero "^2.0.0" + json2mq "^0.2.0" + lodash "^4.17.5" + moment "^2.21.0" + omit.js "^1.0.0" + raf "^3.4.0" + resize-observer-polyfill "^1.5.0" + shallow-equal "^1.0.0" + shallowequal "^1.0.2" + vue-ref "^1.0.3" + warning "^3.0.0" + +anymatch@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha1-vLJLTzeTTZqnrBe0ra+J58du8us= + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +aproba@^1.0.3, aproba@^1.1.1: + version "1.2.0" + resolved "http://registry.npm.taobao.org/aproba/download/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha1-aALmJk79GMeQobDVF/DyYnvyyUo= + +arch@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/arch/-/arch-2.1.1.tgz#8f5c2731aa35a30929221bb0640eed65175ec84e" + integrity sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg== + +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "http://registry.npm.taobao.org/are-we-there-yet/download/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha1-SzXClE8GKov82mZBB2A1D+nd/CE= + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "http://registry.npm.taobao.org/arr-diff/download/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/arr-flatten/download/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha1-NgSLv/TntH4TZkQxbJlmnqWukfE= + +arr-union@^3.1.0: + version "3.1.0" + resolved "http://registry.npm.taobao.org/arr-union/download/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-filter@~0.0.0: + version "0.0.1" + resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" + integrity sha1-fajPLiZijtcygDWB/SH2fKzS7uw= + +array-find-index@^1.0.1: + version "1.0.2" + resolved "http://registry.npm.taobao.org/array-find-index/download/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + +array-flatten@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.1.tgz#426bb9da84090c1838d812c8150af20a8331e296" + integrity sha1-Qmu52oQJDBg42BLIFQryCoMx4pY= + +array-map@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" + integrity sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI= + +array-reduce@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" + integrity sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys= + +array-tree-filter@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-tree-filter/-/array-tree-filter-2.1.0.tgz#873ac00fec83749f255ac8dd083814b4f6329190" + integrity sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw== + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + +array-unique@^0.3.2: + version "0.3.2" + resolved "http://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +arrify@^1.0.0, arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= + +asap@~2.0.3: + version "2.0.6" + resolved "http://registry.npm.taobao.org/asap/download/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + +asn1.js@^4.0.0: + version "4.10.1" + resolved "http://registry.npm.taobao.org/asn1.js/download/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + integrity sha1-ucK/WAXx5kqt7tbfOiv6+1pz9aA= + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +asn1@~0.2.3: + version "0.2.4" + resolved "http://registry.npm.taobao.org/asn1/download/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha1-jSR136tVO7M+d7VOWeiAu4ziMTY= + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +assert@^1.1.1: + version "1.4.1" + resolved "http://registry.npm.taobao.org/assert/download/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" + integrity sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE= + dependencies: + util "0.10.3" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/assign-symbols/download/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + +async-each@^1.0.0: + version "1.0.1" + resolved "http://registry.npm.taobao.org/async-each/download/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" + integrity sha1-GdOGodntxufByF04iu28xW0zYC0= + +async-foreach@^0.1.3: + version "0.1.3" + resolved "http://registry.npm.taobao.org/async-foreach/download/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" + integrity sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI= + +async-limiter@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" + integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== + +async-validator@^1.8.2: + version "1.10.0" + resolved "https://registry.yarnpkg.com/async-validator/-/async-validator-1.10.0.tgz#59a392a1b48565c2eb43faddb4e54d7d86dce293" + integrity sha512-tjkUJ3OXURZbm1nrlU2QtH0XJe4YvhN1J9AYiKFN9ODBqt0AFIE6YZdZByrWG2SidPUOOK5KIAsqskqFj/43ZQ== + dependencies: + babel-runtime "6.x" + +async@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= + +async@^2.3.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" + integrity sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ== + dependencies: + lodash "^4.17.10" + +asynckit@^0.4.0: + version "0.4.0" + resolved "http://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +atob@^2.1.1: + version "2.1.2" + resolved "http://registry.npm.taobao.org/atob/download/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k= + +autoprefixer@^8.6.5: + version "8.6.5" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-8.6.5.tgz#343f3d193ed568b3208e00117a1b96eb691d4ee9" + integrity sha512-PLWJN3Xo/rycNkx+mp8iBDMTm3FeWe4VmYaZDSqL5QQB9sLsQkG5k8n+LNDFnhh9kdq2K+egL/icpctOmDHwig== + dependencies: + browserslist "^3.2.8" + caniuse-lite "^1.0.30000864" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^6.0.23" + postcss-value-parser "^3.2.3" + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "http://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.8.0" + resolved "http://registry.npm.taobao.org/aws4/download/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" + integrity sha1-8OAD2cqef1nHpQiUXXsu+aBKVC8= + +axios@^0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.18.0.tgz#32d53e4851efdc0a11993b6cd000789d70c05102" + integrity sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI= + dependencies: + follow-redirects "^1.3.0" + is-buffer "^1.1.5" + +babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-eslint@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.0.1.tgz#919681dc099614cd7d31d45c8908695092a1faed" + integrity sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" + eslint-scope "3.7.1" + eslint-visitor-keys "^1.0.0" + +babel-eslint@^8.2.3: + version "8.2.6" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.2.6.tgz#6270d0c73205628067c0f7ae1693a9e797acefd9" + integrity sha512-aCdHjhzcILdP8c9lej7hvXKvQieyRt20SF102SIGyY4cUIiw6UaAtK4j2o3dXX74jEmy0TJ0CEhv4fTIM3SzcA== + dependencies: + "@babel/code-frame" "7.0.0-beta.44" + "@babel/traverse" "7.0.0-beta.44" + "@babel/types" "7.0.0-beta.44" + babylon "7.0.0-beta.44" + eslint-scope "3.7.1" + eslint-visitor-keys "^1.0.0" + +babel-helper-vue-jsx-merge-props@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz#22aebd3b33902328e513293a8e4992b384f9f1b6" + integrity sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg== + +babel-loader@^8.0.0-beta.0, babel-loader@^8.0.4: + version "8.0.4" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.4.tgz#7bbf20cbe4560629e2e41534147692d3fecbdce6" + integrity sha512-fhBhNkUToJcW9nV46v8w87AJOwAJDz84c1CL57n3Stj73FANM/b9TbCUK4YhdOwEyZ+OxhYpdeZDNzSI29Firw== + dependencies: + find-cache-dir "^1.0.0" + loader-utils "^1.0.2" + mkdirp "^0.5.1" + util.promisify "^1.0.0" + +babel-plugin-dynamic-import-node@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.2.0.tgz#c0adfb07d95f4a4495e9aaac6ec386c4d7c2524e" + integrity sha512-fP899ELUnTaBcIzmrW7nniyqqdYWrWuJUyPWHxFa/c7r7hS6KC8FscNfLlBNIoPSc55kYMGEEKjPjJGCLbE1qA== + dependencies: + object.assign "^4.1.0" + +babel-plugin-transform-runtime@^6.23.0: + version "6.23.0" + resolved "http://registry.npm.taobao.org/babel-plugin-transform-runtime/download/babel-plugin-transform-runtime-6.23.0.tgz#88490d446502ea9b8e7efb0fe09ec4d99479b1ee" + integrity sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-vue-jsx@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-4.0.1.tgz#2c8bddce87a6ef09eaa59869ff1bfbeeafc5f88d" + integrity sha512-wbOz7ITB5cloLSjKUU1hWn8zhR+Dwah/RZiTiJY/CQliCwhowmzu6m7NEF+y5EJX/blDzGjRtZvC10Vdb3Q7vw== + dependencies: + esutils "^2.0.2" + +babel-runtime@6.x, babel-runtime@^6.22.0, babel-runtime@^6.23.0, babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babylon@7.0.0-beta.44: + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.44.tgz#89159e15e6e30c5096e22d738d8c0af8a0e8ca1d" + integrity sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g== + +balanced-match@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base64-js@^1.0.2: + version "1.3.0" + resolved "http://registry.npm.taobao.org/base64-js/download/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" + integrity sha1-yrHmEY8FEJXli1KBrqjBzSK/wOM= + +base@^0.11.1: + version "0.11.2" + resolved "http://registry.npm.taobao.org/base/download/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha1-e95c7RRbbVUakNuH+DxVi060io8= + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "http://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +bfj@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/bfj/-/bfj-6.1.1.tgz#05a3b7784fbd72cfa3c22e56002ef99336516c48" + integrity sha512-+GUNvzHR4nRyGybQc2WpNJL4MJazMuvf92ueIyA0bIkPRwhhQu3IfZQ2PSoVPpCBJfmoSdOxu5rnotfFLlvYRQ== + dependencies: + bluebird "^3.5.1" + check-types "^7.3.0" + hoopy "^0.1.2" + tryer "^1.0.0" + +big.js@^3.1.3: + version "3.2.0" + resolved "http://registry.npm.taobao.org/big.js/download/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" + integrity sha1-pfwpi4G54Nyi5FiCR4S2XFK6WI4= + +binary-extensions@^1.0.0: + version "1.12.0" + resolved "http://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.12.0.tgz#c2d780f53d45bba8317a8902d4ceeaf3a6385b14" + integrity sha1-wteA9T1Fu6gxeokC1M7q86Y4WxQ= + +block-stream@*: + version "0.0.9" + resolved "http://registry.npm.taobao.org/block-stream/download/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo= + dependencies: + inherits "~2.0.0" + +bluebird@^3.1.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.2.tgz#1be0908e054a751754549c270489c1505d4ab15a" + integrity sha512-dhHTWMI7kMx5whMQntl7Vr9C6BvV10lFXDAasnqnrMYhXVCzzk6IO9Fo2L75jXHT07WrOngL1WDXOp+yYS91Yg== + +bluebird@^3.5.1: + version "3.5.3" + resolved "http://registry.npm.taobao.org/bluebird/download/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7" + integrity sha1-fQHG+WFsmlGrD4xUmnnf5uwz76c= + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: + version "4.11.8" + resolved "http://registry.npm.taobao.org/bn.js/download/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" + integrity sha1-LN4J617jQfSEdGuwMJsyU7GxRC8= + +body-parser@1.18.3: + version "1.18.3" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.3.tgz#5b292198ffdd553b3a0f20ded0592b956955c8b4" + integrity sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ= + dependencies: + bytes "3.0.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "~1.6.3" + iconv-lite "0.4.23" + on-finished "~2.3.0" + qs "6.5.2" + raw-body "2.3.3" + type-is "~1.6.16" + +bonjour@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" + integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= + dependencies: + array-flatten "^2.1.0" + deep-equal "^1.0.1" + dns-equal "^1.0.0" + dns-txt "^2.0.2" + multicast-dns "^6.0.1" + multicast-dns-service-types "^1.1.0" + +boolbase@^1.0.0, boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "http://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0= + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.0, braces@^2.3.1: + version "2.3.2" + resolved "http://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha1-WXn9PxTNUxVl5fot8av/8d+u5yk= + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +brorand@^1.0.1: + version "1.1.0" + resolved "http://registry.npm.taobao.org/brorand/download/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "http://registry.npm.taobao.org/browserify-aes/download/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha1-Mmc0ZC9APavDADIJhTu3CtQo70g= + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "http://registry.npm.taobao.org/browserify-cipher/download/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha1-jWR0wbhwv9q807z8wZNKEOlPFfA= + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "http://registry.npm.taobao.org/browserify-des/download/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha1-OvTx9Zg5QDVy8cZiBDdfen9wPpw= + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0: + version "4.0.1" + resolved "http://registry.npm.taobao.org/browserify-rsa/download/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.0.4" + resolved "http://registry.npm.taobao.org/browserify-sign/download/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" + integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= + dependencies: + bn.js "^4.1.1" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.2" + elliptic "^6.0.0" + inherits "^2.0.1" + parse-asn1 "^5.0.0" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "http://registry.npm.taobao.org/browserify-zlib/download/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha1-KGlFnZqjviRf6P4sofRuLn9U1z8= + dependencies: + pako "~1.0.5" + +browserslist@^3.2.8: + version "3.2.8" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6" + integrity sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ== + dependencies: + caniuse-lite "^1.0.30000844" + electron-to-chromium "^1.3.47" + +browserslist@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.3.0.tgz#779a235bd1ace0f3841a9b294df4cd47ac046c9d" + integrity sha512-j0jLqo+6ZhFWvTjEIcDyR8LIiN8pA3cUrT/SGAs0LPp/cKvkRpCnzuxtnAW+sOPLTic5wfb+TQvRX2RTN2wo4w== + dependencies: + caniuse-lite "^1.0.30000893" + electron-to-chromium "^1.3.80" + node-releases "^1.0.0-alpha.14" + +browserslist@^4.1.0: + version "4.3.5" + resolved "http://registry.npm.taobao.org/browserslist/download/browserslist-4.3.5.tgz#1a917678acc07b55606748ea1adf9846ea8920f7" + integrity sha1-GpF2eKzAe1VgZ0jqGt+YRuqJIPc= + dependencies: + caniuse-lite "^1.0.30000912" + electron-to-chromium "^1.3.86" + node-releases "^1.0.5" + +buffer-from@^1.0.0: + version "1.1.1" + resolved "http://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8= + +buffer-indexof@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" + integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "http://registry.npm.taobao.org/buffer-xor/download/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@^4.3.0: + version "4.9.1" + resolved "http://registry.npm.taobao.org/buffer/download/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" + integrity sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg= + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +builtin-modules@^1.0.0: + version "1.1.1" + resolved "http://registry.npm.taobao.org/builtin-modules/download/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/builtin-status-codes/download/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + +cacache@^10.0.4: + version "10.0.4" + resolved "http://registry.npm.taobao.org/cacache/download/cacache-10.0.4.tgz#6452367999eff9d4188aefd9a14e9d7c6a263460" + integrity sha1-ZFI2eZnv+dQYiu/ZoU6dfGomNGA= + dependencies: + bluebird "^3.5.1" + chownr "^1.0.1" + glob "^7.1.2" + graceful-fs "^4.1.11" + lru-cache "^4.1.1" + mississippi "^2.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.2" + ssri "^5.2.4" + unique-filename "^1.1.0" + y18n "^4.0.0" + +cacache@^11.0.2: + version "11.3.1" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.1.tgz#d09d25f6c4aca7a6d305d141ae332613aa1d515f" + integrity sha512-2PEw4cRRDu+iQvBTTuttQifacYjLPhET+SYO/gEFMy8uhi+jlJREDAjSF5FWSdV/Aw5h18caHA7vMTw2c+wDzA== + dependencies: + bluebird "^3.5.1" + chownr "^1.0.1" + figgy-pudding "^3.1.0" + glob "^7.1.2" + graceful-fs "^4.1.11" + lru-cache "^4.1.3" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.2" + ssri "^6.0.0" + unique-filename "^1.1.0" + y18n "^4.0.0" + +cache-base@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/cache-base/download/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha1-Cn9GQWgxyLZi7jb+TnxZ129marI= + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +cache-loader@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/cache-loader/-/cache-loader-1.2.5.tgz#9ab15b0ae5f546f376083a695fc1a75f546cb266" + integrity sha512-enWKEQ4kO3YreDFd7AtVRjtJBmNiqh/X9hVDReu0C4qm8gsGmySkwuWtdc+N5O+vq5FzxL1mIZc30NyXCB7o/Q== + dependencies: + loader-utils "^1.1.0" + mkdirp "^0.5.1" + neo-async "^2.5.0" + schema-utils "^0.4.2" + +call-me-maybe@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" + integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= + +caller-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" + integrity sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8= + dependencies: + callsites "^0.2.0" + +callsites@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" + integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo= + +camel-case@3.0.x: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" + integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M= + dependencies: + no-case "^2.2.0" + upper-case "^1.1.1" + +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "http://registry.npm.taobao.org/camelcase-keys/download/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + +camelcase@^1.0.2: + version "1.2.1" + resolved "http://registry.npm.taobao.org/camelcase/download/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + integrity sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk= + +camelcase@^2.0.0: + version "2.1.1" + resolved "http://registry.npm.taobao.org/camelcase/download/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= + +camelcase@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/camelcase/download/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" + integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= + +camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= + +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30000864: + version "1.0.30000893" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000893.tgz#284b20932bd41b93e21626975f2050cb01561986" + integrity sha512-kOddHcTEef+NgN/fs0zmX2brHTNATVOWMEIhlZHCuwQRtXobjSw9pAECc44Op4bTBcavRjkLaPrGomknH7+Jvg== + +caniuse-lite@^1.0.30000893, caniuse-lite@^1.0.30000912: + version "1.0.30000913" + resolved "http://registry.npm.taobao.org/caniuse-lite/download/caniuse-lite-1.0.30000913.tgz#560311ecf242eaf12159b720e64b11ebd759b5e4" + integrity sha1-VgMR7PJC6vEhWbcg5ksR69dZteQ= + +case-sensitive-paths-webpack-plugin@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.1.2.tgz#c899b52175763689224571dad778742e133f0192" + integrity sha512-oEZgAFfEvKtjSRCu6VgYkuGxwrWXMnQzyBmlLPP7r6PWQVtHxP5Z5N6XsuJvtoVax78am/r7lr46bwo3IVEBOg== + +caseless@~0.12.0: + version "0.12.0" + resolved "http://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +center-align@^0.1.1: + version "0.1.3" + resolved "http://registry.npm.taobao.org/center-align/download/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + integrity sha1-qg0yYptu6XIgBBHL1EYckHvCt60= + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" + +chalk@^1.1.1, chalk@^1.1.3: + version "1.1.3" + resolved "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4.1: + version "2.4.1" + resolved "http://registry.npm.taobao.org/chalk/download/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" + integrity sha1-GMSasWoDe26wFSzIPjRxM4IVtm4= + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chardet@^0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" + integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I= + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +charenc@~0.0.1: + version "0.0.2" + resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" + integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= + +check-types@^7.3.0: + version "7.4.0" + resolved "https://registry.yarnpkg.com/check-types/-/check-types-7.4.0.tgz#0378ec1b9616ec71f774931a3c6516fad8c152f4" + integrity sha512-YbulWHdfP99UfZ73NcUDlNJhEIDgm9Doq9GhpyXbF+7Aegi3CVV7qqMCKTTqJxlvEvnQBp9IA+dxsGN6xK/nSg== + +chokidar@^2.0.0, chokidar@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.4.tgz#356ff4e2b0e8e43e322d18a372460bbcf3accd26" + integrity sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.0" + braces "^2.3.0" + glob-parent "^3.1.0" + inherits "^2.0.1" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + lodash.debounce "^4.0.8" + normalize-path "^2.1.1" + path-is-absolute "^1.0.0" + readdirp "^2.0.0" + upath "^1.0.5" + optionalDependencies: + fsevents "^1.2.2" + +chownr@^1.0.1, chownr@^1.1.1: + version "1.1.1" + resolved "http://registry.npm.taobao.org/chownr/download/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" + integrity sha1-VHJri4//TfBTxCGH6AH7RBLfFJQ= + +chrome-trace-event@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/chrome-trace-event/download/chrome-trace-event-1.0.0.tgz#45a91bd2c20c9411f0963b5aaeb9a1b95e09cc48" + integrity sha1-Rakb0sIMlBHwljtarrmhuV4JzEg= + dependencies: + tslib "^1.9.0" + +ci-info@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" + integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "http://registry.npm.taobao.org/cipher-base/download/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94= + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +circular-json@^0.3.1: + version "0.3.3" + resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" + integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A== + +class-utils@^0.3.5: + version "0.3.6" + resolved "http://registry.npm.taobao.org/class-utils/download/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha1-+TNprouafOAv1B+q0MqDAzGQxGM= + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +classnames@^2.2.5: + version "2.2.6" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" + integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== + +clean-css@4.2.x: + version "4.2.1" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17" + integrity sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g== + dependencies: + source-map "~0.6.0" + +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= + dependencies: + restore-cursor "^2.0.0" + +cli-spinners@^1.1.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.3.1.tgz#002c1990912d0d59580c93bd36c056de99e4259a" + integrity sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg== + +cli-width@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" + integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= + +clipboardy@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-1.2.3.tgz#0526361bf78724c1f20be248d428e365433c07ef" + integrity sha512-2WNImOvCRe6r63Gk9pShfkwXsVtKCroMAevIbiae021mS850UkWPbevxsBz3tnvjZIEGvlwaqCPsw+4ulzNgJA== + dependencies: + arch "^2.1.0" + execa "^0.8.0" + +cliui@^2.1.0: + version "2.1.0" + resolved "http://registry.npm.taobao.org/cliui/download/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + integrity sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE= + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + +cliui@^3.2.0: + version "3.2.0" + resolved "http://registry.npm.taobao.org/cliui/download/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" + +cliui@^4.0.0, cliui@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" + integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + wrap-ansi "^2.0.0" + +clone-deep@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-2.0.2.tgz#00db3a1e173656730d1188c3d6aced6d7ea97713" + integrity sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ== + dependencies: + for-own "^1.0.0" + is-plain-object "^2.0.4" + kind-of "^6.0.0" + shallow-clone "^1.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + +clone@^2.1.1, clone@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= + +co@^4.6.0: + version "4.6.0" + resolved "http://registry.npm.taobao.org/co/download/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= + +coa@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.1.tgz#f3f8b0b15073e35d70263fb1042cb2c023db38af" + integrity sha512-5wfTTO8E2/ja4jFSxePXlG5nRu5bBtL/r1HCIpJW/lzT6yDtKl0u0Z4o/Vpz32IpKmBn7HerheEZQgA9N2DarQ== + dependencies: + q "^1.1.2" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/code-point-at/download/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +collection-visit@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/collection-visit/download/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0, color-convert@^1.9.1: + version "1.9.3" + resolved "http://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg= + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "http://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^1.5.2: + version "1.5.3" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc" + integrity sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/color/-/color-3.1.0.tgz#d8e9fb096732875774c84bf922815df0308d0ffc" + integrity sha512-CwyopLkuRYO5ei2EpzpIh6LqJMt6Mt+jZhO5VI5f/wJLZriXQE32/SSqzmrh+QB+AZT81Cj8yv+7zwToW8ahZg== + dependencies: + color-convert "^1.9.1" + color-string "^1.5.2" + +colors@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" + integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM= + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.7" + resolved "http://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828" + integrity sha1-LR0kMXr7ir6V1tLAsHtXgTU52Cg= + dependencies: + delayed-stream "~1.0.0" + +commander@2, commander@^2.18.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" + integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== + +commander@2.17.x, commander@~2.17.1: + version "2.17.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" + integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== + +commondir@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/commondir/download/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +component-classes@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/component-classes/-/component-classes-1.2.6.tgz#c642394c3618a4d8b0b8919efccbbd930e5cd691" + integrity sha1-xkI5TDYYpNiwuJGe/Mu9kw5c1pE= + dependencies: + component-indexof "0.0.3" + +component-emitter@^1.2.1: + version "1.2.1" + resolved "http://registry.npm.taobao.org/component-emitter/download/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= + +component-indexof@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/component-indexof/-/component-indexof-0.0.3.tgz#11d091312239eb8f32c8f25ae9cb002ffe8d3c24" + integrity sha1-EdCRMSI5648yyPJa6csAL/6NPCQ= + +compressible@~2.0.14: + version "2.0.15" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.15.tgz#857a9ab0a7e5a07d8d837ed43fe2defff64fe212" + integrity sha512-4aE67DL33dSW9gw4CI2H/yTxqHLNcxp0yS6jB+4h+wr3e43+1z7vm0HU9qXOH8j+qjKuL8+UtkOxYQSMq60Ylw== + dependencies: + mime-db ">= 1.36.0 < 2" + +compression@^1.5.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.3.tgz#27e0e176aaf260f7f2c2813c3e440adb9f1993db" + integrity sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.14" + debug "2.6.9" + on-headers "~1.0.1" + safe-buffer "5.1.2" + vary "~1.1.2" + +concat-map@0.0.1: + version "0.0.1" + resolved "http://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.5.0, concat-stream@^1.6.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +connect-history-api-fallback@^1.3.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#b06873934bc5e344fef611a196a6faae0aee015a" + integrity sha1-sGhzk0vF40T+9hGhlqb6rgruAVo= + +console-browserify@^1.1.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/console-browserify/download/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" + integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA= + dependencies: + date-now "^0.1.4" + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/console-control-strings/download/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + +consolidate@^0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.15.1.tgz#21ab043235c71a07d45d9aad98593b0dba56bab7" + integrity sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw== + dependencies: + bluebird "^3.1.1" + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/constants-browserify/download/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + +contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= + +content-disposition@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + integrity sha1-DPaLud318r55YcOoUXjLhdunjLQ= + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +contour_plot@^0.0.1: + version "0.0.1" + resolved "http://registry.npm.taobao.org/contour_plot/download/contour_plot-0.0.1.tgz#475870f032b8e338412aa5fc507880f0bf495c77" + integrity sha1-R1hw8DK44zhBKqX8UHiA8L9JXHc= + +convert-source-map@^1.1.0: + version "1.6.0" + resolved "http://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" + integrity sha1-UbU3qMQ+DwTewZk7/83VBOdYrCA= + dependencies: + safe-buffer "~5.1.1" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + +cookie@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" + integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s= + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "http://registry.npm.taobao.org/copy-concurrently/download/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha1-kilzmMrjSTf8r9bsgTnBgFHwteA= + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "http://registry.npm.taobao.org/copy-descriptor/download/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +copy-webpack-plugin@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-4.6.0.tgz#e7f40dd8a68477d405dd1b7a854aae324b158bae" + integrity sha512-Y+SQCF+0NoWQryez2zXn5J5knmr9z/9qSQt7fbL78u83rxmigOy8X5+BFn8CFSuX+nKT8gpYwJX68ekqtQt6ZA== + dependencies: + cacache "^10.0.4" + find-cache-dir "^1.0.0" + globby "^7.1.1" + is-glob "^4.0.0" + loader-utils "^1.1.0" + minimatch "^3.0.4" + p-limit "^1.0.0" + serialize-javascript "^1.4.0" + +core-js@^2.4.0, core-js@^2.5.7: + version "2.5.7" + resolved "http://registry.npm.taobao.org/core-js/download/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e" + integrity sha1-+XJgj/DOrWi4QaFqky0LGDeRgU4= + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "http://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cosmiconfig@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-4.0.0.tgz#760391549580bbd2df1e562bc177b13c290972dc" + integrity sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ== + dependencies: + is-directory "^0.3.1" + js-yaml "^3.9.0" + parse-json "^4.0.0" + require-from-string "^2.0.1" + +cosmiconfig@^5.0.0: + version "5.0.6" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.6.tgz#dca6cf680a0bd03589aff684700858c81abeeb39" + integrity sha512-6DWfizHriCrFWURP1/qyhsiFvYdlJzbCzmtFWh744+KyWsJo5+kPzUZZaMRSSItoYc0pxFX7gEO7ZC1/gN/7AQ== + dependencies: + is-directory "^0.3.1" + js-yaml "^3.9.0" + parse-json "^4.0.0" + +create-ecdh@^4.0.0: + version "4.0.3" + resolved "http://registry.npm.taobao.org/create-ecdh/download/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" + integrity sha1-yREbbzMEXEaX8UR4f5JUzcd8Rf8= + dependencies: + bn.js "^4.1.0" + elliptic "^6.0.0" + +create-hash@^1.1.0, create-hash@^1.1.2: + version "1.2.0" + resolved "http://registry.npm.taobao.org/create-hash/download/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha1-iJB4rxGmN1a8+1m9IhmWvjqe8ZY= + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: + version "1.1.7" + resolved "http://registry.npm.taobao.org/create-hmac/download/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha1-aRcMeLOrlXFHsriwRXLkfq0iQ/8= + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +cross-spawn@^3.0.0: + version "3.0.1" + resolved "http://registry.npm.taobao.org/cross-spawn/download/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" + integrity sha1-ElYDfsufDF9549bvE14wdwGEuYI= + dependencies: + lru-cache "^4.0.1" + which "^1.2.9" + +cross-spawn@^5.0.1, cross-spawn@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^6.0.0, cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +crypt@~0.0.1: + version "0.0.2" + resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" + integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= + +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "http://registry.npm.taobao.org/crypto-browserify/download/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha1-OWz58xN/A+S45TLFj2mCVOAPgOw= + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +css-color-names@0.0.4, css-color-names@^0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" + integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= + +css-declaration-sorter@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" + integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA== + dependencies: + postcss "^7.0.1" + timsort "^0.3.0" + +css-loader@^1.0.0, css-loader@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-1.0.1.tgz#6885bb5233b35ec47b006057da01cc640b6b79fe" + integrity sha512-+ZHAZm/yqvJ2kDtPne3uX0C+Vr3Zn5jFn2N4HywtS5ujwvsVkyg0VArEXpl3BgczDA8anieki1FIzhchX4yrDw== + dependencies: + babel-code-frame "^6.26.0" + css-selector-tokenizer "^0.7.0" + icss-utils "^2.1.0" + loader-utils "^1.0.2" + lodash "^4.17.11" + postcss "^6.0.23" + postcss-modules-extract-imports "^1.2.0" + postcss-modules-local-by-default "^1.2.0" + postcss-modules-scope "^1.1.0" + postcss-modules-values "^1.3.0" + postcss-value-parser "^3.3.0" + source-list-map "^2.0.0" + +css-select-base-adapter@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.0.tgz#0102b3d14630df86c3eb9fa9f5456270106cf990" + integrity sha1-AQKz0UYw34bD65+p9UVicBBs+ZA= + +css-select@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= + dependencies: + boolbase "~1.0.0" + css-what "2.1" + domutils "1.5.1" + nth-check "~1.0.1" + +css-select@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.0.0.tgz#7aa2921392114831f68db175c0b6a555df74bbd5" + integrity sha512-MGhoq1S9EyPgZIGnts8Yz5WwUOyHmPMdlqeifsYs/xFX7AAm3hY0RJe1dqVlXtYPI66Nsk39R/sa5/ree6L2qg== + dependencies: + boolbase "^1.0.0" + css-what "2.1" + domutils "^1.7.0" + nth-check "^1.0.1" + +css-selector-tokenizer@^0.7.0: + version "0.7.1" + resolved "http://registry.npm.taobao.org/css-selector-tokenizer/download/css-selector-tokenizer-0.7.1.tgz#a177271a8bca5019172f4f891fc6eed9cbf68d5d" + integrity sha1-oXcnGovKUBkXL0+JH8bu2cv2jV0= + dependencies: + cssesc "^0.1.0" + fastparse "^1.1.1" + regexpu-core "^1.0.0" + +css-tree@1.0.0-alpha.28: + version "1.0.0-alpha.28" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.28.tgz#8e8968190d886c9477bc8d61e96f61af3f7ffa7f" + integrity sha512-joNNW1gCp3qFFzj4St6zk+Wh/NBv0vM5YbEreZk0SD4S23S+1xBKb6cLDg2uj4P4k/GUMlIm6cKIDqIG+vdt0w== + dependencies: + mdn-data "~1.1.0" + source-map "^0.5.3" + +css-tree@1.0.0-alpha.29: + version "1.0.0-alpha.29" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.29.tgz#3fa9d4ef3142cbd1c301e7664c1f352bd82f5a39" + integrity sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg== + dependencies: + mdn-data "~1.1.0" + source-map "^0.5.3" + +css-unit-converter@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/css-unit-converter/-/css-unit-converter-1.1.1.tgz#d9b9281adcfd8ced935bdbaba83786897f64e996" + integrity sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY= + +css-url-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/css-url-regex/-/css-url-regex-1.1.0.tgz#83834230cc9f74c457de59eebd1543feeb83b7ec" + integrity sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w= + +css-what@2.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd" + integrity sha1-lGfQMsOM+u+58teVASUwYvh/ob0= + +cssesc@^0.1.0: + version "0.1.0" + resolved "http://registry.npm.taobao.org/cssesc/download/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" + integrity sha1-yBSQPkViM3GgR3tAEJqq++6t27Q= + +cssesc@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-1.0.1.tgz#ef7bd8d0229ed6a3a7051ff7771265fe7330e0a8" + integrity sha512-S2hzrpWvE6G/rW7i7IxJfWBYn27QWfOIncUW++8Rbo1VB5zsJDSVPcnI+Q8z7rhxT6/yZeLOCja4cZnghJrNGA== + +cssnano-preset-default@^4.0.0, cssnano-preset-default@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.3.tgz#9bfd1b06d4aa3991ed958ad9b9ec25a179261705" + integrity sha512-RYxcuQhGGybn+4twdn/c/A6Ephq31znqbWMdtjWdyC84IcqnXxBuLue0iNxHhwUr+eNtaJU4pJX8ro9F7Crw5w== + dependencies: + css-declaration-sorter "^4.0.1" + cssnano-util-raw-cache "^4.0.1" + postcss "^7.0.0" + postcss-calc "^7.0.0" + postcss-colormin "^4.0.2" + postcss-convert-values "^4.0.1" + postcss-discard-comments "^4.0.1" + postcss-discard-duplicates "^4.0.2" + postcss-discard-empty "^4.0.1" + postcss-discard-overridden "^4.0.1" + postcss-merge-longhand "^4.0.6" + postcss-merge-rules "^4.0.2" + postcss-minify-font-values "^4.0.2" + postcss-minify-gradients "^4.0.1" + postcss-minify-params "^4.0.1" + postcss-minify-selectors "^4.0.1" + postcss-normalize-charset "^4.0.1" + postcss-normalize-display-values "^4.0.1" + postcss-normalize-positions "^4.0.1" + postcss-normalize-repeat-style "^4.0.1" + postcss-normalize-string "^4.0.1" + postcss-normalize-timing-functions "^4.0.1" + postcss-normalize-unicode "^4.0.1" + postcss-normalize-url "^4.0.1" + postcss-normalize-whitespace "^4.0.1" + postcss-ordered-values "^4.1.1" + postcss-reduce-initial "^4.0.2" + postcss-reduce-transforms "^4.0.1" + postcss-svgo "^4.0.1" + postcss-unique-selectors "^4.0.1" + +cssnano-preset-default@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.5.tgz#d1756c0259d98ad311e601ba76e95c60f6771ac1" + integrity sha512-f1uhya0ZAjPYtDD58QkBB0R+uYdzHPei7cDxJyQQIHt5acdhyGXaSXl2nDLzWHLwGFbZcHxQtkJS8mmNwnxTvw== + dependencies: + css-declaration-sorter "^4.0.1" + cssnano-util-raw-cache "^4.0.1" + postcss "^7.0.0" + postcss-calc "^7.0.0" + postcss-colormin "^4.0.2" + postcss-convert-values "^4.0.1" + postcss-discard-comments "^4.0.1" + postcss-discard-duplicates "^4.0.2" + postcss-discard-empty "^4.0.1" + postcss-discard-overridden "^4.0.1" + postcss-merge-longhand "^4.0.9" + postcss-merge-rules "^4.0.2" + postcss-minify-font-values "^4.0.2" + postcss-minify-gradients "^4.0.1" + postcss-minify-params "^4.0.1" + postcss-minify-selectors "^4.0.1" + postcss-normalize-charset "^4.0.1" + postcss-normalize-display-values "^4.0.1" + postcss-normalize-positions "^4.0.1" + postcss-normalize-repeat-style "^4.0.1" + postcss-normalize-string "^4.0.1" + postcss-normalize-timing-functions "^4.0.1" + postcss-normalize-unicode "^4.0.1" + postcss-normalize-url "^4.0.1" + postcss-normalize-whitespace "^4.0.1" + postcss-ordered-values "^4.1.1" + postcss-reduce-initial "^4.0.2" + postcss-reduce-transforms "^4.0.1" + postcss-svgo "^4.0.1" + postcss-unique-selectors "^4.0.1" + +cssnano-util-get-arguments@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" + integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= + +cssnano-util-get-match@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" + integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= + +cssnano-util-raw-cache@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" + integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== + dependencies: + postcss "^7.0.0" + +cssnano-util-same-parent@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" + integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== + +cssnano@^4.0.0: + version "4.1.5" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.5.tgz#cfe5ffa722079f339ac2a6d547d88dd8ac8a498d" + integrity sha512-+6m3g8zV87VDIMCXpDzlaXyzo9h9VrIn9o/XRU6ufH/AddZw/mHzmmmNv83+MxpX5rnVbYPxuAMYPjuDgjd9Hw== + dependencies: + cosmiconfig "^5.0.0" + cssnano-preset-default "^4.0.2" + is-resolvable "^1.0.0" + postcss "^7.0.0" + +cssnano@^4.1.7: + version "4.1.7" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.7.tgz#0bf112294bec103ab5f68d3f805732c8325a0b1b" + integrity sha512-AiXL90l+MDuQmRNyypG2P7ux7K4XklxYzNNUd5HXZCNcH8/N9bHPcpN97v8tXgRVeFL/Ed8iP8mVmAAu0ZpT7A== + dependencies: + cosmiconfig "^5.0.0" + cssnano-preset-default "^4.0.5" + is-resolvable "^1.0.0" + postcss "^7.0.0" + +csso@^3.5.0: + version "3.5.1" + resolved "https://registry.yarnpkg.com/csso/-/csso-3.5.1.tgz#7b9eb8be61628973c1b261e169d2f024008e758b" + integrity sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg== + dependencies: + css-tree "1.0.0-alpha.29" + +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "http://registry.npm.taobao.org/currently-unhandled/download/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= + dependencies: + array-find-index "^1.0.1" + +cyclist@~0.2.2: + version "0.2.2" + resolved "http://registry.npm.taobao.org/cyclist/download/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" + integrity sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA= + +d3-array@1, d3-array@~1.2.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.4.tgz#635ce4d5eea759f6f605863dbcfc30edc737f71f" + integrity sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw== + +d3-collection@1: + version "1.0.7" + resolved "https://registry.yarnpkg.com/d3-collection/-/d3-collection-1.0.7.tgz#349bd2aa9977db071091c13144d5e4f16b5b310e" + integrity sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A== + +d3-color@1: + version "1.2.3" + resolved "http://registry.npm.taobao.org/d3-color/download/d3-color-1.2.3.tgz#6c67bb2af6df3cc8d79efcc4d3a3e83e28c8048f" + integrity sha1-bGe7KvbfPMjXnvzE06PoPijIBI8= + +d3-composite-projections@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/d3-composite-projections/-/d3-composite-projections-1.2.0.tgz#fa0e6f1442f17d04643843a3a883c7d94e0c27c0" + integrity sha1-+g5vFELxfQRkOEOjqIPH2U4MJ8A= + dependencies: + d3-geo "1.2.4" + d3-path "^1.0.1" + +d3-dispatch@1: + version "1.0.5" + resolved "http://registry.npm.taobao.org/d3-dispatch/download/d3-dispatch-1.0.5.tgz#e25c10a186517cd6c82dd19ea018f07e01e39015" + integrity sha1-4lwQoYZRfNbILdGeoBjwfgHjkBU= + +d3-dsv@~1.0.5: + version "1.0.10" + resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-1.0.10.tgz#4371c489a2a654a297aca16fcaf605a6f31a6f51" + integrity sha512-vqklfpxmtO2ZER3fq/B33R/BIz3A1PV0FaZRuFM8w6jLo7sUX1BZDh73fPlr0s327rzq4H6EN1q9U+eCBCSN8g== + dependencies: + commander "2" + iconv-lite "0.4" + rw "1" + +d3-ease@1, d3-ease@~1.0.3: + version "1.0.5" + resolved "http://registry.npm.taobao.org/d3-ease/download/d3-ease-1.0.5.tgz#8ce59276d81241b1b72042d6af2d40e76d936ffb" + integrity sha1-jOWSdtgSQbG3IELWry1A522Tb/s= + +d3-format@^1.3.0: + version "1.3.2" + resolved "http://registry.npm.taobao.org/d3-format/download/d3-format-1.3.2.tgz#6a96b5e31bcb98122a30863f7d92365c00603562" + integrity sha1-apa14xvLmBIqMIY/fZI2XABgNWI= + +d3-geo-projection@~2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/d3-geo-projection/-/d3-geo-projection-2.1.2.tgz#7df8e1e9d046d631c6509f7e531357d4adc24aa3" + integrity sha1-ffjh6dBG1jHGUJ9+UxNX1K3CSqM= + dependencies: + commander "2" + d3-array "1" + d3-geo "^1.1.0" + +d3-geo@1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-1.2.4.tgz#d179f3baa76e623ef1e0d83693db705b7c599006" + integrity sha1-0XnzuqduYj7x4Ng2k9twW3xZkAY= + dependencies: + d3-array "1" + +d3-geo@^1.1.0: + version "1.11.1" + resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-1.11.1.tgz#3f35e582c0d29296618b02a8ade0fdffb2c0e63c" + integrity sha512-GsG7x9G9sykseLviOVSJ3h5yjw0ItLopOtuDQKUt1TRklEegCw5WAmnIpYYiCkSH/QgUMleAeE2xZK38Qb+1+Q== + dependencies: + d3-array "1" + +d3-geo@~1.6.4: + version "1.6.4" + resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-1.6.4.tgz#f20e1e461cb1845f5a8be55ab6f876542a7e3199" + integrity sha1-8g4eRhyxhF9ai+Vatvh2VCp+MZk= + dependencies: + d3-array "1" + +d3-hexjson@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/d3-hexjson/-/d3-hexjson-1.0.1.tgz#6a23111e8359f1e214f5d0afa379c02b2b67df0b" + integrity sha512-TeH4T0PSbDazMm3gHgc4ulO0PfrZpz0Uk3y5tCGz+NgC7HnX7KBdem7uAN+j9x3ZshTh7raN3V/bFhaLB2C8DA== + dependencies: + d3-array "1" + +d3-hierarchy@~1.1.5: + version "1.1.8" + resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-1.1.8.tgz#7a6317bd3ed24e324641b6f1e76e978836b008cc" + integrity sha512-L+GHMSZNwTpiq4rt9GEsNcpLa4M96lXMR8M/nMG9p5hBE0jy6C+3hWtyZMenPQdwla249iJy7Nx0uKt3n+u9+w== + +d3-interpolate@1: + version "1.3.2" + resolved "http://registry.npm.taobao.org/d3-interpolate/download/d3-interpolate-1.3.2.tgz#417d3ebdeb4bc4efcc8fd4361c55e4040211fd68" + integrity sha1-QX0+vetLxO/Mj9Q2HFXkBAIR/Wg= + dependencies: + d3-color "1" + +d3-interpolate@~1.1.5: + version "1.1.6" + resolved "http://registry.npm.taobao.org/d3-interpolate/download/d3-interpolate-1.1.6.tgz#2cf395ae2381804df08aa1bf766b7f97b5f68fb6" + integrity sha1-LPOVriOBgE3wiqG/dmt/l7X2j7Y= + dependencies: + d3-color "1" + +d3-path@1, d3-path@^1.0.1: + version "1.0.7" + resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.7.tgz#8de7cd693a75ac0b5480d3abaccd94793e58aae8" + integrity sha512-q0cW1RpvA5c5ma2rch62mX8AYaiLX0+bdaSM2wxSU9tXjU4DNvkx9qiUvjkuWCj3p22UO/hlPivujqMiR9PDzA== + +d3-sankey@~0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/d3-sankey/-/d3-sankey-0.7.1.tgz#d229832268fc69a7fec84803e96c2256a614c521" + integrity sha1-0imDImj8aaf+yEgD6WwiVqYUxSE= + dependencies: + d3-array "1" + d3-collection "1" + d3-shape "^1.2.0" + +d3-selection@^1.0.2, d3-selection@^1.1.0: + version "1.3.2" + resolved "http://registry.npm.taobao.org/d3-selection/download/d3-selection-1.3.2.tgz#6e70a9df60801c8af28ac24d10072d82cbfdf652" + integrity sha1-bnCp32CAHIryisJNEActgsv99lI= + +d3-shape@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.2.2.tgz#f9dba3777a5825f9a8ce8bc928da08c17679e9a7" + integrity sha512-hUGEozlKecFZ2bOSNt7ENex+4Tk9uc/m0TtTEHBvitCBxUNjhzm5hS2GrrVRD/ae4IylSmxGeqX5tWC2rASMlQ== + dependencies: + d3-path "1" + +d3-timer@1, d3-timer@~1.0.6: + version "1.0.9" + resolved "http://registry.npm.taobao.org/d3-timer/download/d3-timer-1.0.9.tgz#f7bb8c0d597d792ff7131e1c24a36dd471a471ba" + integrity sha1-97uMDVl9eS/3Ex4cJKNt1HGkcbo= + +d3-transition@^1.0.1: + version "1.1.3" + resolved "http://registry.npm.taobao.org/d3-transition/download/d3-transition-1.1.3.tgz#3a435b05ce9cef9524fe0d38121cfb6905331ca6" + integrity sha1-OkNbBc6c75Uk/g04Ehz7aQUzHKY= + dependencies: + d3-color "1" + d3-dispatch "1" + d3-ease "1" + d3-interpolate "1" + d3-selection "^1.1.0" + d3-timer "1" + +d3-voronoi@~1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/d3-voronoi/-/d3-voronoi-1.1.4.tgz#dd3c78d7653d2bb359284ae478645d95944c8297" + integrity sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg== + +dagre@~0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/dagre/-/dagre-0.8.2.tgz#755b79f4d5499d63cf74c3368fb08add93eceafe" + integrity sha512-TEOOGZOkCOgCG7AoUIq64sJ3d21SMv8tyoqteLpX+UsUsS9Qw8iap4hhogXY4oB3r0bbZuAjO0atAilgCmsE0Q== + dependencies: + graphlib "^2.1.5" + lodash "^4.17.4" + +dashdash@^1.12.0: + version "1.14.1" + resolved "http://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +date-now@^0.1.4: + version "0.1.4" + resolved "http://registry.npm.taobao.org/date-now/download/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" + integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs= + +dayjs@^1.7.5: + version "1.7.7" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.7.7.tgz#8df20f78ac2476e3f5348ef49f8f22ebc3016370" + integrity sha512-Qlkiu0NNDpYwhk0syK4ImvAl/5YnsEMkvC2O123INviGeOA3Q8s5VyVkZzmN5SC7Wv9bb1+rfwO+uSqtHB4UWw== + +de-indent@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" + integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0= + +debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: + version "2.6.9" + resolved "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8= + dependencies: + ms "2.0.0" + +debug@=3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +debug@^3.1.0, debug@^3.2.5: + version "3.2.6" + resolved "http://registry.npm.taobao.org/debug/download/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha1-6D0X3hbYp++3cX7b5fsQE17uYps= + dependencies: + ms "^2.1.1" + +debug@^4.0.1, debug@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.0.tgz#373687bffa678b38b1cd91f861b63850035ddc87" + integrity sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg== + dependencies: + ms "^2.1.1" + +decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: + version "1.2.0" + resolved "http://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decamelize@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-2.0.0.tgz#656d7bbc8094c4c788ea53c5840908c9c7d063c7" + integrity sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg== + dependencies: + xregexp "4.0.0" + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "http://registry.npm.taobao.org/decode-uri-component/download/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +deep-equal@^1.0.1, deep-equal@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" + integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU= + +deep-extend@^0.6.0: + version "0.6.0" + resolved "http://registry.npm.taobao.org/deep-extend/download/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha1-xPp8lUBKF6nD6Mp+FTcxK3NjMKw= + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +deepmerge@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-1.5.2.tgz#10499d868844cdad4fee0842df8c7f6f0c95a753" + integrity sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ== + +default-gateway@^2.6.0: + version "2.7.2" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-2.7.2.tgz#b7ef339e5e024b045467af403d50348db4642d0f" + integrity sha512-lAc4i9QJR0YHSDFdzeBQKfZ1SRDG3hsJNEkrpcZa8QhBfidLAilT60BDEIVUUGqosFp425KOgB3uYqcnQrWafQ== + dependencies: + execa "^0.10.0" + ip-regex "^2.1.0" + +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= + dependencies: + clone "^1.0.2" + +define-properties@^1.1.2: + version "1.1.3" + resolved "http://registry.npm.taobao.org/define-properties/download/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE= + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "http://registry.npm.taobao.org/define-property/download/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha1-1Flono1lS6d+AqgX+HENcCyxbp0= + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +defined@~1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/defined/download/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= + +del@^2.0.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" + integrity sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag= + dependencies: + globby "^5.0.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + rimraf "^2.2.8" + +del@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" + integrity sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= + dependencies: + globby "^6.1.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + p-map "^1.1.1" + pify "^3.0.0" + rimraf "^2.2.8" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +delegates@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/delegates/download/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +des.js@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/des.js/download/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" + integrity sha1-wHTS4qpqipoH29YfmhXCzYPsjsw= + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + +detect-libc@^1.0.2: + version "1.0.3" + resolved "http://registry.npm.taobao.org/detect-libc/download/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= + +detect-node@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" + integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "http://registry.npm.taobao.org/diffie-hellman/download/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha1-QOjumPVaIUlgcUaSHGPhrl89KHU= + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dir-glob@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034" + integrity sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag== + dependencies: + arrify "^1.0.1" + path-type "^3.0.0" + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= + +dns-packet@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" + integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg== + dependencies: + ip "^1.1.0" + safe-buffer "^5.0.1" + +dns-txt@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" + integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= + dependencies: + buffer-indexof "^1.0.0" + +doctrine@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +dom-align@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/dom-align/-/dom-align-1.8.0.tgz#c0e89b5b674c6e836cd248c52c2992135f093654" + integrity sha512-B85D4ef2Gj5lw0rK0KM2+D5/pH7yqNxg2mB+E8uzFaolpm7RQmsxEfjyEuNiF8UBBkffumYDeKRzTzc3LePP+w== + +dom-closest@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-closest/-/dom-closest-0.2.0.tgz#ebd9f91d1bf22e8d6f477876bbcd3ec90216c0cf" + integrity sha1-69n5HRvyLo1vR3h2u80+yQIWwM8= + dependencies: + dom-matches ">=1.0.1" + +dom-converter@~0.2: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + dependencies: + utila "~0.4" + +dom-matches@>=1.0.1: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dom-matches/-/dom-matches-2.0.0.tgz#d2728b416a87533980eb089b848d253cf23a758c" + integrity sha1-0nKLQWqHUzmA6wibhI0lPPI6dYw= + +dom-scroll-into-view@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/dom-scroll-into-view/-/dom-scroll-into-view-1.2.1.tgz#e8f36732dd089b0201a88d7815dc3f88e6d66c7e" + integrity sha1-6PNnMt0ImwIBqI14Fdw/iObWbH4= + +dom-serializer@0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" + integrity sha1-BzxpdUbOB4DOI75KKOKT5AvDDII= + dependencies: + domelementtype "~1.1.1" + entities "~1.1.1" + +domain-browser@^1.1.1: + version "1.2.0" + resolved "http://registry.npm.taobao.org/domain-browser/download/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto= + +domelementtype@1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" + integrity sha1-sXrtguirWeUt2cGbF1bg/BhyBMI= + +domelementtype@~1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" + integrity sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs= + +domhandler@2.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.1.0.tgz#d2646f5e57f6c3bab11cf6cb05d3c0acf7412594" + integrity sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ= + dependencies: + domelementtype "1" + +domutils@1.1: + version "1.1.6" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485" + integrity sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU= + dependencies: + domelementtype "1" + +domutils@1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + dependencies: + dom-serializer "0" + domelementtype "1" + +dot-prop@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" + integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== + dependencies: + is-obj "^1.0.0" + +duplexer@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= + +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.6.1" + resolved "http://registry.npm.taobao.org/duplexify/download/duplexify-3.6.1.tgz#b1a7a29c4abfd639585efaecce80d666b1e34125" + integrity sha1-saeinEq/1jlYXvrszoDWZrHjQSU= + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +easy-stack@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/easy-stack/-/easy-stack-1.0.0.tgz#12c91b3085a37f0baa336e9486eac4bf94e3e788" + integrity sha1-EskbMIWjfwuqM26UhurEv5Tj54g= + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "http://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +ejs@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.6.1.tgz#498ec0d495655abc6f23cd61868d926464071aa0" + integrity sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ== + +electron-to-chromium@^1.3.47: + version "1.3.80" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.80.tgz#e99ec7efe64c2c6a269d3885ff411ea88852fa53" + integrity sha512-WClidEWEUNx7OfwXehB0qaxCuetjbKjev2SmXWgybWPLKAThBiMTF/2Pd8GSUDtoGOavxVzdkKwfFAPRSWlkLw== + +electron-to-chromium@^1.3.80, electron-to-chromium@^1.3.86: + version "1.3.87" + resolved "http://registry.npm.taobao.org/electron-to-chromium/download/electron-to-chromium-1.3.87.tgz#f0481ca84824752bced51673396e9a6c74fe5ec7" + integrity sha1-8EgcqEgkdSvO1RZzOW6abHT+Xsc= + +elliptic@^6.0.0: + version "6.4.1" + resolved "http://registry.npm.taobao.org/elliptic/download/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a" + integrity sha1-wtC3d2kRuGcixjLDwGxg8vgZk5o= + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + +emojis-list@^2.0.0: + version "2.1.0" + resolved "http://registry.npm.taobao.org/emojis-list/download/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.1" + resolved "http://registry.npm.taobao.org/end-of-stream/download/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" + integrity sha1-7SljTRm6ukY7bOa4CjchPqtx7EM= + dependencies: + once "^1.4.0" + +enhanced-resolve@^4.1.0: + version "4.1.0" + resolved "http://registry.npm.taobao.org/enhanced-resolve/download/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" + integrity sha1-Qcfgv9/nSsH/4eV61qXGyfN0Kn8= + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.4.0" + tapable "^1.0.0" + +enquire.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/enquire.js/-/enquire.js-2.1.6.tgz#3e8780c9b8b835084c3f60e166dbc3c2a3c89814" + integrity sha1-PoeAybi4NQhMP2DhZtvDwqPImBQ= + +entities@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" + integrity sha1-blwtClYhtdra7O+AuQ7ftc13cvA= + +errno@^0.1.1, errno@^0.1.3, errno@~0.1.7: + version "0.1.7" + resolved "http://registry.npm.taobao.org/errno/download/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + integrity sha1-RoTXF3mtOa8Xfj8AeZb3xnyFJhg= + dependencies: + prr "~1.0.1" + +error-ex@^1.2.0, error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +error-stack-parser@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.2.tgz#4ae8dbaa2bf90a8b450707b9149dcabca135520d" + integrity sha512-E1fPutRDdIj/hohG0UpT5mayXNCxXP9d+snxFsPU9X0XgccOumKraa3juDMwTUyi7+Bu5+mCGagjg4IYeNbOdw== + dependencies: + stackframe "^1.0.4" + +es-abstract@^1.4.3, es-abstract@^1.5.0, es-abstract@^1.5.1, es-abstract@^1.6.1: + version "1.12.0" + resolved "http://registry.npm.taobao.org/es-abstract/download/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165" + integrity sha1-nbvdJ8aFbwABQhyhh4LXhr+KYWU= + dependencies: + es-to-primitive "^1.1.1" + function-bind "^1.1.1" + has "^1.0.1" + is-callable "^1.1.3" + is-regex "^1.0.4" + +es-to-primitive@^1.1.1: + version "1.2.0" + resolved "http://registry.npm.taobao.org/es-to-primitive/download/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" + integrity sha1-7fckeAM0VujdqO8J4ArZZQcH83c= + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "http://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +eslint-config-standard@^12.0.0: + version "12.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-12.0.0.tgz#638b4c65db0bd5a41319f96bba1f15ddad2107d9" + integrity sha512-COUz8FnXhqFitYj4DTqHzidjIL/t4mumGZto5c7DrBpvWoie+Sn3P4sLEzUGeYhRElWuFEf8K1S1EfvD1vixCQ== + +eslint-import-resolver-node@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" + integrity sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q== + dependencies: + debug "^2.6.9" + resolve "^1.5.0" + +eslint-loader@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-2.1.1.tgz#2a9251523652430bfdd643efdb0afc1a2a89546a" + integrity sha512-1GrJFfSevQdYpoDzx8mEE2TDWsb/zmFuY09l6hURg1AeFIKQOvZ+vH0UPjzmd1CZIbfTV5HUkMeBmFiDBkgIsQ== + dependencies: + loader-fs-cache "^1.0.0" + loader-utils "^1.0.2" + object-assign "^4.0.1" + object-hash "^1.1.4" + rimraf "^2.6.1" + +eslint-module-utils@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz#b270362cd88b1a48ad308976ce7fa54e98411746" + integrity sha1-snA2LNiLGkitMIl2zn+lTphBF0Y= + dependencies: + debug "^2.6.8" + pkg-dir "^1.0.0" + +eslint-plugin-es@^1.3.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-1.4.0.tgz#475f65bb20c993fc10e8c8fe77d1d60068072da6" + integrity sha512-XfFmgFdIUDgvaRAlaXUkxrRg5JSADoRC8IkKLc/cISeR3yHVMefFHQZpcyXXEUUPHfy5DwviBcrfqlyqEwlQVw== + dependencies: + eslint-utils "^1.3.0" + regexpp "^2.0.1" + +eslint-plugin-import@^2.14.0: + version "2.14.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz#6b17626d2e3e6ad52cfce8807a845d15e22111a8" + integrity sha512-FpuRtniD/AY6sXByma2Wr0TXvXJ4nA/2/04VPlfpmUDPOpOY264x+ILiwnrk/k4RINgDAyFZByxqPUbSQ5YE7g== + dependencies: + contains-path "^0.1.0" + debug "^2.6.8" + doctrine "1.5.0" + eslint-import-resolver-node "^0.3.1" + eslint-module-utils "^2.2.0" + has "^1.0.1" + lodash "^4.17.4" + minimatch "^3.0.3" + read-pkg-up "^2.0.0" + resolve "^1.6.0" + +eslint-plugin-node@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-8.0.0.tgz#fb9e8911f4543514f154bb6a5924b599aa645568" + integrity sha512-Y+ln8iQ52scz9+rSPnSWRaAxeWaoJZ4wIveDR0vLHkuSZGe44Vk1J4HX7WvEP5Cm+iXPE8ixo7OM7gAO3/OKpQ== + dependencies: + eslint-plugin-es "^1.3.1" + eslint-utils "^1.3.1" + ignore "^5.0.2" + minimatch "^3.0.4" + resolve "^1.8.1" + semver "^5.5.0" + +eslint-plugin-promise@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.0.1.tgz#2d074b653f35a23d1ba89d8e976a985117d1c6a2" + integrity sha512-Si16O0+Hqz1gDHsys6RtFRrW7cCTB6P7p3OJmKp3Y3dxpQE2qwOA7d3xnV+0mBmrPoi0RBnxlCKvqu70te6wjg== + +eslint-plugin-standard@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-4.0.0.tgz#f845b45109c99cd90e77796940a344546c8f6b5c" + integrity sha512-OwxJkR6TQiYMmt1EsNRMe5qG3GsbjlcOhbGUBY4LtavF9DsLaTcoR+j2Tdjqi23oUwKNUqX7qcn5fPStafMdlA== + +eslint-plugin-vue@^4.7.1: + version "4.7.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-4.7.1.tgz#c829b9fc62582c1897b5a0b94afd44ecca511e63" + integrity sha512-esETKhVMI7Vdli70Wt4bvAwnZBJeM0pxVX9Yb0wWKxdCJc2EADalVYK/q2FzMw8oKN0wPMdqVCKS8kmR89recA== + dependencies: + vue-eslint-parser "^2.0.3" + +eslint-plugin-vue@^5.0.0-0: + version "5.0.0-beta.5" + resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-5.0.0-beta.5.tgz#d478abfcea7eaa98cbe28eedec4aea0e596fbdb2" + integrity sha512-ETVqyctk0cta99tTi3NjDDGyJiQZTHlf6J7fl6Ig58/926U2tjzU3T0A/c6/jkiTw1m9yErxLyF+IPnwX7j6bg== + dependencies: + vue-eslint-parser "^3.2.1" + +eslint-scope@3.7.1: + version "3.7.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" + integrity sha1-PWPD7f2gLgbgGkUq2IyqzHzctug= + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-scope@^3.7.1: + version "3.7.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.3.tgz#bb507200d3d17f60247636160b4826284b108535" + integrity sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-scope@^4.0.0: + version "4.0.0" + resolved "http://registry.npm.taobao.org/eslint-scope/download/eslint-scope-4.0.0.tgz#50bf3071e9338bcdc43331794a0cb533f0136172" + integrity sha1-UL8wcekzi83EMzF5Sgy1M/ATYXI= + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-utils@^1.3.0, eslint-utils@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512" + integrity sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q== + +eslint-visitor-keys@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" + integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ== + +eslint@^4.19.1: + version "4.19.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300" + integrity sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ== + dependencies: + ajv "^5.3.0" + babel-code-frame "^6.22.0" + chalk "^2.1.0" + concat-stream "^1.6.0" + cross-spawn "^5.1.0" + debug "^3.1.0" + doctrine "^2.1.0" + eslint-scope "^3.7.1" + eslint-visitor-keys "^1.0.0" + espree "^3.5.4" + esquery "^1.0.0" + esutils "^2.0.2" + file-entry-cache "^2.0.0" + functional-red-black-tree "^1.0.1" + glob "^7.1.2" + globals "^11.0.1" + ignore "^3.3.3" + imurmurhash "^0.1.4" + inquirer "^3.0.6" + is-resolvable "^1.0.0" + js-yaml "^3.9.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.4" + minimatch "^3.0.2" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.2" + path-is-inside "^1.0.2" + pluralize "^7.0.0" + progress "^2.0.0" + regexpp "^1.0.1" + require-uncached "^1.0.3" + semver "^5.3.0" + strip-ansi "^4.0.0" + strip-json-comments "~2.0.1" + table "4.0.2" + text-table "~0.2.0" + +eslint@^5.8.0: + version "5.9.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.9.0.tgz#b234b6d15ef84b5849c6de2af43195a2d59d408e" + integrity sha512-g4KWpPdqN0nth+goDNICNXGfJF7nNnepthp46CAlJoJtC5K/cLu3NgCM3AHu1CkJ5Hzt9V0Y0PBAO6Ay/gGb+w== + dependencies: + "@babel/code-frame" "^7.0.0" + ajv "^6.5.3" + chalk "^2.1.0" + cross-spawn "^6.0.5" + debug "^4.0.1" + doctrine "^2.1.0" + eslint-scope "^4.0.0" + eslint-utils "^1.3.1" + eslint-visitor-keys "^1.0.0" + espree "^4.0.0" + esquery "^1.0.1" + esutils "^2.0.2" + file-entry-cache "^2.0.0" + functional-red-black-tree "^1.0.1" + glob "^7.1.2" + globals "^11.7.0" + ignore "^4.0.6" + imurmurhash "^0.1.4" + inquirer "^6.1.0" + is-resolvable "^1.1.0" + js-yaml "^3.12.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.5" + minimatch "^3.0.4" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.2" + path-is-inside "^1.0.2" + pluralize "^7.0.0" + progress "^2.0.0" + regexpp "^2.0.1" + require-uncached "^1.0.3" + semver "^5.5.1" + strip-ansi "^4.0.0" + strip-json-comments "^2.0.1" + table "^5.0.2" + text-table "^0.2.0" + +espree@^3.5.2, espree@^3.5.4: + version "3.5.4" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" + integrity sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A== + dependencies: + acorn "^5.5.0" + acorn-jsx "^3.0.0" + +espree@^4.0.0, espree@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-4.1.0.tgz#728d5451e0fd156c04384a7ad89ed51ff54eb25f" + integrity sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w== + dependencies: + acorn "^6.0.2" + acorn-jsx "^5.0.0" + eslint-visitor-keys "^1.0.0" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.0.0, esquery@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" + integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== + dependencies: + estraverse "^4.0.0" + +esrecurse@^4.1.0: + version "4.2.1" + resolved "http://registry.npm.taobao.org/esrecurse/download/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + integrity sha1-AHo7n9vCs7uH5IeeoZyS/b05Qs8= + dependencies: + estraverse "^4.1.0" + +estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= + +esutils@^2.0.2: + version "2.0.2" + resolved "http://registry.npm.taobao.org/esutils/download/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +event-pubsub@4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/event-pubsub/-/event-pubsub-4.3.0.tgz#f68d816bc29f1ec02c539dc58c8dd40ce72cb36e" + integrity sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ== + +eventemitter3@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163" + integrity sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA== + +events@^1.0.0: + version "1.1.1" + resolved "http://registry.npm.taobao.org/events/download/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= + +eventsource@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0" + integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ== + dependencies: + original "^1.0.0" + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "http://registry.npm.taobao.org/evp_bytestokey/download/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI= + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +execa@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50" + integrity sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw== + dependencies: + cross-spawn "^6.0.0" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da" + integrity sha1-2NdrvBtVIX7RkP1t1J08d07PyNo= + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "http://registry.npm.taobao.org/expand-brackets/download/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +express@^4.16.2, express@^4.16.3: + version "4.16.4" + resolved "https://registry.yarnpkg.com/express/-/express-4.16.4.tgz#fddef61926109e24c515ea97fd2f1bdbf62df12e" + integrity sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg== + dependencies: + accepts "~1.3.5" + array-flatten "1.1.1" + body-parser "1.18.3" + content-disposition "0.5.2" + content-type "~1.0.4" + cookie "0.3.1" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.1.1" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.2" + path-to-regexp "0.1.7" + proxy-addr "~2.0.4" + qs "6.5.2" + range-parser "~1.2.0" + safe-buffer "5.1.2" + send "0.16.2" + serve-static "1.13.2" + setprototypeof "1.1.0" + statuses "~1.4.0" + type-is "~1.6.16" + utils-merge "1.0.1" + vary "~1.1.2" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@~3.0.2: + version "3.0.2" + resolved "http://registry.npm.taobao.org/extend/download/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo= + +external-editor@^2.0.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" + integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A== + dependencies: + chardet "^0.4.0" + iconv-lite "^0.4.17" + tmp "^0.0.33" + +external-editor@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27" + integrity sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extglob@^2.0.4: + version "2.0.4" + resolved "http://registry.npm.taobao.org/extglob/download/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM= + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "http://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "http://registry.npm.taobao.org/extsprintf/download/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +fast-deep-equal@^1.0.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" + integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ= + +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "http://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= + +fast-glob@^2.0.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.3.tgz#d09d378e9ef6b0076a0fa1ba7519d9d4d9699c28" + integrity sha512-NiX+JXjnx43RzvVFwRWfPKo4U+1BrK5pJPsHQdKMlLoFHrrGktXglQhHliSihWAq+m1z6fHk3uwGHrtRbS9vLA== + dependencies: + "@mrmlnc/readdir-enhanced" "^2.2.1" + "@nodelib/fs.stat" "^1.0.1" + glob-parent "^3.1.0" + is-glob "^4.0.0" + merge2 "^1.2.1" + micromatch "^3.1.10" + +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= + +fast-levenshtein@~2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +fastparse@^1.1.1: + version "1.1.2" + resolved "http://registry.npm.taobao.org/fastparse/download/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" + integrity sha1-kXKMWllC7O2FMSg8eUQe5BIsNak= + +faye-websocket@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" + integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ= + dependencies: + websocket-driver ">=0.5.1" + +faye-websocket@~0.11.1: + version "0.11.1" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz#f0efe18c4f56e4f40afc7e06c719fd5ee6188f38" + integrity sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg= + dependencies: + websocket-driver ">=0.5.1" + +fecha@~2.3.3: + version "2.3.3" + resolved "http://registry.npm.taobao.org/fecha/download/fecha-2.3.3.tgz#948e74157df1a32fd1b12c3a3c3cdcb6ec9d96cd" + integrity sha1-lI50FX3xoy/RsSw6PDzctuydls0= + +figgy-pudding@^3.1.0, figgy-pudding@^3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" + integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w== + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" + integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E= + dependencies: + flat-cache "^1.2.1" + object-assign "^4.0.1" + +file-loader@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-2.0.0.tgz#39749c82f020b9e85901dcff98e8004e6401cfde" + integrity sha512-YCsBfd1ZGCyonOKLxPiKPdu+8ld9HAaMEvJewzz+b2eTF7uL5Zm/HdBF6FjCrpCMRq25Mi0U1gl4pwn2TlH7hQ== + dependencies: + loader-utils "^1.0.2" + schema-utils "^1.0.0" + +filesize@^3.6.1: + version "3.6.1" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" + integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg== + +fill-range@^4.0.0: + version "4.0.0" + resolved "http://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +finalhandler@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105" + integrity sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.2" + statuses "~1.4.0" + unpipe "~1.0.0" + +find-cache-dir@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" + integrity sha1-yN765XyKUqinhPnjHFfHQumToLk= + dependencies: + commondir "^1.0.1" + mkdirp "^0.5.1" + pkg-dir "^1.0.0" + +find-cache-dir@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" + integrity sha1-kojj6ePMN0hxfTnq3hfPcfww7m8= + dependencies: + commondir "^1.0.1" + make-dir "^1.0.0" + pkg-dir "^2.0.0" + +find-cache-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.0.0.tgz#4c1faed59f45184530fb9d7fa123a4d04a98472d" + integrity sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA== + dependencies: + commondir "^1.0.1" + make-dir "^1.0.0" + pkg-dir "^3.0.0" + +find-up@^1.0.0: + version "1.1.2" + resolved "http://registry.npm.taobao.org/find-up/download/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "http://registry.npm.taobao.org/find-up/download/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +flat-cache@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481" + integrity sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE= + dependencies: + circular-json "^0.3.1" + del "^2.0.2" + graceful-fs "^4.1.2" + write "^0.2.1" + +flush-write-stream@^1.0.0: + version "1.0.3" + resolved "http://registry.npm.taobao.org/flush-write-stream/download/flush-write-stream-1.0.3.tgz#c5d586ef38af6097650b49bc41b55fabb19f35bd" + integrity sha1-xdWG7zivYJdlC0m8QbVfq7GfNb0= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.4" + +fmin@0.0.2: + version "0.0.2" + resolved "http://registry.npm.taobao.org/fmin/download/fmin-0.0.2.tgz#59bbb40d43ffdc1c94cd00a568c41f95f1973017" + integrity sha1-Wbu0DUP/3ByUzQClaMQflfGXMBc= + dependencies: + contour_plot "^0.0.1" + json2module "^0.0.3" + rollup "^0.25.8" + tape "^4.5.1" + uglify-js "^2.6.2" + +follow-redirects@^1.0.0, follow-redirects@^1.3.0: + version "1.5.9" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.9.tgz#c9ed9d748b814a39535716e531b9196a845d89c6" + integrity sha512-Bh65EZI/RU8nx0wbYF9shkFZlqLP+6WT/5FnA3cE/djNSuKNHJEinGGZgu/cQEkeeb2GdFOgenAmn8qaqYke2w== + dependencies: + debug "=3.1.0" + +for-each@~0.3.3: + version "0.3.3" + resolved "http://registry.npm.taobao.org/for-each/download/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha1-abRH6IoKXTLD5whPPxcQA0shN24= + dependencies: + is-callable "^1.1.3" + +for-in@^0.1.3: + version "0.1.8" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1" + integrity sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE= + +for-in@^1.0.1, for-in@^1.0.2: + version "1.0.2" + resolved "http://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +for-own@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b" + integrity sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs= + dependencies: + for-in "^1.0.1" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "http://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@~2.3.2: + version "2.3.3" + resolved "http://registry.npm.taobao.org/form-data/download/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha1-3M5SwF9kTymManq5Nr1yTO/786Y= + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "http://registry.npm.taobao.org/fragment-cache/download/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + +friendly-errors-webpack-plugin@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.0.tgz#efc86cbb816224565861a1be7a9d84d0aafea136" + integrity sha512-K27M3VK30wVoOarP651zDmb93R9zF28usW4ocaK3mfQeIEI5BPht/EzZs5E8QLLwbLRJQMwscAjDxYPb1FuNiw== + dependencies: + chalk "^1.1.3" + error-stack-parser "^2.0.0" + string-width "^2.0.0" + +from2@^2.1.0: + version "2.3.0" + resolved "http://registry.npm.taobao.org/from2/download/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-minipass@^1.2.5: + version "1.2.5" + resolved "http://registry.npm.taobao.org/fs-minipass/download/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" + integrity sha1-BsJ3IYRU7CiN93raVKA7hwKqy50= + dependencies: + minipass "^2.2.1" + +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "http://registry.npm.taobao.org/fs-write-stream-atomic/download/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.2.2: + version "1.2.4" + resolved "http://registry.npm.taobao.org/fsevents/download/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426" + integrity sha1-9B3LGvJYKvNpLaNvxVy9jhBBxCY= + dependencies: + nan "^2.9.2" + node-pre-gyp "^0.10.0" + +fstream@^1.0.0, fstream@^1.0.2: + version "1.0.11" + resolved "http://registry.npm.taobao.org/fstream/download/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" + integrity sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE= + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + +function-bind@^1.0.2, function-bind@^1.1.0, function-bind@^1.1.1, function-bind@~1.1.1: + version "1.1.1" + resolved "http://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0= + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +gauge@~2.7.3: + version "2.7.4" + resolved "http://registry.npm.taobao.org/gauge/download/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +gaze@^1.0.0: + version "1.1.3" + resolved "http://registry.npm.taobao.org/gaze/download/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a" + integrity sha1-xEFzPhO5J6yMD/C0w7Az8ogSkko= + dependencies: + globule "^1.0.0" + +get-caller-file@^1.0.1: + version "1.0.3" + resolved "http://registry.npm.taobao.org/get-caller-file/download/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + integrity sha1-+Xj6TJDR3+f/LWvtoqUV5xO9z0o= + +get-stdin@^4.0.1: + version "4.0.1" + resolved "http://registry.npm.taobao.org/get-stdin/download/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= + +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "http://registry.npm.taobao.org/get-value/download/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +getpass@^0.1.1: + version "0.1.7" + resolved "http://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "http://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-to-regexp@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" + integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= + +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.2, glob@~7.1.1, glob@~7.1.2: + version "7.1.3" + resolved "http://registry.npm.taobao.org/glob/download/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" + integrity sha1-OWCDLT8VdBCDQtr9OmezMsCWnfE= + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^11.0.1: + version "11.8.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.8.0.tgz#c1ef45ee9bed6badf0663c5cb90e8d1adec1321d" + integrity sha512-io6LkyPVuzCHBSQV9fmOwxZkUk6nIaGmxheLDgmuFv89j0fm2aqDbIXKAGfzCMHqz3HLF2Zf8WSG6VqMh2qFmA== + +globals@^11.1.0, globals@^11.7.0: + version "11.9.0" + resolved "http://registry.npm.taobao.org/globals/download/globals-11.9.0.tgz#bde236808e987f290768a93d065060d78e6ab249" + integrity sha1-veI2gI6YfykHaKk9BlBg145qskk= + +globby@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" + integrity sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0= + dependencies: + array-union "^1.0.1" + arrify "^1.0.0" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +globby@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" + integrity sha1-+yzP+UAfhgCUXfral0QMypcrhoA= + dependencies: + array-union "^1.0.1" + dir-glob "^2.0.0" + glob "^7.1.2" + ignore "^3.3.5" + pify "^3.0.0" + slash "^1.0.0" + +globby@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.1.tgz#b5ad48b8aa80b35b814fc1281ecc851f1d2b5b50" + integrity sha512-oMrYrJERnKBLXNLVTqhm3vPEdJ/b2ZE28xN4YARiix1NOIOBPEpOUnm844K1iu/BkphCaf2WNFwMszv8Soi1pw== + dependencies: + array-union "^1.0.1" + dir-glob "^2.0.0" + fast-glob "^2.0.2" + glob "^7.1.2" + ignore "^3.3.5" + pify "^3.0.0" + slash "^1.0.0" + +globule@^1.0.0: + version "1.2.1" + resolved "http://registry.npm.taobao.org/globule/download/globule-1.2.1.tgz#5dffb1b191f22d20797a9369b49eab4e9839696d" + integrity sha1-Xf+xsZHyLSB5epNptJ6rTpg5aW0= + dependencies: + glob "~7.1.1" + lodash "~4.17.10" + minimatch "~3.0.2" + +graceful-fs@^4.1.11, graceful-fs@^4.1.2: + version "4.1.15" + resolved "http://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" + integrity sha1-/7cD4QZuig7qpMi4C6klPu77+wA= + +graceful-fs@^4.1.6: + version "4.1.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + integrity sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg= + +graphlib@^2.1.5: + version "2.1.5" + resolved "https://registry.yarnpkg.com/graphlib/-/graphlib-2.1.5.tgz#6afe1afcc5148555ec799e499056795bd6938c87" + integrity sha512-XvtbqCcw+EM5SqQrIetIKKD+uZVNQtDPD1goIg7K73RuRZtVI5rYMdcCVSHm/AS1sCBZ7vt0p5WgXouucHQaOA== + dependencies: + lodash "^4.11.1" + +gzip-size@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.0.0.tgz#a55ecd99222f4c48fd8c01c625ce3b349d0a0e80" + integrity sha512-5iI7omclyqrnWw4XbXAmGhPsABkSIDQonv2K0h61lybgofWa6iZyvrI3r2zsJH4P8Nb64fFVzlvfhs0g7BBxAA== + dependencies: + duplexer "^0.1.1" + pify "^3.0.0" + +handle-thing@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4" + integrity sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ= + +har-schema@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.0: + version "5.1.3" + resolved "http://registry.npm.taobao.org/har-validator/download/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" + integrity sha1-HvievT5JllV2de7ZiTEQ3DUPoIA= + dependencies: + ajv "^6.5.5" + har-schema "^2.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +has-flag@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-symbols@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/has-symbols/download/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" + integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= + +has-unicode@^2.0.0: + version "2.0.1" + resolved "http://registry.npm.taobao.org/has-unicode/download/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + +has-value@^0.3.1: + version "0.3.1" + resolved "http://registry.npm.taobao.org/has-value/download/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/has-value/download/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "http://registry.npm.taobao.org/has-values/download/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/has-values/download/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.0, has@^1.0.1, has@~1.0.3: + version "1.0.3" + resolved "http://registry.npm.taobao.org/has/download/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y= + dependencies: + function-bind "^1.1.1" + +hash-base@^3.0.0: + version "3.0.4" + resolved "http://registry.npm.taobao.org/hash-base/download/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg= + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +hash-sum@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-1.0.2.tgz#33b40777754c6432573c120cc3808bbd10d47f04" + integrity sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ= + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "http://registry.npm.taobao.org/hash.js/download/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha1-C6vKU46NTuSg+JiNaIZlN6ADz0I= + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +he@1.1.x: + version "1.1.1" + resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" + integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0= + +he@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +hex-color-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" + integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== + +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "http://registry.npm.taobao.org/hmac-drbg/download/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +hoek@5.x.x: + version "5.0.4" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-5.0.4.tgz#0f7fa270a1cafeb364a4b2ddfaa33f864e4157da" + integrity sha512-Alr4ZQgoMlnere5FZJsIyfIjORBqZll5POhDsF4q64dPuJR6rNxXdDxtHSQq8OXRurhmx+PWYEE8bXRROY8h0w== + +hoopy@^0.1.2: + version "0.1.4" + resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d" + integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ== + +hosted-git-info@^2.1.4: + version "2.7.1" + resolved "http://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" + integrity sha1-l/I2l3vW4SVAiTD/bePuxigewEc= + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +hsl-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" + integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= + +hsla-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" + integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= + +html-comment-regex@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" + integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== + +html-entities@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" + integrity sha1-DfKTUfByEWNRXfueVUPl9u7VFi8= + +html-minifier@^3.2.3: + version "3.5.20" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.20.tgz#7b19fd3caa0cb79f7cde5ee5c3abdf8ecaa6bb14" + integrity sha512-ZmgNLaTp54+HFKkONyLFEfs5dd/ZOtlquKaTnqIWFmx3Av5zG6ZPcV2d0o9XM2fXOTxxIf6eDcwzFFotke/5zA== + dependencies: + camel-case "3.0.x" + clean-css "4.2.x" + commander "2.17.x" + he "1.1.x" + param-case "2.1.x" + relateurl "0.2.x" + uglify-js "3.4.x" + +html-webpack-plugin@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz#b01abbd723acaaa7b37b6af4492ebda03d9dd37b" + integrity sha1-sBq71yOsqqeze2r0SS69oD2d03s= + dependencies: + html-minifier "^3.2.3" + loader-utils "^0.2.16" + lodash "^4.17.3" + pretty-error "^2.0.2" + tapable "^1.0.0" + toposort "^1.0.0" + util.promisify "1.0.0" + +htmlparser2@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.3.0.tgz#cc70d05a59f6542e43f0e685c982e14c924a9efe" + integrity sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4= + dependencies: + domelementtype "1" + domhandler "2.1" + domutils "1.1" + readable-stream "1.0" + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= + +http-errors@1.6.3, http-errors@~1.6.2, http-errors@~1.6.3: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-parser-js@>=0.4.0: + version "0.4.13" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.13.tgz#3bd6d6fde6e3172c9334c3b33b6c193d80fe1137" + integrity sha1-O9bW/ebjFyyTNMOzO2wZPYD+ETc= + +http-proxy-middleware@~0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.18.0.tgz#0987e6bb5a5606e5a69168d8f967a87f15dd8aab" + integrity sha512-Fs25KVMPAIIcgjMZkVHJoKg9VcXcC1C8yb9JUgeDvVXY0S/zgVIhMb+qVswDIgtJe2DfckMSY2d6TuTEutlk6Q== + dependencies: + http-proxy "^1.16.2" + is-glob "^4.0.0" + lodash "^4.17.5" + micromatch "^3.1.9" + +http-proxy@^1.16.2: + version "1.17.0" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.17.0.tgz#7ad38494658f84605e2f6db4436df410f4e5be9a" + integrity sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g== + dependencies: + eventemitter3 "^3.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "http://registry.npm.taobao.org/http-signature/download/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/https-browserify/download/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + +iconv-lite@0.4, iconv-lite@^0.4.17, iconv-lite@^0.4.24, iconv-lite@^0.4.4: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@0.4.23: + version "0.4.23" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" + integrity sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +icss-replace-symbols@^1.1.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/icss-replace-symbols/download/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" + integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0= + +icss-utils@^2.1.0: + version "2.1.0" + resolved "http://registry.npm.taobao.org/icss-utils/download/icss-utils-2.1.0.tgz#83f0a0ec378bf3246178b6c2ad9136f135b1c962" + integrity sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI= + dependencies: + postcss "^6.0.1" + +ieee754@^1.1.4: + version "1.1.12" + resolved "http://registry.npm.taobao.org/ieee754/download/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b" + integrity sha1-UL8k5bnIu5ivSWTJQc2wkY2ntgs= + +iferr@^0.1.5: + version "0.1.5" + resolved "http://registry.npm.taobao.org/iferr/download/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= + +ignore-walk@^3.0.1: + version "3.0.1" + resolved "http://registry.npm.taobao.org/ignore-walk/download/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" + integrity sha1-qD5i59JyrA47VRqqgoMaGbafgvg= + dependencies: + minimatch "^3.0.4" + +ignore@^3.3.3, ignore@^3.3.5: + version "3.3.10" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" + integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== + +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +ignore@^5.0.2: + version "5.0.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.0.4.tgz#33168af4a21e99b00c5d41cbadb6a6cb49903a45" + integrity sha512-WLsTMEhsQuXpCiG173+f3aymI43SXa+fB1rSfbzyP4GkPP+ZFVuO0/3sFUGNBtifisPeDcl/uD/Y2NxZ7xFq4g== + +image-size@~0.5.0: + version "0.5.5" + resolved "http://registry.npm.taobao.org/image-size/download/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" + integrity sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w= + +import-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" + integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= + dependencies: + import-from "^2.1.0" + +import-from@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" + integrity sha1-M1238qev/VOqpHHUuAId7ja387E= + dependencies: + resolve-from "^3.0.0" + +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "http://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +in-publish@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/in-publish/download/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51" + integrity sha1-4g/146KvwmkDILbcVSaCqcf631E= + +indent-string@^2.1.0: + version "2.1.0" + resolved "http://registry.npm.taobao.org/indent-string/download/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= + dependencies: + repeating "^2.0.0" + +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= + +indexof@0.0.1: + version "0.0.1" + resolved "http://registry.npm.taobao.org/indexof/download/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= + +inflight@^1.0.4: + version "1.0.6" + resolved "http://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.3" + resolved "http://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +inherits@2.0.1: + version "2.0.1" + resolved "http://registry.npm.taobao.org/inherits/download/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + +ini@~1.3.0: + version "1.3.5" + resolved "http://registry.npm.taobao.org/ini/download/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha1-7uJfVtscnsYIXgwid4CD9Zar+Sc= + +inquirer@^3.0.6: + version "3.3.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" + integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ== + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.0" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^2.0.4" + figures "^2.0.0" + lodash "^4.3.0" + mute-stream "0.0.7" + run-async "^2.2.0" + rx-lite "^4.0.8" + rx-lite-aggregates "^4.0.8" + string-width "^2.1.0" + strip-ansi "^4.0.0" + through "^2.3.6" + +inquirer@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.1.tgz#9943fc4882161bdb0b0c9276769c75b32dbfcd52" + integrity sha512-088kl3DRT2dLU5riVMKKr1DlImd6X7smDhpXUCkJDCKvTEJeRiXh0G132HG9u5a+6Ylw9plFRY7RuTnwohYSpg== + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.0" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^3.0.0" + figures "^2.0.0" + lodash "^4.17.10" + mute-stream "0.0.7" + run-async "^2.2.0" + rxjs "^6.1.0" + string-width "^2.1.0" + strip-ansi "^5.0.0" + through "^2.3.6" + +internal-ip@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-3.0.1.tgz#df5c99876e1d2eb2ea2d74f520e3f669a00ece27" + integrity sha512-NXXgESC2nNVtU+pqmC9e6R8B1GpKxzsAQhffvh5AL79qKnodd+L7tnEQmTiUAVngqLalPbSqRA7XGIEL5nCd0Q== + dependencies: + default-gateway "^2.6.0" + ipaddr.js "^1.5.2" + +intersperse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/intersperse/-/intersperse-1.0.0.tgz#f2561fb1cfef9f5277cc3347a22886b4351a5181" + integrity sha1-8lYfsc/vn1J3zDNHoiiGtDUaUYE= + +invariant@^2.2.0, invariant@^2.2.2: + version "2.2.4" + resolved "http://registry.npm.taobao.org/invariant/download/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY= + dependencies: + loose-envify "^1.0.0" + +invert-kv@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/invert-kv/download/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= + +invert-kv@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" + integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== + +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + +ip@^1.1.0, ip@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + +ipaddr.js@1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.0.tgz#eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e" + integrity sha1-6qM9bd16zo9/b+DJygRA5wZzix4= + +ipaddr.js@^1.5.2: + version "1.8.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.1.tgz#fa4b79fa47fd3def5e3b159825161c0a519c9427" + integrity sha1-+kt5+kf9Pe9eOxWYJRYcClGclCc= + +is-absolute-url@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" + integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY= + dependencies: + kind-of "^6.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "http://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "http://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + +is-buffer@^1.1.5, is-buffer@~1.1.1: + version "1.1.6" + resolved "http://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha1-76ouqdqg16suoTqXsritUf776L4= + +is-builtin-module@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/is-builtin-module/download/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" + integrity sha1-VAVy0096wxGfj3bDDLwbHgN6/74= + dependencies: + builtin-modules "^1.0.0" + +is-callable@^1.1.3, is-callable@^1.1.4: + version "1.1.4" + resolved "http://registry.npm.taobao.org/is-callable/download/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" + integrity sha1-HhrfIZ4e62hNaR+dagX/DTCiTXU= + +is-ci@^1.0.10: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" + integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== + dependencies: + ci-info "^1.5.0" + +is-color-stop@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" + integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= + dependencies: + css-color-names "^0.0.4" + hex-color-regex "^1.1.0" + hsl-regex "^1.0.0" + hsla-regex "^1.0.0" + rgb-regex "^1.0.1" + rgba-regex "^1.0.0" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc= + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/is-date-object/download/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco= + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw= + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "http://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/is-extendable/download/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ= + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "http://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-finite@^1.0.0: + version "1.0.2" + resolved "http://registry.npm.taobao.org/is-finite/download/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-glob@^3.1.0: + version "3.1.0" + resolved "http://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0: + version "4.0.0" + resolved "http://registry.npm.taobao.org/is-glob/download/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" + integrity sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A= + dependencies: + is-extglob "^2.1.1" + +is-negative-zero@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461" + integrity sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE= + +is-number@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= + +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= + +is-path-in-cwd@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" + integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== + dependencies: + is-path-inside "^1.0.0" + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= + dependencies: + path-is-inside "^1.0.1" + +is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "http://registry.npm.taobao.org/is-plain-object/download/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc= + dependencies: + isobject "^3.0.1" + +is-promise@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= + +is-regex@^1.0.4: + version "1.0.4" + resolved "http://registry.npm.taobao.org/is-regex/download/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= + dependencies: + has "^1.0.1" + +is-resolvable@^1.0.0, is-resolvable@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" + integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-svg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75" + integrity sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ== + dependencies: + html-comment-regex "^1.1.0" + +is-symbol@^1.0.2: + version "1.0.2" + resolved "http://registry.npm.taobao.org/is-symbol/download/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" + integrity sha1-oFX2rlcZLK7jKeeoYBGLSXqVDzg= + dependencies: + has-symbols "^1.0.0" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-utf8@^0.2.0: + version "0.2.1" + resolved "http://registry.npm.taobao.org/is-utf8/download/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= + +is-windows@^1.0.2: + version "1.0.2" + resolved "http://registry.npm.taobao.org/is-windows/download/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0= + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + +isarray@0.0.1, isarray@~0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isemail@3.x.x: + version "3.2.0" + resolved "https://registry.yarnpkg.com/isemail/-/isemail-3.2.0.tgz#59310a021931a9fb06bbb51e155ce0b3f236832c" + integrity sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg== + dependencies: + punycode "2.x.x" + +isexe@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "http://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +isstream@~0.1.2: + version "0.1.2" + resolved "http://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +javascript-stringify@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-1.6.0.tgz#142d111f3a6e3dae8f4a9afd77d45855b5a9cce3" + integrity sha1-FC0RHzpuPa6PSpr9d9RYVbWpzOM= + +joi@^13.0.0: + version "13.7.0" + resolved "https://registry.yarnpkg.com/joi/-/joi-13.7.0.tgz#cfd85ebfe67e8a1900432400b4d03bbd93fb879f" + integrity sha512-xuY5VkHfeOYK3Hdi91ulocfuFopwgbSORmIwzcwHKESQhC7w1kD5jaVSPnqDxS2I8t3RZ9omCKAxNwXN5zG1/Q== + dependencies: + hoek "5.x.x" + isemail "3.x.x" + topo "3.x.x" + +js-base64@^2.1.8: + version "2.4.9" + resolved "http://registry.npm.taobao.org/js-base64/download/js-base64-2.4.9.tgz#748911fb04f48a60c4771b375cac45a80df11c03" + integrity sha1-dIkR+wT0imDEdxs3XKxFqA3xHAM= + +js-cookie@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.0.tgz#1b2c279a6eece380a12168b92485265b35b1effb" + integrity sha1-Gywnmm7s44ChIWi5JIUmWzWx7/s= + +js-levenshtein@^1.1.3: + version "1.1.4" + resolved "http://registry.npm.taobao.org/js-levenshtein/download/js-levenshtein-1.1.4.tgz#3a56e3cbf589ca0081eb22cd9ba0b1290a16d26e" + integrity sha1-Olbjy/WJygCB6yLNm6CxKQoW0m4= + +js-message@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/js-message/-/js-message-1.0.5.tgz#2300d24b1af08e89dd095bc1a4c9c9cfcb892d15" + integrity sha1-IwDSSxrwjondCVvBpMnJz8uJLRU= + +js-queue@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/js-queue/-/js-queue-2.0.0.tgz#362213cf860f468f0125fc6c96abc1742531f948" + integrity sha1-NiITz4YPRo8BJfxslqvBdCUx+Ug= + dependencies: + easy-stack "^1.0.0" + +js-tokens@^3.0.0, js-tokens@^3.0.2: + version "3.0.2" + resolved "http://registry.npm.taobao.org/js-tokens/download/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "http://registry.npm.taobao.org/js-tokens/download/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha1-GSA/tZmR35jjoocFDUZHzerzJJk= + +js-yaml@^3.12.0, js-yaml@^3.9.0, js-yaml@^3.9.1: + version "3.12.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" + integrity sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "http://registry.npm.taobao.org/jsbn/download/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +jsesc@^2.5.1: + version "2.5.2" + resolved "http://registry.npm.taobao.org/jsesc/download/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha1-gFZNLkg9rPbo7yCWUKZ98/DCg6Q= + +jsesc@~0.5.0: + version "0.5.0" + resolved "http://registry.npm.taobao.org/jsesc/download/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-schema-traverse@^0.3.0: + version "0.3.1" + resolved "http://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A= + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "http://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha1-afaofZUTq4u4/mO9sJecRI5oRmA= + +json-schema@0.2.3: + version "0.2.3" + resolved "http://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "http://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +json2module@^0.0.3: + version "0.0.3" + resolved "http://registry.npm.taobao.org/json2module/download/json2module-0.0.3.tgz#00fb5f4a9b7adfc3f0647c29cb17bcd1979be9b2" + integrity sha1-APtfSpt638PwZHwpyxe80Zeb6bI= + dependencies: + rw "^1.3.2" + +json2mq@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/json2mq/-/json2mq-0.2.0.tgz#b637bd3ba9eabe122c83e9720483aeb10d2c904a" + integrity sha1-tje9O6nqvhIsg+lyBIOusQ0skEo= + dependencies: + string-convert "^0.2.0" + +json3@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" + integrity sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE= + +json5@^0.5.0: + version "0.5.1" + resolved "http://registry.npm.taobao.org/json5/download/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= + +json5@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850" + integrity sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ== + dependencies: + minimist "^1.2.0" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= + +jsprim@^1.2.2: + version "1.4.1" + resolved "http://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +killable@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" + integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "http://registry.npm.taobao.org/kind-of/download/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "http://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha1-cpyR4thXt6QZofmqZWhcTDP1hF0= + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.2" + resolved "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" + integrity sha1-ARRrNqYhjmTljzqNZt5df8b20FE= + +launch-editor-middleware@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/launch-editor-middleware/-/launch-editor-middleware-2.2.1.tgz#e14b07e6c7154b0a4b86a0fd345784e45804c157" + integrity sha512-s0UO2/gEGiCgei3/2UN3SMuUj1phjQN8lcpnvgLSz26fAzNWPQ6Nf/kF5IFClnfU2ehp6LrmKdMU/beveO+2jg== + dependencies: + launch-editor "^2.2.1" + +launch-editor@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.2.1.tgz#871b5a3ee39d6680fcc26d37930b6eeda89db0ca" + integrity sha512-On+V7K2uZK6wK7x691ycSUbLD/FyKKelArkbaAMSSJU8JmqmhwN2+mnJDNINuJWSrh2L0kDk+ZQtbC/gOWUwLw== + dependencies: + chalk "^2.3.0" + shell-quote "^1.6.1" + +lazy-cache@^1.0.3: + version "1.0.4" + resolved "http://registry.npm.taobao.org/lazy-cache/download/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4= + +lcid@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/lcid/download/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= + dependencies: + invert-kv "^1.0.0" + +lcid@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" + integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== + dependencies: + invert-kv "^2.0.0" + +less-loader@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-4.1.0.tgz#2c1352c5b09a4f84101490274fd51674de41363e" + integrity sha512-KNTsgCE9tMOM70+ddxp9yyt9iHqgmSs0yTZc5XH5Wo+g80RWRIYNqE58QJKm/yMud5wZEvz50ugRDuzVIkyahg== + dependencies: + clone "^2.1.1" + loader-utils "^1.1.0" + pify "^3.0.0" + +less@^3.8.1: + version "3.9.0" + resolved "http://registry.npm.taobao.org/less/download/less-3.9.0.tgz#b7511c43f37cf57dc87dffd9883ec121289b1474" + integrity sha1-t1EcQ/N89X3Iff/ZiD7BISibFHQ= + dependencies: + clone "^2.1.2" + optionalDependencies: + errno "^0.1.1" + graceful-fs "^4.1.2" + image-size "~0.5.0" + mime "^1.4.1" + mkdirp "^0.5.0" + promise "^7.1.1" + request "^2.83.0" + source-map "~0.6.0" + +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +load-json-file@^1.0.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/load-json-file/download/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +loader-fs-cache@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.1.tgz#56e0bf08bd9708b26a765b68509840c8dec9fdbc" + integrity sha1-VuC/CL2XCLJqdltoUJhAyN7J/bw= + dependencies: + find-cache-dir "^0.1.1" + mkdirp "0.5.1" + +loader-runner@^2.3.0: + version "2.3.1" + resolved "http://registry.npm.taobao.org/loader-runner/download/loader-runner-2.3.1.tgz#026f12fe7c3115992896ac02ba022ba92971b979" + integrity sha1-Am8S/nwxFZkolqwCugIrqSlxuXk= + +loader-utils@^0.2.16: + version "0.2.17" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" + integrity sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g= + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + object-assign "^4.0.1" + +loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/loader-utils/download/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" + integrity sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0= + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/locate-path/download/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +lodash.assign@^4.2.0: + version "4.2.0" + resolved "http://registry.npm.taobao.org/lodash.assign/download/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" + integrity sha1-DZnzzNem0mHRm9rrkkUAXShYCOc= + +lodash.clonedeep@^4.3.2: + version "4.5.0" + resolved "http://registry.npm.taobao.org/lodash.clonedeep/download/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "http://registry.npm.taobao.org/lodash.debounce/download/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= + +lodash.defaultsdeep@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.0.tgz#bec1024f85b1bd96cbea405b23c14ad6443a6f81" + integrity sha1-vsECT4WxvZbL6kBbI8FK1kQ6b4E= + +lodash.get@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= + +lodash.mapvalues@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c" + integrity sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw= + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + +lodash.mergewith@^4.6.0: + version "4.6.1" + resolved "http://registry.npm.taobao.org/lodash.mergewith/download/lodash.mergewith-4.6.1.tgz#639057e726c3afbdb3e7d42741caa8d6e4335927" + integrity sha1-Y5BX5ybDr72z59QnQcqo1uQzWSc= + +lodash.pick@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" + integrity sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM= + +lodash.tail@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.tail/-/lodash.tail-4.1.1.tgz#d2333a36d9e7717c8ad2f7cacafec7c32b444664" + integrity sha1-0jM6NtnncXyK0vfKyv7HwytERmQ= + +lodash.transform@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.transform/-/lodash.transform-4.6.0.tgz#12306422f63324aed8483d3f38332b5f670547a0" + integrity sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A= + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + +lodash@^4.0.0, lodash@^4.11.1, lodash@^4.13.1, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.3.0, lodash@~4.17.10: + version "4.17.11" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" + integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== + +log-symbols@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== + dependencies: + chalk "^2.0.1" + +loglevel@^1.4.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.1.tgz#e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa" + integrity sha1-4PyVEztu8nbNyIh82vJKpvFW+Po= + +longest@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/longest/download/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc= + +loose-envify@^1.0.0: + version "1.4.0" + resolved "http://registry.npm.taobao.org/loose-envify/download/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8= + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +loud-rejection@^1.0.0: + version "1.6.0" + resolved "http://registry.npm.taobao.org/loud-rejection/download/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + +lower-case@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" + integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= + +lru-cache@^4.0.1, lru-cache@^4.1.1: + version "4.1.5" + resolved "http://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80= + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +lru-cache@^4.1.2, lru-cache@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c" + integrity sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +make-dir@^1.0.0: + version "1.3.0" + resolved "http://registry.npm.taobao.org/make-dir/download/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + integrity sha1-ecEDO4BRW9bSTsmTPoYMp17ifww= + dependencies: + pify "^3.0.0" + +map-age-cleaner@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.2.tgz#098fb15538fd3dbe461f12745b0ca8568d4e3f74" + integrity sha512-UN1dNocxQq44IhJyMI4TU8phc2m9BddacHRPRjKGLYaF0jqd3xLz0jS0skpAU9WgYyoR4gHtUpzytNBS385FWQ== + dependencies: + p-defer "^1.0.0" + +map-cache@^0.2.2: + version "0.2.2" + resolved "http://registry.npm.taobao.org/map-cache/download/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-obj@^1.0.0, map-obj@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/map-obj/download/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= + +map-visit@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/map-visit/download/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +md5.js@^1.3.4: + version "1.3.5" + resolved "http://registry.npm.taobao.org/md5.js/download/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha1-tdB7jjIW4+J81yjXL3DR5qNCAF8= + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +md5@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/md5/-/md5-2.2.1.tgz#53ab38d5fe3c8891ba465329ea23fac0540126f9" + integrity sha1-U6s41f48iJG6RlMp6iP6wFQBJvk= + dependencies: + charenc "~0.0.1" + crypt "~0.0.1" + is-buffer "~1.1.1" + +mdn-data@~1.1.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-1.1.4.tgz#50b5d4ffc4575276573c4eedb8780812a8419f01" + integrity sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +mem@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.0.0.tgz#6437690d9471678f6cc83659c00cbafcd6b0cdaf" + integrity sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA== + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^1.0.0" + p-is-promise "^1.1.0" + +memory-fs@^0.4.0, memory-fs@~0.4.1: + version "0.4.1" + resolved "http://registry.npm.taobao.org/memory-fs/download/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +meow@^3.7.0: + version "3.7.0" + resolved "http://registry.npm.taobao.org/meow/download/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= + dependencies: + camelcase-keys "^2.0.0" + decamelize "^1.1.2" + loud-rejection "^1.0.0" + map-obj "^1.0.1" + minimist "^1.1.3" + normalize-package-data "^2.3.4" + object-assign "^4.0.1" + read-pkg-up "^1.0.1" + redent "^1.0.0" + trim-newlines "^1.0.0" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + +merge-source-map@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" + integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw== + dependencies: + source-map "^0.6.1" + +merge2@^1.2.1: + version "1.2.3" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.3.tgz#7ee99dbd69bb6481689253f018488a1b902b0ed5" + integrity sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + +micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8, micromatch@^3.1.9: + version "3.1.10" + resolved "http://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha1-cIWbyVyYQJUvNZoGij/En57PrCM= + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "http://registry.npm.taobao.org/miller-rabin/download/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha1-8IA1HIZbDcViqEYpZtqlNUPHik0= + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +"mime-db@>= 1.36.0 < 2", mime-db@~1.37.0: + version "1.37.0" + resolved "http://registry.npm.taobao.org/mime-db/download/mime-db-1.37.0.tgz#0b6a0ce6fdbe9576e25f1f2d2fde8830dc0ad0d8" + integrity sha1-C2oM5v2+lXbiXx8tL96IMNwK0Ng= + +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.19: + version "2.1.21" + resolved "http://registry.npm.taobao.org/mime-types/download/mime-types-2.1.21.tgz#28995aa1ecb770742fe6ae7e58f9181c744b3f96" + integrity sha1-KJlaoey3cHQv5q5+WPkYHHRLP5Y= + dependencies: + mime-db "~1.37.0" + +mime@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" + integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ== + +mime@^1.4.1: + version "1.6.0" + resolved "http://registry.npm.taobao.org/mime/download/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE= + +mime@^2.0.3, mime@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.3.1.tgz#b1621c54d63b97c47d3cfe7f7215f7d64517c369" + integrity sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg== + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +mini-css-extract-plugin@^0.4.5: + version "0.4.5" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.5.tgz#c99e9e78d54f3fa775633aee5933aeaa4e80719a" + integrity sha512-dqBanNfktnp2hwL2YguV9Jh91PFX7gu7nRLs4TGsbAfAG6WOtlynFRYzwDwmmeSb5uIwHo9nx1ta0f7vAZVp2w== + dependencies: + loader-utils "^1.1.0" + schema-utils "^1.0.0" + webpack-sources "^1.1.0" + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/minimalistic-assert/download/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc= + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/minimalistic-crypto-utils/download/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + +minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@~3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "http://registry.npm.taobao.org/minimist/download/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= + +minimist@^1.1.3, minimist@^1.2.0, minimist@~1.2.0: + version "1.2.0" + resolved "http://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= + +minipass@^2.2.1, minipass@^2.3.4: + version "2.3.5" + resolved "http://registry.npm.taobao.org/minipass/download/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" + integrity sha1-ys6+SSAiSX9law8PUeJoKp7S2Eg= + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.1.1: + version "1.1.1" + resolved "http://registry.npm.taobao.org/minizlib/download/minizlib-1.1.1.tgz#6734acc045a46e61d596a43bb9d9cd326e19cc42" + integrity sha1-ZzSswEWkbmHVlqQ7udnNMm4ZzEI= + dependencies: + minipass "^2.2.1" + +mississippi@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/mississippi/download/mississippi-2.0.0.tgz#3442a508fafc28500486feea99409676e4ee5a6f" + integrity sha1-NEKlCPr8KFAEhv7qmUCWduTuWm8= + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^2.0.1" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + +mixin-deep@^1.2.0: + version "1.3.1" + resolved "http://registry.npm.taobao.org/mixin-deep/download/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" + integrity sha1-pJ5yaNzhoNlpjkUybFYm3zVD0P4= + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mixin-object@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mixin-object/-/mixin-object-2.0.1.tgz#4fb949441dab182540f1fe035ba60e1947a5e57e" + integrity sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4= + dependencies: + for-in "^0.1.3" + is-extendable "^0.1.1" + +mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: + version "0.5.1" + resolved "http://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + dependencies: + minimist "0.0.8" + +moment@^2.21.0: + version "2.22.2" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.22.2.tgz#3c257f9839fc0e93ff53149632239eb90783ff66" + integrity sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y= + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/move-concurrently/download/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + +ms@2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@^2.1.1: + version "2.1.1" + resolved "http://registry.npm.taobao.org/ms/download/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo= + +multicast-dns-service-types@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" + integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= + +multicast-dns@^6.0.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" + integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== + dependencies: + dns-packet "^1.3.1" + thunky "^1.0.2" + +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= + +nan@^2.10.0, nan@^2.9.2: + version "2.11.1" + resolved "http://registry.npm.taobao.org/nan/download/nan-2.11.1.tgz#90e22bccb8ca57ea4cd37cc83d3819b52eea6766" + integrity sha1-kOIrzLjKV+pM03zIPTgZtS7qZ2Y= + +nanomatch@^1.2.9: + version "1.2.13" + resolved "http://registry.npm.taobao.org/nanomatch/download/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk= + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +needle@^2.2.1: + version "2.2.4" + resolved "http://registry.npm.taobao.org/needle/download/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e" + integrity sha1-UZMb/4JTOxkot9HWngHxsA/9Kk4= + dependencies: + debug "^2.1.2" + iconv-lite "^0.4.4" + sax "^1.2.4" + +negotiator@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + integrity sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk= + +neo-async@^2.5.0: + version "2.6.0" + resolved "http://registry.npm.taobao.org/neo-async/download/neo-async-2.6.0.tgz#b9d15e4d71c6762908654b5183ed38b753340835" + integrity sha1-udFeTXHGdikIZUtRg+04t1M0CDU= + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +no-case@^2.2.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" + integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== + dependencies: + lower-case "^1.1.1" + +node-forge@0.7.5: + version "0.7.5" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.5.tgz#6c152c345ce11c52f465c2abd957e8639cd674df" + integrity sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ== + +node-gyp@^3.8.0: + version "3.8.0" + resolved "http://registry.npm.taobao.org/node-gyp/download/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c" + integrity sha1-VAMEJhwzDoDQ1e3OJTpoyzlkIYw= + dependencies: + fstream "^1.0.0" + glob "^7.0.3" + graceful-fs "^4.1.2" + mkdirp "^0.5.0" + nopt "2 || 3" + npmlog "0 || 1 || 2 || 3 || 4" + osenv "0" + request "^2.87.0" + rimraf "2" + semver "~5.3.0" + tar "^2.0.0" + which "1" + +node-ipc@^9.1.1: + version "9.1.1" + resolved "https://registry.yarnpkg.com/node-ipc/-/node-ipc-9.1.1.tgz#4e245ed6938e65100e595ebc5dc34b16e8dd5d69" + integrity sha512-FAyICv0sIRJxVp3GW5fzgaf9jwwRQxAKDJlmNFUL5hOy+W4X/I5AypyHoq0DXXbo9o/gt79gj++4cMr4jVWE/w== + dependencies: + event-pubsub "4.3.0" + js-message "1.0.5" + js-queue "2.0.0" + +node-libs-browser@^2.0.0: + version "2.1.0" + resolved "http://registry.npm.taobao.org/node-libs-browser/download/node-libs-browser-2.1.0.tgz#5f94263d404f6e44767d726901fff05478d600df" + integrity sha1-X5QmPUBPbkR2fXJpAf/wVHjWAN8= + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^1.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.0" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.10.3" + vm-browserify "0.0.4" + +node-pre-gyp@^0.10.0: + version "0.10.3" + resolved "http://registry.npm.taobao.org/node-pre-gyp/download/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" + integrity sha1-MHAEBxav3HeHR7YbaIe/eIgLgPw= + dependencies: + detect-libc "^1.0.2" + mkdirp "^0.5.1" + needle "^2.2.1" + nopt "^4.0.1" + npm-packlist "^1.1.6" + npmlog "^4.0.2" + rc "^1.2.7" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^4" + +node-releases@^1.0.0-alpha.14, node-releases@^1.0.5: + version "1.0.5" + resolved "http://registry.npm.taobao.org/node-releases/download/node-releases-1.0.5.tgz#a641adcc968b039a27345d92ef10b093e5cbd41d" + integrity sha1-pkGtzJaLA5onNF2S7xCwk+XL1B0= + dependencies: + semver "^5.3.0" + +node-sass@^4.9.0: + version "4.10.0" + resolved "http://registry.npm.taobao.org/node-sass/download/node-sass-4.10.0.tgz#dcc2b364c0913630945ccbf7a2bbf1f926effca4" + integrity sha1-3MKzZMCRNjCUXMv3orvx+Sbv/KQ= + dependencies: + async-foreach "^0.1.3" + chalk "^1.1.1" + cross-spawn "^3.0.0" + gaze "^1.0.0" + get-stdin "^4.0.1" + glob "^7.0.3" + in-publish "^2.0.0" + lodash.assign "^4.2.0" + lodash.clonedeep "^4.3.2" + lodash.mergewith "^4.6.0" + meow "^3.7.0" + mkdirp "^0.5.1" + nan "^2.10.0" + node-gyp "^3.8.0" + npmlog "^4.0.0" + request "^2.88.0" + sass-graph "^2.2.4" + stdout-stream "^1.4.0" + "true-case-path" "^1.0.2" + +"nopt@2 || 3": + version "3.0.6" + resolved "http://registry.npm.taobao.org/nopt/download/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= + dependencies: + abbrev "1" + +nopt@^4.0.1: + version "4.0.1" + resolved "http://registry.npm.taobao.org/nopt/download/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= + dependencies: + abbrev "1" + osenv "^0.1.4" + +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: + version "2.4.0" + resolved "http://registry.npm.taobao.org/normalize-package-data/download/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" + integrity sha1-EvlaMH1YNSB1oEkHuErIvpisAS8= + dependencies: + hosted-git-info "^2.1.4" + is-builtin-module "^1.0.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379" + integrity sha1-MtDkcvkf80VwHBWoMRAY07CpA3k= + +normalize-path@^2.1.1: + version "2.1.1" + resolved "http://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= + +normalize-url@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" + integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== + +npm-bundled@^1.0.1: + version "1.0.5" + resolved "http://registry.npm.taobao.org/npm-bundled/download/npm-bundled-1.0.5.tgz#3c1732b7ba936b3a10325aef616467c0ccbcc979" + integrity sha1-PBcyt7qTazoQMlrvYWRnwMy8yXk= + +npm-packlist@^1.1.6: + version "1.1.12" + resolved "http://registry.npm.taobao.org/npm-packlist/download/npm-packlist-1.1.12.tgz#22bde2ebc12e72ca482abd67afc51eb49377243a" + integrity sha1-Ir3i68EucspIKr1nr8UetJN3JDo= + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2: + version "4.1.2" + resolved "http://registry.npm.taobao.org/npmlog/download/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha1-CKfyqL9zRgR3mp76StXMcXq7lUs= + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +nprogress@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1" + integrity sha1-y480xTIT2JVyP8urkH6UIq28r7E= + +nth-check@^1.0.1, nth-check@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4" + integrity sha1-mSms32KPwsQQmN6rgqxYDPFJquQ= + dependencies: + boolbase "~1.0.0" + +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "http://registry.npm.taobao.org/number-is-nan/download/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "http://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU= + +object-assign@4.x, object-assign@^4.0.1, object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "http://registry.npm.taobao.org/object-copy/download/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-hash@^1.1.4: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.0.tgz#76d9ba6ff113cf8efc0d996102851fe6723963e2" + integrity sha512-05KzQ70lSeGSrZJQXE5wNDiTkBJDlUT/myi6RX9dVIvz7a7Qh4oH93BQdiPMn27nldYvVQCKMUaM83AfizZlsQ== + +object-inspect@~1.6.0: + version "1.6.0" + resolved "http://registry.npm.taobao.org/object-inspect/download/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b" + integrity sha1-xwtsv3LydKq0w0wMgvUWe/gs8Vs= + +object-keys@^1.0.11, object-keys@^1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" + integrity sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag== + +object-visit@^1.0.0: + version "1.0.1" + resolved "http://registry.npm.taobao.org/object-visit/download/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.getownpropertydescriptors@^2.0.3: + version "2.0.3" + resolved "http://registry.npm.taobao.org/object.getownpropertydescriptors/download/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" + integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY= + dependencies: + define-properties "^1.1.2" + es-abstract "^1.5.1" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +object.values@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.0.4.tgz#e524da09b4f66ff05df457546ec72ac99f13069a" + integrity sha1-5STaCbT2b/Bd9FdUbscqyZ8TBpo= + dependencies: + define-properties "^1.1.2" + es-abstract "^1.6.1" + function-bind "^1.1.0" + has "^1.0.1" + +obuf@^1.0.0, obuf@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +omit.js@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/omit.js/-/omit.js-1.0.0.tgz#e013cb86a7517b9cf6f7cfb0ddb4297256a99288" + integrity sha512-O1rwbvEfAdhtonTv+v6IQeMOKTi/wlHcXpI3hehyPDlujkjSBQC6Vtzg0mdy+v2KVDmuPf7hAbHlTBM6q1bUHQ== + dependencies: + babel-runtime "^6.23.0" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" + integrity sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c= + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "http://registry.npm.taobao.org/once/download/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= + dependencies: + mimic-fn "^1.0.0" + +opener@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.1.tgz#6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed" + integrity sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA== + +opn@^5.1.0, opn@^5.3.0: + version "5.4.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.4.0.tgz#cb545e7aab78562beb11aa3bfabc7042e1761035" + integrity sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw== + dependencies: + is-wsl "^1.1.0" + +optionator@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.4" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + wordwrap "~1.0.0" + +ora@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ora/-/ora-2.1.0.tgz#6caf2830eb924941861ec53a173799e008b51e5b" + integrity sha512-hNNlAd3gfv/iPmsNxYoAPLvxg7HuPozww7fFonMZvL84tP6Ox5igfk5j/+a9rtJJwqMgKK+JgWsAQik5o0HTLA== + dependencies: + chalk "^2.3.1" + cli-cursor "^2.1.0" + cli-spinners "^1.1.0" + log-symbols "^2.2.0" + strip-ansi "^4.0.0" + wcwidth "^1.0.1" + +ora@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ora/-/ora-3.0.0.tgz#8179e3525b9aafd99242d63cc206fd64732741d0" + integrity sha512-LBS97LFe2RV6GJmXBi6OKcETKyklHNMV0xw7BtsVn2MlsgsydyZetSCbCANr+PFLmDyv4KV88nn0eCKza665Mg== + dependencies: + chalk "^2.3.1" + cli-cursor "^2.1.0" + cli-spinners "^1.1.0" + log-symbols "^2.2.0" + strip-ansi "^4.0.0" + wcwidth "^1.0.1" + +original@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" + integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== + dependencies: + url-parse "^1.4.3" + +os-browserify@^0.3.0: + version "0.3.0" + resolved "http://registry.npm.taobao.org/os-browserify/download/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + +os-homedir@^1.0.0: + version "1.0.2" + resolved "http://registry.npm.taobao.org/os-homedir/download/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + +os-locale@^1.4.0: + version "1.4.0" + resolved "http://registry.npm.taobao.org/os-locale/download/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" + integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk= + dependencies: + lcid "^1.0.0" + +os-locale@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.0.1.tgz#3b014fbf01d87f60a1e5348d80fe870dc82c4620" + integrity sha512-7g5e7dmXPtzcP4bgsZ8ixDVqA7oWYuEz4lOSujeWyliPai4gfVDiFIcwBg3aGCPnmSGfzOKTK3ccPn0CKv3DBw== + dependencies: + execa "^0.10.0" + lcid "^2.0.0" + mem "^4.0.0" + +os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +osenv@0, osenv@^0.1.4: + version "0.1.5" + resolved "http://registry.npm.taobao.org/osenv/download/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha1-hc36+uso6Gd/QW4odZK18/SepBA= + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-is-promise@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e" + integrity sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4= + +p-limit@^1.0.0, p-limit@^1.1.0: + version "1.3.0" + resolved "http://registry.npm.taobao.org/p-limit/download/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg= + dependencies: + p-try "^1.0.0" + +p-limit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.0.0.tgz#e624ed54ee8c460a778b3c9f3670496ff8a57aec" + integrity sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A== + dependencies: + p-try "^2.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/p-locate/download/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-map@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" + integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== + +p-try@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/p-try/download/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +p-try@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1" + integrity sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ== + +pako@~1.0.5: + version "1.0.7" + resolved "http://registry.npm.taobao.org/pako/download/pako-1.0.7.tgz#2473439021b57f1516c82f58be7275ad8ef1bb27" + integrity sha1-JHNDkCG1fxUWyC9YvnJ1rY7xuyc= + +parallel-transform@^1.1.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/parallel-transform/download/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06" + integrity sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY= + dependencies: + cyclist "~0.2.2" + inherits "^2.0.3" + readable-stream "^2.1.5" + +param-case@2.1.x: + version "2.1.1" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" + integrity sha1-35T9jPZTHs915r75oIWPvHK+Ikc= + dependencies: + no-case "^2.2.0" + +parse-asn1@^5.0.0: + version "5.1.1" + resolved "http://registry.npm.taobao.org/parse-asn1/download/parse-asn1-5.1.1.tgz#f6bf293818332bd0dab54efb16087724745e6ca8" + integrity sha1-9r8pOBgzK9DatU77Fgh3JHRebKg= + dependencies: + asn1.js "^4.0.0" + browserify-aes "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + +parse-json@^2.2.0: + version "2.2.0" + resolved "http://registry.npm.taobao.org/parse-json/download/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-svg-path@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/parse-svg-path/-/parse-svg-path-0.1.2.tgz#7a7ec0d1eb06fa5325c7d3e009b859a09b5d49eb" + integrity sha1-en7A0esG+lMlx9PgCbhZoJtdSes= + +parseurl@~1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" + integrity sha1-/CidTtiZMRlGDBViUyYs3I3mW/M= + +pascalcase@^0.1.1: + version "0.1.1" + resolved "http://registry.npm.taobao.org/pascalcase/download/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-browserify@0.0.0: + version "0.0.0" + resolved "http://registry.npm.taobao.org/path-browserify/download/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" + integrity sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo= + +path-dirname@^1.0.0: + version "1.0.2" + resolved "http://registry.npm.taobao.org/path-dirname/download/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^2.0.0: + version "2.1.0" + resolved "http://registry.npm.taobao.org/path-exists/download/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "http://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.1, path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-parse@^1.0.5: + version "1.0.6" + resolved "http://registry.npm.taobao.org/path-parse/download/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha1-1i27VnlAXXLEc37FhgDp3c8G0kw= + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + +path-type@^1.0.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/path-type/download/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= + dependencies: + pify "^2.0.0" + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + +pbkdf2@^3.0.3: + version "3.0.17" + resolved "http://registry.npm.taobao.org/pbkdf2/download/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" + integrity sha1-l2wgZTBhexTrsyEUI597CTNuk6Y= + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +performance-now@^2.1.0: + version "2.1.0" + resolved "http://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +pify@^2.0.0: + version "2.3.0" + resolved "http://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "http://registry.npm.taobao.org/pinkie-promise/download/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "http://registry.npm.taobao.org/pinkie/download/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pkg-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" + integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q= + dependencies: + find-up "^1.0.0" + +pkg-dir@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/pkg-dir/download/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= + dependencies: + find-up "^2.1.0" + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +pluralize@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" + integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow== + +point-at-length@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/point-at-length/-/point-at-length-1.0.2.tgz#9176d8d6d7c8162f12b646f707db9f0ea728125e" + integrity sha1-kXbY1tfIFi8Stkb3B9ufDqcoEl4= + dependencies: + abs-svg-path "~0.1.1" + isarray "~0.0.1" + parse-svg-path "~0.1.1" + +portfinder@^1.0.19: + version "1.0.20" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.20.tgz#bea68632e54b2e13ab7b0c4775e9b41bf270e44a" + integrity sha512-Yxe4mTyDzTd59PZJY4ojZR8F+E5e97iq2ZOHPz3HDgSvYC5siNad2tLooQ5y5QHyQhc3xVqvyk/eNA3wuoa7Sw== + dependencies: + async "^1.5.2" + debug "^2.2.0" + mkdirp "0.5.x" + +portfinder@^1.0.9: + version "1.0.18" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.18.tgz#cf1106ff336fd4329b7ce32fda7d17d62c6bcf37" + integrity sha512-KanzLOERzKoX3En5yTiV8K/arnU1ykYVokmtEn0PgCzqKZG9489tqW8ifp9+v3/VJZ5YDjvDt/PAP5WaPgk7FA== + dependencies: + async "^1.5.2" + debug "^2.2.0" + mkdirp "0.5.x" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "http://registry.npm.taobao.org/posix-character-classes/download/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +postcss-calc@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.0.tgz#cf0e78e1d7d9f75119b833abc786fa4b61afedda" + integrity sha512-o04XICBwDxXVYw1TXkzxs36WRgk9OECGiSUoyYMNoFWHLAQCKKeaqhrNBTUKdStMfwik3gSLLztHebTSV5kJOA== + dependencies: + css-unit-converter "^1.1.1" + postcss "^7.0.2" + postcss-selector-parser "^5.0.0-rc.3" + postcss-value-parser "^3.3.0" + +postcss-colormin@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.2.tgz#93cd1fa11280008696887db1a528048b18e7ed99" + integrity sha512-1QJc2coIehnVFsz0otges8kQLsryi4lo19WD+U5xCWvXd0uw/Z+KKYnbiNDCnO9GP+PvErPHCG0jNvWTngk9Rw== + dependencies: + browserslist "^4.0.0" + color "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-convert-values@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" + integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-discard-comments@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.1.tgz#30697735b0c476852a7a11050eb84387a67ef55d" + integrity sha512-Ay+rZu1Sz6g8IdzRjUgG2NafSNpp2MSMOQUb+9kkzzzP+kh07fP0yNbhtFejURnyVXSX3FYy2nVNW1QTnNjgBQ== + dependencies: + postcss "^7.0.0" + +postcss-discard-duplicates@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" + integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ== + dependencies: + postcss "^7.0.0" + +postcss-discard-empty@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" + integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w== + dependencies: + postcss "^7.0.0" + +postcss-discard-overridden@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" + integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg== + dependencies: + postcss "^7.0.0" + +postcss-load-config@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.0.0.tgz#f1312ddbf5912cd747177083c5ef7a19d62ee484" + integrity sha512-V5JBLzw406BB8UIfsAWSK2KSwIJ5yoEIVFb4gVkXci0QdKgA24jLmHZ/ghe/GgX0lJ0/D1uUK1ejhzEY94MChQ== + dependencies: + cosmiconfig "^4.0.0" + import-cwd "^2.0.0" + +postcss-loader@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d" + integrity sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA== + dependencies: + loader-utils "^1.1.0" + postcss "^7.0.0" + postcss-load-config "^2.0.0" + schema-utils "^1.0.0" + +postcss-merge-longhand@^4.0.6: + version "4.0.7" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.7.tgz#77430fa60e36745887c1c725ab3782c40f48363d" + integrity sha512-b2g9jC52xY0bwl8Dz1Xzfvn8x1KfmSQ0O8rc88hiv0bmYM6ky3xk1Zq128UClizM6SMBx0w7aqfrpS9u71d4Ow== + dependencies: + css-color-names "0.0.4" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + stylehacks "^4.0.0" + +postcss-merge-longhand@^4.0.9: + version "4.0.9" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.9.tgz#c2428b994833ffb2a072f290ca642e75ceabcd6f" + integrity sha512-UVMXrXF5K/kIwUbK/crPFCytpWbNX2Q3dZSc8+nQUgfOHrCT4+MHncpdxVphUlQeZxlLXUJbDyXc5NBhTnS2tA== + dependencies: + css-color-names "0.0.4" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + stylehacks "^4.0.0" + +postcss-merge-rules@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.2.tgz#2be44401bf19856f27f32b8b12c0df5af1b88e74" + integrity sha512-UiuXwCCJtQy9tAIxsnurfF0mrNHKc4NnNx6NxqmzNNjXpQwLSukUxELHTRF0Rg1pAmcoKLih8PwvZbiordchag== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + cssnano-util-same-parent "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + vendors "^1.0.0" + +postcss-minify-font-values@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" + integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-gradients@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.1.tgz#6da95c6e92a809f956bb76bf0c04494953e1a7dd" + integrity sha512-pySEW3E6Ly5mHm18rekbWiAjVi/Wj8KKt2vwSfVFAWdW6wOIekgqxKxLU7vJfb107o3FDNPkaYFCxGAJBFyogA== + dependencies: + cssnano-util-get-arguments "^4.0.0" + is-color-stop "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-params@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.1.tgz#5b2e2d0264dd645ef5d68f8fec0d4c38c1cf93d2" + integrity sha512-h4W0FEMEzBLxpxIVelRtMheskOKKp52ND6rJv+nBS33G1twu2tCyurYj/YtgU76+UDCvWeNs0hs8HFAWE2OUFg== + dependencies: + alphanum-sort "^1.0.0" + browserslist "^4.0.0" + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + uniqs "^2.0.0" + +postcss-minify-selectors@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.1.tgz#a891c197977cc37abf60b3ea06b84248b1c1e9cd" + integrity sha512-8+plQkomve3G+CodLCgbhAKrb5lekAnLYuL1d7Nz+/7RANpBEVdgBkPNwljfSKvZ9xkkZTZITd04KP+zeJTJqg== + dependencies: + alphanum-sort "^1.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +postcss-modules-extract-imports@^1.2.0: + version "1.2.1" + resolved "http://registry.npm.taobao.org/postcss-modules-extract-imports/download/postcss-modules-extract-imports-1.2.1.tgz#dc87e34148ec7eab5f791f7cd5849833375b741a" + integrity sha1-3IfjQUjsfqtfeR981YSYMzdbdBo= + dependencies: + postcss "^6.0.1" + +postcss-modules-local-by-default@^1.2.0: + version "1.2.0" + resolved "http://registry.npm.taobao.org/postcss-modules-local-by-default/download/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" + integrity sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk= + dependencies: + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" + +postcss-modules-scope@^1.1.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/postcss-modules-scope/download/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" + integrity sha1-1upkmUx5+XtipytCb75gVqGUu5A= + dependencies: + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" + +postcss-modules-values@^1.3.0: + version "1.3.0" + resolved "http://registry.npm.taobao.org/postcss-modules-values/download/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" + integrity sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA= + dependencies: + icss-replace-symbols "^1.1.0" + postcss "^6.0.1" + +postcss-normalize-charset@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" + integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g== + dependencies: + postcss "^7.0.0" + +postcss-normalize-display-values@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.1.tgz#d9a83d47c716e8a980f22f632c8b0458cfb48a4c" + integrity sha512-R5mC4vaDdvsrku96yXP7zak+O3Mm9Y8IslUobk7IMP+u/g+lXvcN4jngmHY5zeJnrQvE13dfAg5ViU05ZFDwdg== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-positions@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.1.tgz#ee2d4b67818c961964c6be09d179894b94fd6ba1" + integrity sha512-GNoOaLRBM0gvH+ZRb2vKCIujzz4aclli64MBwDuYGU2EY53LwiP7MxOZGE46UGtotrSnmarPPZ69l2S/uxdaWA== + dependencies: + cssnano-util-get-arguments "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-repeat-style@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.1.tgz#5293f234b94d7669a9f805495d35b82a581c50e5" + integrity sha512-fFHPGIjBUyUiswY2rd9rsFcC0t3oRta4wxE1h3lpwfQZwFeFjXFSiDtdJ7APCmHQOnUZnqYBADNRPKPwFAONgA== + dependencies: + cssnano-util-get-arguments "^4.0.0" + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-string@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.1.tgz#23c5030c2cc24175f66c914fa5199e2e3c10fef3" + integrity sha512-IJoexFTkAvAq5UZVxWXAGE0yLoNN/012v7TQh5nDo6imZJl2Fwgbhy3J2qnIoaDBrtUP0H7JrXlX1jjn2YcvCQ== + dependencies: + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-timing-functions@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.1.tgz#8be83e0b9cb3ff2d1abddee032a49108f05f95d7" + integrity sha512-1nOtk7ze36+63ONWD8RCaRDYsnzorrj+Q6fxkQV+mlY5+471Qx9kspqv0O/qQNMeApg8KNrRf496zHwJ3tBZ7w== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-unicode@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" + integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-url@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" + integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA== + dependencies: + is-absolute-url "^2.0.0" + normalize-url "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-whitespace@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.1.tgz#d14cb639b61238418ac8bc8d3b7bdd65fc86575e" + integrity sha512-U8MBODMB2L+nStzOk6VvWWjZgi5kQNShCyjRhMT3s+W9Jw93yIjOnrEkKYD3Ul7ChWbEcjDWmXq0qOL9MIAnAw== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-ordered-values@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.1.tgz#2e3b432ef3e489b18333aeca1f1295eb89be9fc2" + integrity sha512-PeJiLgJWPzkVF8JuKSBcylaU+hDJ/TX3zqAMIjlghgn1JBi6QwQaDZoDIlqWRcCAI8SxKrt3FCPSRmOgKRB97Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-reduce-initial@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.2.tgz#bac8e325d67510ee01fa460676dc8ea9e3b40f15" + integrity sha512-epUiC39NonKUKG+P3eAOKKZtm5OtAtQJL7Ye0CBN1f+UQTHzqotudp+hki7zxXm7tT0ZAKDMBj1uihpPjP25ug== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + +postcss-reduce-transforms@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.1.tgz#8600d5553bdd3ad640f43bff81eb52f8760d4561" + integrity sha512-sZVr3QlGs0pjh6JAIe6DzWvBaqYw05V1t3d9Tp+VnFRT5j+rsqoWsysh/iSD7YNsULjq9IAylCznIwVd5oU/zA== + dependencies: + cssnano-util-get-match "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-selector-parser@^3.0.0, postcss-selector-parser@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865" + integrity sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU= + dependencies: + dot-prop "^4.1.1" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-selector-parser@^5.0.0-rc.3: + version "5.0.0-rc.3" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0-rc.3.tgz#c4525dcc8eb90166c53dcbf0cb9317ceff5a15b5" + integrity sha512-kBl1vc+zJgWCBmmxEXE2/15tmmYdD50lO5r6tLNXEx3K4LtszdLFaSNo8SNVuoI+BGODbWhavoG/n1DrYphBsw== + dependencies: + babel-eslint "^8.2.3" + cssesc "^1.0.1" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-svgo@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.1.tgz#5628cdb38f015de6b588ce6d0bf0724b492b581d" + integrity sha512-YD5uIk5NDRySy0hcI+ZJHwqemv2WiqqzDgtvgMzO8EGSkK5aONyX8HMVFRFJSdO8wUWTuisUFn/d7yRRbBr5Qw== + dependencies: + is-svg "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + svgo "^1.0.0" + +postcss-unique-selectors@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" + integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg== + dependencies: + alphanum-sort "^1.0.0" + postcss "^7.0.0" + uniqs "^2.0.0" + +postcss-value-parser@^3.0.0, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" + integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== + +postcss@^6.0.1, postcss@^6.0.20, postcss@^6.0.23: + version "6.0.23" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" + integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag== + dependencies: + chalk "^2.4.1" + source-map "^0.6.1" + supports-color "^5.4.0" + +postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.2: + version "7.0.5" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.5.tgz#70e6443e36a6d520b0fd4e7593fcca3635ee9f55" + integrity sha512-HBNpviAUFCKvEh7NZhw1e8MBPivRszIiUnhrJ+sBFVSYSqubrzwX3KG51mYgcRHX8j/cAgZJedONZcm5jTBdgQ== + dependencies: + chalk "^2.4.1" + source-map "^0.6.1" + supports-color "^5.5.0" + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +prettier@1.13.7: + version "1.13.7" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.13.7.tgz#850f3b8af784a49a6ea2d2eaa7ed1428a34b7281" + integrity sha512-KIU72UmYPGk4MujZGYMFwinB7lOf2LsDNGSOC8ufevsrPLISrZbNJlWstRi3m0AMuszbH+EFSQ/r6w56RSPK6w== + +pretty-error@^2.0.2: + version "2.1.1" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" + integrity sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM= + dependencies: + renderkid "^2.0.1" + utila "~0.4" + +private@^0.1.6: + version "0.1.8" + resolved "http://registry.npm.taobao.org/private/download/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + integrity sha1-I4Hts2ifelPWUxkAYPz4ItLzaP8= + +process-nextick-args@~2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" + integrity sha1-o31zL0JxtKsa0HDTVQjoKQeI/6o= + +process@^0.11.10: + version "0.11.10" + resolved "http://registry.npm.taobao.org/process/download/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + +progress@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.1.tgz#c9242169342b1c29d275889c95734621b1952e31" + integrity sha512-OE+a6vzqazc+K6LxJrX5UPyKFvGnL5CYmq2jFGNIBWHpc4QyE49/YOumcrpQFJpfejmvRtbJzgO1zPmMCqlbBg== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/promise-inflight/download/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + +promise@^7.1.1: + version "7.3.1" + resolved "http://registry.npm.taobao.org/promise/download/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078= + dependencies: + asap "~2.0.3" + +proxy-addr@~2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93" + integrity sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA== + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.8.0" + +prr@~1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/prr/download/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + +pseudomap@^1.0.2: + version "1.0.2" + resolved "http://registry.npm.taobao.org/pseudomap/download/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +psl@^1.1.24: + version "1.1.29" + resolved "http://registry.npm.taobao.org/psl/download/psl-1.1.29.tgz#60f580d360170bb722a797cc704411e6da850c67" + integrity sha1-YPWA02AXC7cip5fMcEQR5tqFDGc= + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "http://registry.npm.taobao.org/public-encrypt/download/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha1-T8ydd6B+SLp1J+fL4N4z0HATMeA= + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +pump@^2.0.0, pump@^2.0.1: + version "2.0.1" + resolved "http://registry.npm.taobao.org/pump/download/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha1-Ejma3W5M91Jtlzy8i1zi4pCLOQk= + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.5.1" + resolved "http://registry.npm.taobao.org/pumpify/download/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha1-NlE74karJ1cLGjdKXOJ4v9dDcM4= + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@1.3.2: + version "1.3.2" + resolved "http://registry.npm.taobao.org/punycode/download/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@2.x.x, punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +punycode@^1.2.4, punycode@^1.4.1: + version "1.4.1" + resolved "http://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +q@^1.1.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + +qs@6.5.2, qs@~6.5.2: + version "6.5.2" + resolved "http://registry.npm.taobao.org/qs/download/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha1-yzroBuh0BERYTvFUzo7pjUA/PjY= + +querystring-es3@^0.2.0: + version "0.2.1" + resolved "http://registry.npm.taobao.org/querystring-es3/download/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + +querystring@0.2.0: + version "0.2.0" + resolved "http://registry.npm.taobao.org/querystring/download/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +querystringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.0.tgz#7ded8dfbf7879dcc60d0a644ac6754b283ad17ef" + integrity sha512-sluvZZ1YiTLD5jsqZcDmFyV2EwToyXZBfpoVOmktMmW+VEnhgakFHnasVph65fOjGPTWN0Nw3+XQaSeMayr0kg== + +raf@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.0.tgz#a28876881b4bc2ca9117d4138163ddb80f781575" + integrity sha512-pDP/NMRAXoTfrhCfyfSEwJAKLaxBU9eApMeBPB1TkDouZmvPerIClV8lTAd+uF8ZiTaVl69e1FCxQrAd/VTjGw== + dependencies: + performance-now "^2.1.0" + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: + version "2.0.6" + resolved "http://registry.npm.taobao.org/randombytes/download/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80" + integrity sha1-0wLFIpSFiISKjTAMkytEwkIx2oA= + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "http://registry.npm.taobao.org/randomfill/download/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha1-ySGW/IarQr6YPxvzF3giSTHWFFg= + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@^1.0.3, range-parser@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + integrity sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4= + +raw-body@2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3" + integrity sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw== + dependencies: + bytes "3.0.0" + http-errors "1.6.3" + iconv-lite "0.4.23" + unpipe "1.0.0" + +rc@^1.2.7: + version "1.2.8" + resolved "http://registry.npm.taobao.org/rc/download/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha1-zZJL9SAKB1uDwYjNa54hG3/A0+0= + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/read-pkg/download/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +read-pkg@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-4.0.1.tgz#963625378f3e1c4d48c85872b5a6ec7d5d093237" + integrity sha1-ljYlN48+HE1IyFhytabsfV0JMjc= + dependencies: + normalize-package-data "^2.3.2" + parse-json "^4.0.0" + pify "^3.0.0" + +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.6" + resolved "http://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + integrity sha1-sRwn2IuP8fvgcGQ8+UsMea4bCq8= + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@1.0: + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw= + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readdirp@^2.0.0: + version "2.2.1" + resolved "http://registry.npm.taobao.org/readdirp/download/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha1-DodiKjMlqjPokihcr4tOhGUppSU= + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +redent@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/redent/download/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + +regenerate-unicode-properties@^7.0.0: + version "7.0.0" + resolved "http://registry.npm.taobao.org/regenerate-unicode-properties/download/regenerate-unicode-properties-7.0.0.tgz#107405afcc4a190ec5ed450ecaa00ed0cafa7a4c" + integrity sha1-EHQFr8xKGQ7F7UUOyqAO0Mr6ekw= + dependencies: + regenerate "^1.4.0" + +regenerate@^1.2.1, regenerate@^1.4.0: + version "1.4.0" + resolved "http://registry.npm.taobao.org/regenerate/download/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" + integrity sha1-SoVuxLVuQHfFV1icroXnpMiGmhE= + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "http://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk= + +regenerator-runtime@^0.12.0: + version "0.12.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de" + integrity sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg== + +regenerator-transform@^0.13.3: + version "0.13.3" + resolved "http://registry.npm.taobao.org/regenerator-transform/download/regenerator-transform-0.13.3.tgz#264bd9ff38a8ce24b06e0636496b2c856b57bcbb" + integrity sha1-JkvZ/zioziSwbgY2SWsshWtXvLs= + dependencies: + private "^0.1.6" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "http://registry.npm.taobao.org/regex-not/download/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw= + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexpp@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab" + integrity sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw== + +regexpp@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" + integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== + +regexpu-core@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/regexpu-core/download/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" + integrity sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs= + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + +regexpu-core@^4.1.3, regexpu-core@^4.2.0: + version "4.2.0" + resolved "http://registry.npm.taobao.org/regexpu-core/download/regexpu-core-4.2.0.tgz#a3744fa03806cffe146dea4421a3e73bdcc47b1d" + integrity sha1-o3RPoDgGz/4UbepEIaPnO9zEex0= + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^7.0.0" + regjsgen "^0.4.0" + regjsparser "^0.3.0" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.0.2" + +regjsgen@^0.2.0: + version "0.2.0" + resolved "http://registry.npm.taobao.org/regjsgen/download/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= + +regjsgen@^0.4.0: + version "0.4.0" + resolved "http://registry.npm.taobao.org/regjsgen/download/regjsgen-0.4.0.tgz#c1eb4c89a209263f8717c782591523913ede2561" + integrity sha1-wetMiaIJJj+HF8eCWRUjkT7eJWE= + +regjsparser@^0.1.4: + version "0.1.5" + resolved "http://registry.npm.taobao.org/regjsparser/download/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw= + dependencies: + jsesc "~0.5.0" + +regjsparser@^0.3.0: + version "0.3.0" + resolved "http://registry.npm.taobao.org/regjsparser/download/regjsparser-0.3.0.tgz#3c326da7fcfd69fa0d332575a41c8c0cdf588c96" + integrity sha1-PDJtp/z9afoNMyV1pByMDN9YjJY= + dependencies: + jsesc "~0.5.0" + +regression@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/regression/-/regression-2.0.1.tgz#8d29c3e8224a10850c35e337e85a8b2fac3b0c87" + integrity sha1-jSnD6CJKEIUMNeM36FqLL6w7DIc= + +relateurl@0.2.x: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "http://registry.npm.taobao.org/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +renderkid@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.2.tgz#12d310f255360c07ad8fde253f6c9e9de372d2aa" + integrity sha512-FsygIxevi1jSiPY9h7vZmBFUbAOcbYm9UwyiLNdVsLRs/5We9Ob5NMPbGYUTWiLq5L+ezlVdE0A8bbME5CWTpg== + dependencies: + css-select "^1.1.0" + dom-converter "~0.2" + htmlparser2 "~3.3.0" + strip-ansi "^3.0.0" + utila "^0.4.0" + +repeat-element@^1.1.2: + version "1.1.3" + resolved "http://registry.npm.taobao.org/repeat-element/download/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha1-eC4NglwMWjuzlzH4Tv7mt0Lmsc4= + +repeat-string@^1.5.2, repeat-string@^1.6.1: + version "1.6.1" + resolved "http://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +repeating@^2.0.0: + version "2.0.1" + resolved "http://registry.npm.taobao.org/repeating/download/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= + dependencies: + is-finite "^1.0.0" + +request-promise-core@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6" + integrity sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY= + dependencies: + lodash "^4.13.1" + +request-promise-native@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.5.tgz#5281770f68e0c9719e5163fd3fab482215f4fda5" + integrity sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU= + dependencies: + request-promise-core "1.1.1" + stealthy-require "^1.1.0" + tough-cookie ">=2.3.3" + +request@^2.83.0, request@^2.87.0, request@^2.88.0: + version "2.88.0" + resolved "http://registry.npm.taobao.org/request/download/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" + integrity sha1-nC/KT301tZLv5Xx/ClXoEFIST+8= + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.0" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.4.3" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "http://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-from-string@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/require-main-filename/download/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= + +require-uncached@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" + integrity sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM= + dependencies: + caller-path "^0.1.0" + resolve-from "^1.0.0" + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + +resize-observer-polyfill@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.0.tgz#660ff1d9712a2382baa2cad450a4716209f9ca69" + integrity sha512-M2AelyJDVR/oLnToJLtuDJRBBWUGUvvGigj1411hXhAdyFWqMaqHp7TixW3FpiLuVaikIcR1QL+zqoJoZlOgpg== + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + dependencies: + resolve-from "^3.0.0" + +resolve-from@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" + integrity sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY= + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + +resolve-url@^0.2.1: + version "0.2.1" + resolved "http://registry.npm.taobao.org/resolve-url/download/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@^1.3.2, resolve@^1.5.0, resolve@^1.6.0, resolve@^1.8.1: + version "1.8.1" + resolved "http://registry.npm.taobao.org/resolve/download/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" + integrity sha1-gvHsGaQjrB+9CAsLqwa6NuhKeiY= + dependencies: + path-parse "^1.0.5" + +resolve@~1.7.1: + version "1.7.1" + resolved "http://registry.npm.taobao.org/resolve/download/resolve-1.7.1.tgz#aadd656374fd298aee895bc026b8297418677fd3" + integrity sha1-qt1lY3T9KYruiVvAJrgpdBhnf9M= + dependencies: + path-parse "^1.0.5" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +resumer@~0.0.0: + version "0.0.0" + resolved "http://registry.npm.taobao.org/resumer/download/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759" + integrity sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k= + dependencies: + through "~2.3.4" + +ret@~0.1.10: + version "0.1.15" + resolved "http://registry.npm.taobao.org/ret/download/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w= + +rgb-regex@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" + integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= + +rgba-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" + integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= + +right-align@^0.1.1: + version "0.1.3" + resolved "http://registry.npm.taobao.org/right-align/download/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + integrity sha1-YTObci/mo1FWiSENJOFMlhSGE+8= + dependencies: + align-text "^0.1.1" + +rimraf@2, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" + integrity sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w== + dependencies: + glob "^7.0.5" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "http://registry.npm.taobao.org/ripemd160/download/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha1-ocGm9iR1FXe6XQeRTLyShQWFiQw= + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rollup@^0.25.8: + version "0.25.8" + resolved "http://registry.npm.taobao.org/rollup/download/rollup-0.25.8.tgz#bf6ce83b87510d163446eeaa577ed6a6fc5835e0" + integrity sha1-v2zoO4dRDRY0Ru6qV37WpvxYNeA= + dependencies: + chalk "^1.1.1" + minimist "^1.2.0" + source-map-support "^0.3.2" + +run-async@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= + dependencies: + is-promise "^2.1.0" + +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "http://registry.npm.taobao.org/run-queue/download/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + dependencies: + aproba "^1.1.1" + +rw@1, rw@^1.3.2: + version "1.3.3" + resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4" + integrity sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q= + +rx-lite-aggregates@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" + integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74= + dependencies: + rx-lite "*" + +rx-lite@*, rx-lite@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" + integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ= + +rxjs@^6.1.0: + version "6.3.3" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.3.3.tgz#3c6a7fa420e844a81390fb1158a9ec614f4bad55" + integrity sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw== + dependencies: + tslib "^1.9.0" + +safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "http://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha1-mR7GnSluAxN0fVm9/St0XDX4go0= + +safe-regex@^1.1.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/safe-regex/download/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "http://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo= + +sass-graph@^2.2.4: + version "2.2.4" + resolved "http://registry.npm.taobao.org/sass-graph/download/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49" + integrity sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k= + dependencies: + glob "^7.0.0" + lodash "^4.0.0" + scss-tokenizer "^0.2.3" + yargs "^7.0.0" + +sass-loader@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-7.1.0.tgz#16fd5138cb8b424bf8a759528a1972d72aad069d" + integrity sha512-+G+BKGglmZM2GUSfT9TLuEp6tzehHPjAMoRRItOojWIqIGPloVCMhNIQuG639eJ+y033PaGTSjLaTHts8Kw79w== + dependencies: + clone-deep "^2.0.1" + loader-utils "^1.0.1" + lodash.tail "^4.1.1" + neo-async "^2.5.0" + pify "^3.0.0" + semver "^5.5.0" + +sax@^1.2.4, sax@~1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +schema-utils@^0.4.2, schema-utils@^0.4.4: + version "0.4.7" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187" + integrity sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ== + dependencies: + ajv "^6.1.0" + ajv-keywords "^3.1.0" + +schema-utils@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + integrity sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A= + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + +scss-tokenizer@^0.2.3: + version "0.2.3" + resolved "http://registry.npm.taobao.org/scss-tokenizer/download/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" + integrity sha1-jrBtualyMzOCTT9VMGQRSYR85dE= + dependencies: + js-base64 "^2.1.8" + source-map "^0.4.2" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= + +selfsigned@^1.9.1: + version "1.10.4" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.4.tgz#cdd7eccfca4ed7635d47a08bf2d5d3074092e2cd" + integrity sha512-9AukTiDmHXGXWtWjembZ5NDmVvP2695EtpgbCsxCa68w3c88B+alqbmZ4O3hZ4VWGXeGWzEVdvqgAJD8DQPCDw== + dependencies: + node-forge "0.7.5" + +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: + version "5.6.0" + resolved "http://registry.npm.taobao.org/semver/download/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" + integrity sha1-fnQlb7qknHWqfHogXMInmcrIAAQ= + +semver@~5.3.0: + version "5.3.0" + resolved "http://registry.npm.taobao.org/semver/download/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= + +send@0.16.2: + version "0.16.2" + resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" + integrity sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.6.2" + mime "1.4.1" + ms "2.0.0" + on-finished "~2.3.0" + range-parser "~1.2.0" + statuses "~1.4.0" + +serialize-javascript@^1.4.0: + version "1.5.0" + resolved "http://registry.npm.taobao.org/serialize-javascript/download/serialize-javascript-1.5.0.tgz#1aa336162c88a890ddad5384baebc93a655161fe" + integrity sha1-GqM2FiyIqJDdrVOEuuvJOmVRYf4= + +serve-index@^1.7.2: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.13.2: + version "1.13.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" + integrity sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.2" + send "0.16.2" + +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/set-blocking/download/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-value@^0.4.3: + version "0.4.3" + resolved "http://registry.npm.taobao.org/set-value/download/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" + integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE= + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.1" + to-object-path "^0.3.0" + +set-value@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/set-value/download/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" + integrity sha1-ca5KiPD+77v1LR6mBPP7MV67YnQ= + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.4: + version "1.0.5" + resolved "http://registry.npm.taobao.org/setimmediate/download/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "http://registry.npm.taobao.org/sha.js/download/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha1-N6XPC4HsvGlD3hCbopYNGyZYSuc= + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shallow-clone@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-1.0.0.tgz#4480cd06e882ef68b2ad88a3ea54832e2c48b571" + integrity sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA== + dependencies: + is-extendable "^0.1.1" + kind-of "^5.0.0" + mixin-object "^2.0.1" + +shallow-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shallow-equal/-/shallow-equal-1.0.0.tgz#508d1838b3de590ab8757b011b25e430900945f7" + integrity sha1-UI0YOLPeWQq4dXsBGyXkMJAJRfc= + +shallowequal@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" + integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +shell-quote@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" + integrity sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c= + dependencies: + array-filter "~0.0.0" + array-map "~0.0.0" + array-reduce "~0.0.0" + jsonify "~0.0.0" + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= + +simple-statistics@~6.1.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/simple-statistics/-/simple-statistics-6.1.1.tgz#e3a0799ffc49914d6f421c5a4ac585f6a13e2bad" + integrity sha512-zGwn0DDRa9Zel4H4n2pjTFIyGoAGpnpjrGIctreCxj5XWrcx9v7Xy7270FkC967WMmcvuc8ZU7m0ZG+hGN7gAA== + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= + dependencies: + is-arrayish "^0.3.1" + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= + +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + +slice-ansi@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" + integrity sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg== + dependencies: + is-fullwidth-code-point "^2.0.0" + +slice-ansi@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.0.0.tgz#5373bdb8559b45676e8541c66916cdd6251612e7" + integrity sha512-4j2WTWjp3GsZ+AOagyzVbzp4vWGtZ0hEZ/gDY/uTvm6MTxUfTUIsnMIFb1bn8o0RuXiqUw15H1bue8f22Vw2oQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "http://registry.npm.taobao.org/snapdragon-node/download/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha1-bBdfhv8UvbByRWPo88GwIaKGhTs= + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "http://registry.npm.taobao.org/snapdragon-util/download/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI= + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "http://registry.npm.taobao.org/snapdragon/download/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0= + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +sockjs-client@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.3.0.tgz#12fc9d6cb663da5739d3dc5fb6e8687da95cb177" + integrity sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg== + dependencies: + debug "^3.2.5" + eventsource "^1.0.7" + faye-websocket "~0.11.1" + inherits "^2.0.3" + json3 "^3.3.2" + url-parse "^1.4.3" + +sockjs@0.3.19: + version "0.3.19" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.19.tgz#d976bbe800af7bd20ae08598d582393508993c0d" + integrity sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw== + dependencies: + faye-websocket "^0.10.0" + uuid "^3.0.1" + +source-list-map@^2.0.0: + version "2.0.1" + resolved "http://registry.npm.taobao.org/source-list-map/download/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha1-OZO9hzv8SEecyp6jpUeDXHwVSzQ= + +source-map-resolve@^0.5.0: + version "0.5.2" + resolved "http://registry.npm.taobao.org/source-map-resolve/download/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" + integrity sha1-cuLMNAlVQ+Q7LGKyxMENSpBU8lk= + dependencies: + atob "^2.1.1" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.3.2: + version "0.3.3" + resolved "http://registry.npm.taobao.org/source-map-support/download/source-map-support-0.3.3.tgz#34900977d5ba3f07c7757ee72e73bb1a9b53754f" + integrity sha1-NJAJd9W6PwfHdX7nLnO7GptTdU8= + dependencies: + source-map "0.1.32" + +source-map-support@~0.5.6: + version "0.5.9" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f" + integrity sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "http://registry.npm.taobao.org/source-map-url/download/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + +source-map@0.1.32: + version "0.1.32" + resolved "http://registry.npm.taobao.org/source-map/download/source-map-0.1.32.tgz#c8b6c167797ba4740a8ea33252162ff08591b266" + integrity sha1-yLbBZ3l7pHQKjqMyUhYv8IWRsmY= + dependencies: + amdefine ">=0.0.4" + +source-map@^0.4.2: + version "0.4.4" + resolved "http://registry.npm.taobao.org/source-map/download/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + integrity sha1-66T12pwNyZneaAMti092FzZSA2s= + dependencies: + amdefine ">=0.0.4" + +source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1: + version "0.5.7" + resolved "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha1-dHIq8y6WFOnCh6jQu95IteLxomM= + +spdx-correct@^3.0.0: + version "3.0.2" + resolved "http://registry.npm.taobao.org/spdx-correct/download/spdx-correct-3.0.2.tgz#19bb409e91b47b1ad54159243f7312a858db3c2e" + integrity sha1-GbtAnpG0exrVQVkkP3MSqFjbPC4= + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.2.0" + resolved "http://registry.npm.taobao.org/spdx-exceptions/download/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" + integrity sha1-LqRQrudPKom/uUUZwH/Nb0EyKXc= + +spdx-expression-parse@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/spdx-expression-parse/download/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + integrity sha1-meEZt6XaAOBUkcn6M4t5BII7QdA= + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.2" + resolved "http://registry.npm.taobao.org/spdx-license-ids/download/spdx-license-ids-3.0.2.tgz#a59efc09784c2a5bada13cfeaf5c75dd214044d2" + integrity sha1-pZ78CXhMKlutoTz+r1x13SFARNI= + +spdy-transport@^2.0.18: + version "2.1.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-2.1.0.tgz#4bbb15aaffed0beefdd56ad61dbdc8ba3e2cb7a1" + integrity sha512-bpUeGpZcmZ692rrTiqf9/2EUakI6/kXX1Rpe0ib/DyOzbiexVfXkw6GnvI9hVGvIwVaUhkaBojjCZwLNRGQg1g== + dependencies: + debug "^2.6.8" + detect-node "^2.0.3" + hpack.js "^2.1.6" + obuf "^1.1.1" + readable-stream "^2.2.9" + safe-buffer "^5.0.1" + wbuf "^1.7.2" + +spdy@^3.4.1: + version "3.4.7" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-3.4.7.tgz#42ff41ece5cc0f99a3a6c28aabb73f5c3b03acbc" + integrity sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw= + dependencies: + debug "^2.6.8" + handle-thing "^1.2.5" + http-deceiver "^1.2.7" + safe-buffer "^5.0.1" + select-hose "^2.0.0" + spdy-transport "^2.0.18" + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "http://registry.npm.taobao.org/split-string/download/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha1-fLCd2jqGWFcFxks5pkZgOGguj+I= + dependencies: + extend-shallow "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +sshpk@^1.7.0: + version "1.15.2" + resolved "http://registry.npm.taobao.org/sshpk/download/sshpk-1.15.2.tgz#c946d6bd9b1a39d0e8635763f5242d6ed6dcb629" + integrity sha1-yUbWvZsaOdDoY1dj9SQtbtbctik= + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +ssri@^5.2.4: + version "5.3.0" + resolved "http://registry.npm.taobao.org/ssri/download/ssri-5.3.0.tgz#ba3872c9c6d33a0704a7d71ff045e5ec48999d06" + integrity sha1-ujhyycbTOgcEp9cf8EXl7EiZnQY= + dependencies: + safe-buffer "^5.1.1" + +ssri@^6.0.0, ssri@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" + integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== + dependencies: + figgy-pudding "^3.5.1" + +stable@~0.1.6: + version "0.1.8" + resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + +stackframe@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.0.4.tgz#357b24a992f9427cba6b545d96a14ed2cbca187b" + integrity sha512-to7oADIniaYwS3MhtCa/sQhrxidCCQiF/qp4/m5iN3ipf0Y7Xlri0f6eG29r08aL7JYl8n32AF3Q5GYBZ7K8vw== + +static-extend@^0.1.1: + version "0.1.2" + resolved "http://registry.npm.taobao.org/static-extend/download/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +"statuses@>= 1.4.0 < 2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +statuses@~1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" + integrity sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew== + +stdout-stream@^1.4.0: + version "1.4.1" + resolved "http://registry.npm.taobao.org/stdout-stream/download/stdout-stream-1.4.1.tgz#5ac174cdd5cd726104aa0c0b2bd83815d8d535de" + integrity sha1-WsF0zdXNcmEEqgwLK9g4FdjVNd4= + dependencies: + readable-stream "^2.0.1" + +stealthy-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= + +stream-browserify@^2.0.1: + version "2.0.1" + resolved "http://registry.npm.taobao.org/stream-browserify/download/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" + integrity sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds= + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-each@^1.1.0: + version "1.2.3" + resolved "http://registry.npm.taobao.org/stream-each/download/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha1-6+J6DDibBPvMIzZClS4Qcxr6m64= + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-http@^2.7.2: + version "2.8.3" + resolved "http://registry.npm.taobao.org/stream-http/download/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha1-stJCRpKIpaJ+xP6JM6z2I95lFPw= + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-shift@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/stream-shift/download/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" + integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= + +string-convert@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/string-convert/-/string-convert-0.2.1.tgz#6982cc3049fbb4cd85f8b24568b9d9bf39eeff97" + integrity sha1-aYLMMEn7tM2F+LJFaLnZvznu/5c= + +string-width@^1.0.1, string-width@^1.0.2: + version "1.0.2" + resolved "http://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string.prototype.padend@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz#f3aaef7c1719f170c5eab1c32bf780d96e21f2f0" + integrity sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA= + dependencies: + define-properties "^1.1.2" + es-abstract "^1.4.3" + function-bind "^1.0.2" + +string.prototype.padstart@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/string.prototype.padstart/-/string.prototype.padstart-3.0.0.tgz#5bcfad39f4649bb2d031292e19bcf0b510d4b242" + integrity sha1-W8+tOfRkm7LQMSkuGbzwtRDUskI= + dependencies: + define-properties "^1.1.2" + es-abstract "^1.4.3" + function-bind "^1.0.2" + +string.prototype.trim@~1.1.2: + version "1.1.2" + resolved "http://registry.npm.taobao.org/string.prototype.trim/download/string.prototype.trim-1.1.2.tgz#d04de2c89e137f4d7d206f086b5ed2fae6be8cea" + integrity sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo= + dependencies: + define-properties "^1.1.2" + es-abstract "^1.5.0" + function-bind "^1.0.2" + +string_decoder@^1.0.0: + version "1.2.0" + resolved "http://registry.npm.taobao.org/string_decoder/download/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" + integrity sha1-/obnOLGVRK/nBGkkOyoe6SQOro0= + dependencies: + safe-buffer "~5.1.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= + +string_decoder@~1.1.1: + version "1.1.1" + resolved "http://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha1-nPFhG6YmhdcDCunkujQUnDrwP8g= + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.0.0.tgz#f78f68b5d0866c20b2c9b8c61b5298508dc8756f" + integrity sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow== + dependencies: + ansi-regex "^4.0.0" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/strip-bom/download/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= + dependencies: + is-utf8 "^0.2.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-indent@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/strip-indent/download/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= + dependencies: + get-stdin "^4.0.1" + +strip-indent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" + integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= + +strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: + version "2.0.1" + resolved "http://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + +style-loader@^0.23.1: + version "0.23.1" + resolved "http://registry.npm.taobao.org/style-loader/download/style-loader-0.23.1.tgz#cb9154606f3e771ab6c4ab637026a1049174d925" + integrity sha1-y5FUYG8+dxq2xKtjcCahBJF02SU= + dependencies: + loader-utils "^1.1.0" + schema-utils "^1.0.0" + +stylehacks@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.1.tgz#3186595d047ab0df813d213e51c8b94e0b9010f2" + integrity sha512-TK5zEPeD9NyC1uPIdjikzsgWxdQQN/ry1X3d1iOz1UkYDCmcr928gWD1KHgyC27F50UnE0xCTrBOO1l6KR8M4w== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +supports-color@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^5.1.0, supports-color@^5.3.0, supports-color@^5.4.0, supports-color@^5.5.0: + version "5.5.0" + resolved "http://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha1-4uaaRKyHcveKHsCzW2id9lMO/I8= + dependencies: + has-flag "^3.0.0" + +svgo@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.1.1.tgz#12384b03335bcecd85cfa5f4e3375fed671cb985" + integrity sha512-GBkJbnTuFpM4jFbiERHDWhZc/S/kpHToqmZag3aEBjPYK44JAN2QBjvrGIxLOoCyMZjuFQIfTO2eJd8uwLY/9g== + dependencies: + coa "~2.0.1" + colors "~1.1.2" + css-select "^2.0.0" + css-select-base-adapter "~0.1.0" + css-tree "1.0.0-alpha.28" + css-url-regex "^1.1.0" + csso "^3.5.0" + js-yaml "^3.12.0" + mkdirp "~0.5.1" + object.values "^1.0.4" + sax "~1.2.4" + stable "~0.1.6" + unquote "~1.1.1" + util.promisify "~1.0.0" + +table@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" + integrity sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA== + dependencies: + ajv "^5.2.3" + ajv-keywords "^2.1.0" + chalk "^2.1.0" + lodash "^4.17.4" + slice-ansi "1.0.0" + string-width "^2.1.1" + +table@^5.0.2: + version "5.1.1" + resolved "https://registry.yarnpkg.com/table/-/table-5.1.1.tgz#92030192f1b7b51b6eeab23ed416862e47b70837" + integrity sha512-NUjapYb/qd4PeFW03HnAuOJ7OMcBkJlqeClWxeNlQ0lXGSb52oZXGzkO0/I0ARegQ2eUT1g2VDJH0eUxDRcHmw== + dependencies: + ajv "^6.6.1" + lodash "^4.17.11" + slice-ansi "2.0.0" + string-width "^2.1.1" + +tapable@^1.0.0, tapable@^1.1.0: + version "1.1.1" + resolved "http://registry.npm.taobao.org/tapable/download/tapable-1.1.1.tgz#4d297923c5a72a42360de2ab52dadfaaec00018e" + integrity sha1-TSl5I8WnKkI2DeKrUtrfquwAAY4= + +tape@^4.5.1: + version "4.9.1" + resolved "http://registry.npm.taobao.org/tape/download/tape-4.9.1.tgz#1173d7337e040c76fbf42ec86fcabedc9b3805c9" + integrity sha1-EXPXM34EDHb79C7Ib8q+3Js4Bck= + dependencies: + deep-equal "~1.0.1" + defined "~1.0.0" + for-each "~0.3.3" + function-bind "~1.1.1" + glob "~7.1.2" + has "~1.0.3" + inherits "~2.0.3" + minimist "~1.2.0" + object-inspect "~1.6.0" + resolve "~1.7.1" + resumer "~0.0.0" + string.prototype.trim "~1.1.2" + through "~2.3.8" + +tar@^2.0.0: + version "2.2.1" + resolved "http://registry.npm.taobao.org/tar/download/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" + integrity sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE= + dependencies: + block-stream "*" + fstream "^1.0.2" + inherits "2" + +tar@^4: + version "4.4.8" + resolved "http://registry.npm.taobao.org/tar/download/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" + integrity sha1-sZ7sP94qluZGZt+f20DFyhvDdH0= + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.3.4" + minizlib "^1.1.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.2" + +terser-webpack-plugin@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.1.0.tgz#cf7c25a1eee25bf121f4a587bb9e004e3f80e528" + integrity sha512-61lV0DSxMAZ8AyZG7/A4a3UPlrbOBo8NIQ4tJzLPAdGOQ+yoNC7l5ijEow27lBAL2humer01KLS6bGIMYQxKoA== + dependencies: + cacache "^11.0.2" + find-cache-dir "^2.0.0" + schema-utils "^1.0.0" + serialize-javascript "^1.4.0" + source-map "^0.6.1" + terser "^3.8.1" + webpack-sources "^1.1.0" + worker-farm "^1.5.2" + +terser@^3.8.1: + version "3.11.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-3.11.0.tgz#60782893e1f4d6788acc696351f40636d0e37af0" + integrity sha512-5iLMdhEPIq3zFWskpmbzmKwMQixKmTYwY3Ox9pjtSklBLnHiuQ0GKJLhL1HSYtyffHM3/lDIFBnb82m9D7ewwQ== + dependencies: + commander "~2.17.1" + source-map "~0.6.1" + source-map-support "~0.5.6" + +text-table@^0.2.0, text-table@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +thread-loader@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/thread-loader/-/thread-loader-1.2.0.tgz#35dedb23cf294afbbce6c45c1339b950ed17e7a4" + integrity sha512-acJ0rvUk53+ly9cqYWNOpPqOgCkNpmHLPDGduNm4hDQWF7EDKEJXAopG9iEWsPPcml09wePkq3NF+ZUqnO6tbg== + dependencies: + async "^2.3.0" + loader-runner "^2.3.0" + loader-utils "^1.1.0" + +through2@^2.0.0: + version "2.0.5" + resolved "http://registry.npm.taobao.org/through2/download/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0= + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through@^2.3.6, through@~2.3.4, through@~2.3.8: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +thunky@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.0.3.tgz#f5df732453407b09191dae73e2a8cc73f381a826" + integrity sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow== + +timers-browserify@^2.0.4: + version "2.0.10" + resolved "http://registry.npm.taobao.org/timers-browserify/download/timers-browserify-2.0.10.tgz#1d28e3d2aadf1d5a5996c4e9f95601cd053480ae" + integrity sha1-HSjj0qrfHVpZlsTp+VYBzQU0gK4= + dependencies: + setimmediate "^1.0.4" + +timsort@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" + integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "http://registry.npm.taobao.org/to-arraybuffer/download/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "http://registry.npm.taobao.org/to-object-path/download/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "http://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "http://registry.npm.taobao.org/to-regex/download/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4= + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +topo@3.x.x: + version "3.0.0" + resolved "https://registry.yarnpkg.com/topo/-/topo-3.0.0.tgz#37e48c330efeac784538e0acd3e62ca5e231fe7a" + integrity sha512-Tlu1fGlR90iCdIPURqPiufqAlCZYzLjHYVVbcFWDMcX7+tK8hdZWAfsMrD/pBul9jqHHwFjNdf1WaxA9vTRRhw== + dependencies: + hoek "5.x.x" + +topojson-client@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/topojson-client/-/topojson-client-3.0.0.tgz#1f99293a77ef42a448d032a81aa982b73f360d2f" + integrity sha1-H5kpOnfvQqRI0DKoGqmCtz82DS8= + dependencies: + commander "2" + +toposort@^1.0.0: + version "1.0.7" + resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029" + integrity sha1-LmhELZ9k7HILjMieZEOsbKqVACk= + +tough-cookie@>=2.3.3, tough-cookie@~2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" + integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== + dependencies: + psl "^1.1.24" + punycode "^1.4.1" + +trim-newlines@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/trim-newlines/download/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= + +trim-right@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/trim-right/download/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= + +"true-case-path@^1.0.2": + version "1.0.3" + resolved "http://registry.npm.taobao.org/true-case-path/download/true-case-path-1.0.3.tgz#f813b5a8c86b40da59606722b144e3225799f47d" + integrity sha1-+BO1qMhrQNpZYGcisUTjIleZ9H0= + dependencies: + glob "^7.1.2" + +tryer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" + integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA== + +tslib@^1.9.0: + version "1.9.3" + resolved "http://registry.npm.taobao.org/tslib/download/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" + integrity sha1-1+TdeSRdhUKMTX5IIqeZF5VMooY= + +tty-browserify@0.0.0: + version "0.0.0" + resolved "http://registry.npm.taobao.org/tty-browserify/download/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "http://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "http://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +type-is@~1.6.16: + version "1.6.16" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" + integrity sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.18" + +typedarray@^0.0.6: + version "0.0.6" + resolved "http://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +uglify-js@3.4.x: + version "3.4.9" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.9.tgz#af02f180c1207d76432e473ed24a28f4a782bae3" + integrity sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q== + dependencies: + commander "~2.17.1" + source-map "~0.6.1" + +uglify-js@^2.6.2: + version "2.8.29" + resolved "http://registry.npm.taobao.org/uglify-js/download/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" + integrity sha1-KcVzMUgFe7Th913zW3qcty5qWd0= + dependencies: + source-map "~0.5.1" + yargs "~3.10.0" + optionalDependencies: + uglify-to-browserify "~1.0.0" + +uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "http://registry.npm.taobao.org/uglify-to-browserify/download/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + integrity sha1-bgkk1r2mta/jSeOabWMoUKD4grc= + +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "http://registry.npm.taobao.org/unicode-canonical-property-names-ecmascript/download/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha1-JhmADEyCWADv3YNDr33Zkzy+KBg= + +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "http://registry.npm.taobao.org/unicode-match-property-ecmascript/download/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha1-jtKjJWmWG86SJ9Cc0/+7j+1fAgw= + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + +unicode-match-property-value-ecmascript@^1.0.2: + version "1.0.2" + resolved "http://registry.npm.taobao.org/unicode-match-property-value-ecmascript/download/unicode-match-property-value-ecmascript-1.0.2.tgz#9f1dc76926d6ccf452310564fd834ace059663d4" + integrity sha1-nx3HaSbWzPRSMQVk/YNKzgWWY9Q= + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.0.4" + resolved "http://registry.npm.taobao.org/unicode-property-aliases-ecmascript/download/unicode-property-aliases-ecmascript-1.0.4.tgz#5a533f31b4317ea76f17d807fa0d116546111dd0" + integrity sha1-WlM/MbQxfqdvF9gH+g0RZUYRHdA= + +union-value@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/union-value/download/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" + integrity sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ= + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^0.4.3" + +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= + +uniqs@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= + +unique-filename@^1.1.0: + version "1.1.1" + resolved "http://registry.npm.taobao.org/unique-filename/download/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha1-HWl2k2mtoFgxA6HmrodoG1ZXMjA= + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.1" + resolved "http://registry.npm.taobao.org/unique-slug/download/unique-slug-2.0.1.tgz#5e9edc6d1ce8fb264db18a507ef9bd8544451ca6" + integrity sha1-Xp7cbRzo+yZNsYpQfvm9hURFHKY= + dependencies: + imurmurhash "^0.1.4" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +unquote@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" + integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= + +unset-value@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/unset-value/download/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +upath@^1.0.5: + version "1.1.0" + resolved "http://registry.npm.taobao.org/upath/download/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd" + integrity sha1-NSVll+RqWB20eT0M5H+prr/J+r0= + +upper-case@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" + integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg= + +uri-js@^4.2.2: + version "4.2.2" + resolved "http://registry.npm.taobao.org/uri-js/download/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha1-lMVA4f93KVbiKZUHwBCupsiDjrA= + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "http://registry.npm.taobao.org/urix/download/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +url-loader@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-1.1.2.tgz#b971d191b83af693c5e3fea4064be9e1f2d7f8d8" + integrity sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg== + dependencies: + loader-utils "^1.1.0" + mime "^2.0.3" + schema-utils "^1.0.0" + +url-parse@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.3.tgz#bfaee455c889023219d757e045fa6a684ec36c15" + integrity sha512-rh+KuAW36YKo0vClhQzLLveoj8FwPJNu65xLb7Mrt+eZht0IPT0IXgSv8gcMegZ6NvjJUALf6Mf25POlMwD1Fw== + dependencies: + querystringify "^2.0.0" + requires-port "^1.0.0" + +url@^0.11.0: + version "0.11.0" + resolved "http://registry.npm.taobao.org/url/download/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use@^3.1.0: + version "3.1.1" + resolved "http://registry.npm.taobao.org/use/download/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8= + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "http://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util.promisify@1.0.0, util.promisify@^1.0.0, util.promisify@~1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/util.promisify/download/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + integrity sha1-RA9xZaRZyaFtwUXrjnLzVocJcDA= + dependencies: + define-properties "^1.1.2" + object.getownpropertydescriptors "^2.0.3" + +util@0.10.3: + version "0.10.3" + resolved "http://registry.npm.taobao.org/util/download/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + dependencies: + inherits "2.0.1" + +util@^0.10.3: + version "0.10.4" + resolved "http://registry.npm.taobao.org/util/download/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" + integrity sha1-OqASW/5mikZy3liFfTrOJ+y3aQE= + dependencies: + inherits "2.0.3" + +utila@^0.4.0, utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +uuid@^3.0.1, uuid@^3.3.2: + version "3.3.2" + resolved "http://registry.npm.taobao.org/uuid/download/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + integrity sha1-G0r0lV6zB3xQHCOHL8ZROBFYcTE= + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "http://registry.npm.taobao.org/validate-npm-package-license/download/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha1-/JH2uce6FchX9MssXe/uw51PQQo= + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + +vendors@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.2.tgz#7fcb5eef9f5623b156bcea89ec37d63676f21801" + integrity sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ== + +venn.js@~0.2.20: + version "0.2.20" + resolved "http://registry.npm.taobao.org/venn.js/download/venn.js-0.2.20.tgz#3f0e50cc75cba1f58692a8a32f67bd7aaf1aa6fa" + integrity sha1-Pw5QzHXLofWGkqijL2e9eq8apvo= + dependencies: + d3-selection "^1.0.2" + d3-transition "^1.0.1" + fmin "0.0.2" + +verror@1.10.0: + version "1.10.0" + resolved "http://registry.npm.taobao.org/verror/download/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +viser-vue@^2.3.3: + version "2.4.2" + resolved "http://registry.npm.taobao.org/viser-vue/download/viser-vue-2.4.2.tgz#f67c63e17fad58985cd8db73acb3d39336d2abc1" + integrity sha1-9nxj4X+tWJhc2NtzrLPTkzbSq8E= + dependencies: + "@types/node" "*" + viser "^2.0.0" + vue "^2.5.3" + +viser@^2.0.0: + version "2.4.2" + resolved "http://registry.npm.taobao.org/viser/download/viser-2.4.2.tgz#9c145fdf7d6510e8da2b2886ed29d3c3ebe3cccd" + integrity sha1-nBRf331lEOjaKyiG7SnTw+vjzM0= + dependencies: + "@antv/g2" "^3.3.0" + "@antv/g2-brush" "^0.0.2" + "@antv/g2-plugin-slider" "^2.1.0" + "@types/d3-format" "*" + "@types/lodash" "*" + "@types/node" "^8.0.53" + d3-format "^1.3.0" + lodash "^4.17.4" + +vm-browserify@0.0.4: + version "0.0.4" + resolved "http://registry.npm.taobao.org/vm-browserify/download/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" + integrity sha1-XX6kW7755Kb/ZflUOOCofDV9WnM= + dependencies: + indexof "0.0.1" + +vue-cropper@^0.4.4: + version "0.4.6" + resolved "http://registry.npm.taobao.org/vue-cropper/download/vue-cropper-0.4.6.tgz#be08882ce105ce6c151b4c7f0ea2c1baf82c81fd" + integrity sha1-vgiILOEFzmwVG0x/DqLBuvgsgf0= + dependencies: + "@babel/core" "^7.1.2" + "@babel/plugin-transform-runtime" "^7.1.0" + "@babel/preset-env" "^7.1.0" + babel-loader "^8.0.0-beta.0" + babel-plugin-transform-runtime "^6.23.0" + babel-runtime "^6.26.0" + css-loader "^1.0.0" + style-loader "^0.23.1" + vue "^2.5.17" + vue-template-compiler "^2.5.17" + webpack "^4.20.2" + +vue-eslint-parser@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz#c268c96c6d94cfe3d938a5f7593959b0ca3360d1" + integrity sha512-ZezcU71Owm84xVF6gfurBQUGg8WQ+WZGxgDEQu1IHFBZNx7BFZg3L1yHxrCBNNwbwFtE1GuvfJKMtb6Xuwc/Bw== + dependencies: + debug "^3.1.0" + eslint-scope "^3.7.1" + eslint-visitor-keys "^1.0.0" + espree "^3.5.2" + esquery "^1.0.0" + lodash "^4.17.4" + +vue-eslint-parser@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-3.3.0.tgz#06b195d18bb66ac72c6b7f2469b549109a61d72c" + integrity sha512-gUsSihfwXmSIbxtqq8YT9CBdkqTHj+6ahj+glY6vJSYu0ylMHQ1A9ClC1YkF5YLRs+WShAwJklXfiL8CEZhgog== + dependencies: + debug "^4.1.0" + eslint-scope "^4.0.0" + eslint-visitor-keys "^1.0.0" + espree "^4.1.0" + esquery "^1.0.1" + lodash "^4.17.11" + +vue-hot-reload-api@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.1.tgz#b2d3d95402a811602380783ea4f566eb875569a2" + integrity sha512-AA86yKZ5uOKz87/q1UpngEXhbRkaYg1b7HMMVRobNV1IVKqZe8oLIzo6iMocVwZXnYitlGwf2k4ZRLOZlS8oPQ== + +vue-loader@^15.4.2: + version "15.4.2" + resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.4.2.tgz#812bb26e447dd3b84c485eb634190d914ce125e2" + integrity sha512-nVV27GNIA9MeoD8yQ3dkUzwlAaAsWeYSWZHsu/K04KCD339lW0Jv2sJWsjj3721SP7sl2lYdPmjcHgkWQSp5bg== + dependencies: + "@vue/component-compiler-utils" "^2.0.0" + hash-sum "^1.0.2" + loader-utils "^1.1.0" + vue-hot-reload-api "^2.3.0" + vue-style-loader "^4.1.0" + +vue-ls@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/vue-ls/-/vue-ls-3.2.0.tgz#33356ad3ec9c30dac203757cf4036abe4ff767b3" + integrity sha512-39FGQMrT9NbG5WGDJfxWj19ZD1tsVoBBN1n8qvq6/+uRB9BansQ9NSyclQ9TzZatRkkM/VEQo5oTsijdM5hGFw== + +vue-ref@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/vue-ref/-/vue-ref-1.0.3.tgz#5b7bbfc6f5833e13f5a9155ac686fafdb03dbcad" + integrity sha512-6t9bwx6qJGKF+Mo6wEQWMzBAwx+h/oiEKuTC4+eiKzLdIRDPbbvTpsemWFsOKBOUwRGi6WKKqMzVQkkE8QcEfg== + +vue-router@^3.0.1: + version "3.0.2" + resolved "http://registry.npm.taobao.org/vue-router/download/vue-router-3.0.2.tgz#dedc67afe6c4e2bc25682c8b1c2a8c0d7c7e56be" + integrity sha1-3txnr+bE4rwlaCyLHCqMDXx+Vr4= + +vue-style-loader@^4.1.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-4.1.2.tgz#dedf349806f25ceb4e64f3ad7c0a44fba735fcf8" + integrity sha512-0ip8ge6Gzz/Bk0iHovU9XAUQaFt/G2B61bnWa2tCcqqdgfHs1lF9xXorFbE55Gmy92okFT+8bfmySuUOu13vxQ== + dependencies: + hash-sum "^1.0.2" + loader-utils "^1.0.2" + +vue-template-compiler@^2.5.17: + version "2.5.17" + resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.5.17.tgz#52a4a078c327deb937482a509ae85c06f346c3cb" + integrity sha512-63uI4syCwtGR5IJvZM0LN5tVsahrelomHtCxvRkZPJ/Tf3ADm1U1wG6KWycK3qCfqR+ygM5vewUvmJ0REAYksg== + dependencies: + de-indent "^1.0.2" + he "^1.1.0" + +vue-template-es2015-compiler@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.6.0.tgz#dc42697133302ce3017524356a6c61b7b69b4a18" + integrity sha512-x3LV3wdmmERhVCYy3quqA57NJW7F3i6faas++pJQWtknWT+n7k30F4TVdHvCLn48peTJFRvCpxs3UuFPqgeELg== + +vue@^2.5.17, vue@^2.5.3: + version "2.5.17" + resolved "https://registry.yarnpkg.com/vue/-/vue-2.5.17.tgz#0f8789ad718be68ca1872629832ed533589c6ada" + integrity sha512-mFbcWoDIJi0w0Za4emyLiW72Jae0yjANHbCVquMKijcavBGypqlF7zHRgMa5k4sesdv7hv2rB4JPdZfR+TPfhQ== + +vuex@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/vuex/-/vuex-3.0.1.tgz#e761352ebe0af537d4bb755a9b9dc4be3df7efd2" + integrity sha512-wLoqz0B7DSZtgbWL1ShIBBCjv22GV5U+vcBFox658g6V0s4wZV9P4YjCNyoHSyIBpj1f29JBoNQIqD82cR4O3w== + +warning@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c" + integrity sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w= + dependencies: + loose-envify "^1.0.0" + +watchpack@^1.5.0: + version "1.6.0" + resolved "http://registry.npm.taobao.org/watchpack/download/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" + integrity sha1-S8EsLr6KonenHx0/FNaFx7RGzQA= + dependencies: + chokidar "^2.0.2" + graceful-fs "^4.1.2" + neo-async "^2.5.0" + +wbuf@^1.1.0, wbuf@^1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= + dependencies: + defaults "^1.0.3" + +webpack-bundle-analyzer@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.0.3.tgz#dbc7fff8f52058b6714a20fddf309d0790e3e0a0" + integrity sha512-naLWiRfmtH4UJgtUktRTLw6FdoZJ2RvCR9ePbwM9aRMsS/KjFerkPZG9epEvXRAw5d5oPdrs9+3p+afNjxW8Xw== + dependencies: + acorn "^5.7.3" + bfj "^6.1.1" + chalk "^2.4.1" + commander "^2.18.0" + ejs "^2.6.1" + express "^4.16.3" + filesize "^3.6.1" + gzip-size "^5.0.0" + lodash "^4.17.10" + mkdirp "^0.5.1" + opener "^1.5.1" + ws "^6.0.0" + +webpack-chain@^4.11.0: + version "4.12.1" + resolved "https://registry.yarnpkg.com/webpack-chain/-/webpack-chain-4.12.1.tgz#6c8439bbb2ab550952d60e1ea9319141906c02a6" + integrity sha512-BCfKo2YkDe2ByqkEWe1Rw+zko4LsyS75LVr29C6xIrxAg9JHJ4pl8kaIZ396SUSNp6b4815dRZPSTAS8LlURRQ== + dependencies: + deepmerge "^1.5.2" + javascript-stringify "^1.6.0" + +webpack-dev-middleware@3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.4.0.tgz#1132fecc9026fd90f0ecedac5cbff75d1fb45890" + integrity sha512-Q9Iyc0X9dP9bAsYskAVJ/hmIZZQwf/3Sy4xCAZgL5cUkjZmUZLt4l5HpbST/Pdgjn3u6pE7u5OdGd1apgzRujA== + dependencies: + memory-fs "~0.4.1" + mime "^2.3.1" + range-parser "^1.0.3" + webpack-log "^2.0.0" + +webpack-dev-server@^3.1.10: + version "3.1.10" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.1.10.tgz#507411bee727ee8d2fdffdc621b66a64ab3dea2b" + integrity sha512-RqOAVjfqZJtQcB0LmrzJ5y4Jp78lv9CK0MZ1YJDTaTmedMZ9PU9FLMQNrMCfVu8hHzaVLVOJKBlGEHMN10z+ww== + dependencies: + ansi-html "0.0.7" + bonjour "^3.5.0" + chokidar "^2.0.0" + compression "^1.5.2" + connect-history-api-fallback "^1.3.0" + debug "^3.1.0" + del "^3.0.0" + express "^4.16.2" + html-entities "^1.2.0" + http-proxy-middleware "~0.18.0" + import-local "^2.0.0" + internal-ip "^3.0.1" + ip "^1.1.5" + killable "^1.0.0" + loglevel "^1.4.1" + opn "^5.1.0" + portfinder "^1.0.9" + schema-utils "^1.0.0" + selfsigned "^1.9.1" + serve-index "^1.7.2" + sockjs "0.3.19" + sockjs-client "1.3.0" + spdy "^3.4.1" + strip-ansi "^3.0.0" + supports-color "^5.1.0" + webpack-dev-middleware "3.4.0" + webpack-log "^2.0.0" + yargs "12.0.2" + +webpack-log@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" + integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== + dependencies: + ansi-colors "^3.0.0" + uuid "^3.3.2" + +webpack-merge@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.1.4.tgz#0fde38eabf2d5fd85251c24a5a8c48f8a3f4eb7b" + integrity sha512-TmSe1HZKeOPey3oy1Ov2iS3guIZjWvMT2BBJDzzT5jScHTjVC3mpjJofgueEzaEd6ibhxRDD6MIblDr8tzh8iQ== + dependencies: + lodash "^4.17.5" + +webpack-sources@^1.1.0, webpack-sources@^1.3.0: + version "1.3.0" + resolved "http://registry.npm.taobao.org/webpack-sources/download/webpack-sources-1.3.0.tgz#2a28dcb9f1f45fe960d8f1493252b5ee6530fa85" + integrity sha1-KijcufH0X+lg2PFJMlK17mUw+oU= + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack@^4.20.2, webpack@^4.26.1: + version "4.26.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.26.1.tgz#ff3a9283d363c07b3494dfa702d08f4f2ef6cb39" + integrity sha512-i2oOvEvuvLLSuSCkdVrknaxAhtUZ9g+nLSoHCWV0gDzqGX2DXaCrMmMUpbRsTSSLrUqAI56PoEiyMUZIZ1msug== + dependencies: + "@webassemblyjs/ast" "1.7.11" + "@webassemblyjs/helper-module-context" "1.7.11" + "@webassemblyjs/wasm-edit" "1.7.11" + "@webassemblyjs/wasm-parser" "1.7.11" + acorn "^5.6.2" + acorn-dynamic-import "^3.0.0" + ajv "^6.1.0" + ajv-keywords "^3.1.0" + chrome-trace-event "^1.0.0" + enhanced-resolve "^4.1.0" + eslint-scope "^4.0.0" + json-parse-better-errors "^1.0.2" + loader-runner "^2.3.0" + loader-utils "^1.1.0" + memory-fs "~0.4.1" + micromatch "^3.1.8" + mkdirp "~0.5.0" + neo-async "^2.5.0" + node-libs-browser "^2.0.0" + schema-utils "^0.4.4" + tapable "^1.1.0" + terser-webpack-plugin "^1.1.0" + watchpack "^1.5.0" + webpack-sources "^1.3.0" + +websocket-driver@>=0.5.1: + version "0.7.0" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb" + integrity sha1-DK+dLXVdk67gSdS90NP+LMoqJOs= + dependencies: + http-parser-js ">=0.4.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" + integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg== + +which-module@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/which-module/download/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" + integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8= + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@1, which@^1.2.9: + version "1.3.1" + resolved "http://registry.npm.taobao.org/which/download/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo= + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.3" + resolved "http://registry.npm.taobao.org/wide-align/download/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha1-rgdOa9wMFKQx6ATmJFScYzsABFc= + dependencies: + string-width "^1.0.2 || 2" + +window-size@0.1.0: + version "0.1.0" + resolved "http://registry.npm.taobao.org/window-size/download/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + integrity sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0= + +wolfy87-eventemitter@~5.1.0: + version "5.1.0" + resolved "http://registry.npm.taobao.org/wolfy87-eventemitter/download/wolfy87-eventemitter-5.1.0.tgz#35c1ac0dd1ac0c15e35d981508fc22084a13a011" + integrity sha1-NcGsDdGsDBXjXZgVCPwiCEoToBE= + +wordwrap@0.0.2: + version "0.0.2" + resolved "http://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + integrity sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8= + +wordwrap@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + +worker-farm@^1.5.2: + version "1.6.0" + resolved "http://registry.npm.taobao.org/worker-farm/download/worker-farm-1.6.0.tgz#aecc405976fab5a95526180846f0dba288f3a4a0" + integrity sha1-rsxAWXb6talVJhgIRvDboojzpKA= + dependencies: + errno "~0.1.7" + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "http://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrappy@1: + version "1.0.2" + resolved "http://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" + integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c= + dependencies: + mkdirp "^0.5.1" + +ws@^6.0.0: + version "6.1.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.1.2.tgz#3cc7462e98792f0ac679424148903ded3b9c3ad8" + integrity sha512-rfUqzvz0WxmSXtJpPMX2EeASXabOrSMk1ruMOV3JBTBjo4ac2lDjGGsbQSyxj8Odhw5fBib8ZKEjDNvgouNKYw== + dependencies: + async-limiter "~1.0.0" + +xregexp@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.0.0.tgz#e698189de49dd2a18cc5687b05e17c8e43943020" + integrity sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg== + +xtend@^4.0.0, xtend@~4.0.1: + version "4.0.1" + resolved "http://registry.npm.taobao.org/xtend/download/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68= + +y18n@^3.2.1: + version "3.2.1" + resolved "http://registry.npm.taobao.org/y18n/download/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= + +"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + +yallist@^2.1.2: + version "2.1.2" + resolved "http://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +yallist@^3.0.0, yallist@^3.0.2: + version "3.0.3" + resolved "http://registry.npm.taobao.org/yallist/download/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" + integrity sha1-tLBJ4xS+VF486AIjbWzSLNkcPek= + +yargs-parser@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" + integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ== + dependencies: + camelcase "^4.1.0" + +yargs-parser@^5.0.0: + version "5.0.0" + resolved "http://registry.npm.taobao.org/yargs-parser/download/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" + integrity sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo= + dependencies: + camelcase "^3.0.0" + +yargs@12.0.2: + version "12.0.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.2.tgz#fe58234369392af33ecbef53819171eff0f5aadc" + integrity sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ== + dependencies: + cliui "^4.0.0" + decamelize "^2.0.0" + find-up "^3.0.0" + get-caller-file "^1.0.1" + os-locale "^3.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1 || ^4.0.0" + yargs-parser "^10.1.0" + +yargs@^7.0.0: + version "7.1.0" + resolved "http://registry.npm.taobao.org/yargs/download/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" + integrity sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg= + dependencies: + camelcase "^3.0.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^1.4.0" + read-pkg-up "^1.0.1" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^1.0.2" + which-module "^1.0.0" + y18n "^3.2.1" + yargs-parser "^5.0.0" + +yargs@~3.10.0: + version "3.10.0" + resolved "http://registry.npm.taobao.org/yargs/download/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + integrity sha1-9+572FfdfB0tOMDnTvvWgdFDH9E= + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0" + +yorkie@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yorkie/-/yorkie-2.0.0.tgz#92411912d435214e12c51c2ae1093e54b6bb83d9" + integrity sha512-jcKpkthap6x63MB4TxwCyuIGkV0oYP/YRyuQU5UO0Yz/E/ZAu+653/uov+phdmO54n6BcvFRyyt0RRrWdN2mpw== + dependencies: + execa "^0.8.0" + is-ci "^1.0.10" + normalize-path "^1.0.0" + strip-indent "^2.0.0" diff --git "a/jeecg-boot/docs/- \351\241\271\347\233\256\350\257\264\346\230\216" "b/jeecg-boot/docs/- \351\241\271\347\233\256\350\257\264\346\230\216" new file mode 100644 index 00000000..13c1359a --- /dev/null +++ "b/jeecg-boot/docs/- \351\241\271\347\233\256\350\257\264\346\230\216" @@ -0,0 +1,9 @@ + +一、技术文档 + http://jeecg-boot.mydoc.io + +二、部署文档 + 修改redis、数据库配置文件 + 修改上传文件目录 + 修改登录页面提示账号密码 + 修改前端API的图片访问域名 \ No newline at end of file diff --git a/jeecg-boot/docs/db/sys-init-20190128.sql b/jeecg-boot/docs/db/sys-init-20190128.sql new file mode 100644 index 00000000..95f2ea3c --- /dev/null +++ b/jeecg-boot/docs/db/sys-init-20190128.sql @@ -0,0 +1,871 @@ +/* +Navicat MySQL Data Transfer + +Source Server : mysql +Source Server Version : 50037 +Source Host : 127.0.0.1:3306 +Source Database : jeecg-boot-new + +Target Server Type : MYSQL +Target Server Version : 50037 +File Encoding : 65001 + +Date: 2019-01-28 13:58:17 +*/ + +SET FOREIGN_KEY_CHECKS=0; + +-- ---------------------------- +-- Table structure for demo +-- ---------------------------- +DROP TABLE IF EXISTS `demo`; +CREATE TABLE `demo` ( + `id` varchar(32) NOT NULL COMMENT '主键ID', + `name` varchar(30) default NULL COMMENT '姓名', + `sex` varchar(2) default NULL, + `age` int(11) default NULL COMMENT '年龄', + `birthday` date default NULL COMMENT '生日', + `email` varchar(50) default NULL COMMENT '邮箱', + `content` varchar(1000) default NULL COMMENT '个人简介', + `key_word` varchar(255) default NULL, + `punch_time` datetime default NULL, + `salary_money` decimal(11,2) default NULL, + `bonus_money` double(11,0) default NULL, + `create_time` datetime default NULL, + `create_by` varchar(50) default NULL COMMENT '创建人', + `update_by` varchar(50) default NULL COMMENT '更新人', + `update_time` datetime default NULL COMMENT '更新日期', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Records of demo +-- ---------------------------- + +-- ---------------------------- +-- Table structure for demo2 +-- ---------------------------- +DROP TABLE IF EXISTS `demo2`; +CREATE TABLE `demo2` ( + `id` int(30) NOT NULL auto_increment COMMENT '主键自增ID', + `name` varchar(20) default NULL COMMENT '姓名', + `gender` varchar(10) default NULL COMMENT '性别 1为男 0为女', + `age` int(10) default NULL COMMENT '年龄', + `address` varchar(200) default NULL COMMENT '住址', + `job` varchar(40) default NULL COMMENT '职业', + `isEmployed` varchar(10) default NULL COMMENT '1为在职,0为待业', + `create_time` date default NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Records of demo2 +-- ---------------------------- +INSERT INTO `demo2` VALUES ('2', 'Jack', '1', '25', '河北', '工程师', '0', null); +INSERT INTO `demo2` VALUES ('3', 'Tom', '1', '26', '广东', '大师', '1', null); +INSERT INTO `demo2` VALUES ('4', 'Sandy', '0', '27', '四川', '理发师', '0', null); +INSERT INTO `demo2` VALUES ('5', 'Billie', '1', '23', '杭州', '教师', '1', null); + +-- ---------------------------- +-- Table structure for qrtz_blob_triggers +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_blob_triggers`; +CREATE TABLE `qrtz_blob_triggers` ( + `SCHED_NAME` varchar(120) NOT NULL, + `TRIGGER_NAME` varchar(200) NOT NULL, + `TRIGGER_GROUP` varchar(200) NOT NULL, + `BLOB_DATA` blob, + PRIMARY KEY (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`), + CONSTRAINT `qrtz_blob_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Records of qrtz_blob_triggers +-- ---------------------------- + +-- ---------------------------- +-- Table structure for qrtz_calendars +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_calendars`; +CREATE TABLE `qrtz_calendars` ( + `SCHED_NAME` varchar(120) NOT NULL, + `CALENDAR_NAME` varchar(200) NOT NULL, + `CALENDAR` blob NOT NULL, + PRIMARY KEY (`SCHED_NAME`,`CALENDAR_NAME`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Records of qrtz_calendars +-- ---------------------------- + +-- ---------------------------- +-- Table structure for qrtz_cron_triggers +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_cron_triggers`; +CREATE TABLE `qrtz_cron_triggers` ( + `SCHED_NAME` varchar(120) NOT NULL, + `TRIGGER_NAME` varchar(200) NOT NULL, + `TRIGGER_GROUP` varchar(200) NOT NULL, + `CRON_EXPRESSION` varchar(200) NOT NULL, + `TIME_ZONE_ID` varchar(80) default NULL, + PRIMARY KEY (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`), + CONSTRAINT `qrtz_cron_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Records of qrtz_cron_triggers +-- ---------------------------- +INSERT INTO `qrtz_cron_triggers` VALUES ('quartzScheduler', 'org.jeecg.modules.quartz.job.SampleJob', 'DEFAULT', '0/1 * * * * ?', 'Asia/Shanghai'); +INSERT INTO `qrtz_cron_triggers` VALUES ('quartzScheduler', 'org.jeecg.modules.quartz.job.SampleParamJob', 'DEFAULT', '0/1 * * * * ?', 'Asia/Shanghai'); + +-- ---------------------------- +-- Table structure for qrtz_fired_triggers +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_fired_triggers`; +CREATE TABLE `qrtz_fired_triggers` ( + `SCHED_NAME` varchar(120) NOT NULL, + `ENTRY_ID` varchar(95) NOT NULL, + `TRIGGER_NAME` varchar(200) NOT NULL, + `TRIGGER_GROUP` varchar(200) NOT NULL, + `INSTANCE_NAME` varchar(200) NOT NULL, + `FIRED_TIME` bigint(13) NOT NULL, + `SCHED_TIME` bigint(13) NOT NULL, + `PRIORITY` int(11) NOT NULL, + `STATE` varchar(16) NOT NULL, + `JOB_NAME` varchar(200) default NULL, + `JOB_GROUP` varchar(200) default NULL, + `IS_NONCONCURRENT` varchar(1) default NULL, + `REQUESTS_RECOVERY` varchar(1) default NULL, + PRIMARY KEY (`SCHED_NAME`,`ENTRY_ID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Records of qrtz_fired_triggers +-- ---------------------------- + +-- ---------------------------- +-- Table structure for qrtz_job_details +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_job_details`; +CREATE TABLE `qrtz_job_details` ( + `SCHED_NAME` varchar(120) NOT NULL, + `JOB_NAME` varchar(200) NOT NULL, + `JOB_GROUP` varchar(200) NOT NULL, + `DESCRIPTION` varchar(250) default NULL, + `JOB_CLASS_NAME` varchar(250) NOT NULL, + `IS_DURABLE` varchar(1) NOT NULL, + `IS_NONCONCURRENT` varchar(1) NOT NULL, + `IS_UPDATE_DATA` varchar(1) NOT NULL, + `REQUESTS_RECOVERY` varchar(1) NOT NULL, + `JOB_DATA` blob, + PRIMARY KEY (`SCHED_NAME`,`JOB_NAME`,`JOB_GROUP`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Records of qrtz_job_details +-- ---------------------------- +INSERT INTO `qrtz_job_details` VALUES ('quartzScheduler', 'org.jeecg.modules.quartz.job.SampleJob', 'DEFAULT', null, 'org.jeecg.modules.quartz.job.SampleJob', '0', '0', '0', '0', 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787001737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F4000000000000C77080000001000000001740009706172616D65746572707800); +INSERT INTO `qrtz_job_details` VALUES ('quartzScheduler', 'org.jeecg.modules.quartz.job.SampleParamJob', 'DEFAULT', null, 'org.jeecg.modules.quartz.job.SampleParamJob', '0', '0', '0', '0', 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787001737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F4000000000000C77080000001000000001740009706172616D6574657274000573636F74747800); + +-- ---------------------------- +-- Table structure for qrtz_locks +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_locks`; +CREATE TABLE `qrtz_locks` ( + `SCHED_NAME` varchar(120) NOT NULL, + `LOCK_NAME` varchar(40) NOT NULL, + PRIMARY KEY (`SCHED_NAME`,`LOCK_NAME`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Records of qrtz_locks +-- ---------------------------- +INSERT INTO `qrtz_locks` VALUES ('quartzScheduler', 'TRIGGER_ACCESS'); + +-- ---------------------------- +-- Table structure for qrtz_paused_trigger_grps +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_paused_trigger_grps`; +CREATE TABLE `qrtz_paused_trigger_grps` ( + `SCHED_NAME` varchar(120) NOT NULL, + `TRIGGER_GROUP` varchar(200) NOT NULL, + PRIMARY KEY (`SCHED_NAME`,`TRIGGER_GROUP`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Records of qrtz_paused_trigger_grps +-- ---------------------------- + +-- ---------------------------- +-- Table structure for qrtz_scheduler_state +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_scheduler_state`; +CREATE TABLE `qrtz_scheduler_state` ( + `SCHED_NAME` varchar(120) NOT NULL, + `INSTANCE_NAME` varchar(200) NOT NULL, + `LAST_CHECKIN_TIME` bigint(13) NOT NULL, + `CHECKIN_INTERVAL` bigint(13) NOT NULL, + PRIMARY KEY (`SCHED_NAME`,`INSTANCE_NAME`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Records of qrtz_scheduler_state +-- ---------------------------- + +-- ---------------------------- +-- Table structure for qrtz_simple_triggers +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_simple_triggers`; +CREATE TABLE `qrtz_simple_triggers` ( + `SCHED_NAME` varchar(120) NOT NULL, + `TRIGGER_NAME` varchar(200) NOT NULL, + `TRIGGER_GROUP` varchar(200) NOT NULL, + `REPEAT_COUNT` bigint(7) NOT NULL, + `REPEAT_INTERVAL` bigint(12) NOT NULL, + `TIMES_TRIGGERED` bigint(10) NOT NULL, + PRIMARY KEY (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`), + CONSTRAINT `qrtz_simple_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Records of qrtz_simple_triggers +-- ---------------------------- + +-- ---------------------------- +-- Table structure for qrtz_simprop_triggers +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_simprop_triggers`; +CREATE TABLE `qrtz_simprop_triggers` ( + `SCHED_NAME` varchar(120) NOT NULL, + `TRIGGER_NAME` varchar(200) NOT NULL, + `TRIGGER_GROUP` varchar(200) NOT NULL, + `STR_PROP_1` varchar(512) default NULL, + `STR_PROP_2` varchar(512) default NULL, + `STR_PROP_3` varchar(512) default NULL, + `INT_PROP_1` int(11) default NULL, + `INT_PROP_2` int(11) default NULL, + `LONG_PROP_1` bigint(20) default NULL, + `LONG_PROP_2` bigint(20) default NULL, + `DEC_PROP_1` decimal(13,4) default NULL, + `DEC_PROP_2` decimal(13,4) default NULL, + `BOOL_PROP_1` varchar(1) default NULL, + `BOOL_PROP_2` varchar(1) default NULL, + PRIMARY KEY (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`), + CONSTRAINT `qrtz_simprop_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Records of qrtz_simprop_triggers +-- ---------------------------- + +-- ---------------------------- +-- Table structure for qrtz_triggers +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_triggers`; +CREATE TABLE `qrtz_triggers` ( + `SCHED_NAME` varchar(120) NOT NULL, + `TRIGGER_NAME` varchar(200) NOT NULL, + `TRIGGER_GROUP` varchar(200) NOT NULL, + `JOB_NAME` varchar(200) NOT NULL, + `JOB_GROUP` varchar(200) NOT NULL, + `DESCRIPTION` varchar(250) default NULL, + `NEXT_FIRE_TIME` bigint(13) default NULL, + `PREV_FIRE_TIME` bigint(13) default NULL, + `PRIORITY` int(11) default NULL, + `TRIGGER_STATE` varchar(16) NOT NULL, + `TRIGGER_TYPE` varchar(8) NOT NULL, + `START_TIME` bigint(13) NOT NULL, + `END_TIME` bigint(13) default NULL, + `CALENDAR_NAME` varchar(200) default NULL, + `MISFIRE_INSTR` smallint(2) default NULL, + `JOB_DATA` blob, + PRIMARY KEY (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`), + KEY `SCHED_NAME` (`SCHED_NAME`,`JOB_NAME`,`JOB_GROUP`), + CONSTRAINT `qrtz_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) REFERENCES `qrtz_job_details` (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Records of qrtz_triggers +-- ---------------------------- +INSERT INTO `qrtz_triggers` VALUES ('quartzScheduler', 'org.jeecg.modules.quartz.job.SampleJob', 'DEFAULT', 'org.jeecg.modules.quartz.job.SampleJob', 'DEFAULT', null, '1548655079000', '1548655078000', '5', 'PAUSED', 'CRON', '1548655070000', '0', null, '0', ''); +INSERT INTO `qrtz_triggers` VALUES ('quartzScheduler', 'org.jeecg.modules.quartz.job.SampleParamJob', 'DEFAULT', 'org.jeecg.modules.quartz.job.SampleParamJob', 'DEFAULT', null, '1548655081000', '1548655080000', '5', 'PAUSED', 'CRON', '1548655047000', '0', null, '0', ''); + +-- ---------------------------- +-- Table structure for sys_announcement +-- ---------------------------- +DROP TABLE IF EXISTS `sys_announcement`; +CREATE TABLE `sys_announcement` ( + `id` varchar(32) NOT NULL, + `titile` varchar(100) default NULL COMMENT '标题', + `msg_content` text COMMENT '内容', + `start_time` datetime default NULL COMMENT '开始时间', + `end_time` datetime default NULL COMMENT '结束时间', + `sender` varchar(100) default NULL COMMENT '发布人', + `priority` varchar(255) default NULL COMMENT '优先级(L低,M中,H高)', + `msg_type` varchar(10) default NULL COMMENT '通告对象类型(USER:指定用户,ALL:全体用户)', + `send_status` varchar(10) default NULL COMMENT '发布状态(0未发布,1已发布,2已撤销)', + `send_time` datetime default NULL COMMENT '发布时间', + `cancel_time` datetime default NULL COMMENT '撤销时间', + `del_flag` varchar(255) default NULL COMMENT '删除状态(0,正常,1已删除)', + `create_by` varchar(255) default NULL COMMENT '创建人', + `create_time` datetime default NULL COMMENT '创建时间', + `update_by` varchar(255) default NULL COMMENT '更新人', + `update_time` datetime default NULL COMMENT '更新时间', + `user_ids` text COMMENT '指定用户', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='系统通告表'; + +-- ---------------------------- +-- Records of sys_announcement +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sys_announcement_send +-- ---------------------------- +DROP TABLE IF EXISTS `sys_announcement_send`; +CREATE TABLE `sys_announcement_send` ( + `id` varchar(32) default NULL, + `annt_id` varchar(32) default NULL COMMENT '通过id', + `user_id` varchar(32) default NULL COMMENT '用户id', + `read_flag` varchar(10) default NULL COMMENT '阅读状态(0未读,1已读)', + `read_time` datetime default NULL COMMENT '阅读时间', + `create_by` varchar(255) default NULL COMMENT '创建人', + `create_time` datetime default NULL COMMENT '创建时间', + `update_by` varchar(255) default NULL COMMENT '更新人', + `update_time` datetime default NULL COMMENT '更新时间' +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户通告阅读标记表'; + +-- ---------------------------- +-- Records of sys_announcement_send +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sys_depart +-- ---------------------------- +DROP TABLE IF EXISTS `sys_depart`; +CREATE TABLE `sys_depart` ( + `id` varchar(32) NOT NULL COMMENT 'ID', + `parent_id` varchar(32) default NULL COMMENT '父机构ID', + `depart_name` varchar(100) NOT NULL COMMENT '机构/部门名称', + `depart_name_en` varchar(500) default NULL COMMENT '英文名', + `depart_name_abbr` varchar(500) default NULL COMMENT '缩写', + `depart_order` int(11) default '0' COMMENT '排序', + `description` text COMMENT '描述', + `org_type` varchar(10) default NULL COMMENT '机构类型', + `org_code` varchar(64) NOT NULL COMMENT '机构编码', + `mobile` varchar(32) default NULL COMMENT '手机号', + `fax` varchar(32) default NULL COMMENT '传真', + `address` varchar(100) default NULL COMMENT '地址', + `memo` varchar(500) default NULL COMMENT '备注', + `status` varchar(10) default NULL COMMENT '状态(1启用,0不启用)', + `del_flag` varchar(10) default NULL COMMENT '删除状态(0,正常,1已删除)', + `create_by` varchar(50) default NULL COMMENT '创建人', + `create_time` datetime default NULL COMMENT '创建日期', + `update_by` varchar(50) default NULL COMMENT '更新人', + `update_time` datetime default NULL COMMENT '更新日期', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='组织机构表'; + +-- ---------------------------- +-- Records of sys_depart +-- ---------------------------- +INSERT INTO `sys_depart` VALUES ('4028608164d15ec60164d4cce4f4003e', '402880e447e99cf10147e9a03b320003', '11', null, null, null, '11', '2', 'A01A04', '', '', '', null, null, null, 'admin', '2018-07-26 12:15:55', null, null); +INSERT INTO `sys_depart` VALUES ('4028608164d15ec60164d4cd0cf10040', '402880e447e99cf10147e9a03b320003', '22', null, null, null, '22', '2', 'A01A05', '', '', '', null, null, null, 'admin', '2018-07-26 12:16:05', null, null); +INSERT INTO `sys_depart` VALUES ('4028608164d15ec60164d4cd99c20042', '402880e447e99cf10147e9a03b320003', '433', null, null, null, '', '2', 'A01A06', '', '', '', null, null, null, 'admin', '2018-07-26 12:16:41', null, null); +INSERT INTO `sys_depart` VALUES ('4028608164d15ec60164d4cded7f0044', '402880e447e99cf10147e9a03b320003', '33', null, null, null, '33', '2', 'A01A07', '33', '', '', null, null, null, 'admin', '2018-07-26 12:17:02', null, null); +INSERT INTO `sys_depart` VALUES ('4028608164d15ec60164d4ce46ca0046', '402880e447e99cf10147e9a03b320003', '55', null, null, null, '55', '2', 'A01A08', '', '', '', null, null, null, 'admin', '2018-07-26 12:17:25', null, null); +INSERT INTO `sys_depart` VALUES ('40286081650e0f9801650e92a4a0013f', '402880e447e99cf10147e9a03b320003', '11', null, null, null, '11', '2', 'A01A09', '11', '11', '11', null, null, null, 'admin', '2018-08-06 17:30:16', null, null); +INSERT INTO `sys_depart` VALUES ('40286081650e0f9801650e92d3f00141', '4028608164d15ec60164d4cce4f4003e', '11', null, null, null, '11', '2', 'A01A04A01', '11', '11', '', null, null, null, 'admin', '2018-08-06 17:30:28', null, null); +INSERT INTO `sys_depart` VALUES ('40286081651283c2016513046721007d', '402880e447e9a9570147e9b677320003', '技术经理', null, null, null, '技术经理', '3', 'A01A01A01', '', '', '', null, null, null, 'admin', '2018-08-07 14:13:00', null, null); +INSERT INTO `sys_depart` VALUES ('40286081651283c201651305b2fa007f', '40286081651283c2016513046721007d', 'T3_Java工程师', null, null, null, '高级工程师', '3', 'A01A01A01A01', '', '', '', null, null, null, 'admin', '2018-08-07 14:14:25', null, null); +INSERT INTO `sys_depart` VALUES ('402860816518408f0165184abe450001', '402880e447e99cf10147e9a03b320003', '1111', null, null, null, '', '2', 'A01A10', '', '', '', null, null, null, 'admin', '2018-08-08 14:47:56', null, null); +INSERT INTO `sys_depart` VALUES ('402860816518408f0165184f714b0003', '4028608164d15ec60164d4cce4f4003e', '44', null, null, null, '44', '2', 'A01A04A02', '', '', '', null, null, null, 'admin', '2018-08-08 14:53:04', null, null); +INSERT INTO `sys_depart` VALUES ('402860816518408f01651850ab660005', '4028608164d15ec60164d4cce4f4003e', '55', null, null, null, '55', '2', 'A01A04A03', '', '', '', null, null, null, 'admin', '2018-08-08 14:54:24', null, null); +INSERT INTO `sys_depart` VALUES ('402860816518408f01651853166f0007', '4028608164d15ec60164d4cce4f4003e', '66', null, null, null, '', '2', 'A01A04A04', '', '', '', null, null, null, 'admin', '2018-08-08 14:57:03', null, null); +INSERT INTO `sys_depart` VALUES ('402860816518408f016518546bfc0009', '4028608164d15ec60164d4cce4f4003e', '77', null, null, null, '', '2', 'A01A04A05', '', '', '', null, null, null, 'admin', '2018-08-08 14:58:30', null, null); +INSERT INTO `sys_depart` VALUES ('402860816518408f01651854f5ae000b', null, '12', null, null, null, '', '1', 'A04', '', '', '', null, null, null, null, null, 'admin', '2018-08-08 16:42:35'); +INSERT INTO `sys_depart` VALUES ('402860816518408f0165185aa3430010', '402860816518408f01651854f5ae000b', '112', null, null, null, '', '2', 'A04A01', '', '', '', null, null, null, null, null, 'admin', '2018-08-08 15:06:18'); +INSERT INTO `sys_depart` VALUES ('402860816518408f0165185bd01c0014', '402860816518408f0165185aa3430010', '11', null, null, null, '', '3', 'A04A01A01', '', '', '', null, null, null, null, null, 'admin', '2018-08-08 15:07:05'); +INSERT INTO `sys_depart` VALUES ('402860816518408f016518b0a27b001a', '402880e447e99cf10147e9a03b320003', '33', null, null, null, '33', '2', 'A01A11', '', '', '', null, null, null, 'admin', '2018-08-08 16:39:13', null, null); +INSERT INTO `sys_depart` VALUES ('402860816518408f016518b3e2b5001d', '402880e447e99cf10147e9a03b320003', '11', null, null, null, '', '3', 'A01A12', '', '', '', null, null, null, 'admin', '2018-08-08 16:42:46', null, null); +INSERT INTO `sys_depart` VALUES ('4028608165417d1201654186d7200001', '402860816518408f0165185bd01c0014', 'dfdf', null, null, null, '', '3', 'A04A01A01A01', '', '', '', null, null, null, null, null, 'admin', '2018-08-16 14:58:08'); +INSERT INTO `sys_depart` VALUES ('402880e447e99cf10147e9a03b320003', null, '北京国炬软件', null, null, null, '', '1', 'A01', '', '', '', null, null, null, null, null, 'admin', '2018-07-26 12:15:32'); +INSERT INTO `sys_depart` VALUES ('402880e447e9a9570147e9b677320003', '402880e447e99cf10147e9a03b320003', '软件信息部', null, null, null, '', '2', 'A01A01', '', '', '', null, null, null, null, null, 'admin', '2018-07-26 12:15:28'); +INSERT INTO `sys_depart` VALUES ('402880e447e9a9570147e9b6a3be0005', '402880e447e99cf10147e9a03b320003', '销售部门', null, null, '0', '', '2', 'A01A02', null, null, null, null, null, null, null, null, null, null); +INSERT INTO `sys_depart` VALUES ('402880e447e9a9570147e9b710d20007', '402880e447e99cf10147e9a03b320003', '人力资源部', null, null, null, '', '2', 'A01A03', '', '', '', null, null, null, null, null, 'admin', '2018-02-22 17:17:30'); +INSERT INTO `sys_depart` VALUES ('402880e447e9a9570147e9b762e30009', '402880e447e9a9570147e9b6a3be0005', '销售经理', null, null, null, '', '2', 'A01A02A01', '', '', '', null, null, null, null, null, 'admin', '2018-06-11 17:17:28'); +INSERT INTO `sys_depart` VALUES ('402880e447e9ba550147e9c53b2e0013', '8a8ab0b246dc81120146dc8180ba0017', '财务', null, null, '0', '', '2', 'A03A02', null, null, null, null, null, null, null, null, null, null); +INSERT INTO `sys_depart` VALUES ('402880e6487e661a01487e6b504e0001', '402880e447e9a9570147e9b762e30009', '销售人员', null, null, null, '销售人员', '2', 'A01A02A01A01', '', '', '', null, null, null, null, null, null, null); +INSERT INTO `sys_depart` VALUES ('402880f15986303c0159864816180002', '8a8ab0b246dc81120146dc8180a20016', '部门经理', null, null, null, '', '2', 'A02A01', '', '', '', null, null, null, null, null, null, null); +INSERT INTO `sys_depart` VALUES ('8a8ab0b246dc81120146dc8180a20016', null, '中国人寿总公司', null, null, null, '1111', '1', 'A02', '', '', '', null, null, null, null, null, null, null); +INSERT INTO `sys_depart` VALUES ('8a8ab0b246dc81120146dc8180ba0017', null, 'JEECG开源社区', null, null, '2', '', '1', 'A03', '', '', '', null, null, null, null, null, null, null); +INSERT INTO `sys_depart` VALUES ('8a8ab0b246dc81120146dc8180bd0018', '8a8ab0b246dc81120146dc8180ba0017', '软件开发部', null, null, '0', '研发技术难题', '2', 'A03A01', null, null, null, null, null, null, null, null, null, null); + +-- ---------------------------- +-- Table structure for sys_dict +-- ---------------------------- +DROP TABLE IF EXISTS `sys_dict`; +CREATE TABLE `sys_dict` ( + `id` varchar(32) NOT NULL, + `dict_name` varchar(255) default NULL COMMENT '字典名称', + `dict_code` varchar(255) default NULL COMMENT '字典编码', + `description` varchar(255) default NULL COMMENT '描述', + `del_flag` int(11) default NULL COMMENT '删除状态', + `create_by` varchar(255) default NULL COMMENT '创建人', + `create_time` datetime default NULL COMMENT '创建时间', + `update_by` varchar(255) default NULL COMMENT '更新人', + `update_time` datetime default NULL COMMENT '更新时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='字典表'; + +-- ---------------------------- +-- Records of sys_dict +-- ---------------------------- +INSERT INTO `sys_dict` VALUES ('d3ba35be350dab9c740eb07ade088a38', '性别', 'sex', '性别', '1', null, '2019-01-08 17:38:37', null, '2019-01-11 10:50:04'); + +-- ---------------------------- +-- Table structure for sys_dict_item +-- ---------------------------- +DROP TABLE IF EXISTS `sys_dict_item`; +CREATE TABLE `sys_dict_item` ( + `id` varchar(255) NOT NULL, + `dict_id` varchar(255) default NULL COMMENT '字典id', + `item_text` varchar(255) default NULL COMMENT '字典项文本', + `item_value` varchar(255) default NULL COMMENT '字典项值', + `description` varchar(255) default NULL COMMENT '描述', + `sort_order` decimal(10,2) default NULL COMMENT '排序', + `status` int(11) default NULL COMMENT '状态(1启用 0不启用)', + `create_by` varchar(255) default NULL, + `create_time` datetime default NULL, + `update_by` varchar(255) default NULL, + `update_time` datetime default NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Records of sys_dict_item +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sys_log +-- ---------------------------- +DROP TABLE IF EXISTS `sys_log`; +CREATE TABLE `sys_log` ( + `id` varchar(255) NOT NULL, + `log_type` int(11) default NULL COMMENT '日志类型(1登录日志,2操作日志)', + `log_content` varchar(1000) default NULL COMMENT '日志内容', + `operate_type` int(11) default NULL COMMENT '操作类型', + `userid` varchar(255) default NULL COMMENT '操作用户账号', + `username` varchar(255) default NULL COMMENT '操作用户名称', + `ip` varchar(255) default NULL COMMENT 'IP', + `method` varchar(500) default NULL COMMENT '请求java方法', + `request_url` varchar(255) default NULL COMMENT '请求路径', + `request_param` varchar(255) default NULL COMMENT '请求参数', + `request_type` varchar(255) default NULL COMMENT '请求类型', + `cost_time` bigint(20) default NULL COMMENT '耗时', + `create_by` varchar(255) default NULL COMMENT '创建人', + `create_time` datetime default NULL COMMENT '创建时间', + `update_by` varchar(255) default NULL COMMENT '更新人', + `update_time` datetime default NULL COMMENT '更新时间', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='系统日志表'; + +-- ---------------------------- +-- Records of sys_log +-- ---------------------------- +INSERT INTO `sys_log` VALUES ('e88dde0f78fd219b78fa62dc1e43468f', '1', '用户名: admin,登录成功!', null, null, null, '127.0.0.1', null, null, null, null, null, 'jeecg-boot', '2019-01-28 13:32:04', null, null); +INSERT INTO `sys_log` VALUES ('22eebf6a25b3c8db0c7753f58cb9d821', '1', '用户名: admin,登录成功!', null, null, null, '127.0.0.1', null, null, null, null, null, 'jeecg-boot', '2019-01-28 13:37:09', null, null); +INSERT INTO `sys_log` VALUES ('2dbd854c93f81302d4c53f840d8a2035', '1', '用户名: admin,登录成功!', null, null, null, '127.0.0.1', null, null, null, null, null, 'jeecg-boot', '2019-01-28 13:37:18', null, null); +INSERT INTO `sys_log` VALUES ('8b087628098550785bb7bfdb8ec91351', '1', '用户名: admin,登录成功!', null, null, null, '127.0.0.1', null, null, null, null, null, 'jeecg-boot', '2019-01-28 13:39:19', null, null); +INSERT INTO `sys_log` VALUES ('4e5e7485a5357ef6316d74da40ae304d', '1', '用户名: admin,登录成功!', null, null, null, '127.0.0.1', null, null, null, null, null, 'jeecg-boot', '2019-01-28 13:44:05', null, null); + +-- ---------------------------- +-- Table structure for sys_permission +-- ---------------------------- +DROP TABLE IF EXISTS `sys_permission`; +CREATE TABLE `sys_permission` ( + `id` varchar(32) NOT NULL COMMENT '主键id', + `parent_id` varchar(32) default NULL COMMENT '父id', + `name` varchar(255) default NULL COMMENT '菜单标题', + `url` varchar(255) default NULL COMMENT '路径', + `component` varchar(255) default NULL COMMENT '组件', + `redirect` varchar(255) default NULL COMMENT '一级菜单跳转地址', + `menu_type` int(11) default NULL COMMENT '菜单类型(1:菜单 2:按钮)', + `perms` varchar(255) default NULL COMMENT '菜单权限编码', + `sort_no` double(3,2) default NULL COMMENT '菜单排序', + `always_show` int(3) default NULL COMMENT '聚合子路由: 1是0否', + `icon` varchar(255) default NULL COMMENT '菜单图标', + `is_leaf` int(2) default NULL COMMENT '是否叶子节点: 1:是 0:不是', + `hidden` int(2) default '0' COMMENT '是否隐藏路由: 0否,1是(默认值0)', + `description` varchar(255) default NULL COMMENT '描述', + `del_flag` int(11) default NULL COMMENT '删除状态 0正常 1已删除', + `create_by` varchar(255) default NULL COMMENT '创建人', + `create_time` datetime default NULL COMMENT '创建时间', + `update_by` varchar(255) default NULL COMMENT '更新人', + `update_time` datetime default NULL COMMENT '更新时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='菜单权限表'; + +-- ---------------------------- +-- Records of sys_permission +-- ---------------------------- +INSERT INTO `sys_permission` VALUES ('00a2a0ae65cdca5e93209cdbde97cbe6', '2e42e3835c2b44ec9f7bc26c146ee531', '成功', '/result/success', 'result/Success', null, '1', null, '1.00', null, null, '1', '0', null, '0', null, '2018-12-25 20:34:38', null, null); +INSERT INTO `sys_permission` VALUES ('05b3c82ddb2536a4a5ee1a4c46b5abef', '540a2936940846cb98114ffb0d145cb8', '用户列表', '/list/user-list', 'list/UserList', null, '1', null, '3.00', null, null, '1', '0', null, '0', null, '2018-12-25 20:34:38', null, null); +INSERT INTO `sys_permission` VALUES ('07acdd347152814619169844847d20d6', '2a470fc0c3954d9dbb61de6d80846549', '列表例子', '/jeecg/JeecgDemoList', 'jeecg/JeecgDemoList', null, '1', null, '1.00', '0', null, '1', '0', null, '0', null, '2018-12-25 20:34:38', null, '2019-01-22 11:00:54'); +INSERT INTO `sys_permission` VALUES ('08e6b9dc3c04489c8e1ff2ce6f105aa4', null, '仪表盘', '/dashboard2', 'layouts/RouteView', null, '1', null, '9.99', '0', 'dashboard', '0', '0', null, '0', null, '2018-12-25 20:34:38', 'admin', '2019-01-21 19:59:04'); +INSERT INTO `sys_permission` VALUES ('11e73a1d9f2678d617e44317828ed926', 'd7d6e2e4e2934f2c9385a623fd98c6f3', '消息管理', 'system/msg', 'system/SysAnnouncementList', null, '1', null, null, '0', null, '1', '0', null, '0', 'admin', '2019-01-21 20:33:28', 'admin', '2019-01-21 20:33:42'); +INSERT INTO `sys_permission` VALUES ('13212d3416eb690c2e1d5033166ff47a', '2e42e3835c2b44ec9f7bc26c146ee531', '失败', '/result/fail', 'result/Error', null, '1', null, '2.00', null, null, '1', '0', null, '0', null, '2018-12-25 20:34:38', null, null); +INSERT INTO `sys_permission` VALUES ('1367a93f2c410b169faa7abcbad2f77c', '6e73eb3c26099c191bf03852ee1310a1', '基本设置', '/account/settings/base', 'account/settings/BaseSetting', null, '1', 'BaseSettings', null, '0', null, '1', '1', null, '0', null, '2018-12-26 18:58:35', null, null); +INSERT INTO `sys_permission` VALUES ('277bfabef7d76e89b33062b16a9a5020', 'e3c13679c73a4f829bcff2aba8fd68b1', '基础表单', '/form/base-form', 'form/BasicForm', null, '1', null, '1.00', null, null, '1', '0', null, '0', null, '2018-12-25 20:34:38', null, null); +INSERT INTO `sys_permission` VALUES ('2a470fc0c3954d9dbb61de6d80846549', null, 'JEECG案例', '/jeecg', 'layouts/RouteView', null, '1', null, '9.99', '0', 'dashboard', '0', '0', null, '0', null, '2018-12-25 20:34:38', 'admin', '2019-01-21 19:59:31'); +INSERT INTO `sys_permission` VALUES ('2e42e3835c2b44ec9f7bc26c146ee531', null, '结果页', '/result', 'layouts/PageView', null, '1', null, '9.99', '0', 'check-circle-o', '0', '0', null, '0', null, '2018-12-25 20:34:38', 'admin', '2019-01-21 19:59:39'); +INSERT INTO `sys_permission` VALUES ('339329ed54cf255e1f9392e84f136901', '2a470fc0c3954d9dbb61de6d80846549', 'helloworld', '/jeecg/helloworld', 'jeecg/helloworld', null, '1', null, '2.00', null, null, '1', '0', null, '0', null, '2018-12-25 20:34:38', null, null); +INSERT INTO `sys_permission` VALUES ('34a10d0973052776d7a378605c904417', '9c2bede8b0f8ac9b981c54269c0d9bde', '第三方流程测试', '/sps/ThirdFlowTest', 'sps/test/ThirdFlowTest', null, '1', null, null, '0', null, '1', '0', null, '1', null, '2019-01-11 18:30:06', null, '2019-01-11 18:32:44'); +INSERT INTO `sys_permission` VALUES ('3f915b2769fc80648e92d04e84ca059d', 'd7d6e2e4e2934f2c9385a623fd98c6f3', '用户管理', '/isystem/user', 'system/UserList', null, '1', null, '1.00', null, null, '1', '0', null, '0', null, '2018-12-25 20:34:38', null, null); +INSERT INTO `sys_permission` VALUES ('418964ba087b90a84897b62474496b93', '540a2936940846cb98114ffb0d145cb8', '查询表格', '/list/query-list', 'list/TableList', null, '1', null, '1.00', null, null, '1', '0', null, '0', null, '2018-12-25 20:34:38', null, null); +INSERT INTO `sys_permission` VALUES ('4875ebe289344e14844d8e3ea1edd73f', null, '详情页', '/profile', 'layouts/RouteView', null, '1', null, '9.99', '0', 'profile', '0', '0', null, '0', null, '2018-12-25 20:34:38', 'admin', '2019-01-21 19:59:15'); +INSERT INTO `sys_permission` VALUES ('4f66409ef3bbd69c1d80469d6e2a885e', '6e73eb3c26099c191bf03852ee1310a1', '账户绑定', '/account/settings/binding', 'account/settings/Binding', null, '1', 'BindingSettings', null, '0', null, '1', '1', null, '0', null, '2018-12-26 19:01:20', null, null); +INSERT INTO `sys_permission` VALUES ('4f84f9400e5e92c95f05b554724c2b58', '540a2936940846cb98114ffb0d145cb8', '角色列表', '/list/role-list', 'list/RoleList', null, '1', null, '4.00', null, null, '1', '0', null, '0', null, '2018-12-25 20:34:38', null, null); +INSERT INTO `sys_permission` VALUES ('540a2936940846cb98114ffb0d145cb8', null, '列表页', '/list', 'layouts/PageView', null, '1', null, '9.99', '0', 'table', '0', '0', null, '0', null, '2018-12-25 20:34:38', 'admin', '2019-01-21 19:59:46'); +INSERT INTO `sys_permission` VALUES ('54dd5457a3190740005c1bfec55b1c34', 'd7d6e2e4e2934f2c9385a623fd98c6f3', '菜单管理', '/isystem/permission', 'system/PermissionList', null, '1', null, '3.00', null, null, '1', '0', null, '0', null, '2018-12-25 20:34:38', null, null); +INSERT INTO `sys_permission` VALUES ('58857ff846e61794c69208e9d3a85466', 'd7d6e2e4e2934f2c9385a623fd98c6f3', '日志管理', '/isystem/log', 'system/LogList', null, '1', null, '4.00', null, null, '1', '0', null, '0', null, '2018-12-26 10:11:18', null, '2018-12-26 15:28:06'); +INSERT INTO `sys_permission` VALUES ('6531cf3421b1265aeeeabaab5e176e6d', 'e3c13679c73a4f829bcff2aba8fd68b1', '分步表单', '/form/step-form', 'form/stepForm/StepForm', null, '1', null, '2.00', null, null, '1', '0', null, '0', null, '2018-12-25 20:34:38', null, null); +INSERT INTO `sys_permission` VALUES ('65a8f489f25a345836b7f44b1181197a', 'c65321e57b7949b7a975313220de0422', '403', '/exception/403', 'exception/403', null, '1', null, '1.00', null, null, '1', '0', null, '0', null, '2018-12-25 20:34:38', null, null); +INSERT INTO `sys_permission` VALUES ('693ce69af3432bd00be13c3971a57961', '08e6b9dc3c04489c8e1ff2ce6f105aa4', '监控页', '/dashboard/monitor', 'dashboard/Monitor', null, '1', null, '2.00', null, null, '1', '1', null, '0', null, '2018-12-25 20:34:38', null, null); +INSERT INTO `sys_permission` VALUES ('6e73eb3c26099c191bf03852ee1310a1', '717f6bee46f44a3897eca9abd6e2ec44', '个人设置', '/account/settings', 'account/settings/Index', null, '1', null, '2.00', '1', null, '0', '0', null, '0', null, '2018-12-25 20:34:38', null, '2018-12-26 19:05:26'); +INSERT INTO `sys_permission` VALUES ('717f6bee46f44a3897eca9abd6e2ec44', null, '个人页', '/account', 'layouts/RouteView', null, '1', null, '9.99', '0', 'user', '0', '0', null, '0', null, '2018-12-25 20:34:38', 'admin', '2019-01-21 20:00:02'); +INSERT INTO `sys_permission` VALUES ('73678f9daa45ed17a3674131b03432fb', '540a2936940846cb98114ffb0d145cb8', '权限列表', '/list/permission-list', 'list/PermissionList', null, '1', null, '5.00', null, null, '1', '0', null, '0', null, '2018-12-25 20:34:38', null, null); +INSERT INTO `sys_permission` VALUES ('7ac9eb9ccbde2f7a033cd4944272bf1e', '540a2936940846cb98114ffb0d145cb8', '卡片列表', '/list/card', 'list/CardList', null, '1', null, '7.00', null, null, '1', '0', null, '0', null, '2018-12-25 20:34:38', null, null); +INSERT INTO `sys_permission` VALUES ('882a73768cfd7f78f3a37584f7299656', '6e73eb3c26099c191bf03852ee1310a1', '个性化设置', '/account/settings/custom', 'account/settings/Custom', null, '1', 'CustomSettings', null, '0', null, '1', '1', null, '0', null, '2018-12-26 19:00:46', null, null); +INSERT INTO `sys_permission` VALUES ('8fb8172747a78756c11916216b8b8066', '08e6b9dc3c04489c8e1ff2ce6f105aa4', '工作台', '/dashboard/workplace', 'dashboard/Workplace', null, '1', null, '3.00', null, null, '1', '0', null, '0', null, '2018-12-25 20:34:38', null, null); +INSERT INTO `sys_permission` VALUES ('9502685863ab87f0ad1134142788a385', null, '首页', '/dashboard/analysis', 'dashboard/Analysis', null, '1', null, '1.00', '0', 'dashboard', '1', '0', null, '0', null, '2018-12-25 20:34:38', 'admin', '2019-01-21 19:21:01'); +INSERT INTO `sys_permission` VALUES ('ae4fed059f67086fd52a73d913cf473d', '540a2936940846cb98114ffb0d145cb8', '内联编辑表格', '/list/edit-table', 'list/TableInnerEditList', null, '1', null, '2.00', null, null, '1', '0', null, '0', null, '2018-12-25 20:34:38', null, null); +INSERT INTO `sys_permission` VALUES ('b1cb0a3fedf7ed0e4653cb5a229837ee', 'd7d6e2e4e2934f2c9385a623fd98c6f3', '定时任务', 'system/QuartzJobList', 'system/QuartzJobList', null, '1', null, '5.00', '0', null, '1', '0', null, '0', null, '2019-01-03 09:38:52', null, '2019-01-03 09:42:07'); +INSERT INTO `sys_permission` VALUES ('b3c824fc22bd953e2eb16ae6914ac8f9', '4875ebe289344e14844d8e3ea1edd73f', '高级详情页', '/profile/advanced', 'profile/advanced/Advanced', null, '1', null, '2.00', null, null, '1', '0', null, '0', null, '2018-12-25 20:34:38', null, null); +INSERT INTO `sys_permission` VALUES ('b4dfc7d5dd9e8d5b6dd6d4579b1aa559', 'c65321e57b7949b7a975313220de0422', '500', '/exception/500', 'exception/500', null, '1', null, '3.00', null, null, '1', '0', null, '0', null, '2018-12-25 20:34:38', null, null); +INSERT INTO `sys_permission` VALUES ('be71f37d127b02d6b09b9ddaa241313d', '9c2bede8b0f8ac9b981c54269c0d9bde', '第三方流程测试', '/sps/ThirdFlow', '/sps/test/ThirdFlow', null, '1', 'ThirdFlow', null, '0', null, '1', '0', null, '1', null, '2019-01-11 18:28:54', null, null); +INSERT INTO `sys_permission` VALUES ('c65321e57b7949b7a975313220de0422', null, '异常页', '/exception', 'layouts/RouteView', null, '1', null, '9.99', '0', 'warning', '0', '0', null, '0', null, '2018-12-25 20:34:38', 'admin', '2019-01-21 19:59:54'); +INSERT INTO `sys_permission` VALUES ('c670cd41b4156e83061d5d710d991270', '9c2bede8b0f8ac9b981c54269c0d9bde', '流程测试', '/isps/flowTest', 'sps/test/FlowTest', null, '1', 'FlowTest', null, '0', null, '1', '0', null, '1', null, '2019-01-09 18:20:51', null, '2019-01-09 20:52:17'); +INSERT INTO `sys_permission` VALUES ('c71c0623ea9c9a846a1dafb999271fcd', '66de730f242bb917264698b422ddeb09', '流程管理', '/isps/flowList', 'sps/flow/FlowList', null, '1', null, '4.00', '0', 'bars', '1', '0', null, '1', null, '2019-01-15 11:50:49', null, '2019-01-15 15:01:42'); +INSERT INTO `sys_permission` VALUES ('cc50656cf9ca528e6f2150eba4714ad2', '4875ebe289344e14844d8e3ea1edd73f', '基础详情页', '/profile/basic', 'profile/basic/Index', null, '1', null, '1.00', null, null, '1', '0', null, '0', null, '2018-12-25 20:34:38', null, null); +INSERT INTO `sys_permission` VALUES ('d2bbf9ebca5a8fa2e227af97d2da7548', 'c65321e57b7949b7a975313220de0422', '404', '/exception/404', 'exception/404', null, '1', null, '2.00', null, null, '1', '0', null, '0', null, '2018-12-25 20:34:38', null, null); +INSERT INTO `sys_permission` VALUES ('d7d6e2e4e2934f2c9385a623fd98c6f3', null, '系统管理', '/isystem', 'layouts/RouteView', null, '1', null, '8.00', '0', 'dashboard', '0', '0', null, '0', null, '2018-12-25 20:34:38', 'admin', '2019-01-21 20:33:42'); +INSERT INTO `sys_permission` VALUES ('d86f58e7ab516d3bc6bfb1fe10585f97', '717f6bee46f44a3897eca9abd6e2ec44', '个人中心', '/account/center', 'account/center/Index', null, '1', null, '1.00', null, null, '1', '0', null, '0', null, '2018-12-25 20:34:38', null, null); +INSERT INTO `sys_permission` VALUES ('e3c13679c73a4f829bcff2aba8fd68b1', null, '表单页', '/form', 'layouts/PageView', null, '1', null, '9.99', '0', 'form', '0', '0', null, '0', null, '2018-12-25 20:34:38', 'admin', '2019-01-21 19:59:22'); +INSERT INTO `sys_permission` VALUES ('e5973686ed495c379d829ea8b2881fc6', 'e3c13679c73a4f829bcff2aba8fd68b1', '高级表单', '/form/advanced-form', 'form/advancedForm/AdvancedForm', null, '1', null, '3.00', null, null, '1', '0', null, '0', null, '2018-12-25 20:34:38', null, null); +INSERT INTO `sys_permission` VALUES ('e8af452d8948ea49d37c934f5100ae6a', 'd7d6e2e4e2934f2c9385a623fd98c6f3', '角色管理', '/isystem/role', 'system/RoleList', null, '1', null, '2.00', null, null, '1', '0', null, '0', null, '2018-12-25 20:34:38', null, null); +INSERT INTO `sys_permission` VALUES ('ec8d607d0156e198b11853760319c646', '6e73eb3c26099c191bf03852ee1310a1', '安全设置', '/account/settings/security', 'account/settings/Security', null, '1', 'SecuritySettings', null, '0', null, '1', '1', null, '0', null, '2018-12-26 18:59:52', null, null); +INSERT INTO `sys_permission` VALUES ('f1cb187abf927c88b89470d08615f5ac', 'd7d6e2e4e2934f2c9385a623fd98c6f3', '数据字典', '/isystem/dict', 'system/DictList', null, '1', null, '5.00', '0', null, '1', '0', null, '0', null, '2018-12-28 13:54:43', null, '2018-12-28 15:37:54'); +INSERT INTO `sys_permission` VALUES ('f23d9bfff4d9aa6b68569ba2cff38415', '540a2936940846cb98114ffb0d145cb8', '标准列表', '/list/basic-list', 'list/StandardList', null, '1', null, '6.00', null, null, '1', '0', null, '0', null, '2018-12-25 20:34:38', null, null); +INSERT INTO `sys_permission` VALUES ('fb07ca05a3e13674dbf6d3245956da2e', '540a2936940846cb98114ffb0d145cb8', '搜索列表', '/list/search', 'list/search/SearchLayout', null, '1', null, '8.00', null, null, '1', '0', null, '0', null, '2018-12-25 20:34:38', null, null); +INSERT INTO `sys_permission` VALUES ('fedfbf4420536cacc0218557d263dfea', '6e73eb3c26099c191bf03852ee1310a1', '新消息通知', '/account/settings/notification', 'account/settings/Notification', null, '1', 'NotificationSettings', null, '0', '', '1', '1', null, '0', null, '2018-12-26 19:02:05', null, null); + +-- ---------------------------- +-- Table structure for sys_quartz_job +-- ---------------------------- +DROP TABLE IF EXISTS `sys_quartz_job`; +CREATE TABLE `sys_quartz_job` ( + `id` varchar(255) NOT NULL, + `create_by` varchar(255) default NULL COMMENT '创建人', + `create_time` datetime default NULL COMMENT '创建时间', + `del_flag` int(11) default NULL COMMENT '删除状态', + `update_by` varchar(255) default NULL COMMENT '修改人', + `update_time` datetime default NULL COMMENT '修改时间', + `job_class_name` varchar(255) default NULL COMMENT '任务类名', + `cron_expression` varchar(255) default NULL COMMENT 'cron表达式', + `parameter` varchar(255) default NULL COMMENT '参数', + `description` varchar(255) default NULL COMMENT '描述', + `status` int(11) default NULL COMMENT '状态 0正常 -1停止', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Records of sys_quartz_job +-- ---------------------------- +INSERT INTO `sys_quartz_job` VALUES ('df26ecacf0f75d219d746750fe84bbee', null, null, '0', 'admin', '2019-01-28 13:57:22', 'org.jeecg.modules.quartz.job.SampleParamJob', '0/1 * * * * ?', 'scott', '带参测试 后台将每隔1秒执行输出日志', '-1'); +INSERT INTO `sys_quartz_job` VALUES ('58180f2a7c8cd36a121fd0fff3f02a36', null, null, '0', 'admin', '2019-01-28 13:57:45', 'org.jeecg.modules.quartz.job.SampleJob', '0/1 * * * * ?', null, null, '-1'); + +-- ---------------------------- +-- Table structure for sys_role +-- ---------------------------- +DROP TABLE IF EXISTS `sys_role`; +CREATE TABLE `sys_role` ( + `id` varchar(32) NOT NULL COMMENT '主键id', + `role_name` varchar(255) default NULL COMMENT '角色名称', + `role_code` varchar(255) default NULL COMMENT '角色编码', + `description` varchar(255) default NULL COMMENT '描述', + `create_by` varchar(255) default NULL COMMENT '创建人', + `create_time` datetime default NULL COMMENT '创建时间', + `update_by` varchar(255) default NULL COMMENT '更新人', + `update_time` datetime default NULL COMMENT '更新时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='角色表'; + +-- ---------------------------- +-- Records of sys_role +-- ---------------------------- +INSERT INTO `sys_role` VALUES ('f6817f48af4fb3af11b9e8bf182f618b', '管理员', 'gly', '管理员', null, '2018-12-21 18:03:39', null, '2019-01-10 16:20:04'); + +-- ---------------------------- +-- Table structure for sys_role_permission +-- ---------------------------- +DROP TABLE IF EXISTS `sys_role_permission`; +CREATE TABLE `sys_role_permission` ( + `id` varchar(32) NOT NULL, + `role_id` varchar(32) default NULL COMMENT '角色id', + `permission_id` varchar(32) default NULL COMMENT '权限id', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='角色权限表'; + +-- ---------------------------- +-- Records of sys_role_permission +-- ---------------------------- +INSERT INTO `sys_role_permission` VALUES ('026351916c841e114468e941627a787b', 'f6817f48af4fb3af11b9e8bf182f618b', '58857ff846e61794c69208e9d3a85466'); +INSERT INTO `sys_role_permission` VALUES ('064e67f62aea92462a0875ce294ab5d6', 'f6817f48af4fb3af11b9e8bf182f618b', '6e73eb3c26099c191bf03852ee1310a1'); +INSERT INTO `sys_role_permission` VALUES ('0ca8b65b108dd0ab3d9eb90f554f71ba', 'f6817f48af4fb3af11b9e8bf182f618b', '8f486c17bf7016301432019fdba7aed8'); +INSERT INTO `sys_role_permission` VALUES ('118fa3d45d246d50a3c5d9fa92c2a400', 'f6817f48af4fb3af11b9e8bf182f618b', 'e8af452d8948ea49d37c934f5100ae6a'); +INSERT INTO `sys_role_permission` VALUES ('11b4fd5d11b50afdc9a0dc7676037ba2', 'f6817f48af4fb3af11b9e8bf182f618b', 'c65321e57b7949b7a975313220de0422'); +INSERT INTO `sys_role_permission` VALUES ('127ae6e13af03f07180f7ffff41ec7bb', 'f6817f48af4fb3af11b9e8bf182f618b', 'd2bbf9ebca5a8fa2e227af97d2da7548'); +INSERT INTO `sys_role_permission` VALUES ('164a6f118aa15138d6c8bdc667892ba3', 'f6817f48af4fb3af11b9e8bf182f618b', '3f915b2769fc80648e92d04e84ca059d'); +INSERT INTO `sys_role_permission` VALUES ('171ba1c7306b2cb38c980b29801ba37d', 'f6817f48af4fb3af11b9e8bf182f618b', 'ddf29a50766ebf228a76d676f34d1121'); +INSERT INTO `sys_role_permission` VALUES ('2658494328be1ebc035134c05fc2f11e', 'f6817f48af4fb3af11b9e8bf182f618b', '54dd5457a3190740005c1bfec55b1c34'); +INSERT INTO `sys_role_permission` VALUES ('26c98a73fac3c79dfdd16016356a9faa', 'f6817f48af4fb3af11b9e8bf182f618b', '4875ebe289344e14844d8e3ea1edd73f'); +INSERT INTO `sys_role_permission` VALUES ('27db84db281961e840b596c49346ef7e', 'f6817f48af4fb3af11b9e8bf182f618b', '1367a93f2c410b169faa7abcbad2f77c'); +INSERT INTO `sys_role_permission` VALUES ('287594a1ec30caa90810ef7a58178bd0', 'f6817f48af4fb3af11b9e8bf182f618b', 'f1cb187abf927c88b89470d08615f5ac'); +INSERT INTO `sys_role_permission` VALUES ('2be31e6e281acf08578a2e5b4f73f815', 'f6817f48af4fb3af11b9e8bf182f618b', 'e5973686ed495c379d829ea8b2881fc6'); +INSERT INTO `sys_role_permission` VALUES ('2c4bb54630e60fe2660da36b11bcf12e', 'f6817f48af4fb3af11b9e8bf182f618b', 'b4dfc7d5dd9e8d5b6dd6d4579b1aa559'); +INSERT INTO `sys_role_permission` VALUES ('2df3ab2b5214cc1d034507e152771a41', 'f6817f48af4fb3af11b9e8bf182f618b', '717f6bee46f44a3897eca9abd6e2ec44'); +INSERT INTO `sys_role_permission` VALUES ('2e3f1ec4c21885ce061b61e2519e79c8', 'f6817f48af4fb3af11b9e8bf182f618b', 'c71c0623ea9c9a846a1dafb999271fcd'); +INSERT INTO `sys_role_permission` VALUES ('2f0aa12fafe792f6c786780fdd5cfeeb', 'f6817f48af4fb3af11b9e8bf182f618b', 'a68e9113be42055075189de4f77853e0'); +INSERT INTO `sys_role_permission` VALUES ('37608598f14cfe94e4ccc288ce1ea336', 'f6817f48af4fb3af11b9e8bf182f618b', 'd7d6e2e4e2934f2c9385a623fd98c6f3'); +INSERT INTO `sys_role_permission` VALUES ('3a23f807225746ceff686953e9544859', 'f6817f48af4fb3af11b9e8bf182f618b', '418964ba087b90a84897b62474496b93'); +INSERT INTO `sys_role_permission` VALUES ('40d2734e7379ef44a6b6d42070e3ff16', 'f6817f48af4fb3af11b9e8bf182f618b', '37236b347227b5d3f5cd9e463099f91c'); +INSERT INTO `sys_role_permission` VALUES ('45ad5bc317e6cf9fd98fce84b8500205', 'f6817f48af4fb3af11b9e8bf182f618b', '2a470fc0c3954d9dbb61de6d80846549'); +INSERT INTO `sys_role_permission` VALUES ('48117105a2234463ffd9fe82e033b26b', 'f6817f48af4fb3af11b9e8bf182f618b', '00a2a0ae65cdca5e93209cdbde97cbe6'); +INSERT INTO `sys_role_permission` VALUES ('496108f88375b90ee7ee50909ff6a049', 'f6817f48af4fb3af11b9e8bf182f618b', 'a8d3ffd0c52950023291834e370ec3e2'); +INSERT INTO `sys_role_permission` VALUES ('4c84fa4daab1b4d7c109d7cab49e9743', 'f6817f48af4fb3af11b9e8bf182f618b', '08e6b9dc3c04489c8e1ff2ce6f105aa4'); +INSERT INTO `sys_role_permission` VALUES ('4e122c75b51533ec51e1e80a2c240658', 'f6817f48af4fb3af11b9e8bf182f618b', 'fedfbf4420536cacc0218557d263dfea'); +INSERT INTO `sys_role_permission` VALUES ('4e5cf9a9adec9cddece86e86d6f31278', 'f6817f48af4fb3af11b9e8bf182f618b', '693ce69af3432bd00be13c3971a57961'); +INSERT INTO `sys_role_permission` VALUES ('4f28ab1dbfbc4219a352191329c51842', 'f6817f48af4fb3af11b9e8bf182f618b', '8e8517f135e55f1ef9340a558c9367f1'); +INSERT INTO `sys_role_permission` VALUES ('5a99079ca98546c838a225b0e6012cb9', 'ee8626f80f7c2619917b6236f3a7f02b', 'fedfbf4420536cacc0218557d263dfea'); +INSERT INTO `sys_role_permission` VALUES ('5b32a4a35f8aa6ffc94c93847ea1940f', 'ee8626f80f7c2619917b6236f3a7f02b', '4f66409ef3bbd69c1d80469d6e2a885e'); +INSERT INTO `sys_role_permission` VALUES ('5e1aa00e6434a749109523d2a4693b80', 'f6817f48af4fb3af11b9e8bf182f618b', '34a10d0973052776d7a378605c904417'); +INSERT INTO `sys_role_permission` VALUES ('64390c46bff797016556fbe1ac88fb8c', 'f6817f48af4fb3af11b9e8bf182f618b', '05b3c82ddb2536a4a5ee1a4c46b5abef'); +INSERT INTO `sys_role_permission` VALUES ('6b98c1bbc3ff966ca8f88b7192b38ae6', 'f6817f48af4fb3af11b9e8bf182f618b', '73678f9daa45ed17a3674131b03432fb'); +INSERT INTO `sys_role_permission` VALUES ('6fa242fce7ba2c5d71cd16602f007a4d', 'f6817f48af4fb3af11b9e8bf182f618b', '5efbf11a764db7759c36c669a263f292'); +INSERT INTO `sys_role_permission` VALUES ('714b9b0bd92212ba86bafe7bbc902d6e', 'f6817f48af4fb3af11b9e8bf182f618b', 'c670cd41b4156e83061d5d710d991270'); +INSERT INTO `sys_role_permission` VALUES ('75002588591820806', '16457350655250432', '5129710648430592'); +INSERT INTO `sys_role_permission` VALUES ('75002588604403712', '16457350655250432', '5129710648430593'); +INSERT INTO `sys_role_permission` VALUES ('75002588612792320', '16457350655250432', '40238597734928384'); +INSERT INTO `sys_role_permission` VALUES ('75002588625375232', '16457350655250432', '57009744761589760'); +INSERT INTO `sys_role_permission` VALUES ('75002588633763840', '16457350655250432', '16392452747300864'); +INSERT INTO `sys_role_permission` VALUES ('75002588637958144', '16457350655250432', '16392767785668608'); +INSERT INTO `sys_role_permission` VALUES ('75002588650541056', '16457350655250432', '16439068543946752'); +INSERT INTO `sys_role_permission` VALUES ('77277779875336192', '496138616573952', '5129710648430592'); +INSERT INTO `sys_role_permission` VALUES ('77277780043108352', '496138616573952', '5129710648430593'); +INSERT INTO `sys_role_permission` VALUES ('77277780055691264', '496138616573952', '15701400130424832'); +INSERT INTO `sys_role_permission` VALUES ('77277780064079872', '496138616573952', '16678126574637056'); +INSERT INTO `sys_role_permission` VALUES ('77277780072468480', '496138616573952', '15701915807518720'); +INSERT INTO `sys_role_permission` VALUES ('77277780076662784', '496138616573952', '15708892205944832'); +INSERT INTO `sys_role_permission` VALUES ('77277780085051392', '496138616573952', '16678447719911424'); +INSERT INTO `sys_role_permission` VALUES ('77277780089245696', '496138616573952', '25014528525733888'); +INSERT INTO `sys_role_permission` VALUES ('77277780097634304', '496138616573952', '56898976661639168'); +INSERT INTO `sys_role_permission` VALUES ('77277780135383040', '496138616573952', '40238597734928384'); +INSERT INTO `sys_role_permission` VALUES ('77277780139577344', '496138616573952', '45235621697949696'); +INSERT INTO `sys_role_permission` VALUES ('77277780147965952', '496138616573952', '45235787867885568'); +INSERT INTO `sys_role_permission` VALUES ('77277780156354560', '496138616573952', '45235939278065664'); +INSERT INTO `sys_role_permission` VALUES ('77277780164743168', '496138616573952', '43117268627886080'); +INSERT INTO `sys_role_permission` VALUES ('77277780168937472', '496138616573952', '45236734832676864'); +INSERT INTO `sys_role_permission` VALUES ('77277780181520384', '496138616573952', '45237010692050944'); +INSERT INTO `sys_role_permission` VALUES ('77277780189908992', '496138616573952', '45237170029465600'); +INSERT INTO `sys_role_permission` VALUES ('77277780198297600', '496138616573952', '57009544286441472'); +INSERT INTO `sys_role_permission` VALUES ('77277780206686208', '496138616573952', '57009744761589760'); +INSERT INTO `sys_role_permission` VALUES ('77277780215074816', '496138616573952', '57009981228060672'); +INSERT INTO `sys_role_permission` VALUES ('77277780219269120', '496138616573952', '56309618086776832'); +INSERT INTO `sys_role_permission` VALUES ('77277780227657728', '496138616573952', '57212882168844288'); +INSERT INTO `sys_role_permission` VALUES ('77277780236046336', '496138616573952', '61560041605435392'); +INSERT INTO `sys_role_permission` VALUES ('77277780244434944', '496138616573952', '61560275261722624'); +INSERT INTO `sys_role_permission` VALUES ('77277780257017856', '496138616573952', '61560480518377472'); +INSERT INTO `sys_role_permission` VALUES ('77277780265406464', '496138616573952', '44986029924421632'); +INSERT INTO `sys_role_permission` VALUES ('77277780324126720', '496138616573952', '45235228800716800'); +INSERT INTO `sys_role_permission` VALUES ('77277780332515328', '496138616573952', '45069342940860416'); +INSERT INTO `sys_role_permission` VALUES ('77277780340903937', '496138616573952', '5129710648430594'); +INSERT INTO `sys_role_permission` VALUES ('77277780349292544', '496138616573952', '16687383932047360'); +INSERT INTO `sys_role_permission` VALUES ('77277780357681152', '496138616573952', '16689632049631232'); +INSERT INTO `sys_role_permission` VALUES ('77277780366069760', '496138616573952', '16689745006432256'); +INSERT INTO `sys_role_permission` VALUES ('77277780370264064', '496138616573952', '16689883993083904'); +INSERT INTO `sys_role_permission` VALUES ('77277780374458369', '496138616573952', '16690313745666048'); +INSERT INTO `sys_role_permission` VALUES ('77277780387041280', '496138616573952', '5129710648430595'); +INSERT INTO `sys_role_permission` VALUES ('77277780395429888', '496138616573952', '16694861252005888'); +INSERT INTO `sys_role_permission` VALUES ('77277780403818496', '496138616573952', '16695107491205120'); +INSERT INTO `sys_role_permission` VALUES ('77277780412207104', '496138616573952', '16695243126607872'); +INSERT INTO `sys_role_permission` VALUES ('77277780420595712', '496138616573952', '75002207560273920'); +INSERT INTO `sys_role_permission` VALUES ('77277780428984320', '496138616573952', '76215889006956544'); +INSERT INTO `sys_role_permission` VALUES ('77277780433178624', '496138616573952', '76216071333351424'); +INSERT INTO `sys_role_permission` VALUES ('77277780441567232', '496138616573952', '76216264070008832'); +INSERT INTO `sys_role_permission` VALUES ('77277780449955840', '496138616573952', '76216459709124608'); +INSERT INTO `sys_role_permission` VALUES ('77277780458344448', '496138616573952', '76216594207870976'); +INSERT INTO `sys_role_permission` VALUES ('77277780466733056', '496138616573952', '76216702639017984'); +INSERT INTO `sys_role_permission` VALUES ('77277780475121664', '496138616573952', '58480609315524608'); +INSERT INTO `sys_role_permission` VALUES ('77277780483510272', '496138616573952', '61394706252173312'); +INSERT INTO `sys_role_permission` VALUES ('77277780491898880', '496138616573952', '61417744146370560'); +INSERT INTO `sys_role_permission` VALUES ('77277780496093184', '496138616573952', '76606430504816640'); +INSERT INTO `sys_role_permission` VALUES ('77277780504481792', '496138616573952', '76914082455752704'); +INSERT INTO `sys_role_permission` VALUES ('77277780508676097', '496138616573952', '76607201262702592'); +INSERT INTO `sys_role_permission` VALUES ('77277780517064704', '496138616573952', '39915540965232640'); +INSERT INTO `sys_role_permission` VALUES ('77277780525453312', '496138616573952', '41370251991977984'); +INSERT INTO `sys_role_permission` VALUES ('77277780538036224', '496138616573952', '45264987354042368'); +INSERT INTO `sys_role_permission` VALUES ('77277780546424832', '496138616573952', '45265487029866496'); +INSERT INTO `sys_role_permission` VALUES ('77277780554813440', '496138616573952', '45265762415284224'); +INSERT INTO `sys_role_permission` VALUES ('77277780559007744', '496138616573952', '45265886315024384'); +INSERT INTO `sys_role_permission` VALUES ('77277780567396352', '496138616573952', '45266070000373760'); +INSERT INTO `sys_role_permission` VALUES ('77277780571590656', '496138616573952', '41363147411427328'); +INSERT INTO `sys_role_permission` VALUES ('77277780579979264', '496138616573952', '41363537456533504'); +INSERT INTO `sys_role_permission` VALUES ('77277780588367872', '496138616573952', '41364927394353152'); +INSERT INTO `sys_role_permission` VALUES ('77277780596756480', '496138616573952', '41371711400054784'); +INSERT INTO `sys_role_permission` VALUES ('77277780605145088', '496138616573952', '41469219249852416'); +INSERT INTO `sys_role_permission` VALUES ('77277780613533696', '496138616573952', '39916171171991552'); +INSERT INTO `sys_role_permission` VALUES ('77277780621922304', '496138616573952', '39918482854252544'); +INSERT INTO `sys_role_permission` VALUES ('77277780630310912', '496138616573952', '41373430515240960'); +INSERT INTO `sys_role_permission` VALUES ('77277780718391296', '496138616573952', '41375330996326400'); +INSERT INTO `sys_role_permission` VALUES ('77277780722585600', '496138616573952', '63741744973352960'); +INSERT INTO `sys_role_permission` VALUES ('77277780730974208', '496138616573952', '42082442672082944'); +INSERT INTO `sys_role_permission` VALUES ('77277780739362816', '496138616573952', '41376192166629376'); +INSERT INTO `sys_role_permission` VALUES ('77277780747751424', '496138616573952', '41377034236071936'); +INSERT INTO `sys_role_permission` VALUES ('77277780756140032', '496138616573952', '56911328312299520'); +INSERT INTO `sys_role_permission` VALUES ('77277780764528640', '496138616573952', '41378916912336896'); +INSERT INTO `sys_role_permission` VALUES ('77277780768722944', '496138616573952', '63482475359244288'); +INSERT INTO `sys_role_permission` VALUES ('77277780772917249', '496138616573952', '64290663792906240'); +INSERT INTO `sys_role_permission` VALUES ('77277780785500160', '496138616573952', '66790433014943744'); +INSERT INTO `sys_role_permission` VALUES ('77277780789694464', '496138616573952', '42087054753927168'); +INSERT INTO `sys_role_permission` VALUES ('77277780798083072', '496138616573952', '67027338952445952'); +INSERT INTO `sys_role_permission` VALUES ('77277780806471680', '496138616573952', '67027909637836800'); +INSERT INTO `sys_role_permission` VALUES ('77277780810665985', '496138616573952', '67042515441684480'); +INSERT INTO `sys_role_permission` VALUES ('77277780823248896', '496138616573952', '67082402312228864'); +INSERT INTO `sys_role_permission` VALUES ('77277780827443200', '496138616573952', '16392452747300864'); +INSERT INTO `sys_role_permission` VALUES ('77277780835831808', '496138616573952', '16392767785668608'); +INSERT INTO `sys_role_permission` VALUES ('77277780840026112', '496138616573952', '16438800255291392'); +INSERT INTO `sys_role_permission` VALUES ('77277780844220417', '496138616573952', '16438962738434048'); +INSERT INTO `sys_role_permission` VALUES ('77277780852609024', '496138616573952', '16439068543946752'); +INSERT INTO `sys_role_permission` VALUES ('77277860062040064', '496138616573953', '5129710648430592'); +INSERT INTO `sys_role_permission` VALUES ('77277860070428672', '496138616573953', '5129710648430593'); +INSERT INTO `sys_role_permission` VALUES ('77277860078817280', '496138616573953', '40238597734928384'); +INSERT INTO `sys_role_permission` VALUES ('77277860091400192', '496138616573953', '43117268627886080'); +INSERT INTO `sys_role_permission` VALUES ('77277860099788800', '496138616573953', '57009744761589760'); +INSERT INTO `sys_role_permission` VALUES ('77277860112371712', '496138616573953', '56309618086776832'); +INSERT INTO `sys_role_permission` VALUES ('77277860120760320', '496138616573953', '44986029924421632'); +INSERT INTO `sys_role_permission` VALUES ('77277860129148928', '496138616573953', '5129710648430594'); +INSERT INTO `sys_role_permission` VALUES ('77277860141731840', '496138616573953', '5129710648430595'); +INSERT INTO `sys_role_permission` VALUES ('77277860150120448', '496138616573953', '75002207560273920'); +INSERT INTO `sys_role_permission` VALUES ('77277860158509056', '496138616573953', '58480609315524608'); +INSERT INTO `sys_role_permission` VALUES ('77277860162703360', '496138616573953', '76606430504816640'); +INSERT INTO `sys_role_permission` VALUES ('77277860171091968', '496138616573953', '76914082455752704'); +INSERT INTO `sys_role_permission` VALUES ('77277860179480576', '496138616573953', '76607201262702592'); +INSERT INTO `sys_role_permission` VALUES ('77277860187869184', '496138616573953', '39915540965232640'); +INSERT INTO `sys_role_permission` VALUES ('77277860196257792', '496138616573953', '41370251991977984'); +INSERT INTO `sys_role_permission` VALUES ('77277860204646400', '496138616573953', '41363147411427328'); +INSERT INTO `sys_role_permission` VALUES ('77277860208840704', '496138616573953', '41371711400054784'); +INSERT INTO `sys_role_permission` VALUES ('77277860213035009', '496138616573953', '39916171171991552'); +INSERT INTO `sys_role_permission` VALUES ('77277860221423616', '496138616573953', '39918482854252544'); +INSERT INTO `sys_role_permission` VALUES ('77277860225617920', '496138616573953', '41373430515240960'); +INSERT INTO `sys_role_permission` VALUES ('77277860234006528', '496138616573953', '41375330996326400'); +INSERT INTO `sys_role_permission` VALUES ('77277860242395136', '496138616573953', '63741744973352960'); +INSERT INTO `sys_role_permission` VALUES ('77277860250783744', '496138616573953', '42082442672082944'); +INSERT INTO `sys_role_permission` VALUES ('77277860254978048', '496138616573953', '41376192166629376'); +INSERT INTO `sys_role_permission` VALUES ('77277860263366656', '496138616573953', '41377034236071936'); +INSERT INTO `sys_role_permission` VALUES ('77277860271755264', '496138616573953', '56911328312299520'); +INSERT INTO `sys_role_permission` VALUES ('77277860313698304', '496138616573953', '41378916912336896'); +INSERT INTO `sys_role_permission` VALUES ('77277860322086912', '496138616573953', '63482475359244288'); +INSERT INTO `sys_role_permission` VALUES ('77277860326281216', '496138616573953', '64290663792906240'); +INSERT INTO `sys_role_permission` VALUES ('77277860334669824', '496138616573953', '66790433014943744'); +INSERT INTO `sys_role_permission` VALUES ('77277860343058432', '496138616573953', '42087054753927168'); +INSERT INTO `sys_role_permission` VALUES ('77277860347252736', '496138616573953', '67027338952445952'); +INSERT INTO `sys_role_permission` VALUES ('77277860351447041', '496138616573953', '67027909637836800'); +INSERT INTO `sys_role_permission` VALUES ('77277860359835648', '496138616573953', '67042515441684480'); +INSERT INTO `sys_role_permission` VALUES ('77277860364029952', '496138616573953', '67082402312228864'); +INSERT INTO `sys_role_permission` VALUES ('77277860368224256', '496138616573953', '16392452747300864'); +INSERT INTO `sys_role_permission` VALUES ('77277860372418560', '496138616573953', '16392767785668608'); +INSERT INTO `sys_role_permission` VALUES ('77277860376612865', '496138616573953', '16438800255291392'); +INSERT INTO `sys_role_permission` VALUES ('77277860385001472', '496138616573953', '16438962738434048'); +INSERT INTO `sys_role_permission` VALUES ('77277860389195776', '496138616573953', '16439068543946752'); +INSERT INTO `sys_role_permission` VALUES ('7be61b677280c540159c769557b26f2b', 'f6817f48af4fb3af11b9e8bf182f618b', '4f84f9400e5e92c95f05b554724c2b58'); +INSERT INTO `sys_role_permission` VALUES ('7ef49dbe94ca5bbd675b70b7dcde595c', 'f6817f48af4fb3af11b9e8bf182f618b', 'f23d9bfff4d9aa6b68569ba2cff38415'); +INSERT INTO `sys_role_permission` VALUES ('7f089d0c2d9740c7824a26d0b05b7a7c', 'f6817f48af4fb3af11b9e8bf182f618b', '9502685863ab87f0ad1134142788a385'); +INSERT INTO `sys_role_permission` VALUES ('86ac4619a3ef549b75926b6756a8f64d', 'f6817f48af4fb3af11b9e8bf182f618b', '0b6debda2d5a214aa81540971575a6b2'); +INSERT INTO `sys_role_permission` VALUES ('89f45a7ec6f9b69443d222267ac58713', 'f6817f48af4fb3af11b9e8bf182f618b', 'fb07ca05a3e13674dbf6d3245956da2e'); +INSERT INTO `sys_role_permission` VALUES ('912068609b28ee52603494f814881dd4', 'f6817f48af4fb3af11b9e8bf182f618b', '540a2936940846cb98114ffb0d145cb8'); +INSERT INTO `sys_role_permission` VALUES ('95528c4a7eb49790e58415c6ec6e3611', 'f6817f48af4fb3af11b9e8bf182f618b', 'ec8d607d0156e198b11853760319c646'); +INSERT INTO `sys_role_permission` VALUES ('9c9e3ea9159cb505b857f7f19819041b', 'f6817f48af4fb3af11b9e8bf182f618b', '7ac9eb9ccbde2f7a033cd4944272bf1e'); +INSERT INTO `sys_role_permission` VALUES ('a043544bf8b3f53dbca0ccc5847aff9f', 'f6817f48af4fb3af11b9e8bf182f618b', '37fc0af6d161dc6f73b7d4b875e35a93'); +INSERT INTO `sys_role_permission` VALUES ('a3bfe5ca069c1c96f14a5b0e4cee07e0', 'f6817f48af4fb3af11b9e8bf182f618b', 'cc50656cf9ca528e6f2150eba4714ad2'); +INSERT INTO `sys_role_permission` VALUES ('a4fe0c33261a78b5302be163e89bc276', 'f6817f48af4fb3af11b9e8bf182f618b', 'b3c824fc22bd953e2eb16ae6914ac8f9'); +INSERT INTO `sys_role_permission` VALUES ('a5a2155cc655121f5d16d04b50beaaf2', 'f6817f48af4fb3af11b9e8bf182f618b', 'd86f58e7ab516d3bc6bfb1fe10585f97'); +INSERT INTO `sys_role_permission` VALUES ('a7731e047246e321629e2ad9346054fd', 'f6817f48af4fb3af11b9e8bf182f618b', '882a73768cfd7f78f3a37584f7299656'); +INSERT INTO `sys_role_permission` VALUES ('abc60b9977934277aacdb60c3ad06ebf', 'ee8626f80f7c2619917b6236f3a7f02b', 'ec8d607d0156e198b11853760319c646'); +INSERT INTO `sys_role_permission` VALUES ('aefcfc55ae66e975d92798fc5431fe82', 'f6817f48af4fb3af11b9e8bf182f618b', '11e73a1d9f2678d617e44317828ed926'); +INSERT INTO `sys_role_permission` VALUES ('af19013fed4af1a6cdb2f54054119d0b', 'ee8626f80f7c2619917b6236f3a7f02b', '882a73768cfd7f78f3a37584f7299656'); +INSERT INTO `sys_role_permission` VALUES ('b01aab380957b42a3e43838292da9f54', 'f6817f48af4fb3af11b9e8bf182f618b', '339329ed54cf255e1f9392e84f136901'); +INSERT INTO `sys_role_permission` VALUES ('b1fe8ab8c91963aa031b1dfda310e1f9', 'f6817f48af4fb3af11b9e8bf182f618b', '8fb8172747a78756c11916216b8b8066'); +INSERT INTO `sys_role_permission` VALUES ('b402c7c5e8dad60e236edc5bcffdb6df', 'f6817f48af4fb3af11b9e8bf182f618b', '2e42e3835c2b44ec9f7bc26c146ee531'); +INSERT INTO `sys_role_permission` VALUES ('b9cdd4b5f397b0ec67bd0b8b4a75328e', 'f6817f48af4fb3af11b9e8bf182f618b', '131edfc0a0c6d89647eb4a89f85a1125'); +INSERT INTO `sys_role_permission` VALUES ('b9e2f8d4ce01d61b58ea35253ba16388', 'f6817f48af4fb3af11b9e8bf182f618b', '13212d3416eb690c2e1d5033166ff47a'); +INSERT INTO `sys_role_permission` VALUES ('ba393ff6e8832dffdf8bed9e388cf19a', 'f6817f48af4fb3af11b9e8bf182f618b', '83741ee67fd3ba1d981744244dd74462'); +INSERT INTO `sys_role_permission` VALUES ('bdf7aea996a57122c789a302bd30d328', 'f6817f48af4fb3af11b9e8bf182f618b', '07acdd347152814619169844847d20d6'); +INSERT INTO `sys_role_permission` VALUES ('c1419439350fc381d980c43f17246861', 'f6817f48af4fb3af11b9e8bf182f618b', '6531cf3421b1265aeeeabaab5e176e6d'); +INSERT INTO `sys_role_permission` VALUES ('cb36b119fa0df98b7c5420ea9ab80300', 'f6817f48af4fb3af11b9e8bf182f618b', '3eb07a99bd7dcea6d9bef40e37735c7f'); +INSERT INTO `sys_role_permission` VALUES ('cd55c2ebba2124c51dcd1c5e14987c40', 'f6817f48af4fb3af11b9e8bf182f618b', '4f66409ef3bbd69c1d80469d6e2a885e'); +INSERT INTO `sys_role_permission` VALUES ('cf9e06d4b6ffd1fb40aefb164f613598', 'f6817f48af4fb3af11b9e8bf182f618b', '65a8f489f25a345836b7f44b1181197a'); +INSERT INTO `sys_role_permission` VALUES ('d1914e1fea6d398f053e5971340448bc', 'f6817f48af4fb3af11b9e8bf182f618b', 'be71f37d127b02d6b09b9ddaa241313d'); +INSERT INTO `sys_role_permission` VALUES ('d90fe0542d327d90e1817a0427c17f1b', 'f6817f48af4fb3af11b9e8bf182f618b', '277bfabef7d76e89b33062b16a9a5020'); +INSERT INTO `sys_role_permission` VALUES ('e06b6637ed1c90ebe1e396e56ce034c2', 'f6817f48af4fb3af11b9e8bf182f618b', 'cf02da6d64ff41229ed81f5dfcd898fa'); +INSERT INTO `sys_role_permission` VALUES ('e2d1ce200e0161866ccb47505dc5dc34', 'ee8626f80f7c2619917b6236f3a7f02b', '1367a93f2c410b169faa7abcbad2f77c'); +INSERT INTO `sys_role_permission` VALUES ('e82315c63da6f2c659b458f6e1377716', 'f6817f48af4fb3af11b9e8bf182f618b', '9271af487e0184387c326383d655ca37'); +INSERT INTO `sys_role_permission` VALUES ('f349c4a1151b4d5db1873b7abf508281', 'f6817f48af4fb3af11b9e8bf182f618b', 'b1cb0a3fedf7ed0e4653cb5a229837ee'); +INSERT INTO `sys_role_permission` VALUES ('f73e005160a9d146e8eb1b6241e87aba', 'f6817f48af4fb3af11b9e8bf182f618b', '89d70d3c72ad5cc778f511f8ac9f3242'); +INSERT INTO `sys_role_permission` VALUES ('fc0902a26aa69dab30603c19b9a41f44', 'f6817f48af4fb3af11b9e8bf182f618b', 'ae4fed059f67086fd52a73d913cf473d'); +INSERT INTO `sys_role_permission` VALUES ('fd0eb799bb38fe939b486e12a2db338f', 'f6817f48af4fb3af11b9e8bf182f618b', 'e3c13679c73a4f829bcff2aba8fd68b1'); + +-- ---------------------------- +-- Table structure for sys_user +-- ---------------------------- +DROP TABLE IF EXISTS `sys_user`; +CREATE TABLE `sys_user` ( + `id` varchar(32) NOT NULL COMMENT '主键id', + `username` varchar(100) default NULL COMMENT '登录账号', + `realname` varchar(255) default NULL COMMENT '真实姓名', + `password` varchar(255) default NULL COMMENT '密码', + `salt` varchar(45) default NULL COMMENT 'md5密码盐', + `avatar` varchar(255) default NULL COMMENT '头像', + `birthday` datetime default NULL COMMENT '生日', + `sex` int(11) default NULL COMMENT '性别(1:男 2:女)', + `email` varchar(45) default NULL COMMENT '电子邮件', + `phone` varchar(45) default NULL COMMENT '电话', + `status` int(11) default NULL COMMENT '状态(1:正常 2:冻结 )', + `del_flag` varchar(255) default NULL COMMENT '删除状态(0,正常,1已删除)', + `create_by` varchar(255) default NULL COMMENT '创建人', + `create_time` datetime default NULL COMMENT '创建时间', + `update_by` varchar(255) default NULL COMMENT '更新人', + `update_time` datetime default NULL COMMENT '更新时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表'; + +-- ---------------------------- +-- Records of sys_user +-- ---------------------------- +INSERT INTO `sys_user` VALUES ('e9ca23d68d884d4ebb19d07889727dae', 'admin', '管理员', 'a5fcaadb846aaedc', '6MTVvy1z', 'user/20181226/favicon_1545796089238.ico', '2018-12-05 00:00:00', '1', '11@qq.com', '18566666666', '1', '0', null, '2018-12-21 17:54:10', null, '2019-01-19 10:59:46'); + +-- ---------------------------- +-- Table structure for sys_user_role +-- ---------------------------- +DROP TABLE IF EXISTS `sys_user_role`; +CREATE TABLE `sys_user_role` ( + `id` varchar(32) NOT NULL COMMENT '主键id', + `user_id` varchar(32) default NULL COMMENT '用户id', + `role_id` varchar(32) default NULL COMMENT '角色id', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户角色表'; + +-- ---------------------------- +-- Records of sys_user_role +-- ---------------------------- +INSERT INTO `sys_user_role` VALUES ('6d096d48ce7281b50c5f224aab2ff87e', 'e9ca23d68d884d4ebb19d07889727dae', 'f6817f48af4fb3af11b9e8bf182f618b'); diff --git a/jeecg-boot/pom.xml b/jeecg-boot/pom.xml new file mode 100644 index 00000000..3b0ab81e --- /dev/null +++ b/jeecg-boot/pom.xml @@ -0,0 +1,193 @@ + + 4.0.0 + org.jeecgframework.boot + jeecg-boot + 1.0.1 + + + org.springframework.boot + spring-boot-starter-parent + 2.0.3.RELEASE + + + + + + aliyun + aliyun Repository + http://maven.aliyun.com/nexus/content/groups/public + + false + + + + jeecg + jeecg Repository + http://maven.jeecg.org/nexus/content/repositories/jeecg + + false + + + + + + 1.8 + UTF-8 + UTF-8 + 3.0.6 + 1.1.10 + 0.9.1 + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-test + test + + + org.springframework.boot + spring-boot-starter-aop + + + + + + org.projectlombok + lombok + + + org.springframework.boot + spring-boot-devtools + true + + + org.springframework.boot + spring-boot-starter-freemarker + + + + + com.baomidou + mybatis-plus-boot-starter + ${mybatis-plus.version} + + + + + + com.alibaba + druid-spring-boot-starter + 1.1.10 + + + + + com.baomidou + dynamic-datasource-spring-boot-starter + 2.5.0 + + + + + com.alibaba + fastjson + 1.2.35 + + + + + mysql + mysql-connector-java + runtime + + + + + org.springframework.boot + spring-boot-starter-quartz + + + + + com.auth0 + java-jwt + 3.4.1 + + + + + org.apache.shiro + shiro-spring-boot-starter + 1.4.0-RC2 + + + + + io.springfox + springfox-swagger2 + 2.9.2 + + + io.springfox + springfox-swagger-ui + 2.9.2 + + + + org.springframework.boot + spring-boot-starter-data-redis + + + org.apache.commons + commons-pool2 + + + + org.jeecgframework.boot + codegenerate + 1.0.0 + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + UTF-8 + + + + + + src/main/resources + true + + + src/main/java + + **/*.xml + **/*.json + + + + + + \ No newline at end of file diff --git a/jeecg-boot/src/main/java/org/jeecg/JeecgApplication.java b/jeecg-boot/src/main/java/org/jeecg/JeecgApplication.java new file mode 100644 index 00000000..67f22735 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/JeecgApplication.java @@ -0,0 +1,17 @@ +package org.jeecg; + +import org.activiti.spring.boot.SecurityAutoConfiguration; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +import springfox.documentation.swagger2.annotations.EnableSwagger2; + +@EnableSwagger2 +@SpringBootApplication(exclude = SecurityAutoConfiguration.class) +public class JeecgApplication { + + public static void main(String[] args) { + System.setProperty("spring.devtools.restart.enabled", "true"); + SpringApplication.run(JeecgApplication.class, args); + } +} \ No newline at end of file diff --git a/jeecg-boot/src/main/java/org/jeecg/JeecgCodeGenerator.java b/jeecg-boot/src/main/java/org/jeecg/JeecgCodeGenerator.java new file mode 100644 index 00000000..1e41e4c0 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/JeecgCodeGenerator.java @@ -0,0 +1,46 @@ +package org.jeecg; + +import org.jeecgframework.codegenerate.generate.impl.CodeGenerateOne; +import org.jeecgframework.codegenerate.generate.pojo.TableVo; + +/** + * jeecg-boot代码生成器 + * 功能说明: 一键生成增删改查所有代码(包括:controller、service、dao、mapper、entity、vue) + * 自定义模板: 模板位置在/src/main/resources/jeecg/code-template + * @author scott + * + */ +public class JeecgCodeGenerator { + + /** + * 代码生成器使用说明(单表模型) + * + * [1]、全局配置文件 + * src/main/resources/jeecg/jeecg_config.properties : 代码生成器基础配置文件(项目路径、根业务包路径) + * src/main/resources/jeecg/jeecg_database.properties :代码生成器数据库配置文件(独立的数据源配置) + * + * [3]、页面使用说明: + * 1. 页面生成路径: src/main/java/{业务包根路径}/{子业务包}/vue/ + * 2. 使用方法,手工复制到webstorm项目下面 + * 3. 配置访问菜单 + */ + public static void main(String[] args) { + System.out.println("----jeecg--------- Code------------- Generation -----[单表模型]------- 生成中。。。"); + + /**[2]、表配置参数 */ + TableVo table = new TableVo(); + //表名 + table.setTableName("jeecg_order_main"); + //表主键策略(目前只支持UUID) + table.setPrimaryKeyPolicy("uuid"); + //子业务包名 + table.setEntityPackage("test2"); + //实体类名 + table.setEntityName("JeecgOrderMain"); + //功能描述 + table.setFtlDescription("订单"); + new CodeGenerateOne(table).generateCodeFile(); + System.out.println("----jeecg--------- Code------------- Generation -----[单表模型]------- 生成完成。。。"); + } + +} \ No newline at end of file diff --git a/jeecg-boot/src/main/java/org/jeecg/common/api/vo/Result.java b/jeecg-boot/src/main/java/org/jeecg/common/api/vo/Result.java new file mode 100644 index 00000000..13cc4d60 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/common/api/vo/Result.java @@ -0,0 +1,84 @@ +package org.jeecg.common.api.vo; + +import java.io.Serializable; + +import org.jeecg.common.constant.CommonConstant; + +import lombok.Data; + +/** + * 接口返回数据格式 + * @author scott + * @email jeecgos@163.com + * @date 2019年1月19日 + */ +@Data +public class Result implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 成功标志 + */ + private boolean success; + + /** + * 返回处理消息 + */ + private String message; + + /** + * 返回代码 + */ + private Integer code; + + /** + * 返回数据对象 data + */ + private T result; + + /** + * 时间戳 + */ + private long timestamp = System.currentTimeMillis(); + + public void error500(String message) { + this.message = message; + this.code = CommonConstant.SC_INTERNAL_SERVER_ERROR_500; + this.success = false; + } + + public void success(String message) { + this.message = message; + this.code = CommonConstant.SC_OK_200; + this.success = true; + } + + public static Result error(String msg) { + return error(CommonConstant.SC_INTERNAL_SERVER_ERROR_500, msg); + } + + public static Result error(int code, String msg) { + Result r = new Result(); + r.setCode(code); + r.setMessage(msg); + r.setSuccess(false); + return r; + } + + public static Result ok(String msg) { + Result r = new Result(); + r.setSuccess(true); + r.setCode(CommonConstant.SC_OK_200); + r.setMessage(msg); + return r; + } + + public static Result ok(Object obj) { + Result r = new Result(); + r.setSuccess(true); + r.setCode(CommonConstant.SC_OK_200); + r.setResult(obj); + return r; + } +} diff --git a/jeecg-boot/src/main/java/org/jeecg/common/aspect/AutoLogAspect.java b/jeecg-boot/src/main/java/org/jeecg/common/aspect/AutoLogAspect.java new file mode 100644 index 00000000..06a1c61e --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/common/aspect/AutoLogAspect.java @@ -0,0 +1,99 @@ +package org.jeecg.common.aspect; + +import org.apache.shiro.SecurityUtils; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.jeecg.common.util.IPUtils; +import org.jeecg.common.util.SpringContextUtils; +import org.jeecg.modules.system.entity.SysLog; +import org.jeecg.modules.system.entity.SysUser; +import org.jeecg.modules.system.service.ISysLogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import com.alibaba.fastjson.JSONObject; +import javax.servlet.http.HttpServletRequest; +import java.lang.reflect.Method; +import java.util.Date; + + +/** + * 系统日志,切面处理类 + * + * @author scott + * @email jeecgos@163.com + * @date 2018年1月14日 + */ +@Aspect +@Component +public class AutoLogAspect { + @Autowired + private ISysLogService sysLogService; + + @Pointcut("@annotation(org.jeecg.common.aspect.annotation.AutoLog)") + public void logPointCut() { + + } + + @Around("logPointCut()") + public Object around(ProceedingJoinPoint point) throws Throwable { + long beginTime = System.currentTimeMillis(); + //执行方法 + Object result = point.proceed(); + //执行时长(毫秒) + long time = System.currentTimeMillis() - beginTime; + + //保存日志 + saveSysLog(point, time); + + return result; + } + + private void saveSysLog(ProceedingJoinPoint joinPoint, long time) { + MethodSignature signature = (MethodSignature) joinPoint.getSignature(); + Method method = signature.getMethod(); + + SysLog sysLog = new SysLog(); + AutoLog syslog = method.getAnnotation(AutoLog.class); + if(syslog != null){ + //注解上的描述,操作日志内容 + sysLog.setLogContent(syslog.value()); + sysLog.setLogType(syslog.logType()); + } + + //请求的方法名 + String className = joinPoint.getTarget().getClass().getName(); + String methodName = signature.getName(); + sysLog.setMethod(className + "." + methodName + "()"); + + //请求的参数 + Object[] args = joinPoint.getArgs(); + try{ + String params = JSONObject.toJSONString(args); + sysLog.setRequestParam(params); + }catch (Exception e){ + + } + + //获取request + HttpServletRequest request = SpringContextUtils.getHttpServletRequest(); + //设置IP地址 + sysLog.setIp(IPUtils.getIpAddr(request)); + + //获取登录用户信息 + SysUser sysUser = (SysUser)SecurityUtils.getSubject().getPrincipal(); + if(sysUser!=null){ + sysLog.setUserid(sysUser.getUsername()); + sysLog.setUsername(sysUser.getRealname()); + + } + //耗时 + sysLog.setCostTime(time); + sysLog.setCreateTime(new Date()); + //保存系统日志 + sysLogService.save(sysLog); + } +} diff --git a/jeecg-boot/src/main/java/org/jeecg/common/aspect/annotation/AutoLog.java b/jeecg-boot/src/main/java/org/jeecg/common/aspect/annotation/AutoLog.java new file mode 100644 index 00000000..50aa2c91 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/common/aspect/annotation/AutoLog.java @@ -0,0 +1,36 @@ +package org.jeecg.common.aspect.annotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import org.jeecg.common.constant.CommonConstant; + +/** + * 系统日志注解 + * + * @author scott + * @email jeecgos@163.com + * @date 2019年1月14日 + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface AutoLog { + + /** + * 日志内容 + * + * @return + */ + String value() default ""; + + /** + * 日志类型 + * + * @return 0:操作日志;1:登录日志;2:定时任务; + */ + int logType() default CommonConstant.LOG_TYPE_2; +} diff --git a/jeecg-boot/src/main/java/org/jeecg/common/constant/CommonConstant.java b/jeecg-boot/src/main/java/org/jeecg/common/constant/CommonConstant.java new file mode 100644 index 00000000..b2df9372 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/common/constant/CommonConstant.java @@ -0,0 +1,60 @@ +package org.jeecg.common.constant; + +public interface CommonConstant { + + /** + * 正常状态 + */ + Integer STATUS_NORMAL = 0; + + /** + * 禁用状态 + */ + Integer STATUS_DISABLE = -1; + + /** + * 删除标志 + */ + Integer DEL_FLAG_1 = 1; + + /** + * 未删除 + */ + Integer DEL_FLAG_0 = 0; + + /** + * 系统日志类型: 登录 + */ + int LOG_TYPE_1 = 1; + + /** + * 系统日志类型: 操作 + */ + int LOG_TYPE_2 = 2; + + + /** {@code 500 Server Error} (HTTP/1.0 - RFC 1945) */ + public static final Integer SC_INTERNAL_SERVER_ERROR_500 = 500; + /** {@code 200 OK} (HTTP/1.0 - RFC 1945) */ + public static final Integer SC_OK_200 = 200; + + + public static String PREFIX_USER_ROLE = "PREFIX_USER_ROLE"; + public static String PREFIX_USER_PERMISSION = "PREFIX_USER_PERMISSION "; + public static int TOKEN_EXPIRE_TIME = 3600; + + public static String PREFIX_USER_TOKEN = "PREFIX_USER_TOKEN "; + + /** + * 0:一级菜单 + */ + public static Integer MENU_TYPE_0 = 0; + /** + * 1:子菜单 + */ + public static Integer MENU_TYPE_1 = 1; + /** + * 2:按钮权限 + */ + public static Integer MENU_TYPE_2 = 2; +} diff --git a/jeecg-boot/src/main/java/org/jeecg/common/constant/CommonSendStatus.java b/jeecg-boot/src/main/java/org/jeecg/common/constant/CommonSendStatus.java new file mode 100644 index 00000000..88e43db2 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/common/constant/CommonSendStatus.java @@ -0,0 +1,15 @@ +package org.jeecg.common.constant; + +/** + * 系统通告 - 发布状态 + * @author LeeShaoQing + * + */ +public interface CommonSendStatus { + + String UNPUBLISHED_STATUS_0 = "0"; //未发布 + + String PUBLISHED_STATUS_1 = "1"; //已发布 + + String REVOKE_STATUS_2 = "2"; //撤销 +} diff --git a/jeecg-boot/src/main/java/org/jeecg/common/exception/JeecgBootException.java b/jeecg-boot/src/main/java/org/jeecg/common/exception/JeecgBootException.java new file mode 100644 index 00000000..703b7e70 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/common/exception/JeecgBootException.java @@ -0,0 +1,19 @@ +package org.jeecg.common.exception; + +public class JeecgBootException extends RuntimeException { + private static final long serialVersionUID = 1L; + + public JeecgBootException(String message){ + super(message); + } + + public JeecgBootException(Throwable cause) + { + super(cause); + } + + public JeecgBootException(String message,Throwable cause) + { + super(message,cause); + } +} diff --git a/jeecg-boot/src/main/java/org/jeecg/common/exception/JeecgBootExceptionHandler.java b/jeecg-boot/src/main/java/org/jeecg/common/exception/JeecgBootExceptionHandler.java new file mode 100644 index 00000000..62a1051e --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/common/exception/JeecgBootExceptionHandler.java @@ -0,0 +1,55 @@ +package org.jeecg.common.exception; + +import org.apache.shiro.authz.AuthorizationException; +import org.jeecg.common.api.vo.Result; +import org.springframework.dao.DuplicateKeyException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.springframework.web.servlet.NoHandlerFoundException; + +import lombok.extern.slf4j.Slf4j; + +/** + * 异常处理器 + * + * @author chenshun + * @email sunlightcs@gmail.com + * @date 2016年10月27日 下午10:16:19 + */ +@RestControllerAdvice +@Slf4j +public class JeecgBootExceptionHandler { + + /** + * 处理自定义异常 + */ + @ExceptionHandler(JeecgBootException.class) + public Result handleRRException(JeecgBootException e){ + log.error(e.getMessage(), e); + return Result.error(e.getMessage()); + } + + @ExceptionHandler(NoHandlerFoundException.class) + public Result handlerNoFoundException(Exception e) { + log.error(e.getMessage(), e); + return Result.error(404, "路径不存在,请检查路径是否正确"); + } + + @ExceptionHandler(DuplicateKeyException.class) + public Result handleDuplicateKeyException(DuplicateKeyException e){ + log.error(e.getMessage(), e); + return Result.error("数据库中已存在该记录"); + } + + @ExceptionHandler(AuthorizationException.class) + public Result handleAuthorizationException(AuthorizationException e){ + log.error(e.getMessage(), e); + return Result.error("没有权限,请联系管理员授权"); + } + + @ExceptionHandler(Exception.class) + public Result handleException(Exception e){ + log.error(e.getMessage(), e); + return Result.error(e.getMessage()); + } +} diff --git a/jeecg-boot/src/main/java/org/jeecg/common/system/api/ISysBaseAPI.java b/jeecg-boot/src/main/java/org/jeecg/common/system/api/ISysBaseAPI.java new file mode 100644 index 00000000..ed31de1e --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/common/system/api/ISysBaseAPI.java @@ -0,0 +1,12 @@ +package org.jeecg.common.system.api; + +public interface ISysBaseAPI { + + /** + * 日志添加 + * @param LogContent 内容 + * @param logType 日志类型(0:操作日志;1:登录日志;2:定时任务) + * @param operatetype 操作类型(1:添加;2:修改;3:删除;) + */ + void addLog(String LogContent, Integer logType, Integer operatetype); +} diff --git a/jeecg-boot/src/main/java/org/jeecg/common/system/controller/CommonController.java b/jeecg-boot/src/main/java/org/jeecg/common/system/controller/CommonController.java new file mode 100644 index 00000000..e93d9ac5 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/common/system/controller/CommonController.java @@ -0,0 +1,143 @@ +package org.jeecg.common.system.controller; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.text.SimpleDateFormat; +import java.util.Date; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.jeecg.common.api.vo.Result; +import org.jeecg.modules.system.entity.SysUser; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.util.AntPathMatcher; +import org.springframework.util.FileCopyUtils; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springframework.web.servlet.HandlerMapping; + +import lombok.extern.slf4j.Slf4j; + +/** + *

    + * 用户表 前端控制器 + *

    + * + * @author scott + * @since 2018-12-20 + */ +@Slf4j +@RestController +@RequestMapping("/sys/common") +public class CommonController { + + @Value(value = "${uploadpath}") + private String uploadpath; + + @PostMapping(value = "/upload") + public Result upload(HttpServletRequest request, HttpServletResponse response) { + Result result = new Result<>(); + try { + String ctxPath = uploadpath; + String fileName = null; + String bizPath = "user"; + String nowday = new SimpleDateFormat("yyyyMMdd").format(new Date()); + File file = new File(ctxPath + File.separator + bizPath + File.separator + nowday); + if (!file.exists()) { + file.mkdirs();// 创建文件根目录 + } + MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; + MultipartFile mf = multipartRequest.getFile("file");// 获取上传文件对象 + String orgName = mf.getOriginalFilename();// 获取文件名 + fileName = orgName.substring(0, orgName.lastIndexOf(".")) + "_" + System.currentTimeMillis() + orgName.substring(orgName.indexOf(".")); + String savePath = file.getPath() + File.separator + fileName; + File savefile = new File(savePath); + FileCopyUtils.copy(mf.getBytes(), savefile); + String dbpath = bizPath + File.separator + nowday + File.separator + fileName; + if (dbpath.contains("\\")) { + dbpath = dbpath.replace("\\", "/"); + } + result.setMessage(dbpath); + result.setSuccess(true); + } catch (IOException e) { + result.setSuccess(false); + result.setMessage(e.getMessage()); + e.printStackTrace(); + } + return result; + } + + /** + * 预览图片 + * 请求地址:http://localhost:8080/common/view/{user/20190119/e1fe9925bc315c60addea1b98eb1cb1349547719_1547866868179.jpg} + * + * @param request + * @param response + */ + @GetMapping(value = "/view/**") + public void view(HttpServletRequest request, HttpServletResponse response) { + // ISO-8859-1 ==> UTF-8 进行编码转换 + String imgPath = extractPathFromPattern(request); + // 其余处理略 + InputStream inputStream = null; + OutputStream outputStream = null; + try { + imgPath = imgPath.replace("..", ""); + if (imgPath.endsWith(",")) { + imgPath = imgPath.substring(0, imgPath.length() - 1); + } + response.setContentType("image/jpeg;charset=utf-8"); + String localPath = uploadpath; + String imgurl = localPath + File.separator + imgPath; + inputStream = new BufferedInputStream(new FileInputStream(imgurl)); + outputStream = response.getOutputStream(); + byte[] buf = new byte[1024]; + int len; + while ((len = inputStream.read(buf)) > 0) { + outputStream.write(buf, 0, len); + } + response.flushBuffer(); + } catch (IOException e) { + log.info("预览图片失败" + e.getMessage()); + // e.printStackTrace(); + } finally { + if (inputStream != null) { + try { + inputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (outputStream != null) { + try { + outputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + } + + /** + * 把指定URL后的字符串全部截断当成参数 + * 这么做是为了防止URL中包含中文或者特殊字符(/等)时,匹配不了的问题 + * @param request + * @return + */ + private static String extractPathFromPattern(final HttpServletRequest request) { + String path = (String) request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE); + String bestMatchPattern = (String) request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE); + return new AntPathMatcher().extractPathWithinPattern(bestMatchPattern, path); + } + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/common/util/DateUtils.java b/jeecg-boot/src/main/java/org/jeecg/common/util/DateUtils.java new file mode 100644 index 00000000..2186b399 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/common/util/DateUtils.java @@ -0,0 +1,620 @@ +package org.jeecg.common.util; + +import java.beans.PropertyEditorSupport; +import java.sql.Timestamp; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; + +import org.springframework.util.StringUtils; + +/** + * + * 类描述:时间操作定义类 + * + * @author: 张代浩 @date: 日期:2012-12-8 时间:下午12:15:03 + * @version 1.0 + */ +public class DateUtils extends PropertyEditorSupport { + // 各种时间格式 + public static final SimpleDateFormat date_sdf = new SimpleDateFormat("yyyy-MM-dd"); + // 各种时间格式 + public static final SimpleDateFormat yyyyMMdd = new SimpleDateFormat("yyyyMMdd"); + // 各种时间格式 + public static final SimpleDateFormat date_sdf_wz = new SimpleDateFormat("yyyy年MM月dd日"); + public static final SimpleDateFormat time_sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + public static final SimpleDateFormat yyyymmddhhmmss = new SimpleDateFormat("yyyyMMddHHmmss"); + public static final SimpleDateFormat short_time_sdf = new SimpleDateFormat("HH:mm"); + public static final SimpleDateFormat datetimeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + // 以毫秒表示的时间 + private static final long DAY_IN_MILLIS = 24 * 3600 * 1000; + private static final long HOUR_IN_MILLIS = 3600 * 1000; + private static final long MINUTE_IN_MILLIS = 60 * 1000; + private static final long SECOND_IN_MILLIS = 1000; + + // 指定模式的时间格式 + private static SimpleDateFormat getSDFormat(String pattern) { + return new SimpleDateFormat(pattern); + } + + /** + * 当前日历,这里用中国时间表示 + * + * @return 以当地时区表示的系统当前日历 + */ + public static Calendar getCalendar() { + return Calendar.getInstance(); + } + + /** + * 指定毫秒数表示的日历 + * + * @param millis 毫秒数 + * @return 指定毫秒数表示的日历 + */ + public static Calendar getCalendar(long millis) { + Calendar cal = Calendar.getInstance(); + // --------------------cal.setTimeInMillis(millis); + cal.setTime(new Date(millis)); + return cal; + } + + // //////////////////////////////////////////////////////////////////////////// + // getDate + // 各种方式获取的Date + // //////////////////////////////////////////////////////////////////////////// + + /** + * 当前日期 + * + * @return 系统当前时间 + */ + public static Date getDate() { + return new Date(); + } + + /** + * 指定毫秒数表示的日期 + * + * @param millis 毫秒数 + * @return 指定毫秒数表示的日期 + */ + public static Date getDate(long millis) { + return new Date(millis); + } + + /** + * 时间戳转换为字符串 + * + * @param time + * @return + */ + public static String timestamptoStr(Timestamp time) { + Date date = null; + if (null != time) { + date = new Date(time.getTime()); + } + return date2Str(date_sdf); + } + + /** + * 字符串转换时间戳 + * + * @param str + * @return + */ + public static Timestamp str2Timestamp(String str) { + Date date = str2Date(str, date_sdf); + return new Timestamp(date.getTime()); + } + + /** + * 字符串转换成日期 + * + * @param str + * @param sdf + * @return + */ + public static Date str2Date(String str, SimpleDateFormat sdf) { + if (null == str || "".equals(str)) { + return null; + } + Date date = null; + try { + date = sdf.parse(str); + return date; + } catch (ParseException e) { + e.printStackTrace(); + } + return null; + } + + /** + * 日期转换为字符串 + * + * @param date 日期 + * @param format 日期格式 + * @return 字符串 + */ + public static String date2Str(SimpleDateFormat date_sdf) { + Date date = getDate(); + if (null == date) { + return null; + } + return date_sdf.format(date); + } + + /** + * 格式化时间 + * + * @param date + * @param format + * @return + */ + public static String dateformat(String date, String format) { + SimpleDateFormat sformat = new SimpleDateFormat(format); + Date _date = null; + try { + _date = sformat.parse(date); + } catch (ParseException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return sformat.format(_date); + } + + /** + * 日期转换为字符串 + * + * @param date 日期 + * @param format 日期格式 + * @return 字符串 + */ + public static String date2Str(Date date, SimpleDateFormat date_sdf) { + if (null == date) { + return null; + } + return date_sdf.format(date); + } + + /** + * 日期转换为字符串 + * + * @param date 日期 + * @param format 日期格式 + * @return 字符串 + */ + public static String getDate(String format) { + Date date = new Date(); + if (null == date) { + return null; + } + SimpleDateFormat sdf = new SimpleDateFormat(format); + return sdf.format(date); + } + + /** + * 指定毫秒数的时间戳 + * + * @param millis 毫秒数 + * @return 指定毫秒数的时间戳 + */ + public static Timestamp getTimestamp(long millis) { + return new Timestamp(millis); + } + + /** + * 以字符形式表示的时间戳 + * + * @param time 毫秒数 + * @return 以字符形式表示的时间戳 + */ + public static Timestamp getTimestamp(String time) { + return new Timestamp(Long.parseLong(time)); + } + + /** + * 系统当前的时间戳 + * + * @return 系统当前的时间戳 + */ + public static Timestamp getTimestamp() { + return new Timestamp(new Date().getTime()); + } + + /** + * 当前时间,格式 yyyy-MM-dd HH:mm:ss + * + * @return 当前时间的标准形式字符串 + */ + public static String now() { + return datetimeFormat.format(getCalendar().getTime()); + } + + /** + * 指定日期的时间戳 + * + * @param date 指定日期 + * @return 指定日期的时间戳 + */ + public static Timestamp getTimestamp(Date date) { + return new Timestamp(date.getTime()); + } + + /** + * 指定日历的时间戳 + * + * @param cal 指定日历 + * @return 指定日历的时间戳 + */ + public static Timestamp getCalendarTimestamp(Calendar cal) { + // ---------------------return new Timestamp(cal.getTimeInMillis()); + return new Timestamp(cal.getTime().getTime()); + } + + public static Timestamp gettimestamp() { + Date dt = new Date(); + DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String nowTime = df.format(dt); + java.sql.Timestamp buydate = java.sql.Timestamp.valueOf(nowTime); + return buydate; + } + + // //////////////////////////////////////////////////////////////////////////// + // getMillis + // 各种方式获取的Millis + // //////////////////////////////////////////////////////////////////////////// + + /** + * 系统时间的毫秒数 + * + * @return 系统时间的毫秒数 + */ + public static long getMillis() { + return new Date().getTime(); + } + + /** + * 指定日历的毫秒数 + * + * @param cal 指定日历 + * @return 指定日历的毫秒数 + */ + public static long getMillis(Calendar cal) { + // --------------------return cal.getTimeInMillis(); + return cal.getTime().getTime(); + } + + /** + * 指定日期的毫秒数 + * + * @param date 指定日期 + * @return 指定日期的毫秒数 + */ + public static long getMillis(Date date) { + return date.getTime(); + } + + /** + * 指定时间戳的毫秒数 + * + * @param ts 指定时间戳 + * @return 指定时间戳的毫秒数 + */ + public static long getMillis(Timestamp ts) { + return ts.getTime(); + } + + // //////////////////////////////////////////////////////////////////////////// + // formatDate + // 将日期按照一定的格式转化为字符串 + // //////////////////////////////////////////////////////////////////////////// + + /** + * 默认方式表示的系统当前日期,具体格式:年-月-日 + * + * @return 默认日期按“年-月-日“格式显示 + */ + public static String formatDate() { + return date_sdf.format(getCalendar().getTime()); + } + + /** + * 默认方式表示的系统当前日期,具体格式:yyyy-MM-dd HH:mm:ss + * + * @return 默认日期按“yyyy-MM-dd HH:mm:ss“格式显示 + */ + public static String formatDateTime() { + return datetimeFormat.format(getCalendar().getTime()); + } + + /** + * 获取时间字符串 + */ + public static String getDataString(SimpleDateFormat formatstr) { + return formatstr.format(getCalendar().getTime()); + } + + /** + * 指定日期的默认显示,具体格式:年-月-日 + * + * @param cal 指定的日期 + * @return 指定日期按“年-月-日“格式显示 + */ + public static String formatDate(Calendar cal) { + return date_sdf.format(cal.getTime()); + } + + /** + * 指定日期的默认显示,具体格式:年-月-日 + * + * @param date 指定的日期 + * @return 指定日期按“年-月-日“格式显示 + */ + public static String formatDate(Date date) { + return date_sdf.format(date); + } + + /** + * 指定毫秒数表示日期的默认显示,具体格式:年-月-日 + * + * @param millis 指定的毫秒数 + * @return 指定毫秒数表示日期按“年-月-日“格式显示 + */ + public static String formatDate(long millis) { + return date_sdf.format(new Date(millis)); + } + + /** + * 默认日期按指定格式显示 + * + * @param pattern 指定的格式 + * @return 默认日期按指定格式显示 + */ + public static String formatDate(String pattern) { + return getSDFormat(pattern).format(getCalendar().getTime()); + } + + /** + * 指定日期按指定格式显示 + * + * @param cal 指定的日期 + * @param pattern 指定的格式 + * @return 指定日期按指定格式显示 + */ + public static String formatDate(Calendar cal, String pattern) { + return getSDFormat(pattern).format(cal.getTime()); + } + + /** + * 指定日期按指定格式显示 + * + * @param date 指定的日期 + * @param pattern 指定的格式 + * @return 指定日期按指定格式显示 + */ + public static String formatDate(Date date, String pattern) { + return getSDFormat(pattern).format(date); + } + + // //////////////////////////////////////////////////////////////////////////// + // formatTime + // 将日期按照一定的格式转化为字符串 + // //////////////////////////////////////////////////////////////////////////// + + /** + * 默认方式表示的系统当前日期,具体格式:年-月-日 时:分 + * + * @return 默认日期按“年-月-日 时:分“格式显示 + */ + public static String formatTime() { + return time_sdf.format(getCalendar().getTime()); + } + + /** + * 指定毫秒数表示日期的默认显示,具体格式:年-月-日 时:分 + * + * @param millis 指定的毫秒数 + * @return 指定毫秒数表示日期按“年-月-日 时:分“格式显示 + */ + public static String formatTime(long millis) { + return time_sdf.format(new Date(millis)); + } + + /** + * 指定日期的默认显示,具体格式:年-月-日 时:分 + * + * @param cal 指定的日期 + * @return 指定日期按“年-月-日 时:分“格式显示 + */ + public static String formatTime(Calendar cal) { + return time_sdf.format(cal.getTime()); + } + + /** + * 指定日期的默认显示,具体格式:年-月-日 时:分 + * + * @param date 指定的日期 + * @return 指定日期按“年-月-日 时:分“格式显示 + */ + public static String formatTime(Date date) { + return time_sdf.format(date); + } + + // //////////////////////////////////////////////////////////////////////////// + // formatShortTime + // 将日期按照一定的格式转化为字符串 + // //////////////////////////////////////////////////////////////////////////// + + /** + * 默认方式表示的系统当前日期,具体格式:时:分 + * + * @return 默认日期按“时:分“格式显示 + */ + public static String formatShortTime() { + return short_time_sdf.format(getCalendar().getTime()); + } + + /** + * 指定毫秒数表示日期的默认显示,具体格式:时:分 + * + * @param millis 指定的毫秒数 + * @return 指定毫秒数表示日期按“时:分“格式显示 + */ + public static String formatShortTime(long millis) { + return short_time_sdf.format(new Date(millis)); + } + + /** + * 指定日期的默认显示,具体格式:时:分 + * + * @param cal 指定的日期 + * @return 指定日期按“时:分“格式显示 + */ + public static String formatShortTime(Calendar cal) { + return short_time_sdf.format(cal.getTime()); + } + + /** + * 指定日期的默认显示,具体格式:时:分 + * + * @param date 指定的日期 + * @return 指定日期按“时:分“格式显示 + */ + public static String formatShortTime(Date date) { + return short_time_sdf.format(date); + } + + // //////////////////////////////////////////////////////////////////////////// + // parseDate + // parseCalendar + // parseTimestamp + // 将字符串按照一定的格式转化为日期或时间 + // //////////////////////////////////////////////////////////////////////////// + + /** + * 根据指定的格式将字符串转换成Date 如输入:2003-11-19 11:20:20将按照这个转成时间 + * + * @param src 将要转换的原始字符窜 + * @param pattern 转换的匹配格式 + * @return 如果转换成功则返回转换后的日期 + * @throws ParseException + * @throws AIDateFormatException + */ + public static Date parseDate(String src, String pattern) throws ParseException { + return getSDFormat(pattern).parse(src); + + } + + /** + * 根据指定的格式将字符串转换成Date 如输入:2003-11-19 11:20:20将按照这个转成时间 + * + * @param src 将要转换的原始字符窜 + * @param pattern 转换的匹配格式 + * @return 如果转换成功则返回转换后的日期 + * @throws ParseException + * @throws AIDateFormatException + */ + public static Calendar parseCalendar(String src, String pattern) throws ParseException { + + Date date = parseDate(src, pattern); + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + return cal; + } + + public static String formatAddDate(String src, String pattern, int amount) throws ParseException { + Calendar cal; + cal = parseCalendar(src, pattern); + cal.add(Calendar.DATE, amount); + return formatDate(cal); + } + + /** + * 根据指定的格式将字符串转换成Date 如输入:2003-11-19 11:20:20将按照这个转成时间 + * + * @param src 将要转换的原始字符窜 + * @param pattern 转换的匹配格式 + * @return 如果转换成功则返回转换后的时间戳 + * @throws ParseException + * @throws AIDateFormatException + */ + public static Timestamp parseTimestamp(String src, String pattern) throws ParseException { + Date date = parseDate(src, pattern); + return new Timestamp(date.getTime()); + } + + // //////////////////////////////////////////////////////////////////////////// + // dateDiff + // 计算两个日期之间的差值 + // //////////////////////////////////////////////////////////////////////////// + + /** + * 计算两个时间之间的差值,根据标志的不同而不同 + * + * @param flag 计算标志,表示按照年/月/日/时/分/秒等计算 + * @param calSrc 减数 + * @param calDes 被减数 + * @return 两个日期之间的差值 + */ + public static int dateDiff(char flag, Calendar calSrc, Calendar calDes) { + + long millisDiff = getMillis(calSrc) - getMillis(calDes); + + if (flag == 'y') { + return (calSrc.get(calSrc.YEAR) - calDes.get(calDes.YEAR)); + } + + if (flag == 'd') { + return (int) (millisDiff / DAY_IN_MILLIS); + } + + if (flag == 'h') { + return (int) (millisDiff / HOUR_IN_MILLIS); + } + + if (flag == 'm') { + return (int) (millisDiff / MINUTE_IN_MILLIS); + } + + if (flag == 's') { + return (int) (millisDiff / SECOND_IN_MILLIS); + } + + return 0; + } + + /** + * String类型 转换为Date, 如果参数长度为10 转换格式”yyyy-MM-dd“ 如果参数长度为19 转换格式”yyyy-MM-dd + * HH:mm:ss“ * @param text String类型的时间值 + */ + public void setAsText(String text) throws IllegalArgumentException { + if (StringUtils.hasText(text)) { + try { + if (text.indexOf(":") == -1 && text.length() == 10) { + setValue(this.date_sdf.parse(text)); + } else if (text.indexOf(":") > 0 && text.length() == 19) { + setValue(this.datetimeFormat.parse(text)); + } else { + throw new IllegalArgumentException("Could not parse date, date format is error "); + } + } catch (ParseException ex) { + IllegalArgumentException iae = new IllegalArgumentException("Could not parse date: " + ex.getMessage()); + iae.initCause(ex); + throw iae; + } + } else { + setValue(null); + } + } + + public static int getYear() { + GregorianCalendar calendar = new GregorianCalendar(); + calendar.setTime(getDate()); + return calendar.get(Calendar.YEAR); + } + +} \ No newline at end of file diff --git a/jeecg-boot/src/main/java/org/jeecg/common/util/IPUtils.java b/jeecg-boot/src/main/java/org/jeecg/common/util/IPUtils.java new file mode 100644 index 00000000..492b8599 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/common/util/IPUtils.java @@ -0,0 +1,58 @@ +package org.jeecg.common.util; + +import com.alibaba.druid.util.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.servlet.http.HttpServletRequest; + +/** + * IP地址 + * + * @author scott + * @email jeecgos@163.com + * @date 2019年01月14日 + */ +public class IPUtils { + private static Logger logger = LoggerFactory.getLogger(IPUtils.class); + + /** + * 获取IP地址 + * + * 使用Nginx等反向代理软件, 则不能通过request.getRemoteAddr()获取IP地址 + * 如果使用了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP地址,X-Forwarded-For中第一个非unknown的有效IP字符串,则为真实IP地址 + */ + public static String getIpAddr(HttpServletRequest request) { + String ip = null; + try { + ip = request.getHeader("x-forwarded-for"); + if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("Proxy-Client-IP"); + } + if (StringUtils.isEmpty(ip) || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_CLIENT_IP"); + } + if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_X_FORWARDED_FOR"); + } + if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + } + } catch (Exception e) { + logger.error("IPUtils ERROR ", e); + } + +// //使用代理,则获取第一个IP地址 +// if(StringUtils.isEmpty(ip) && ip.length() > 15) { +// if(ip.indexOf(",") > 0) { +// ip = ip.substring(0, ip.indexOf(",")); +// } +// } + + return ip; + } + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/common/util/MD5Util.java b/jeecg-boot/src/main/java/org/jeecg/common/util/MD5Util.java new file mode 100644 index 00000000..0bba84bd --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/common/util/MD5Util.java @@ -0,0 +1,41 @@ +package org.jeecg.common.util; + +import java.security.MessageDigest; + +public class MD5Util { + + public static String byteArrayToHexString(byte b[]) { + StringBuffer resultSb = new StringBuffer(); + for (int i = 0; i < b.length; i++) + resultSb.append(byteToHexString(b[i])); + + return resultSb.toString(); + } + + private static String byteToHexString(byte b) { + int n = b; + if (n < 0) + n += 256; + int d1 = n / 16; + int d2 = n % 16; + return hexDigits[d1] + hexDigits[d2]; + } + + public static String MD5Encode(String origin, String charsetname) { + String resultString = null; + try { + resultString = new String(origin); + MessageDigest md = MessageDigest.getInstance("MD5"); + if (charsetname == null || "".equals(charsetname)) + resultString = byteArrayToHexString(md.digest(resultString.getBytes())); + else + resultString = byteArrayToHexString(md.digest(resultString.getBytes(charsetname))); + } catch (Exception exception) { + } + return resultString; + } + + private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5", + "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" }; + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/common/util/MyClassLoader.java b/jeecg-boot/src/main/java/org/jeecg/common/util/MyClassLoader.java new file mode 100644 index 00000000..5f84e781 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/common/util/MyClassLoader.java @@ -0,0 +1,87 @@ +package org.jeecg.common.util; + +/** + * @author 张代浩 + */ +public class MyClassLoader extends ClassLoader { + public static Class getClassByScn(String className) { + Class myclass = null; + try { + myclass = Class.forName(className); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + throw new RuntimeException(className+" not found!"); + } + return myclass; + } + + // 获得类的全名,包括包名 + public static String getPackPath(Object object) { + // 检查用户传入的参数是否为空 + if (object == null) + throw new java.lang.IllegalArgumentException("参数不能为空!"); + // 获得类的全名,包括包名 + String clsName = object.getClass().getName(); + return clsName; + } + + public static String getAppPath(Class cls) { + // 检查用户传入的参数是否为空 + if (cls == null) + throw new java.lang.IllegalArgumentException("参数不能为空!"); + ClassLoader loader = cls.getClassLoader(); + // 获得类的全名,包括包名 + String clsName = cls.getName() + ".class"; + // 获得传入参数所在的包 + Package pack = cls.getPackage(); + String path = ""; + // 如果不是匿名包,将包名转化为路径 + if (pack != null) { + String packName = pack.getName(); + // 此处简单判定是否是Java基础类库,防止用户传入JDK内置的类库 + if (packName.startsWith("java.") || packName.startsWith("javax.")) + throw new java.lang.IllegalArgumentException("不要传送系统类!"); + // 在类的名称中,去掉包名的部分,获得类的文件名 + clsName = clsName.substring(packName.length() + 1); + // 判定包名是否是简单包名,如果是,则直接将包名转换为路径, + if (packName.indexOf(".") < 0) + path = packName + "/"; + else {// 否则按照包名的组成部分,将包名转换为路径 + int start = 0, end = 0; + end = packName.indexOf("."); + while (end != -1) { + path = path + packName.substring(start, end) + "/"; + start = end + 1; + end = packName.indexOf(".", start); + } + path = path + packName.substring(start) + "/"; + } + } + // 调用ClassLoader的getResource方法,传入包含路径信息的类文件名 + java.net.URL url = loader.getResource(path + clsName); + // 从URL对象中获取路径信息 + String realPath = url.getPath(); + // 去掉路径信息中的协议名"file:" + int pos = realPath.indexOf("file:"); + if (pos > -1) + realPath = realPath.substring(pos + 5); + // 去掉路径信息最后包含类文件信息的部分,得到类所在的路径 + pos = realPath.indexOf(path + clsName); + realPath = realPath.substring(0, pos - 1); + // 如果类文件被打包到JAR等文件中时,去掉对应的JAR等打包文件名 + if (realPath.endsWith("!")) + realPath = realPath.substring(0, realPath.lastIndexOf("/")); + /*------------------------------------------------------------ + ClassLoader的getResource方法使用了utf-8对路径信息进行了编码,当路径 + 中存在中文和空格时,他会对这些字符进行转换,这样,得到的往往不是我们想要 + 的真实路径,在此,调用了URLDecoder的decode方法进行解码,以便得到原始的 + 中文及空格路径 + -------------------------------------------------------------*/ + try { + realPath = java.net.URLDecoder.decode(realPath, "utf-8"); + } catch (Exception e) { + throw new RuntimeException(e); + } + return realPath; + }// getAppPath定义结束 +} diff --git a/jeecg-boot/src/main/java/org/jeecg/common/util/PasswordUtil.java b/jeecg-boot/src/main/java/org/jeecg/common/util/PasswordUtil.java new file mode 100644 index 00000000..382f94ab --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/common/util/PasswordUtil.java @@ -0,0 +1,179 @@ +package org.jeecg.common.util; + +import java.security.Key; +import java.security.SecureRandom; +import javax.crypto.Cipher; +import javax.crypto.SecretKey; +import javax.crypto.SecretKeyFactory; +import javax.crypto.spec.PBEKeySpec; +import javax.crypto.spec.PBEParameterSpec; +public class PasswordUtil { + + /** + * JAVA6支持以下任意一种算法 PBEWITHMD5ANDDES PBEWITHMD5ANDTRIPLEDES + * PBEWITHSHAANDDESEDE PBEWITHSHA1ANDRC2_40 PBKDF2WITHHMACSHA1 + * */ + + /** + * 定义使用的算法为:PBEWITHMD5andDES算法 + */ + public static final String ALGORITHM = "PBEWithMD5AndDES";//加密算法 + public static final String Salt = "63293188";//密钥 + + /** + * 定义迭代次数为1000次 + */ + private static final int ITERATIONCOUNT = 1000; + + /** + * 获取加密算法中使用的盐值,解密中使用的盐值必须与加密中使用的相同才能完成操作. 盐长度必须为8字节 + * + * @return byte[] 盐值 + * */ + public static byte[] getSalt() throws Exception { + // 实例化安全随机数 + SecureRandom random = new SecureRandom(); + // 产出盐 + return random.generateSeed(8); + } + + public static byte[] getStaticSalt() { + // 产出盐 + return Salt.getBytes(); + } + + /** + * 根据PBE密码生成一把密钥 + * + * @param password + * 生成密钥时所使用的密码 + * @return Key PBE算法密钥 + * */ + private static Key getPBEKey(String password) { + // 实例化使用的算法 + SecretKeyFactory keyFactory; + SecretKey secretKey = null; + try { + keyFactory = SecretKeyFactory.getInstance(ALGORITHM); + // 设置PBE密钥参数 + PBEKeySpec keySpec = new PBEKeySpec(password.toCharArray()); + // 生成密钥 + secretKey = keyFactory.generateSecret(keySpec); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + return secretKey; + } + + /** + * 加密明文字符串 + * + * @param plaintext + * 待加密的明文字符串 + * @param password + * 生成密钥时所使用的密码 + * @param salt + * 盐值 + * @return 加密后的密文字符串 + * @throws Exception + */ + public static String encrypt(String plaintext, String password, String salt) { + + Key key = getPBEKey(password); + byte[] encipheredData = null; + PBEParameterSpec parameterSpec = new PBEParameterSpec(salt.getBytes(), ITERATIONCOUNT); + try { + Cipher cipher = Cipher.getInstance(ALGORITHM); + + cipher.init(Cipher.ENCRYPT_MODE, key, parameterSpec); + + encipheredData = cipher.doFinal(plaintext.getBytes()); + } catch (Exception e) { + } + return bytesToHexString(encipheredData); + } + + /** + * 解密密文字符串 + * + * @param ciphertext + * 待解密的密文字符串 + * @param password + * 生成密钥时所使用的密码(如需解密,该参数需要与加密时使用的一致) + * @param salt + * 盐值(如需解密,该参数需要与加密时使用的一致) + * @return 解密后的明文字符串 + * @throws Exception + */ + public static String decrypt(String ciphertext, String password, String salt) { + + Key key = getPBEKey(password); + byte[] passDec = null; + PBEParameterSpec parameterSpec = new PBEParameterSpec(salt.getBytes(), ITERATIONCOUNT); + try { + Cipher cipher = Cipher.getInstance(ALGORITHM); + + cipher.init(Cipher.DECRYPT_MODE, key, parameterSpec); + + passDec = cipher.doFinal(hexStringToBytes(ciphertext)); + } + + catch (Exception e) { + // TODO: handle exception + } + return new String(passDec); + } + + /** + * 将字节数组转换为十六进制字符串 + * + * @param src + * 字节数组 + * @return + */ + public static String bytesToHexString(byte[] src) { + StringBuilder stringBuilder = new StringBuilder(""); + if (src == null || src.length <= 0) { + return null; + } + for (int i = 0; i < src.length; i++) { + int v = src[i] & 0xFF; + String hv = Integer.toHexString(v); + if (hv.length() < 2) { + stringBuilder.append(0); + } + stringBuilder.append(hv); + } + return stringBuilder.toString(); + } + + /** + * 将十六进制字符串转换为字节数组 + * + * @param hexString + * 十六进制字符串 + * @return + */ + public static byte[] hexStringToBytes(String hexString) { + if (hexString == null || hexString.equals("")) { + return null; + } + hexString = hexString.toUpperCase(); + int length = hexString.length() / 2; + char[] hexChars = hexString.toCharArray(); + byte[] d = new byte[length]; + for (int i = 0; i < length; i++) { + int pos = i * 2; + d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1])); + } + return d; + } + + private static byte charToByte(char c) { + return (byte) "0123456789ABCDEF".indexOf(c); + } + + +} \ No newline at end of file diff --git a/jeecg-boot/src/main/java/org/jeecg/common/util/RedisUtil.java b/jeecg-boot/src/main/java/org/jeecg/common/util/RedisUtil.java new file mode 100644 index 00000000..7e185aaa --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/common/util/RedisUtil.java @@ -0,0 +1,571 @@ +package org.jeecg.common.util; + +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.TimeUnit; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +/** + * redis 工具类 + * @author Scott + * + */ +@Component +public class RedisUtil { + + @Autowired + private RedisTemplate redisTemplate; + @Autowired + private StringRedisTemplate stringRedisTemplate; + + /** + * 指定缓存失效时间 + * + * @param key 键 + * @param time 时间(秒) + * @return + */ + public boolean expire(String key, long time) { + try { + if (time > 0) { + redisTemplate.expire(key, time, TimeUnit.SECONDS); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 根据key 获取过期时间 + * + * @param key 键 不能为null + * @return 时间(秒) 返回0代表为永久有效 + */ + public long getExpire(String key) { + return redisTemplate.getExpire(key, TimeUnit.SECONDS); + } + + /** + * 判断key是否存在 + * + * @param key 键 + * @return true 存在 false不存在 + */ + public boolean hasKey(String key) { + try { + return redisTemplate.hasKey(key); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 删除缓存 + * + * @param key 可以传一个值 或多个 + */ + @SuppressWarnings("unchecked") + public void del(String... key) { + if (key != null && key.length > 0) { + if (key.length == 1) { + redisTemplate.delete(key[0]); + } else { + redisTemplate.delete(CollectionUtils.arrayToList(key)); + } + } + } + + // ============================String============================= + /** + * 普通缓存获取 + * + * @param key 键 + * @return 值 + */ + public Object get(String key) { + return key == null ? null : redisTemplate.opsForValue().get(key); + } + + /** + * 普通缓存放入 + * + * @param key 键 + * @param value 值 + * @return true成功 false失败 + */ + public boolean set(String key, Object value) { + try { + redisTemplate.opsForValue().set(key, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + + } + + /** + * 普通缓存放入并设置时间 + * + * @param key 键 + * @param value 值 + * @param time 时间(秒) time要大于0 如果time小于等于0 将设置无限期 + * @return true成功 false 失败 + */ + public boolean set(String key, Object value, long time) { + try { + if (time > 0) { + redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS); + } else { + set(key, value); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 递增 + * + * @param key 键 + * @param by 要增加几(大于0) + * @return + */ + public long incr(String key, long delta) { + if (delta < 0) { + throw new RuntimeException("递增因子必须大于0"); + } + return redisTemplate.opsForValue().increment(key, delta); + } + + /** + * 递减 + * + * @param key 键 + * @param by 要减少几(小于0) + * @return + */ + public long decr(String key, long delta) { + if (delta < 0) { + throw new RuntimeException("递减因子必须大于0"); + } + return redisTemplate.opsForValue().increment(key, -delta); + } + + // ================================Map================================= + /** + * HashGet + * + * @param key 键 不能为null + * @param item 项 不能为null + * @return 值 + */ + public Object hget(String key, String item) { + return redisTemplate.opsForHash().get(key, item); + } + + /** + * 获取hashKey对应的所有键值 + * + * @param key 键 + * @return 对应的多个键值 + */ + public Map hmget(String key) { + return redisTemplate.opsForHash().entries(key); + } + + /** + * HashSet + * + * @param key 键 + * @param map 对应多个键值 + * @return true 成功 false 失败 + */ + public boolean hmset(String key, Map map) { + try { + redisTemplate.opsForHash().putAll(key, map); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * HashSet 并设置时间 + * + * @param key 键 + * @param map 对应多个键值 + * @param time 时间(秒) + * @return true成功 false失败 + */ + public boolean hmset(String key, Map map, long time) { + try { + redisTemplate.opsForHash().putAll(key, map); + if (time > 0) { + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 向一张hash表中放入数据,如果不存在将创建 + * + * @param key 键 + * @param item 项 + * @param value 值 + * @return true 成功 false失败 + */ + public boolean hset(String key, String item, Object value) { + try { + redisTemplate.opsForHash().put(key, item, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 向一张hash表中放入数据,如果不存在将创建 + * + * @param key 键 + * @param item 项 + * @param value 值 + * @param time 时间(秒) 注意:如果已存在的hash表有时间,这里将会替换原有的时间 + * @return true 成功 false失败 + */ + public boolean hset(String key, String item, Object value, long time) { + try { + redisTemplate.opsForHash().put(key, item, value); + if (time > 0) { + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 删除hash表中的值 + * + * @param key 键 不能为null + * @param item 项 可以使多个 不能为null + */ + public void hdel(String key, Object... item) { + redisTemplate.opsForHash().delete(key, item); + } + + /** + * 判断hash表中是否有该项的值 + * + * @param key 键 不能为null + * @param item 项 不能为null + * @return true 存在 false不存在 + */ + public boolean hHasKey(String key, String item) { + return redisTemplate.opsForHash().hasKey(key, item); + } + + /** + * hash递增 如果不存在,就会创建一个 并把新增后的值返回 + * + * @param key 键 + * @param item 项 + * @param by 要增加几(大于0) + * @return + */ + public double hincr(String key, String item, double by) { + return redisTemplate.opsForHash().increment(key, item, by); + } + + /** + * hash递减 + * + * @param key 键 + * @param item 项 + * @param by 要减少记(小于0) + * @return + */ + public double hdecr(String key, String item, double by) { + return redisTemplate.opsForHash().increment(key, item, -by); + } + + // ============================set============================= + /** + * 根据key获取Set中的所有值 + * + * @param key 键 + * @return + */ + public Set sGet(String key) { + try { + return redisTemplate.opsForSet().members(key); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * 根据value从一个set中查询,是否存在 + * + * @param key 键 + * @param value 值 + * @return true 存在 false不存在 + */ + public boolean sHasKey(String key, Object value) { + try { + return redisTemplate.opsForSet().isMember(key, value); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 将数据放入set缓存 + * + * @param key 键 + * @param values 值 可以是多个 + * @return 成功个数 + */ + public long sSet(String key, Object... values) { + try { + return redisTemplate.opsForSet().add(key, values); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + /** + * 将set数据放入缓存 + * + * @param key 键 + * @param time 时间(秒) + * @param values 值 可以是多个 + * @return 成功个数 + */ + public long sSetAndTime(String key, long time, Object... values) { + try { + Long count = redisTemplate.opsForSet().add(key, values); + if (time > 0) + expire(key, time); + return count; + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + /** + * 获取set缓存的长度 + * + * @param key 键 + * @return + */ + public long sGetSetSize(String key) { + try { + return redisTemplate.opsForSet().size(key); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + /** + * 移除值为value的 + * + * @param key 键 + * @param values 值 可以是多个 + * @return 移除的个数 + */ + public long setRemove(String key, Object... values) { + try { + Long count = redisTemplate.opsForSet().remove(key, values); + return count; + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + // ===============================list================================= + + /** + * 获取list缓存的内容 + * + * @param key 键 + * @param start 开始 + * @param end 结束 0 到 -1代表所有值 + * @return + */ + public List lGet(String key, long start, long end) { + try { + return redisTemplate.opsForList().range(key, start, end); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * 获取list缓存的长度 + * + * @param key 键 + * @return + */ + public long lGetListSize(String key) { + try { + return redisTemplate.opsForList().size(key); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + /** + * 通过索引 获取list中的值 + * + * @param key 键 + * @param index 索引 index>=0时, 0 表头,1 第二个元素,依次类推;index<0时,-1,表尾,-2倒数第二个元素,依次类推 + * @return + */ + public Object lGetIndex(String key, long index) { + try { + return redisTemplate.opsForList().index(key, index); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * 将list放入缓存 + * + * @param key 键 + * @param value 值 + * @param time 时间(秒) + * @return + */ + public boolean lSet(String key, Object value) { + try { + redisTemplate.opsForList().rightPush(key, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 将list放入缓存 + * + * @param key 键 + * @param value 值 + * @param time 时间(秒) + * @return + */ + public boolean lSet(String key, Object value, long time) { + try { + redisTemplate.opsForList().rightPush(key, value); + if (time > 0) + expire(key, time); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 将list放入缓存 + * + * @param key 键 + * @param value 值 + * @param time 时间(秒) + * @return + */ + public boolean lSet(String key, List value) { + try { + redisTemplate.opsForList().rightPushAll(key, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 将list放入缓存 + * + * @param key 键 + * @param value 值 + * @param time 时间(秒) + * @return + */ + public boolean lSet(String key, List value, long time) { + try { + redisTemplate.opsForList().rightPushAll(key, value); + if (time > 0) + expire(key, time); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 根据索引修改list中的某条数据 + * + * @param key 键 + * @param index 索引 + * @param value 值 + * @return + */ + public boolean lUpdateIndex(String key, long index, Object value) { + try { + redisTemplate.opsForList().set(key, index, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 移除N个值为value + * + * @param key 键 + * @param count 移除多少个 + * @param value 值 + * @return 移除的个数 + */ + public long lRemove(String key, long count, Object value) { + try { + Long remove = redisTemplate.opsForList().remove(key, count, value); + return remove; + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } +} diff --git a/jeecg-boot/src/main/java/org/jeecg/common/util/SpringContextUtils.java b/jeecg-boot/src/main/java/org/jeecg/common/util/SpringContextUtils.java new file mode 100644 index 00000000..fa229fd9 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/common/util/SpringContextUtils.java @@ -0,0 +1,84 @@ +package org.jeecg.common.util; + +import javax.servlet.http.HttpServletRequest; + +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +@Component +public class SpringContextUtils implements ApplicationContextAware { + + /** + * 上下文对象实例 + */ + private static ApplicationContext applicationContext; + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + this.applicationContext = applicationContext; + } + + /** + * 获取applicationContext + * + * @return + */ + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + + /** + * 获取HttpServletRequest + */ + public static HttpServletRequest getHttpServletRequest() { + return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + } + + public static String getDomain(){ + HttpServletRequest request = getHttpServletRequest(); + StringBuffer url = request.getRequestURL(); + return url.delete(url.length() - request.getRequestURI().length(), url.length()).toString(); + } + + public static String getOrigin(){ + HttpServletRequest request = getHttpServletRequest(); + return request.getHeader("Origin"); + } + + /** + * 通过name获取 Bean. + * + * @param name + * @return + */ + public static Object getBean(String name) { + return getApplicationContext().getBean(name); + } + + /** + * 通过class获取Bean. + * + * @param clazz + * @param + * @return + */ + public static T getBean(Class clazz) { + return getApplicationContext().getBean(clazz); + } + + /** + * 通过name,以及Clazz返回指定的Bean + * + * @param name + * @param clazz + * @param + * @return + */ + public static T getBean(String name, Class clazz) { + return getApplicationContext().getBean(name, clazz); + } +} diff --git a/jeecg-boot/src/main/java/org/jeecg/common/util/YouBianCodeUtil.java b/jeecg-boot/src/main/java/org/jeecg/common/util/YouBianCodeUtil.java new file mode 100644 index 00000000..0ee043f6 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/common/util/YouBianCodeUtil.java @@ -0,0 +1,173 @@ +package org.jeecg.common.util; + +import io.netty.util.internal.StringUtil; + +/** + * 流水号生成规则(按默认规则递增,数字从1-99开始递增,数字到99,递增字母;位数不够增加位数) + * A001 + * A001A002 + * @author zhangdaihao + * + */ +public class YouBianCodeUtil { + + // 数字位数(默认生成3位的数字) + + private static final int numLength = 2;//代表数字位数 + + public static final int zhanweiLength = 1+numLength; + + /** + * 根据前一个code,获取同级下一个code + * 例如:当前最大code为D01A04,下一个code为:D01A05 + * + * @param code + * @return + */ + public static synchronized String getNextYouBianCode(String code) { + String newcode = ""; + if (code == null || code =="") { + String zimu = "A"; + String num = getStrNum(1); + newcode = zimu + num; + } else { + String before_code = code.substring(0, code.length() - 1- numLength); + String after_code = code.substring(code.length() - 1 - numLength,code.length()); + char after_code_zimu = after_code.substring(0, 1).charAt(0); + Integer after_code_num = Integer.parseInt(after_code.substring(1)); +// org.jeecgframework.core.util.LogUtil.info(after_code); +// org.jeecgframework.core.util.LogUtil.info(after_code_zimu); +// org.jeecgframework.core.util.LogUtil.info(after_code_num); + + String nextNum = ""; + char nextZimu = 'A'; + // 先判断数字等于999*,则计数从1重新开始,递增 + if (after_code_num == getMaxNumByLength(numLength)) { + nextNum = getNextStrNum(0); + } else { + nextNum = getNextStrNum(after_code_num); + } + // 先判断数字等于999*,则字母从A重新开始,递增 + if(after_code_num == getMaxNumByLength(numLength)) { + nextZimu = getNextZiMu(after_code_zimu); + }else{ + nextZimu = after_code_zimu; + } + + // 例如Z99,下一个code就是Z99A01 + if ('Z' == after_code_zimu && getMaxNumByLength(numLength) == after_code_num) { + newcode = code + (nextZimu + nextNum); + } else { + newcode = before_code + (nextZimu + nextNum); + } + } + return newcode; + + } + + /** + * 根据父亲code,获取下级的下一个code + * + * 例如:父亲CODE:A01 + * 当前CODE:A01B03 + * 获取的code:A01B04 + * + * @param parentCode 上级code + * @param localCode 同级code + * @return + */ + public static synchronized String getSubYouBianCode(String parentCode,String localCode) { + if(localCode!=null && localCode!=""){ + +// return parentCode + getNextYouBianCode(localCode); + return getNextYouBianCode(localCode); + + }else{ + parentCode = parentCode + "A"+ getNextStrNum(0); + } + return parentCode; + } + + + + /** + * 将数字前面位数补零 + * + * @param num + * @return + */ + private static String getNextStrNum(int num) { + return getStrNum(getNextNum(num)); + } + + /** + * 将数字前面位数补零 + * + * @param num + * @return + */ + private static String getStrNum(int num) { + String s = String.format("%0" + numLength + "d", num); + return s; + } + + /** + * 递增获取下个数字 + * + * @param num + * @return + */ + private static int getNextNum(int num) { + num++; + return num; + } + + /** + * 递增获取下个字母 + * + * @param num + * @return + */ + private static char getNextZiMu(char zimu) { + if (zimu == 'Z') { + return 'A'; + } + zimu++; + return zimu; + } + + /** + * 根据数字位数获取最大值 + * @param length + * @return + */ + private static int getMaxNumByLength(int length){ + if(length==0){ + return 0; + } + String max_num = ""; + for (int i=0;i netInterfaces = NetworkInterface.getNetworkInterfaces(); + InetAddress ip = null; + boolean finded = false;// 是否找到外网IP + while (netInterfaces.hasMoreElements() && !finded) { + NetworkInterface ni = netInterfaces.nextElement(); + Enumeration address = ni.getInetAddresses(); + while (address.hasMoreElements()) { + ip = address.nextElement(); + if (!ip.isSiteLocalAddress() && !ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == -1) {// 外网IP + netip = ip.getHostAddress(); + finded = true; + break; + } else if (ip.isSiteLocalAddress() && !ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == -1) {// 内网IP + localip = ip.getHostAddress(); + } + } + } + + if (netip != null && !"".equals(netip)) { + return netip; + } else { + return localip; + } + } + + /** + * java去除字符串中的空格、回车、换行符、制表符 + * + * @param str + * @return + */ + public static String replaceBlank(String str) { + String dest = ""; + if (str != null) { + Pattern p = Pattern.compile("\\s*|\t|\r|\n"); + Matcher m = p.matcher(str); + dest = m.replaceAll(""); + } + return dest; + + } + + /** + * 判断元素是否在数组内 + * + * @param substring + * @param source + * @return + */ + public static boolean isIn(String substring, String[] source) { + if (source == null || source.length == 0) { + return false; + } + for (int i = 0; i < source.length; i++) { + String aSource = source[i]; + if (aSource.equals(substring)) { + return true; + } + } + return false; + } + + /** + * 获取Map对象 + */ + public static Map getHashMap() { + return new HashMap(); + } + + /** + * SET转换MAP + * + * @param str + * @return + */ + public static Map SetToMap(Set setobj) { + Map map = getHashMap(); + for (Iterator iterator = setobj.iterator(); iterator.hasNext();) { + Map.Entry entry = (Map.Entry) iterator.next(); + map.put(entry.getKey().toString(), entry.getValue() == null ? "" : entry.getValue().toString().trim()); + } + return map; + + } + + public static boolean isInnerIP(String ipAddress) { + boolean isInnerIp = false; + long ipNum = getIpNum(ipAddress); + /** + * 私有IP:A类 10.0.0.0-10.255.255.255 B类 172.16.0.0-172.31.255.255 C类 192.168.0.0-192.168.255.255 当然,还有127这个网段是环回地址 + **/ + long aBegin = getIpNum("10.0.0.0"); + long aEnd = getIpNum("10.255.255.255"); + long bBegin = getIpNum("172.16.0.0"); + long bEnd = getIpNum("172.31.255.255"); + long cBegin = getIpNum("192.168.0.0"); + long cEnd = getIpNum("192.168.255.255"); + isInnerIp = isInner(ipNum, aBegin, aEnd) || isInner(ipNum, bBegin, bEnd) || isInner(ipNum, cBegin, cEnd) || ipAddress.equals("127.0.0.1"); + return isInnerIp; + } + + private static long getIpNum(String ipAddress) { + String[] ip = ipAddress.split("\\."); + long a = Integer.parseInt(ip[0]); + long b = Integer.parseInt(ip[1]); + long c = Integer.parseInt(ip[2]); + long d = Integer.parseInt(ip[3]); + + long ipNum = a * 256 * 256 * 256 + b * 256 * 256 + c * 256 + d; + return ipNum; + } + + private static boolean isInner(long userIp, long begin, long end) { + return (userIp >= begin) && (userIp <= end); + } + + /** + * 将下划线大写方式命名的字符串转换为驼峰式。 + * 如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。
    + * 例如:hello_world->helloWorld + * + * @param name + * 转换前的下划线大写方式命名的字符串 + * @return 转换后的驼峰式命名的字符串 + */ + public static String camelName(String name) { + StringBuilder result = new StringBuilder(); + // 快速检查 + if (name == null || name.isEmpty()) { + // 没必要转换 + return ""; + } else if (!name.contains("_")) { + // 不含下划线,仅将首字母小写 + //update-begin--Author:zhoujf Date:20180503 for:TASK #2500 【代码生成器】代码生成器开发一通用模板生成功能 + //update-begin--Author:zhoujf Date:20180503 for:TASK #2500 【代码生成器】代码生成器开发一通用模板生成功能 + return name.substring(0, 1).toLowerCase() + name.substring(1).toLowerCase(); + //update-end--Author:zhoujf Date:20180503 for:TASK #2500 【代码生成器】代码生成器开发一通用模板生成功能 + } + // 用下划线将原始字符串分割 + String camels[] = name.split("_"); + for (String camel : camels) { + // 跳过原始字符串中开头、结尾的下换线或双重下划线 + if (camel.isEmpty()) { + continue; + } + // 处理真正的驼峰片段 + if (result.length() == 0) { + // 第一个驼峰片段,全部字母都小写 + result.append(camel.toLowerCase()); + } else { + // 其他的驼峰片段,首字母大写 + result.append(camel.substring(0, 1).toUpperCase()); + result.append(camel.substring(1).toLowerCase()); + } + } + return result.toString(); + } + + /** + * 将下划线大写方式命名的字符串转换为驼峰式。 + * 如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。
    + * 例如:hello_world,test_id->helloWorld,testId + * + * @param name + * 转换前的下划线大写方式命名的字符串 + * @return 转换后的驼峰式命名的字符串 + */ + public static String camelNames(String names) { + if(names==null||names.equals("")){ + return null; + } + StringBuffer sf = new StringBuffer(); + String[] fs = names.split(","); + for (String field : fs) { + field = camelName(field); + sf.append(field + ","); + } + String result = sf.toString(); + return result.substring(0, result.length() - 1); + } + + //update-begin--Author:zhoujf Date:20180503 for:TASK #2500 【代码生成器】代码生成器开发一通用模板生成功能 + /** + * 将下划线大写方式命名的字符串转换为驼峰式。(首字母写) + * 如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。
    + * 例如:hello_world->HelloWorld + * + * @param name + * 转换前的下划线大写方式命名的字符串 + * @return 转换后的驼峰式命名的字符串 + */ + public static String camelNameCapFirst(String name) { + StringBuilder result = new StringBuilder(); + // 快速检查 + if (name == null || name.isEmpty()) { + // 没必要转换 + return ""; + } else if (!name.contains("_")) { + // 不含下划线,仅将首字母小写 + return name.substring(0, 1).toUpperCase() + name.substring(1).toLowerCase(); + } + // 用下划线将原始字符串分割 + String camels[] = name.split("_"); + for (String camel : camels) { + // 跳过原始字符串中开头、结尾的下换线或双重下划线 + if (camel.isEmpty()) { + continue; + } + // 其他的驼峰片段,首字母大写 + result.append(camel.substring(0, 1).toUpperCase()); + result.append(camel.substring(1).toLowerCase()); + } + return result.toString(); + } + //update-end--Author:zhoujf Date:20180503 for:TASK #2500 【代码生成器】代码生成器开发一通用模板生成功能 + + /** + * 将驼峰命名转化成下划线 + * @param para + * @return + */ + public static String camelToUnderline(String para){ + StringBuilder sb=new StringBuilder(para); + int temp=0;//定位 + for(int i=0;i queryWrapper, String name, QueryRuleEnum rule, Object value) { + if (value == null || rule == null) { + return; + } + switch (rule) { + case GT: + queryWrapper.gt(name, value); + break; + case GE: + queryWrapper.ge(name, value); + break; + case LT: + queryWrapper.lt(name, value); + break; + case LE: + queryWrapper.le(name, value); + break; + case EQ: + queryWrapper.eq(name, value); + break; + case NE: + queryWrapper.ne(name, value); + break; + case IN: + queryWrapper.in(name, (Object[]) value); + break; + case LIKE: + queryWrapper.like(name, value); + break; + case LEFT_LIKE: + queryWrapper.likeLeft(name, value); + break; + case RIGHT_LIKE: + queryWrapper.likeRight(name, value); + break; + default: + break; + } + } + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/common/util/superSearch/QueryRuleEnum.java b/jeecg-boot/src/main/java/org/jeecg/common/util/superSearch/QueryRuleEnum.java new file mode 100644 index 00000000..43454798 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/common/util/superSearch/QueryRuleEnum.java @@ -0,0 +1,60 @@ +package org.jeecg.common.util.superSearch; + +import org.jeecg.common.util.oConvertUtils; + +/** + * Query 规则 常量 + * @author Scott + * @date 2019年02月14日 + */ +public enum QueryRuleEnum { + + GT(">","大于"), + GE(">=","大于等于"), + LT("<","小于"), + LE("<=","小于等于"), + EQ("=","等于"), + NE("!=","不等于"), + IN("IN","包含"), + LIKE("LIKE","全模糊"), + LEFT_LIKE("LEFT_LIKE","左模糊"), + RIGHT_LIKE("RIGHT_LIKE","右模糊"), + SQL_RULES("EXTEND_SQL","自定义SQL片段"); + + private String value; + + private String msg; + + QueryRuleEnum(String value, String msg){ + this.value = value; + this.msg = msg; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public static QueryRuleEnum getByValue(String value){ + if(oConvertUtils.isEmpty(value)) { + return null; + } + for(QueryRuleEnum val :values()){ + if (val.getValue().equals(value)){ + return val; + } + } + return null; + } +} diff --git a/jeecg-boot/src/main/java/org/jeecg/common/util/superSearch/QueryRuleVo.java b/jeecg-boot/src/main/java/org/jeecg/common/util/superSearch/QueryRuleVo.java new file mode 100644 index 00000000..b3e33031 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/common/util/superSearch/QueryRuleVo.java @@ -0,0 +1,11 @@ +package org.jeecg.common.util.superSearch; + +import lombok.Data; + +@Data +public class QueryRuleVo { + + private String field; + private String rule; + private String val; +} diff --git a/jeecg-boot/src/main/java/org/jeecg/config/MybatisPlusConfig.java b/jeecg-boot/src/main/java/org/jeecg/config/MybatisPlusConfig.java new file mode 100644 index 00000000..6bde7f3a --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/config/MybatisPlusConfig.java @@ -0,0 +1,35 @@ +package org.jeecg.config; + +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; +import com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor; + +/** + * 单数据源配置(jeecg.datasource.open = false时生效) + * @author zhoujf + * + */ +@Configuration +@MapperScan(value={"org.jeecg.modules.**.mapper*"}) +public class MybatisPlusConfig { + + /** + * 分页插件 + */ + @Bean + public PaginationInterceptor paginationInterceptor() { + return new PaginationInterceptor(); + } + +// /** +// * mybatis-plus SQL执行效率插件【生产环境可以关闭】 +// */ +// @Bean +// public PerformanceInterceptor performanceInterceptor() { +// return new PerformanceInterceptor(); +// } + + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/config/RedisConfig.java b/jeecg-boot/src/main/java/org/jeecg/config/RedisConfig.java new file mode 100644 index 00000000..940b0432 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/config/RedisConfig.java @@ -0,0 +1,80 @@ +package org.jeecg.config; + +import java.lang.reflect.Method; + +import javax.annotation.Resource; +import org.springframework.cache.annotation.CachingConfigurerSupport; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.cache.interceptor.KeyGenerator; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.RedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; +import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; +import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper.DefaultTyping; + +@Configuration +@EnableCaching // 开启缓存支持 +public class RedisConfig extends CachingConfigurerSupport { + + @Resource + private LettuceConnectionFactory lettuceConnectionFactory; + + /** + * @description 自定义的缓存key的生成策略 若想使用这个key + * 只需要讲注解上keyGenerator的值设置为keyGenerator即可
    + * @return 自定义策略生成的key + */ + @Bean + public KeyGenerator keyGenerator() { + return new KeyGenerator() { + @Override + public Object generate(Object target, Method method, Object... params) { + StringBuffer sb = new StringBuffer(); + sb.append(target.getClass().getName()); + sb.append(method.getName()); + for (Object obj : params) { + sb.append(obj.toString()); + } + return sb.toString(); + } + }; + } + + // 这个注释不能放开,发现自定义缓存管理器,会导致实体解析失败 + //TODO +// @Bean +// public CacheManager cacheManager() { +// RedisCacheManager.RedisCacheManagerBuilder builder = RedisCacheManager.RedisCacheManagerBuilder.fromConnectionFactory(lettuceConnectionFactory); +// return builder.build(); +// } + + /** + * RedisTemplate配置 + */ + @Bean + public RedisTemplate redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) { + // 设置序列化 + Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); + ObjectMapper om = new ObjectMapper(); + om.setVisibility(PropertyAccessor.ALL, Visibility.ANY); + om.enableDefaultTyping(DefaultTyping.NON_FINAL); + jackson2JsonRedisSerializer.setObjectMapper(om); + // 配置redisTemplate + RedisTemplate redisTemplate = new RedisTemplate(); + redisTemplate.setConnectionFactory(lettuceConnectionFactory); + RedisSerializer stringSerializer = new StringRedisSerializer(); + redisTemplate.setKeySerializer(stringSerializer);// key序列化 + redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);// value序列化 + redisTemplate.setHashKeySerializer(stringSerializer);// Hash key序列化 + redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);// Hash value序列化 + redisTemplate.afterPropertiesSet(); + return redisTemplate; + } + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/config/ShiroConfig.java b/jeecg-boot/src/main/java/org/jeecg/config/ShiroConfig.java new file mode 100644 index 00000000..9fd0d5f8 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/config/ShiroConfig.java @@ -0,0 +1,134 @@ +package org.jeecg.config; + +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; +import javax.servlet.Filter; +import org.apache.shiro.mgt.DefaultSessionStorageEvaluator; +import org.apache.shiro.mgt.DefaultSubjectDAO; +import org.apache.shiro.mgt.SecurityManager; +import org.apache.shiro.spring.LifecycleBeanPostProcessor; +import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor; +import org.apache.shiro.spring.web.ShiroFilterFactoryBean; +import org.apache.shiro.web.mgt.DefaultWebSecurityManager; +import org.jeecg.modules.shiro.authc.MyRealm; +import org.jeecg.modules.shiro.authc.aop.JwtFilter; +import org.jeecg.modules.shiro.authc.aop.ResourceCheckFilter; +import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.DependsOn; + +/** + * @author: Scott + * @date: 2018/2/7 + * @description: shiro 配置类 + */ + +@Configuration +public class ShiroConfig { + + /** + * Filter Chain定义说明 + * + * 1、一个URL可以配置多个Filter,使用逗号分隔 + * 2、当设置多个过滤器时,全部验证通过,才视为通过 + * 3、部分过滤器可指定参数,如perms,roles + */ + @Bean("shiroFilter") + public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) { + ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); + shiroFilterFactoryBean.setSecurityManager(securityManager); + // 拦截器 + Map filterChainDefinitionMap = new LinkedHashMap(); + // 配置不会被拦截的链接 顺序判断 + filterChainDefinitionMap.put("/sys/login", "anon"); //登录接口排除 + filterChainDefinitionMap.put("/sys/common/view/**", "anon");//图片预览不限制token + filterChainDefinitionMap.put("/api/auth/logout", "anon");//退出登录 + filterChainDefinitionMap.put("/auth/2step-code", "anon");//退出登录 + + filterChainDefinitionMap.put("/**.js", "anon"); + filterChainDefinitionMap.put("/**.css", "anon"); + filterChainDefinitionMap.put("/druid/**", "anon"); + filterChainDefinitionMap.put("/swagger-ui.html", "anon"); + filterChainDefinitionMap.put("/swagger**/**", "anon"); + filterChainDefinitionMap.put("/webjars/**", "anon"); + filterChainDefinitionMap.put("/v2/**", "anon"); + + + filterChainDefinitionMap.put("/processInstance/**", "anon"); + filterChainDefinitionMap.put("/task/**", "anon"); + + + //TODO 排除Online请求 + filterChainDefinitionMap.put("/auto/cgform/**", "anon"); + //filterChainDefinitionMap.put("/cgAutoListController?list&id=**", "anon"); + //filterChainDefinitionMap.put("/cgFormBuildController/**", "anon"); + //TODO 排除FineReport请求 + //filterChainDefinitionMap.put("/ReportServer?reportlet=**", "anon"); + + + //用户,需要角色权限 “user” + //filterChainDefinitionMap.put("/test/**", "roles[test]"); + //管理员,需要角色权限 “admin” + //filterChainDefinitionMap.put("/sys/**", "roles[admin]"); + + // 添加自己的过滤器并且取名为jwt + Map filterMap = new HashMap(1); + filterMap.put("jwt", new JwtFilter()); + filterMap.put("resourceCheckFilter", new ResourceCheckFilter()); + shiroFilterFactoryBean.setFilters(filterMap); + // + + \ No newline at end of file diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/demo/test/mapper/xml/JeecgOrderCustomerMapper.xml b/jeecg-boot/src/main/java/org/jeecg/modules/demo/test/mapper/xml/JeecgOrderCustomerMapper.xml new file mode 100644 index 00000000..759b03f8 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/demo/test/mapper/xml/JeecgOrderCustomerMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/demo/test/mapper/xml/JeecgOrderMainMapper.xml b/jeecg-boot/src/main/java/org/jeecg/modules/demo/test/mapper/xml/JeecgOrderMainMapper.xml new file mode 100644 index 00000000..ec2d0568 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/demo/test/mapper/xml/JeecgOrderMainMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/demo/test/mapper/xml/JeecgOrderTicketMapper.xml b/jeecg-boot/src/main/java/org/jeecg/modules/demo/test/mapper/xml/JeecgOrderTicketMapper.xml new file mode 100644 index 00000000..46530bdb --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/demo/test/mapper/xml/JeecgOrderTicketMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/demo/test/service/IJeecgDemoService.java b/jeecg-boot/src/main/java/org/jeecg/modules/demo/test/service/IJeecgDemoService.java new file mode 100644 index 00000000..ced19eaa --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/demo/test/service/IJeecgDemoService.java @@ -0,0 +1,17 @@ +package org.jeecg.modules.demo.test.service; + +import org.jeecg.modules.demo.test.entity.JeecgDemo; + +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * @Description: jeecg 测试demo + * @author: jeecg-boot + * @date: 2018-12-29 + * @version: V1.0 + */ +public interface IJeecgDemoService extends IService { + public void testTran(); + + public JeecgDemo getByIdCacheable(String id); +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/demo/test/service/IJeecgOrderCustomerService.java b/jeecg-boot/src/main/java/org/jeecg/modules/demo/test/service/IJeecgOrderCustomerService.java new file mode 100644 index 00000000..70682fa3 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/demo/test/service/IJeecgOrderCustomerService.java @@ -0,0 +1,18 @@ +package org.jeecg.modules.demo.test.service; + +import java.util.List; + +import org.jeecg.modules.demo.test.entity.JeecgOrderCustomer; + +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * @Description: 订单客户 + * @author: jeecg-boot + * @date: 2019-02-15 + * @version: V1.0 + */ +public interface IJeecgOrderCustomerService extends IService { + + public List selectCustomersByMainId(String mainId); +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/demo/test/service/IJeecgOrderMainService.java b/jeecg-boot/src/main/java/org/jeecg/modules/demo/test/service/IJeecgOrderMainService.java new file mode 100644 index 00000000..bdd4c28d --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/demo/test/service/IJeecgOrderMainService.java @@ -0,0 +1,44 @@ +package org.jeecg.modules.demo.test.service; + +import java.io.Serializable; +import java.util.Collection; +import java.util.List; + +import org.jeecg.modules.demo.test.entity.JeecgOrderCustomer; +import org.jeecg.modules.demo.test.entity.JeecgOrderMain; +import org.jeecg.modules.demo.test.entity.JeecgOrderTicket; + +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * @Description: 订单 + * @author: jeecg-boot + * @date: 2019-02-15 + * @version: V1.0 + */ +public interface IJeecgOrderMainService extends IService { + + /** + * 添加一对多 + * + */ + public void saveMain(JeecgOrderMain jeecgOrderMain,List jeecgOrderCustomerList,List jeecgOrderTicketList) ; + + /** + * 修改一对多 + * + */ + public void updateMain(JeecgOrderMain jeecgOrderMain,List jeecgOrderCustomerList,List jeecgOrderTicketList); + + /** + * 删除一对多 + * @param jformOrderMain + */ + public void delMain (String id); + + /** + * 批量删除一对多 + * @param jformOrderMain + */ + public void delBatchMain (Collection idList); +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/demo/test/service/IJeecgOrderTicketService.java b/jeecg-boot/src/main/java/org/jeecg/modules/demo/test/service/IJeecgOrderTicketService.java new file mode 100644 index 00000000..11aa645d --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/demo/test/service/IJeecgOrderTicketService.java @@ -0,0 +1,18 @@ +package org.jeecg.modules.demo.test.service; + +import java.util.List; + +import org.jeecg.modules.demo.test.entity.JeecgOrderTicket; + +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * @Description: 订单机票 + * @author: jeecg-boot + * @date: 2019-02-15 + * @version: V1.0 + */ +public interface IJeecgOrderTicketService extends IService { + + public List selectTicketsByMainId(String mainId); +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/demo/test/service/impl/JeecgDemoServiceImpl.java b/jeecg-boot/src/main/java/org/jeecg/modules/demo/test/service/impl/JeecgDemoServiceImpl.java new file mode 100644 index 00000000..0a1ad74f --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/demo/test/service/impl/JeecgDemoServiceImpl.java @@ -0,0 +1,61 @@ +package org.jeecg.modules.demo.test.service.impl; + +import org.jeecg.modules.demo.test.entity.JeecgDemo; +import org.jeecg.modules.demo.test.mapper.JeecgDemoMapper; +import org.jeecg.modules.demo.test.service.IJeecgDemoService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + * @Description: jeecg 测试demo + * @author: jeecg-boot + * @date: 2018-12-29 + * @version: V1.0 + */ +@Service +public class JeecgDemoServiceImpl extends ServiceImpl implements IJeecgDemoService { + @Autowired + JeecgDemoMapper jeecgDemoMapper; + + + /** + * 事务控制在service层面 + * 加上注解:@Transactional,声明的方法就是一个独立的事务(有异常DB操作全部回滚) + */ + @Transactional + public void testTran() { + JeecgDemo pp = new JeecgDemo(); + pp.setAge(1111); + pp.setName("测试事务 小白兔 1"); + jeecgDemoMapper.insert(pp); + + JeecgDemo pp2 = new JeecgDemo(); + pp2.setAge(2222); + pp2.setName("测试事务 小白兔 2"); + jeecgDemoMapper.insert(pp2); + + Integer.parseInt("hello");//自定义异常 + + JeecgDemo pp3 = new JeecgDemo(); + pp3.setAge(3333); + pp3.setName("测试事务 小白兔 3"); + jeecgDemoMapper.insert(pp3); + return ; + } + + + /** + * 缓存注解测试: redis + */ + @Cacheable(cacheNames="jeecgDemo", key="#id") + public JeecgDemo getByIdCacheable(String id) { + JeecgDemo t = jeecgDemoMapper.selectById(id); + System.err.println(t); + return t; + } + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/demo/test/service/impl/JeecgOrderCustomerServiceImpl.java b/jeecg-boot/src/main/java/org/jeecg/modules/demo/test/service/impl/JeecgOrderCustomerServiceImpl.java new file mode 100644 index 00000000..bb9931b3 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/demo/test/service/impl/JeecgOrderCustomerServiceImpl.java @@ -0,0 +1,30 @@ +package org.jeecg.modules.demo.test.service.impl; + +import java.util.List; + +import org.jeecg.modules.demo.test.entity.JeecgOrderCustomer; +import org.jeecg.modules.demo.test.mapper.JeecgOrderCustomerMapper; +import org.jeecg.modules.demo.test.service.IJeecgOrderCustomerService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + * @Description: 订单客户 + * @author: jeecg-boot + * @date: 2019-02-15 + * @version: V1.0 + */ +@Service +public class JeecgOrderCustomerServiceImpl extends ServiceImpl implements IJeecgOrderCustomerService { + + @Autowired + private JeecgOrderCustomerMapper jeecgOrderCustomerMapper; + + @Override + public List selectCustomersByMainId(String mainId) { + return jeecgOrderCustomerMapper.selectCustomersByMainId(mainId); + } + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/demo/test/service/impl/JeecgOrderMainServiceImpl.java b/jeecg-boot/src/main/java/org/jeecg/modules/demo/test/service/impl/JeecgOrderMainServiceImpl.java new file mode 100644 index 00000000..c301d7c1 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/demo/test/service/impl/JeecgOrderMainServiceImpl.java @@ -0,0 +1,88 @@ +package org.jeecg.modules.demo.test.service.impl; + +import java.io.Serializable; +import java.util.Collection; +import java.util.List; + +import org.jeecg.modules.demo.test.entity.JeecgOrderCustomer; +import org.jeecg.modules.demo.test.entity.JeecgOrderMain; +import org.jeecg.modules.demo.test.entity.JeecgOrderTicket; +import org.jeecg.modules.demo.test.mapper.JeecgOrderCustomerMapper; +import org.jeecg.modules.demo.test.mapper.JeecgOrderMainMapper; +import org.jeecg.modules.demo.test.mapper.JeecgOrderTicketMapper; +import org.jeecg.modules.demo.test.service.IJeecgOrderMainService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + * @Description: 订单 + * @author: jeecg-boot + * @date: 2019-02-15 + * @version: V1.0 + */ +@Service +public class JeecgOrderMainServiceImpl extends ServiceImpl implements IJeecgOrderMainService { + + @Autowired + private JeecgOrderMainMapper jeecgOrderMainMapper; + @Autowired + private JeecgOrderCustomerMapper jeecgOrderCustomerMapper; + @Autowired + private JeecgOrderTicketMapper jeecgOrderTicketMapper; + + @Override + @Transactional + public void saveMain(JeecgOrderMain jeecgOrderMain, List jeecgOrderCustomerList, List jeecgOrderTicketList) { + jeecgOrderMainMapper.insert(jeecgOrderMain); + for(JeecgOrderCustomer entity:jeecgOrderCustomerList) { + entity.setOrderId(jeecgOrderMain.getId()); + jeecgOrderCustomerMapper.insert(entity); + } + for(JeecgOrderTicket entity:jeecgOrderTicketList) { + entity.setOrderId(jeecgOrderMain.getId()); + jeecgOrderTicketMapper.insert(entity); + } + } + + @Override + @Transactional + public void updateMain(JeecgOrderMain jeecgOrderMain, List jeecgOrderCustomerList, List jeecgOrderTicketList) { + jeecgOrderMainMapper.updateById(jeecgOrderMain); + + //1.先删除子表数据 + jeecgOrderTicketMapper.deleteTicketsByMainId(jeecgOrderMain.getId()); + jeecgOrderCustomerMapper.deleteCustomersByMainId(jeecgOrderMain.getId()); + + //2.子表数据重新插入 + for(JeecgOrderCustomer entity:jeecgOrderCustomerList) { + entity.setOrderId(jeecgOrderMain.getId()); + jeecgOrderCustomerMapper.insert(entity); + } + for(JeecgOrderTicket entity:jeecgOrderTicketList) { + entity.setOrderId(jeecgOrderMain.getId()); + jeecgOrderTicketMapper.insert(entity); + } + } + + @Override + @Transactional + public void delMain(String id) { + jeecgOrderMainMapper.deleteById(id); + jeecgOrderTicketMapper.deleteTicketsByMainId(id); + jeecgOrderCustomerMapper.deleteCustomersByMainId(id); + } + + @Override + @Transactional + public void delBatchMain(Collection idList) { + for(Serializable id:idList) { + jeecgOrderMainMapper.deleteById(id); + jeecgOrderTicketMapper.deleteTicketsByMainId(id.toString()); + jeecgOrderCustomerMapper.deleteCustomersByMainId(id.toString()); + } + } + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/demo/test/service/impl/JeecgOrderTicketServiceImpl.java b/jeecg-boot/src/main/java/org/jeecg/modules/demo/test/service/impl/JeecgOrderTicketServiceImpl.java new file mode 100644 index 00000000..af221cff --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/demo/test/service/impl/JeecgOrderTicketServiceImpl.java @@ -0,0 +1,29 @@ +package org.jeecg.modules.demo.test.service.impl; + +import java.util.List; + +import org.jeecg.modules.demo.test.entity.JeecgOrderTicket; +import org.jeecg.modules.demo.test.mapper.JeecgOrderTicketMapper; +import org.jeecg.modules.demo.test.service.IJeecgOrderTicketService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + * @Description: 订单机票 + * @author: jeecg-boot + * @date: 2019-02-15 + * @version: V1.0 + */ +@Service +public class JeecgOrderTicketServiceImpl extends ServiceImpl implements IJeecgOrderTicketService { + @Autowired + private JeecgOrderTicketMapper jeecgOrderTicketMapper; + + @Override + public List selectTicketsByMainId(String mainId) { + return jeecgOrderTicketMapper.selectTicketsByMainId(mainId); + } + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/demo/test/vo/JeecgOrderMainPage.java b/jeecg-boot/src/main/java/org/jeecg/modules/demo/test/vo/JeecgOrderMainPage.java new file mode 100644 index 00000000..0a6bf627 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/demo/test/vo/JeecgOrderMainPage.java @@ -0,0 +1,16 @@ +package org.jeecg.modules.demo.test.vo; + +import java.util.List; +import org.jeecg.modules.demo.test.entity.JeecgOrderCustomer; +import org.jeecg.modules.demo.test.entity.JeecgOrderMain; +import org.jeecg.modules.demo.test.entity.JeecgOrderTicket; +import lombok.Data; + +@Data +public class JeecgOrderMainPage { + + private JeecgOrderMain jeecgOrderMain; + private List jeecgOrderCustomerList; + private List jeecgOrderTicketList; + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/quartz/controller/QuartzJobController.java b/jeecg-boot/src/main/java/org/jeecg/modules/quartz/controller/QuartzJobController.java new file mode 100644 index 00000000..3c2753df --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/quartz/controller/QuartzJobController.java @@ -0,0 +1,297 @@ +package org.jeecg.modules.quartz.controller; + +import java.util.Arrays; +import java.util.List; + +import javax.servlet.http.HttpServletRequest; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.constant.CommonConstant; +import org.jeecg.common.exception.JeecgBootException; +import org.jeecg.common.util.oConvertUtils; +import org.jeecg.modules.quartz.entity.QuartzJob; +import org.jeecg.modules.quartz.service.IQuartzJobService; +import org.quartz.CronScheduleBuilder; +import org.quartz.CronTrigger; +import org.quartz.Job; +import org.quartz.JobBuilder; +import org.quartz.JobDetail; +import org.quartz.JobKey; +import org.quartz.Scheduler; +import org.quartz.SchedulerException; +import org.quartz.TriggerBuilder; +import org.quartz.TriggerKey; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; + +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; + +/** + * @Title: Controller + * @Description: 定时任务在线管理 + * @author: jeecg-boot + * @date: 2019-01-02 + * @version:V1.0 + */ +@RestController +@RequestMapping("/sys/quartzJob") +@Slf4j +public class QuartzJobController { + @Autowired + private IQuartzJobService quartzJobService; + @Autowired + private Scheduler scheduler; + + /** + * 分页列表查询 + * + * @param quartzJob + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @RequestMapping(value = "/list", method = RequestMethod.GET) + public Result> queryPageList(QuartzJob quartzJob, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) { + Result> result = new Result>(); + QueryWrapper queryWrapper = new QueryWrapper(quartzJob); + Page page = new Page(pageNo, pageSize); + // 排序逻辑 处理 + String column = req.getParameter("column"); + String order = req.getParameter("order"); + if (oConvertUtils.isNotEmpty(column) && oConvertUtils.isNotEmpty(order)) { + if ("asc".equals(order)) { + queryWrapper.orderByAsc(oConvertUtils.camelToUnderline(column)); + } else { + queryWrapper.orderByDesc(oConvertUtils.camelToUnderline(column)); + } + } + IPage pageList = quartzJobService.page(page, queryWrapper); +// log.info("查询当前页:" + pageList.getCurrent()); +// log.info("查询当前页数量:" + pageList.getSize()); +// log.info("查询结果数量:" + pageList.getRecords().size()); +// log.info("数据总数:" + pageList.getTotal()); + result.setSuccess(true); + result.setResult(pageList); + return result; + } + + /** + * 添加定时任务 + * + * @param quartzJob + * @return + */ + @RequestMapping(value = "/add", method = RequestMethod.POST) + public Result add(@RequestBody QuartzJob quartzJob) { + Result result = new Result(); + + List list = quartzJobService.findByJobClassName(quartzJob.getJobClassName()); + if (list != null && list.size() > 0) { + return Result.error("该定时任务类名已存在"); + } + try { + schedulerAdd(quartzJob.getJobClassName().trim(), quartzJob.getCronExpression().trim(), quartzJob.getParameter()); + // + quartzJob.setDelFlag(CommonConstant.DEL_FLAG_0); + quartzJob.setStatus(CommonConstant.STATUS_NORMAL); + quartzJobService.save(quartzJob); + result.success("创建定时任务成功"); + } catch (Exception e) { + e.printStackTrace(); + log.info(e.getMessage()); + result.error500("创建定时任务失败,"+e.getMessage()); + } + return result; + } + + /** + * 更新定时任务 + * + * @param quartzJob + * @return + */ + @RequestMapping(value = "/edit", method = RequestMethod.PUT) + public Result eidt(@RequestBody QuartzJob quartzJob) { + Result result = new Result(); + QuartzJob quartzJobEntity = quartzJobService.getById(quartzJob.getId()); + if (quartzJobEntity == null) { + result.error500("未找到对应实体"); + } else { + schedulerDelete(quartzJob.getJobClassName().trim()); + if(CommonConstant.STATUS_NORMAL == quartzJob.getStatus()) { + schedulerAdd(quartzJob.getJobClassName().trim(), quartzJob.getCronExpression().trim(), quartzJob.getParameter()); + } + boolean ok = quartzJobService.updateById(quartzJob); + if (ok) { + result.success("更新定时任务成功!"); + } + } + return result; + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @RequestMapping(value = "/delete", method = RequestMethod.DELETE) + public Result delete(@RequestParam(name = "id", required = true) String id) { + Result result = new Result(); + QuartzJob quartzJob = quartzJobService.getById(id); + if (quartzJob == null) { + result.error500("未找到对应实体"); + } else { + QuartzJob job = quartzJobService.getById(id); + schedulerDelete(job.getJobClassName().trim()); + boolean ok = quartzJobService.removeById(id); + if (ok) { + result.success("删除成功!"); + } + } + + return result; + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE) + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + Result result = new Result(); + if (ids == null || "".equals(ids.trim())) { + result.error500("参数不识别!"); + } else { + for (String id : Arrays.asList(ids.split(","))) { + QuartzJob job = quartzJobService.getById(id); + schedulerDelete(job.getJobClassName().trim()); + quartzJobService.removeById(id); + } + result.success("删除定时任务成功!"); + } + return result; + } + + /** + * 暂停定时任务 + * @param job + * @return + */ + @RequestMapping(value = "/pause", method = RequestMethod.POST) + @ApiOperation(value = "暂停定时任务") + public Result pauseJob(@RequestBody QuartzJob job) { + + try { + scheduler.pauseJob(JobKey.jobKey(job.getJobClassName().trim())); + } catch (SchedulerException e) { + throw new JeecgBootException("暂停定时任务失败"); + } + job.setStatus(CommonConstant.STATUS_DISABLE); + quartzJobService.updateById(job); + return Result.ok("暂停定时任务成功"); + } + + /** + * 启动定时任务 + * @param job + * @return + */ + @RequestMapping(value = "/resume", method = RequestMethod.POST) + @ApiOperation(value = "恢复定时任务") + public Result resumeJob(@RequestBody QuartzJob job) { + + try { + scheduler.resumeJob(JobKey.jobKey(job.getJobClassName().trim())); + } catch (SchedulerException e) { + throw new JeecgBootException("恢复定时任务失败"); + } + job.setStatus(CommonConstant.STATUS_NORMAL); + quartzJobService.updateById(job); + return Result.ok("恢复定时任务成功"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + @RequestMapping(value = "/queryById", method = RequestMethod.GET) + public Result queryById(@RequestParam(name = "id", required = true) String id) { + Result result = new Result(); + QuartzJob quartzJob = quartzJobService.getById(id); + if (quartzJob == null) { + result.error500("未找到对应实体"); + } else { + result.setResult(quartzJob); + result.setSuccess(true); + } + return result; + } + + /** + * 添加定时任务 + * + * @param jobClassName + * @param cronExpression + * @param parameter + */ + private void schedulerAdd(String jobClassName, String cronExpression, String parameter) { + + try { + // 启动调度器 + scheduler.start(); + + // 构建job信息 + JobDetail jobDetail = JobBuilder.newJob(getClass(jobClassName).getClass()).withIdentity(jobClassName).usingJobData("parameter", parameter).build(); + + // 表达式调度构建器(即任务执行的时间) + CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression); + + // 按新的cronExpression表达式构建一个新的trigger + CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(jobClassName).withSchedule(scheduleBuilder).build(); + + scheduler.scheduleJob(jobDetail, trigger); + } catch (SchedulerException e) { + log.error(e.toString()); + throw new JeecgBootException("创建定时任务失败"); + } catch (Exception e) { + throw new JeecgBootException("后台找不到该类名任务"); + } + } + + /** + * 删除定时任务 + * + * @param jobClassName + */ + private void schedulerDelete(String jobClassName) { + + try { + scheduler.pauseTrigger(TriggerKey.triggerKey(jobClassName)); + scheduler.unscheduleJob(TriggerKey.triggerKey(jobClassName)); + scheduler.deleteJob(JobKey.jobKey(jobClassName)); + } catch (Exception e) { + throw new JeecgBootException("删除定时任务失败"); + } + } + + private static Job getClass(String classname) throws Exception { + Class class1 = Class.forName(classname); + return (Job) class1.newInstance(); + } + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/quartz/entity/QuartzJob.java b/jeecg-boot/src/main/java/org/jeecg/modules/quartz/entity/QuartzJob.java new file mode 100644 index 00000000..b7f68dce --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/quartz/entity/QuartzJob.java @@ -0,0 +1,52 @@ +package org.jeecg.modules.quartz.entity; + +import java.io.Serializable; + +import org.springframework.format.annotation.DateTimeFormat; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; + +import lombok.Data; + +/** + * @Description: 定时任务在线管理 + * @author: jeecg-boot + * @date: 2019-01-02 + * @version: V1.0 + */ +@Data +@TableName("sys_quartz_job") +public class QuartzJob implements Serializable { + private static final long serialVersionUID = 1L; + + /**id*/ + @TableId(type = IdType.UUID) + private java.lang.String id; + /**创建人*/ + private java.lang.String createBy; + /**创建时间*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private java.util.Date createTime; + /**删除状态*/ + private java.lang.Integer delFlag; + /**修改人*/ + private java.lang.String updateBy; + /**修改时间*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private java.util.Date updateTime; + /**任务类名*/ + private java.lang.String jobClassName; + /**cron表达式*/ + private java.lang.String cronExpression; + /**参数*/ + private java.lang.String parameter; + /**描述*/ + private java.lang.String description; + /**状态 0正常 -1停止*/ + private java.lang.Integer status; +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/quartz/job/SampleJob.java b/jeecg-boot/src/main/java/org/jeecg/modules/quartz/job/SampleJob.java new file mode 100644 index 00000000..844a7a15 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/quartz/job/SampleJob.java @@ -0,0 +1,23 @@ +package org.jeecg.modules.quartz.job; + +import org.jeecg.common.util.DateUtils; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; + +import lombok.extern.slf4j.Slf4j; + +/** + * 示例不带参定时任务 + * + * @author Scott + */ +@Slf4j +public class SampleJob implements Job { + + @Override + public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { + + log.info(String.format(" Jeecg-Boot 普通定时任务 SampleJob ! 时间:" + DateUtils.getTimestamp())); + } +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/quartz/job/SampleParamJob.java b/jeecg-boot/src/main/java/org/jeecg/modules/quartz/job/SampleParamJob.java new file mode 100644 index 00000000..04897441 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/quartz/job/SampleParamJob.java @@ -0,0 +1,32 @@ +package org.jeecg.modules.quartz.job; + +import org.jeecg.common.util.DateUtils; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; + +import lombok.extern.slf4j.Slf4j; + +/** + * 示例带参定时任务 + * + * @author Scott + */ +@Slf4j +public class SampleParamJob implements Job { + + /** + * 若参数变量名修改 QuartzJobController中也需对应修改 + */ + private String parameter; + + public void setParameter(String parameter) { + this.parameter = parameter; + } + + @Override + public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { + + log.info(String.format("welcome %s! Jeecg-Boot 带参数定时任务 SampleParamJob ! 时间:" + DateUtils.now(), this.parameter)); + } +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/quartz/mapper/QuartzJobMapper.java b/jeecg-boot/src/main/java/org/jeecg/modules/quartz/mapper/QuartzJobMapper.java new file mode 100644 index 00000000..87df52ba --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/quartz/mapper/QuartzJobMapper.java @@ -0,0 +1,20 @@ +package org.jeecg.modules.quartz.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import org.jeecg.modules.quartz.entity.QuartzJob; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: 定时任务在线管理 + * @author: jeecg-boot + * @date: 2019-01-02 + * @version: V1.0 + */ +public interface QuartzJobMapper extends BaseMapper { + + public List findByJobClassName(@Param("jobClassName") String jobClassName); + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/quartz/mapper/xml/QuartzJobMapper.xml b/jeecg-boot/src/main/java/org/jeecg/modules/quartz/mapper/xml/QuartzJobMapper.xml new file mode 100644 index 00000000..2f6f0a05 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/quartz/mapper/xml/QuartzJobMapper.xml @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/quartz/service/IQuartzJobService.java b/jeecg-boot/src/main/java/org/jeecg/modules/quartz/service/IQuartzJobService.java new file mode 100644 index 00000000..0ceda4bc --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/quartz/service/IQuartzJobService.java @@ -0,0 +1,19 @@ +package org.jeecg.modules.quartz.service; + +import java.util.List; + +import org.jeecg.modules.quartz.entity.QuartzJob; + +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * @Description: 定时任务在线管理 + * @author: jeecg-boot + * @date: 2019-01-02 + * @version: V1.0 + */ +public interface IQuartzJobService extends IService { + + List findByJobClassName(String jobClassName); + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/quartz/service/impl/QuartzJobServiceImpl.java b/jeecg-boot/src/main/java/org/jeecg/modules/quartz/service/impl/QuartzJobServiceImpl.java new file mode 100644 index 00000000..5e2aad9b --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/quartz/service/impl/QuartzJobServiceImpl.java @@ -0,0 +1,29 @@ +package org.jeecg.modules.quartz.service.impl; + +import java.util.List; + +import org.jeecg.modules.quartz.entity.QuartzJob; +import org.jeecg.modules.quartz.mapper.QuartzJobMapper; +import org.jeecg.modules.quartz.service.IQuartzJobService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + * @Description: 定时任务在线管理 + * @author: jeecg-boot + * @date: 2019-01-02 + * @version: V1.0 + */ +@Service +public class QuartzJobServiceImpl extends ServiceImpl implements IQuartzJobService { + @Autowired + private QuartzJobMapper quartzJobMapper; + + @Override + public List findByJobClassName(String jobClassName) { + return quartzJobMapper.findByJobClassName(jobClassName); + } + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/shiro/authc/JwtToken.java b/jeecg-boot/src/main/java/org/jeecg/modules/shiro/authc/JwtToken.java new file mode 100644 index 00000000..058b7118 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/shiro/authc/JwtToken.java @@ -0,0 +1,28 @@ +package org.jeecg.modules.shiro.authc; + +import org.apache.shiro.authc.AuthenticationToken; + +/** + * @author Scott + * @create 2018-07-12 15:19 + * @desc + **/ +public class JwtToken implements AuthenticationToken { + + private static final long serialVersionUID = 1L; + private String token; + + public JwtToken(String token) { + this.token = token; + } + + @Override + public Object getPrincipal() { + return token; + } + + @Override + public Object getCredentials() { + return token; + } +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/shiro/authc/MyRealm.java b/jeecg-boot/src/main/java/org/jeecg/modules/shiro/authc/MyRealm.java new file mode 100644 index 00000000..7bc807ad --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/shiro/authc/MyRealm.java @@ -0,0 +1,185 @@ +package org.jeecg.modules.shiro.authc; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.concurrent.TimeUnit; + +import org.apache.shiro.authc.AuthenticationException; +import org.apache.shiro.authc.AuthenticationInfo; +import org.apache.shiro.authc.AuthenticationToken; +import org.apache.shiro.authc.SimpleAuthenticationInfo; +import org.apache.shiro.authz.AuthorizationInfo; +import org.apache.shiro.authz.SimpleAuthorizationInfo; +import org.apache.shiro.realm.AuthorizingRealm; +import org.apache.shiro.subject.PrincipalCollection; +import org.jeecg.common.constant.CommonConstant; +import org.jeecg.common.util.RedisUtil; +import org.jeecg.common.util.oConvertUtils; +import org.jeecg.modules.shiro.authc.util.JwtUtil; +import org.jeecg.modules.system.entity.SysPermission; +import org.jeecg.modules.system.entity.SysUser; +import org.jeecg.modules.system.service.ISysPermissionService; +import org.jeecg.modules.system.service.ISysUserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.stereotype.Component; + +import com.alibaba.fastjson.JSON; +import lombok.extern.slf4j.Slf4j; + +/** + * @author Scott + * @create 2018-07-12 15:23 + * @desc + **/ +@Component +@Slf4j +public class MyRealm extends AuthorizingRealm { + + @Autowired + private ISysPermissionService sysPermissionService; + @Autowired + private ISysUserService sysUserService; + @Autowired + private StringRedisTemplate stringRedisTemplate; + @Autowired + private RedisUtil redisUtil; + + /** + * 必须重写此方法,不然Shiro会报错 + */ + @Override + public boolean supports(AuthenticationToken token) { + return token instanceof JwtToken; + } + + /** + * 获取授权信息 Shiro中,只有当需要检测用户权限的时候才会调用此方法,例如checkRole,checkPermission之类的 + */ + @Override + protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { + log.info("————权限认证 [ roles、permissions]————"); + SysUser sysUser = null; + String username = null; + if(principals!=null) { + sysUser = (SysUser) principals.getPrimaryPrincipal(); + username = sysUser.getUsername(); + } + + SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(); + // 设置该用户拥有角色 + List roles = null; + //从redis缓存中查询权限角色 + String rolesStr = stringRedisTemplate.opsForValue().get(CommonConstant.PREFIX_USER_ROLE + username); + if (rolesStr != null) { + roles = JSON.parseArray(rolesStr.toString(), String.class); + } else { + //从数据库查询权限放到redis中 + roles = sysUserService.getRole(username); + stringRedisTemplate.opsForValue().set(CommonConstant.PREFIX_USER_ROLE + username, JSON.toJSONString(roles)); + } + //设置超时时间 + stringRedisTemplate.expire(CommonConstant.PREFIX_USER_ROLE + username, CommonConstant.TOKEN_EXPIRE_TIME, TimeUnit.SECONDS); + + /** + * 设置该用户拥有的角色,比如“admin,test” + */ + info.setRoles(new HashSet<>(roles)); + + // TODO 测试数据 + String permissions = "sys:role:update2,sys:role:add,/sys/user/add"; + Set permission = new HashSet<>(Arrays.asList(permissions.split(","))); + + // 从数据库获取所有的权限 + Set permissionSet = new HashSet<>(); + List permissionList = sysPermissionService.queryByUser(username); + for (SysPermission po : permissionList) { + if (oConvertUtils.isNotEmpty(po.getUrl()) || oConvertUtils.isNotEmpty(po.getPerms())) { + if (oConvertUtils.isNotEmpty(po.getUrl())) { + //TODO URL是怎么控制的? + permissionSet.add(po.getUrl()); + } else if (oConvertUtils.isNotEmpty(po.getPerms())) { + permissionSet.add(po.getPerms()); + } + + } + } + + info.addStringPermissions(permissionSet); + return info; + } + + /** + * 获取身份验证信息 Shiro中,默认使用此方法进行用户名正确与否验证,错误抛出异常即可。 + * + * @param authenticationToken 用户身份信息 token + * @return 返回封装了用户信息的 AuthenticationInfo 实例 + */ + @Override + protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken auth) throws AuthenticationException { + log.debug("————身份认证方法————"); + String token = (String) auth.getCredentials(); + if (token == null) { + throw new AuthenticationException("token为空!"); + } + // 解密获得username,用于和数据库进行对比 + String username = JwtUtil.getUsername(token); + if (username == null) { + throw new AuthenticationException("token非法无效!"); + } + + // 查询用户信息 + SysUser sysUser = sysUserService.getUserByName(username); + if (sysUser == null) { + throw new AuthenticationException("用户不存在!"); + } + + //校验token是否超时失效 & 或者账号密码是否错误 + if (!jwtTokenRefresh(token, username, sysUser.getPassword())) { + throw new AuthenticationException("用户名或密码错误!"); + } + + // 判断用户状态 + if (sysUser.getStatus() != 1) { + throw new AuthenticationException("账号已被锁定,请联系管理员!"); + } + + return new SimpleAuthenticationInfo(sysUser, token, getName()); + } + + + /** + * JWTToken刷新生命周期 1、登录成功后将用户的JWT生成的Token作为k、v存储到cache缓存里面(这时候k、v值一样) + * 2、当该用户再次请求时,通过JWTFilter层层校验之后会进入到doGetAuthenticationInfo进行身份验证 + * 3、当该用户这次请求JWTToken值还在生命周期内,则会通过重新PUT的方式k、v都为Token值,缓存中的token值生命周期时间重新计算(这时候k、v值一样) + * 4、当该用户这次请求jwt生成的token值已经超时,但该token对应cache中的k还是存在,则表示该用户一直在操作只是JWT的token失效了,程序会给token对应的k映射的v值重新生成JWTToken并覆盖v值,该缓存生命周期重新计算 + * 5、当该用户这次请求jwt在生成的token值已经超时,并在cache中不存在对应的k,则表示该用户账户空闲超时,返回用户信息已失效,请重新登录。 + * 6、每次当返回为true情况下,都会给Response的Header中设置Authorization,该Authorization映射的v为cache对应的v值。 + * 7、注:当前端接收到Response的Header中的Authorization值会存储起来,作为以后请求token使用 + * + * @param userName + * @param passWord + * @return + */ + public boolean jwtTokenRefresh(String token, String userName, String passWord) { + String cacheToken = String.valueOf(redisUtil.get(CommonConstant.PREFIX_USER_TOKEN + token)); + if (oConvertUtils.isNotEmpty(cacheToken)) { + //校验token有效性 + if (!JwtUtil.verify(token, userName, passWord)) { + String newAuthorization = JwtUtil.sign(userName, passWord); + redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, newAuthorization); + //设置超时时间 + redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME/1000); + } else { + redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, cacheToken); + //设置超时时间 + redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME/1000); + } + return true; + } + return false; + } + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/shiro/authc/aop/JwtFilter.java b/jeecg-boot/src/main/java/org/jeecg/modules/shiro/authc/aop/JwtFilter.java new file mode 100644 index 00000000..ea45a1d5 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/shiro/authc/aop/JwtFilter.java @@ -0,0 +1,73 @@ +package org.jeecg.modules.shiro.authc.aop; + +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.apache.shiro.authc.AuthenticationException; +import org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter; +import org.jeecg.modules.shiro.authc.JwtToken; +import org.jeecg.modules.shiro.vo.DefContants; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.RequestMethod; +import lombok.extern.slf4j.Slf4j; + +/** + * @author Scott + * @create 2018-07-12 15:56 + * @desc 鉴权登录拦截器 + **/ +@Slf4j +public class JwtFilter extends BasicHttpAuthenticationFilter { + + /** + * 执行登录认证 + * + * @param request + * @param response + * @param mappedValue + * @return + */ + @Override + protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) { + try { + executeLogin(request, response); + return true; + } catch (Exception e) { + throw new AuthenticationException("Token失效,请重新登录", e); + } + } + + /** + * + */ + @Override + protected boolean executeLogin(ServletRequest request, ServletResponse response) throws Exception { + HttpServletRequest httpServletRequest = (HttpServletRequest) request; + String token = httpServletRequest.getHeader(DefContants.X_ACCESS_TOKEN); + + JwtToken jwtToken = new JwtToken(token); + // 提交给realm进行登入,如果错误他会抛出异常并被捕获 + getSubject(request, response).login(jwtToken); + // 如果没有抛出异常则代表登入成功,返回true + return true; + } + + /** + * 对跨域提供支持 + */ + @Override + protected boolean preHandle(ServletRequest request, ServletResponse response) throws Exception { + HttpServletRequest httpServletRequest = (HttpServletRequest) request; + HttpServletResponse httpServletResponse = (HttpServletResponse) response; + httpServletResponse.setHeader("Access-control-Allow-Origin", httpServletRequest.getHeader("Origin")); + httpServletResponse.setHeader("Access-Control-Allow-Methods", "GET,POST,OPTIONS,PUT,DELETE"); + httpServletResponse.setHeader("Access-Control-Allow-Headers", httpServletRequest.getHeader("Access-Control-Request-Headers")); + // 跨域时会首先发送一个option请求,这里我们给option请求直接返回正常状态 + if (httpServletRequest.getMethod().equals(RequestMethod.OPTIONS.name())) { + httpServletResponse.setStatus(HttpStatus.OK.value()); + return false; + } + return super.preHandle(request, response); + } +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/shiro/authc/aop/ResourceCheckFilter.java b/jeecg-boot/src/main/java/org/jeecg/modules/shiro/authc/aop/ResourceCheckFilter.java new file mode 100644 index 00000000..087cd3e5 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/shiro/authc/aop/ResourceCheckFilter.java @@ -0,0 +1,72 @@ +package org.jeecg.modules.shiro.authc.aop; + +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.shiro.subject.Subject; +import org.apache.shiro.web.filter.AccessControlFilter; + +import lombok.extern.slf4j.Slf4j; + +/** + * @author Scott + * @create 2019-02-01 15:56 + * @desc 鉴权请求URL访问权限拦截器 + */ +@Slf4j +public class ResourceCheckFilter extends AccessControlFilter { + + private String errorUrl; + + public String getErrorUrl() { + return errorUrl; + } + + public void setErrorUrl(String errorUrl) { + this.errorUrl = errorUrl; + } + + + /** + * 表示是否允许访问 ,如果允许访问返回true,否则false; + * @param servletRequest + * @param servletResponse + * @param o 表示写在拦截器中括号里面的字符串 mappedValue 就是 [urls] 配置中拦截器参数部分 + * @return + * @throws Exception + */ + @Override + protected boolean isAccessAllowed(ServletRequest servletRequest, ServletResponse servletResponse, Object o) throws Exception { + Subject subject = getSubject(servletRequest,servletResponse); + String url = getPathWithinApplication(servletRequest); + log.info("当前用户正在访问的 url => " + url); + return subject.isPermitted(url); + } + + + /** + * onAccessDenied:表示当访问拒绝时是否已经处理了; + * 如果返回 true 表示需要继续处理; + * 如果返回 false 表示该拦截器实例已经处理了,将直接返回即可。 + + * @param servletRequest + * @param servletResponse + * @return + * @throws Exception + */ + @Override + protected boolean onAccessDenied(ServletRequest servletRequest, ServletResponse servletResponse) throws Exception { + log.info("当 isAccessAllowed 返回 false 的时候,才会执行 method onAccessDenied "); + + HttpServletRequest request =(HttpServletRequest) servletRequest; + HttpServletResponse response =(HttpServletResponse) servletResponse; + response.sendRedirect(request.getContextPath() + this.errorUrl); + + + // 返回 false 表示已经处理,例如页面跳转啥的,表示不在走以下的拦截器了(如果还有配置的话) + return false; + } + +} \ No newline at end of file diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/shiro/authc/util/JwtUtil.java b/jeecg-boot/src/main/java/org/jeecg/modules/shiro/authc/util/JwtUtil.java new file mode 100644 index 00000000..334db6c3 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/shiro/authc/util/JwtUtil.java @@ -0,0 +1,87 @@ +package org.jeecg.modules.shiro.authc.util; + +import com.auth0.jwt.JWT; +import com.auth0.jwt.JWTVerifier; +import com.auth0.jwt.algorithms.Algorithm; +import com.auth0.jwt.exceptions.JWTDecodeException; +import com.auth0.jwt.interfaces.DecodedJWT; +import java.util.Date; +import javax.servlet.http.HttpServletRequest; +import org.jeecg.common.exception.JeecgBootException; +import org.jeecg.common.util.oConvertUtils; + +/** + * @author Scott + * @create 2018-07-12 14:23 + * @desc JWT工具类 + **/ +public class JwtUtil { + + // 过期时间30分钟 + public static final long EXPIRE_TIME = 1 * 60 * 1000; + + /** + * 校验token是否正确 + * + * @param token 密钥 + * @param secret 用户的密码 + * @return 是否正确 + */ + public static boolean verify(String token, String username, String secret) { + try { + // 根据密码生成JWT效验器 + Algorithm algorithm = Algorithm.HMAC256(secret); + JWTVerifier verifier = JWT.require(algorithm).withClaim("username", username).build(); + // 效验TOKEN + DecodedJWT jwt = verifier.verify(token); + return true; + } catch (Exception exception) { + return false; + } + } + + /** + * 获得token中的信息无需secret解密也能获得 + * + * @return token中包含的用户名 + */ + public static String getUsername(String token) { + try { + DecodedJWT jwt = JWT.decode(token); + return jwt.getClaim("username").asString(); + } catch (JWTDecodeException e) { + return null; + } + } + + /** + * 生成签名,5min后过期 + * + * @param username 用户名 + * @param secret 用户的密码 + * @return 加密的token + */ + public static String sign(String username, String secret) { + Date date = new Date(System.currentTimeMillis() + EXPIRE_TIME); + Algorithm algorithm = Algorithm.HMAC256(secret); + // 附带username信息 + return JWT.create().withClaim("username", username).withExpiresAt(date).sign(algorithm); + + } + + /** + * 根据request中的token获取用户账号 + * + * @param request + * @return + * @throws JeecgBootException + */ + public static String getUserNameByToken(HttpServletRequest request) throws JeecgBootException { + String accessToken = request.getHeader("X-Access-Token"); + String username = getUsername(accessToken); + if (oConvertUtils.isEmpty(username)) { + throw new JeecgBootException("未获取到用户"); + } + return username; + } +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/shiro/vo/DefContants.java b/jeecg-boot/src/main/java/org/jeecg/modules/shiro/vo/DefContants.java new file mode 100644 index 00000000..3cbf3e79 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/shiro/vo/DefContants.java @@ -0,0 +1,7 @@ +package org.jeecg.modules.shiro.vo; + +public class DefContants { + + public static String X_ACCESS_TOKEN = "X-Access-Token"; + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/shiro/vo/ResponseBean.java b/jeecg-boot/src/main/java/org/jeecg/modules/shiro/vo/ResponseBean.java new file mode 100644 index 00000000..9536bc85 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/shiro/vo/ResponseBean.java @@ -0,0 +1,42 @@ +package org.jeecg.modules.shiro.vo; +public class ResponseBean { + + // http 状态码 + private int code; + + // 返回信息 + private String msg; + + // 返回的数据 + private Object data; + + public ResponseBean(int code, String msg, Object data) { + this.code = code; + this.msg = msg; + this.data = data; + } + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public Object getData() { + return data; + } + + public void setData(Object data) { + this.data = data; + } +} \ No newline at end of file diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/shiro/vo/UserBean.java b/jeecg-boot/src/main/java/org/jeecg/modules/shiro/vo/UserBean.java new file mode 100644 index 00000000..a526a7ea --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/shiro/vo/UserBean.java @@ -0,0 +1,13 @@ +package org.jeecg.modules.shiro.vo; + +import java.util.HashSet; +import java.util.Set; +import lombok.Data; + +@Data +public class UserBean { + private String username; + private String password; + private Set roles = new HashSet<>(); //用户所有角色值,用于shiro做角色权限的判断 + private Set perms = new HashSet<>(); //用户所有权限值,用于shiro做资源权限的判断 +} \ No newline at end of file diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/shiro/web/TestWebController.java b/jeecg-boot/src/main/java/org/jeecg/modules/shiro/web/TestWebController.java new file mode 100644 index 00000000..89d474f3 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/shiro/web/TestWebController.java @@ -0,0 +1,85 @@ +package org.jeecg.modules.shiro.web; + +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.authz.UnauthorizedException; +import org.apache.shiro.authz.annotation.Logical; +import org.apache.shiro.authz.annotation.RequiresAuthentication; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.apache.shiro.authz.annotation.RequiresRoles; +import org.apache.shiro.subject.Subject; +import org.jeecg.common.util.PasswordUtil; +import org.jeecg.modules.shiro.authc.util.JwtUtil; +import org.jeecg.modules.shiro.vo.ResponseBean; +import org.jeecg.modules.system.entity.SysUser; +import org.jeecg.modules.system.service.ISysUserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestController; + +import io.swagger.annotations.ApiOperation; + +@RestController +public class TestWebController { + + private ISysUserService userService; + + @Autowired + public void setService(ISysUserService userService) { + this.userService = userService; + } + + @PostMapping("/login") + @ApiOperation(value="用户登录", notes="用户登录") + public ResponseBean login(@RequestParam("username") String username, + @RequestParam("password") String password) { + SysUser user = userService.getUserByName(username); + if(user==null) { + return new ResponseBean(200, "用户不存在!", JwtUtil.sign(username, user.getPassword())); + } + String passwordEncode = PasswordUtil.encrypt(username, password, user.getSalt()); + if (passwordEncode.equals(user.getPassword())) { + return new ResponseBean(200, "Login success", JwtUtil.sign(username, user.getPassword())); + } else { + throw new UnauthorizedException(); + } + } + + @GetMapping("/article") + public ResponseBean article() { + Subject subject = SecurityUtils.getSubject(); + if (subject.isAuthenticated()) { + return new ResponseBean(200, "You are already logged in", null); + } else { + return new ResponseBean(200, "You are guest", null); + } + } + + @GetMapping("/require_auth") + @RequiresAuthentication + public ResponseBean requireAuth() { + return new ResponseBean(200, "You are authenticated", null); + } + + @GetMapping("/require_role") + @RequiresRoles("admin") + public ResponseBean requireRole() { + return new ResponseBean(200, "You are visiting require_role", null); + } + + @GetMapping("/require_permission") + @RequiresPermissions(logical = Logical.AND, value = {"view", "edit"}) + public ResponseBean requirePermission() { + return new ResponseBean(200, "You are visiting permission require edit,view", null); + } + + @RequestMapping(path = "/401") + @ResponseStatus(HttpStatus.UNAUTHORIZED) + public ResponseBean unauthorized() { + return new ResponseBean(401, "Unauthorized", null); + } +} \ No newline at end of file diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/controller/FindsDepartsChildrenUtil.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/controller/FindsDepartsChildrenUtil.java new file mode 100644 index 00000000..62c0be02 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/controller/FindsDepartsChildrenUtil.java @@ -0,0 +1,103 @@ +package org.jeecg.modules.system.controller; + +import org.jeecg.modules.system.entity.SysDepart; +import org.jeecg.modules.system.model.DepartIdModel; +import org.jeecg.modules.system.model.SysDepartTreeModel; + +import java.util.ArrayList; +import java.util.List; + +/** + *

    + * 对应部门的表,处理并查找树级数据 + *

    + * + * @author Steve + * @Since 2019-01-22 + */ +public class FindsDepartsChildrenUtil { + + + private static List idList = new ArrayList<>(4); + + + /** + * queryTreeList的子方法 ====1===== + * 该方法是s将SysDepart类型的list集合转换成SysDepartTreeModel类型的集合 + */ + public static List wrapTreeDataToTreeList(List recordList) { + // 在该方法每请求一次,都要对全局list集合进行一次清理 + idList.clear(); + List records = new ArrayList<>(); + for (int i = 0; i < recordList.size(); i++) { + SysDepart depart = recordList.get(i); + records.add(new SysDepartTreeModel(recordList.get(i))); + } + List tree = findChildren(records, idList); + setEmptyChildrenAsNull(tree); + return tree; + } + + public static List wrapDepartIdModel() { + return idList; + } + + /** + * queryTreeList的子方法 ====2===== + * 该方法是找到并封装顶级父类的节点到TreeList集合 + */ + private static List findChildren(List recordList, + List idList) { + + List treeList = new ArrayList<>(); + for (int i = 0; i < recordList.size(); i++) { + SysDepartTreeModel branch = recordList.get(i); + if (branch.getParentId().equals("")) { + treeList.add(branch); + DepartIdModel departIdModel = new DepartIdModel().convert(branch); + idList.add(departIdModel); + } + } + getGrandChildren(treeList,recordList,idList); + return treeList; + } + + /** + * queryTreeList的子方法====3==== + *该方法是找到顶级父类下的所有子节点集合并封装到TreeList集合 + */ + private static void getGrandChildren(List treeList,List recordList,List idList) { + + for (int i = 0; i < treeList.size(); i++) { + SysDepartTreeModel model = treeList.get(i); + DepartIdModel idModel = idList.get(i); + for (int i1 = 0; i1 < recordList.size(); i1++) { + SysDepartTreeModel m = recordList.get(i1); + if (m.getParentId().equals(model.getId())) { + model.getChildren().add(m); + DepartIdModel dim = new DepartIdModel().convert(m); + idModel.getChildren().add(dim); + } + } + getGrandChildren(treeList.get(i).getChildren(), recordList, idList.get(i).getChildren()); + } + + } + + + /** + * queryTreeList的子方法 ====4==== + * 该方法是将子节点为空的List集合设置为Null值 + */ + private static void setEmptyChildrenAsNull(List treeList) { + + for (int i = 0; i < treeList.size(); i++) { + SysDepartTreeModel model = treeList.get(i); + if (model.getChildren().size() == 0) { + model.setChildren(null); + }else{ + setEmptyChildrenAsNull(model.getChildren()); + } + } + } +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/controller/LoginController.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/controller/LoginController.java new file mode 100644 index 00000000..7d534848 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/controller/LoginController.java @@ -0,0 +1,96 @@ +package org.jeecg.modules.system.controller; + +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.constant.CommonConstant; +import org.jeecg.common.system.api.ISysBaseAPI; +import org.jeecg.common.util.PasswordUtil; +import org.jeecg.common.util.RedisUtil; +import org.jeecg.modules.shiro.authc.util.JwtUtil; +import org.jeecg.modules.system.entity.SysUser; +import org.jeecg.modules.system.model.SysLoginModel; +import org.jeecg.modules.system.service.ISysLogService; +import org.jeecg.modules.system.service.ISysUserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; + +/** + * @author scott + * @since 2018-12-17 + */ +@RestController +@RequestMapping("/sys") +@Api("用户登录") +public class LoginController { + @Autowired + private ISysUserService sysUserService; + @Autowired + private ISysBaseAPI sysBaseAPI; + @Autowired + private ISysLogService logService; + @Autowired + private RedisUtil redisUtil; + + + @RequestMapping(value = "/login", method = RequestMethod.POST) + @ApiOperation("登录接口") + public Result login(@RequestBody SysLoginModel sysLoginModel) { + Result result = new Result(); + String username = sysLoginModel.getUsername(); + String password = sysLoginModel.getPassword(); + SysUser sysUser = sysUserService.getUserByName(username); + if(sysUser==null) { + result.error500("该用户不存在"); + sysBaseAPI.addLog("登录失败,用户名:"+username+"不存在!", CommonConstant.LOG_TYPE_1, null); + return result; + }else { + //密码验证 + String userpassword = PasswordUtil.encrypt(username, password, sysUser.getSalt()); + String syspassword = sysUser.getPassword(); + if(!syspassword.equals(userpassword)) { + result.error500("用户名或密码错误"); + return result; + } + //生成token + String token = JwtUtil.sign(username, syspassword); + redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token); + //设置超时时间 + redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME/1000); + + JSONObject obj = new JSONObject(); + obj.put("token", token); + obj.put("userInfo", sysUser); + result.setResult(obj); + result.success("登录成功"); + sysBaseAPI.addLog("用户名: "+username+",登录成功!", CommonConstant.LOG_TYPE_1, null); + } + return result; + } + + /** + * 获取访问量 + * @return + */ + @GetMapping("loginfo") + public Result loginfo() { + Result result = new Result(); + JSONObject obj = new JSONObject(); + // 获取系统访问记录 + Long totalVisitCount = logService.findTotalVisitCount(); + obj.put("totalVisitCount", totalVisitCount); + Long todayVisitCount = logService.findTodayVisitCount(); + obj.put("todayVisitCount", todayVisitCount); + Long todayIp = logService.findTodayIp(); + obj.put("todayIp", todayIp); + result.setResult(obj); + result.success("登录成功"); + return result; + } + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/controller/SysAnnouncementController.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/controller/SysAnnouncementController.java new file mode 100644 index 00000000..45c201ec --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/controller/SysAnnouncementController.java @@ -0,0 +1,230 @@ +package org.jeecg.modules.system.controller; + +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import javax.servlet.http.HttpServletRequest; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.constant.CommonConstant; +import org.jeecg.common.constant.CommonSendStatus; +import org.jeecg.common.util.oConvertUtils; +import org.jeecg.modules.shiro.authc.util.JwtUtil; +import org.jeecg.modules.system.entity.SysAnnouncement; +import org.jeecg.modules.system.entity.SysDict; +import org.jeecg.modules.system.service.ISysAnnouncementService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; + + /** + * @Title: Controller + * @Description: 系统通告表 + * @author: jeecg-boot + * @date: 2019-01-02 + * @version: V1.0 + */ +@RestController +@RequestMapping("/sys/annountCement") +@Slf4j +public class SysAnnouncementController { + @Autowired + private ISysAnnouncementService sysAnnouncementService; + + /** + * 分页列表查询 + * @param sysAnnouncement + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @RequestMapping(value = "/list", method = RequestMethod.GET) + public Result> queryPageList(SysAnnouncement sysAnnouncement, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + Result> result = new Result>(); + sysAnnouncement.setDelFlag(CommonConstant.DEL_FLAG_0.toString()); + QueryWrapper queryWrapper = new QueryWrapper(sysAnnouncement); + Page page = new Page(pageNo,pageSize); + //排序逻辑 处理 + String column = req.getParameter("column"); + String order = req.getParameter("order"); + if(oConvertUtils.isNotEmpty(column) && oConvertUtils.isNotEmpty(order)) { + if("asc".equals(order)) { + queryWrapper.orderByAsc(oConvertUtils.camelToUnderline(column)); + }else { + queryWrapper.orderByDesc(oConvertUtils.camelToUnderline(column)); + } + } + IPage pageList = sysAnnouncementService.page(page, queryWrapper); + log.info("查询当前页:"+pageList.getCurrent()); + log.info("查询当前页数量:"+pageList.getSize()); + log.info("查询结果数量:"+pageList.getRecords().size()); + log.info("数据总数:"+pageList.getTotal()); + result.setSuccess(true); + result.setResult(pageList); + return result; + } + + /** + * 添加 + * @param sysAnnouncement + * @return + */ + @RequestMapping(value = "/add", method = RequestMethod.POST) + public Result add(@RequestBody SysAnnouncement sysAnnouncement) { + Result result = new Result(); + try { + sysAnnouncement.setDelFlag(CommonConstant.DEL_FLAG_0.toString()); + sysAnnouncement.setSendStatus(CommonSendStatus.UNPUBLISHED_STATUS_0);//未发布 + sysAnnouncementService.save(sysAnnouncement); + result.success("添加成功!"); + } catch (Exception e) { + e.printStackTrace(); + log.info(e.getMessage()); + result.error500("操作失败"); + } + return result; + } + + /** + * 编辑 + * @param sysAnnouncement + * @return + */ + @RequestMapping(value = "/edit", method = RequestMethod.PUT) + public Result eidt(@RequestBody SysAnnouncement sysAnnouncement) { + Result result = new Result(); + SysAnnouncement sysAnnouncementEntity = sysAnnouncementService.getById(sysAnnouncement.getId()); + if(sysAnnouncementEntity==null) { + result.error500("未找到对应实体"); + }else { + boolean ok = sysAnnouncementService.updateById(sysAnnouncement); + //TODO 返回false说明什么? + if(ok) { + result.success("修改成功!"); + } + } + + return result; + } + + /** + * 通过id删除 + * @param id + * @return + */ + @RequestMapping(value = "/delete", method = RequestMethod.DELETE) + public Result delete(@RequestParam(name="id",required=true) String id) { + Result result = new Result(); + SysAnnouncement sysAnnouncement = sysAnnouncementService.getById(id); + if(sysAnnouncement==null) { + result.error500("未找到对应实体"); + }else { + sysAnnouncement.setDelFlag(CommonConstant.DEL_FLAG_1.toString()); + boolean ok = sysAnnouncementService.updateById(sysAnnouncement); + if(ok) { + result.success("删除成功!"); + } + } + + return result; + } + + /** + * 批量删除 + * @param ids + * @return + */ + @RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE) + public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + Result result = new Result(); + if(ids==null || "".equals(ids.trim())) { + result.error500("参数不识别!"); + }else { + String[] id = ids.split(","); + for(int i=0;i queryById(@RequestParam(name="id",required=true) String id) { + Result result = new Result(); + SysAnnouncement sysAnnouncement = sysAnnouncementService.getById(id); + if(sysAnnouncement==null) { + result.error500("未找到对应实体"); + }else { + result.setResult(sysAnnouncement); + result.setSuccess(true); + } + return result; + } + + /** + * 更新发布操作 + * @param id + * @return + */ + @RequestMapping(value = "/doReleaseData", method = RequestMethod.GET) + public Result doReleaseData(@RequestParam(name="id",required=true) String id, HttpServletRequest request) { + Result result = new Result(); + SysAnnouncement sysAnnouncement = sysAnnouncementService.getById(id); + if(sysAnnouncement==null) { + result.error500("未找到对应实体"); + }else { + sysAnnouncement.setSendStatus(CommonSendStatus.PUBLISHED_STATUS_1);//发布中 + sysAnnouncement.setSendTime(new Date()); + String currentUserName = JwtUtil.getUserNameByToken(request); + sysAnnouncement.setSender(currentUserName); + boolean ok = sysAnnouncementService.updateById(sysAnnouncement); + if(ok) { + result.success("该系统通知发布成功"); + } + } + + return result; + } + + /** + * 更新撤销操作 + * @param id + * @return + */ + @RequestMapping(value = "/doReovkeData", method = RequestMethod.GET) + public Result doReovkeData(@RequestParam(name="id",required=true) String id, HttpServletRequest request) { + Result result = new Result(); + SysAnnouncement sysAnnouncement = sysAnnouncementService.getById(id); + if(sysAnnouncement==null) { + result.error500("未找到对应实体"); + }else { + sysAnnouncement.setSendStatus(CommonSendStatus.REVOKE_STATUS_2);//撤销发布 + sysAnnouncement.setCancelTime(new Date()); + boolean ok = sysAnnouncementService.updateById(sysAnnouncement); + if(ok) { + result.success("该系统通知撤销成功"); + } + } + + return result; + } + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/controller/SysDepartController.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/controller/SysDepartController.java new file mode 100644 index 00000000..31f3a228 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/controller/SysDepartController.java @@ -0,0 +1,190 @@ +package org.jeecg.modules.system.controller; + +import lombok.extern.slf4j.Slf4j; + +import org.apache.shiro.authz.annotation.RequiresRoles; +import org.jeecg.common.api.vo.Result; +import org.jeecg.modules.shiro.authc.util.JwtUtil; +import org.jeecg.modules.system.entity.SysDepart; +import org.jeecg.modules.system.model.DepartIdModel; +import org.jeecg.modules.system.model.SysDepartTreeModel; +import org.jeecg.modules.system.service.ISysDepartService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.*; + +import javax.servlet.http.HttpServletRequest; + +/** + *

    + * 部门表 前端控制器 + *

    + * + * @author: Steve @Since: 2019-01-22 + */ +@RestController +@RequestMapping("/sysdepart/sysDepart") +@Slf4j +public class SysDepartController { + + @Autowired + private ISysDepartService sysDepartService; + + /** + * 查询数据 查出所有部门,并以树结构数据格式响应给前端 + * + * @return + */ + @RequestMapping(value = "/queryTreeList", method = RequestMethod.GET) + public Result> queryTreeList() { + Result> result = new Result<>(); + try { + List list = sysDepartService.queryTreeList(); + result.setResult(list); + result.setSuccess(true); + } catch (Exception e) { + e.printStackTrace(); + } + return result; + } + + /** + * 添加新数据 添加用户新建的部门对象数据,并保存到数据库 + * + * @param sysDepart + * @return + */ + @RequestMapping(value = "/add", method = RequestMethod.POST) + @RequiresRoles({"admin"}) + public Result add(@RequestBody SysDepart sysDepart, HttpServletRequest request) { + Result result = new Result(); + String username = JwtUtil.getUserNameByToken(request); + try { + sysDepart.setCreateBy(username); + sysDepartService.saveDepartData(sysDepart, username); + result.success("添加成功!"); + } catch (Exception e) { + e.printStackTrace(); + log.info(e.getMessage()); + result.error500("操作失败"); + } + return result; + } + + /** + * 编辑数据 编辑部门的部分数据,并保存到数据库 + * + * @param sysDepart + * @return + */ + @RequestMapping(value = "/edit", method = RequestMethod.PUT) + @RequiresRoles({"admin"}) + public Result eidt(@RequestBody SysDepart sysDepart, HttpServletRequest request) { + + String username = JwtUtil.getUserNameByToken(request); + sysDepart.setUpdateBy(username); + Result result = new Result(); + SysDepart sysDepartEntity = sysDepartService.getById(sysDepart.getId()); + if (sysDepartEntity == null) { + result.error500("未找到对应实体"); + } else { + boolean ok = sysDepartService.updateDepartDataById(sysDepart, username); + // TODO 返回false说明什么? + if (ok) { + result.success("修改成功!"); + } + } + return result; + } + + /** + * 通过id删除 + * @param id + * @return + */ + @RequestMapping(value = "/delete", method = RequestMethod.DELETE) + @RequiresRoles({"admin"}) + public Result delete(@RequestParam(name="id",required=true) String id) { + + Result result = new Result(); + SysDepart sysDepart = sysDepartService.getById(id); + if(sysDepart==null) { + result.error500("未找到对应实体"); + }else { + boolean ok = sysDepartService.removeById(id); + if(ok) { + result.success("删除成功!"); + } + } + return result; + } + + + /** + * 批量删除 根据前端请求的多个ID,对数据库执行删除相关部门数据的操作 + * + * @param ids + * @return + */ + @RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE) + @RequiresRoles({"admin"}) + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + + Result result = new Result(); + if (ids == null || "".equals(ids.trim())) { + result.error500("参数不识别!"); + } else { + this.sysDepartService.removeByIds(Arrays.asList(ids.split(","))); + result.success("删除成功!"); + } + return result; + } + + /** + * 查询数据 添加或编辑页面对该方法发起请求,以树结构形式加载所有部门的名称,方便用户的操作 + * + * @return + */ + + @RequestMapping(value = "/queryIdTree", method = RequestMethod.GET) + public Result> queryIdTree() { + Result> result = new Result>(); + try { + List idList = FindsDepartsChildrenUtil.wrapDepartIdModel(); + result.setResult(idList); result.setSuccess(true); + return result; + } catch(Exception e) { + e.printStackTrace(); result.setSuccess(false); + return result; + } + } + + /** + *

    + * 部门搜索功能方法,根据关键字模糊搜索相关部门 + *

    + * + * @param keyWord + * @return + */ + @RequestMapping(value = "/searchBy", method = RequestMethod.GET) + public Result> searchBy(@RequestParam(name = "keyWord", required = true) String keyWord) { + Result> result = new Result>(); + try { + List treeList = this.sysDepartService.searhBy(keyWord); + if (treeList.size() == 0 || treeList == null) { + throw new Exception(); + } + result.setSuccess(true); + result.setResult(treeList); + return result; + } catch (Exception e) { + e.fillInStackTrace(); + result.setSuccess(false); + result.setMessage("查询失败或没有您想要的任何数据!"); + return result; + } + } + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/controller/SysDictController.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/controller/SysDictController.java new file mode 100644 index 00000000..704639c5 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/controller/SysDictController.java @@ -0,0 +1,234 @@ +package org.jeecg.modules.system.controller; + + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; + +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.util.oConvertUtils; +import org.jeecg.modules.system.entity.SysDict; +import org.jeecg.modules.system.model.SysDictTree; +import org.jeecg.modules.system.service.ISysDictService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; + +import lombok.extern.slf4j.Slf4j; + +/** + *

    + * 字典表 前端控制器 + *

    + * + * @author zhangweijian + * @since 2018-12-28 + */ +@RestController +@RequestMapping("/sys/dict") +@Slf4j +public class SysDictController { + + @Autowired + private ISysDictService sysDictService; + + @RequestMapping(value = "/list", method = RequestMethod.GET) + public Result> queryPageList(SysDict sysDict,@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,HttpServletRequest req) { + Result> result = new Result>(); + QueryWrapper queryWrapper = new QueryWrapper(sysDict); + Page page = new Page(pageNo,pageSize); + //排序逻辑 处理 + String column = req.getParameter("column"); + String order = req.getParameter("order"); + if(oConvertUtils.isNotEmpty(column) && oConvertUtils.isNotEmpty(order)) { + if("asc".equals(order)) { + queryWrapper.orderByAsc(oConvertUtils.camelToUnderline(column)); + }else { + queryWrapper.orderByDesc(oConvertUtils.camelToUnderline(column)); + } + } + //创建时间/创建人的赋值 + IPage pageList = sysDictService.page(page, queryWrapper); + log.info("查询当前页:"+pageList.getCurrent()); + log.info("查询当前页数量:"+pageList.getSize()); + log.info("查询结果数量:"+pageList.getRecords().size()); + log.info("数据总数:"+pageList.getTotal()); + result.setSuccess(true); + result.setResult(pageList); + return result; + } + + /** + * @功能:获取树形字典数据 + * @param sysDict + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @SuppressWarnings("unchecked") + @RequestMapping(value = "/treeList", method = RequestMethod.GET) + public Result> treeList(SysDict sysDict,@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,HttpServletRequest req) { + Result> result = new Result<>(); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + // 构造查询条件 + String dictName = sysDict.getDictName(); + if(oConvertUtils.isNotEmpty(dictName)) { + query.like(true, SysDict::getDictName, dictName); + } + query.eq(true, SysDict::getDelFlag, "1"); + query.orderByDesc(true, SysDict::getCreateTime); + List list = sysDictService.list(query); + List treeList = new ArrayList<>(); + for (SysDict node : list) { + treeList.add(new SysDictTree(node)); + } + result.setSuccess(true); + result.setResult(treeList); + return result; + } + + /** + * 获取字典数据 + * @param dictCode + * @return + */ + @RequestMapping(value = "/getDictItems/{dictCode}", method = RequestMethod.GET) + public Result>> getDictItems(@PathVariable String dictCode) { + log.info(" dictCode : "+ dictCode); + Result>> result = new Result>>(); + List> ls = null; + try { + ls = sysDictService.queryDictItemsByCode(dictCode); + result.setSuccess(true); + result.setResult(ls); + } catch (Exception e) { + log.info(e.getMessage()); + result.error500("操作失败"); + return result; + } + + return result; + } + + /** + * 获取字典数据 + * @param dictCode + * @return + */ + @RequestMapping(value = "/getDictText/{dictCode}/{key}", method = RequestMethod.GET) + public Result getDictItems(@PathVariable("dictCode") String dictCode, @PathVariable("key") String key) { + log.info(" dictCode : "+ dictCode); + Result result = new Result(); + String text = null; + try { + text = sysDictService.queryDictTextByKey(dictCode, key); + result.setSuccess(true); + result.setResult(text); + } catch (Exception e) { + log.info(e.getMessage()); + result.error500("操作失败"); + return result; + } + return result; + } + + /** + * @功能:新增 + * @param sysDict + * @return + */ + @RequestMapping(value = "/add", method = RequestMethod.POST) + public Result add(@RequestBody SysDict sysDict) { + Result result = new Result(); + try { + sysDict.setCreateTime(new Date()); + sysDictService.save(sysDict); + result.success("保存成功!"); + } catch (Exception e) { + e.printStackTrace(); + log.info(e.getMessage()); + result.error500("操作失败"); + } + return result; + } + + /** + * @功能:编辑 + * @param sysDict + * @return + */ + @RequestMapping(value = "/edit", method = RequestMethod.PUT) + public Result edit(@RequestBody SysDict sysDict) { + Result result = new Result(); + SysDict sysdict = sysDictService.getById(sysDict.getId()); + if(sysdict==null) { + result.error500("未找到对应实体"); + }else { + sysDict.setUpdateTime(new Date()); + boolean ok = sysDictService.updateById(sysDict); + //TODO 返回false说明什么? + if(ok) { + result.success("编辑成功!"); + } + } + return result; + } + + /** + * @功能:删除 + * @param id + * @return + */ + @RequestMapping(value = "/delete", method = RequestMethod.DELETE) + public Result delete(@RequestParam(name="id",required=true) String id) { + Result result = new Result(); + SysDict sysDict = sysDictService.getById(id); + if(sysDict==null) { + result.error500("未找到对应实体"); + }else { + sysDict.setDelFlag(2); + boolean ok = sysDictService.updateById(sysDict); + if(ok) { + result.success("删除成功!"); + } + } + return result; + } + + /** + * @功能:批量删除 + * @param ids + * @return + */ + @RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE) + public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + Result result = new Result(); + if(ids==null || "".equals(ids.trim())) { + result.error500("参数不识别!"); + }else { + String[] id=ids.split(","); + for(int i=0;i + * 前端控制器 + *

    + * + * @author zhangweijian + * @since 2018-12-28 + */ +@RestController +@RequestMapping("/sys/dictItem") +@Slf4j +public class SysDictItemController { + + @Autowired + private ISysDictItemService sysDictItemService; + + /** + * @功能:查询字典数据 + * @param sysDictItem + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @RequestMapping(value = "/list", method = RequestMethod.GET) + public Result> queryPageList(SysDictItem sysDictItem,@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,HttpServletRequest req) { + Result> result = new Result>(); + QueryWrapper queryWrapper = new QueryWrapper(sysDictItem); + Page page = new Page(pageNo,pageSize); + //update-begin--Author:zhangweijian Date:20190103 for:新增排序处理 + //排序逻辑 处理 + String column = req.getParameter("column"); + String order = req.getParameter("order"); + if(oConvertUtils.isNotEmpty(column) && oConvertUtils.isNotEmpty(order)) { + if("asc".equals(order)) { + queryWrapper.orderByAsc(oConvertUtils.camelToUnderline(column)); + }else { + queryWrapper.orderByDesc(oConvertUtils.camelToUnderline(column)); + } + } + //update-end--Author:zhangweijian Date:20190103 for:根据业务配置id查询 + //TODO 过滤逻辑处理 + //TODO begin、end逻辑处理 + //TODO 一个强大的功能,前端传一个字段字符串,后台只返回这些字符串对应的字段 + //创建时间/创建人的赋值 + IPage pageList = sysDictItemService.page(page, queryWrapper); + log.info("查询当前页:"+pageList.getCurrent()); + log.info("查询当前页数量:"+pageList.getSize()); + log.info("查询结果数量:"+pageList.getRecords().size()); + log.info("数据总数:"+pageList.getTotal()); + result.setSuccess(true); + result.setResult(pageList); + return result; + } + + /** + * @功能:新增 + * @param sysDict + * @return + */ + @RequestMapping(value = "/add", method = RequestMethod.POST) + public Result add(@RequestBody SysDictItem sysDictItem) { + Result result = new Result(); + try { + sysDictItem.setCreateTime(new Date()); + sysDictItemService.save(sysDictItem); + result.success("保存成功!"); + } catch (Exception e) { + e.printStackTrace(); + log.info(e.getMessage()); + result.error500("操作失败"); + } + return result; + } + + /** + * @功能:编辑 + * @param sysDictItem + * @return + */ + @RequestMapping(value = "/edit", method = RequestMethod.PUT) + public Result edit(@RequestBody SysDictItem sysDictItem) { + Result result = new Result(); + SysDictItem sysdict = sysDictItemService.getById(sysDictItem.getId()); + if(sysdict==null) { + result.error500("未找到对应实体"); + }else { + sysDictItem.setUpdateTime(new Date()); + boolean ok = sysDictItemService.updateById(sysDictItem); + //TODO 返回false说明什么? + if(ok) { + result.success("编辑成功!"); + } + } + return result; + } + + /** + * @功能:删除字典数据 + * @param id + * @return + */ + @RequestMapping(value = "/delete", method = RequestMethod.DELETE) + public Result delete(@RequestParam(name="id",required=true) String id) { + Result result = new Result(); + SysDictItem joinSystem = sysDictItemService.getById(id); + if(joinSystem==null) { + result.error500("未找到对应实体"); + }else { + boolean ok = sysDictItemService.removeById(id); + if(ok) { + result.success("删除成功!"); + } + } + return result; + } + + /** + * @功能:批量删除字典数据 + * @param ids + * @return + */ + @RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE) + public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + Result result = new Result(); + if(ids==null || "".equals(ids.trim())) { + result.error500("参数不识别!"); + }else { + this.sysDictItemService.removeByIds(Arrays.asList(ids.split(","))); + result.success("删除成功!"); + } + return result; + } + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/controller/SysLogController.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/controller/SysLogController.java new file mode 100644 index 00000000..b3c152e4 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/controller/SysLogController.java @@ -0,0 +1,133 @@ +package org.jeecg.modules.system.controller; + + +import java.util.Arrays; + +import javax.servlet.http.HttpServletRequest; + +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.util.oConvertUtils; +import org.jeecg.modules.system.entity.SysLog; +import org.jeecg.modules.system.entity.SysRole; +import org.jeecg.modules.system.service.ISysLogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; + +import lombok.extern.slf4j.Slf4j; + +/** + *

    + * 系统日志表 前端控制器 + *

    + * + * @author zhangweijian + * @since 2018-12-26 + */ +@RestController +@RequestMapping("/sys/log") +@Slf4j +public class SysLogController { + + @Autowired + private ISysLogService sysLogService; + + /** + * @功能:查询日志记录 + * @param syslog + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @RequestMapping(value = "/list", method = RequestMethod.GET) + public Result> queryPageList(SysLog syslog,@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,HttpServletRequest req) { + Result> result = new Result>(); + QueryWrapper queryWrapper = new QueryWrapper(syslog); + Page page = new Page(pageNo,pageSize); + //开始结束时间 + String beginTime = req.getParameter("createTime_begin"); + String endTime = req.getParameter("createTime_end"); + if(oConvertUtils.isNotEmpty(beginTime) && oConvertUtils.isNotEmpty(endTime)) { + queryWrapper.ge(oConvertUtils.camelToUnderline("createTime"), beginTime); + queryWrapper.le(oConvertUtils.camelToUnderline("createTime"), endTime); + } + //排序逻辑 处理 + String column = req.getParameter("column"); + String order = req.getParameter("order"); + if(oConvertUtils.isNotEmpty(column) && oConvertUtils.isNotEmpty(order)) { + if("asc".equals(order)) { + queryWrapper.orderByAsc(oConvertUtils.camelToUnderline(column)); + }else { + queryWrapper.orderByDesc(oConvertUtils.camelToUnderline(column)); + } + } + //日志关键词 + String keyWord = req.getParameter("keyWord"); + if(oConvertUtils.isNotEmpty(keyWord)) { + queryWrapper.like("log_content",keyWord); + } + //TODO 过滤逻辑处理 + //TODO begin、end逻辑处理 + //TODO 一个强大的功能,前端传一个字段字符串,后台只返回这些字符串对应的字段 + //创建时间/创建人的赋值 + IPage pageList = sysLogService.page(page, queryWrapper); + log.info("查询当前页:"+pageList.getCurrent()); + log.info("查询当前页数量:"+pageList.getSize()); + log.info("查询结果数量:"+pageList.getRecords().size()); + log.info("数据总数:"+pageList.getTotal()); + result.setSuccess(true); + result.setResult(pageList); + return result; + } + + /** + * @功能:删除单个日志记录 + * @param id + * @return + */ + @RequestMapping(value = "/delete", method = RequestMethod.DELETE) + public Result delete(@RequestParam(name="id",required=true) String id) { + Result result = new Result(); + SysLog sysLog = sysLogService.getById(id); + if(sysLog==null) { + result.error500("未找到对应实体"); + }else { + boolean ok = sysLogService.removeById(id); + if(ok) { + result.success("删除成功!"); + } + } + return result; + } + + /** + * @功能:批量,全部清空日志记录 + * @param ids + * @return + */ + @RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE) + public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + Result result = new Result(); + if(ids==null || "".equals(ids.trim())) { + result.error500("参数不识别!"); + }else { + if("allclear".equals(ids)) { + this.sysLogService.removeAll(); + result.success("清除成功!"); + } + this.sysLogService.removeByIds(Arrays.asList(ids.split(","))); + result.success("删除成功!"); + } + return result; + } + + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/controller/SysPermissionController.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/controller/SysPermissionController.java new file mode 100644 index 00000000..43db1261 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/controller/SysPermissionController.java @@ -0,0 +1,408 @@ +package org.jeecg.modules.system.controller; + + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import javax.servlet.http.HttpServletRequest; + +import org.apache.shiro.authz.annotation.RequiresRoles; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.util.MD5Util; +import org.jeecg.common.util.oConvertUtils; +import org.jeecg.modules.system.entity.SysPermission; +import org.jeecg.modules.system.entity.SysRolePermission; +import org.jeecg.modules.system.model.SysPermissionTree; +import org.jeecg.modules.system.model.TreeModel; +import org.jeecg.modules.system.service.ISysPermissionService; +import org.jeecg.modules.system.service.ISysRolePermissionService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; + +import lombok.extern.slf4j.Slf4j; + +/** + *

    + * 菜单权限表 前端控制器 + *

    + * + * @author scott + * @since 2018-12-21 + */ +@Slf4j +@RestController +@RequestMapping("/sys/permission") +public class SysPermissionController { + + @Autowired + private ISysPermissionService sysPermissionService; + + @Autowired + private ISysRolePermissionService sysRolePermissionService; + + + /** + * 加载数据节点 + * @return + */ + @RequestMapping(value = "/list", method = RequestMethod.GET) + public Result> list() { + //@RequestParam(name="pid",required=false) String parentId + Result> result = new Result<>(); + try { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.eq(SysPermission::getDelFlag, 0); + query.orderByAsc(SysPermission::getSortNo); + List list = sysPermissionService.list(query); + List treeList = new ArrayList<>(); + getTreeList(treeList, list, null); + result.setResult(treeList); + result.setSuccess(true); + } catch (Exception e) { + e.printStackTrace(); + } + return result; + } + + + /** + * 查询用户的权限 + * @return + */ + @RequestMapping(value = "/queryByUser", method = RequestMethod.GET) + public Result queryByUser(HttpServletRequest req) { + Result result = new Result<>(); + try { + String username = req.getParameter("username"); + List metaList = sysPermissionService.queryByUser(username); + JSONArray jsonArray = new JSONArray(); + this.getPermissionJsonArray(jsonArray, metaList, null); + result.setResult(jsonArray); + result.success("查询成功"); + } catch (Exception e) { + result.error500("查询失败:"+e.getMessage()); + e.printStackTrace(); + } + return result; + } + + + + + @RequestMapping(value = "/add", method = RequestMethod.POST) + @RequiresRoles({"admin"}) + public Result add(@RequestBody SysPermission permission) { + Result result = new Result(); + try { + sysPermissionService.addPermission(permission); + result.success("添加成功!"); + } catch (Exception e) { + e.printStackTrace(); + log.info(e.getMessage()); + result.error500("操作失败"); + } + return result; + } + + @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) + @RequiresRoles({"admin"}) + public Result eidt(@RequestBody SysPermission permission) { + Result result = new Result<>(); + try { + sysPermissionService.editPermission(permission); + result.success("修改成功!"); + } catch (Exception e) { + e.printStackTrace(); + log.info(e.getMessage()); + result.error500("操作失败"); + } + return result; + } + + @RequestMapping(value = "/delete", method = RequestMethod.DELETE) + @RequiresRoles({"admin"}) + public Result delete(@RequestParam(name="id",required=true) String id) { + Result result = new Result<>(); + try { + sysPermissionService.deletePermission(id); + result.success("删除成功!"); + } catch (Exception e) { + e.printStackTrace(); + result.error500(e.getMessage()); + } + return result; + } + + + @RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE) + @RequiresRoles({"admin"}) + public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + Result result = new Result<>(); + try { + String arr[] = ids.split(","); + for (String id : arr) { + if(oConvertUtils.isNotEmpty(id)) { + sysPermissionService.deletePermission(id); + } + } + result.success("删除成功!"); + } catch (Exception e) { + e.printStackTrace(); + result.error500("删除成功!"); + } + return result; + } + + /** + * 获取全部的权限树 + * @return + */ + @RequestMapping(value = "/queryTreeList", method = RequestMethod.GET) + public Result> queryTreeList() { + Result> result = new Result<>(); + //全部权限ids + List ids = new ArrayList<>(); + try { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.eq(SysPermission::getDelFlag, 0); + query.orderByAsc(SysPermission::getSortNo); + List list = sysPermissionService.list(query); + for(SysPermission sysPer : list) { + ids.add(sysPer.getId()); + } + + System.out.println(list.size()); + List treeList = new ArrayList<>(); + getTreeModelList(treeList, list, null); + + Map resMap = new HashMap(); + resMap.put("treeList", treeList); //全部树节点数据 + resMap.put("ids", ids);//全部树ids + result.setResult(resMap); + result.setSuccess(true); + } catch (Exception e) { + e.printStackTrace(); + } + return result; + } + /** + * 异步加载数据节点 + * @return + */ + @RequestMapping(value = "/queryListAsync", method = RequestMethod.GET) + public Result> queryAsync(@RequestParam(name="pid",required=false) String parentId) { + Result> result = new Result<>(); + try { + List list = sysPermissionService.queryListByParentId(parentId); + if(list==null||list.size()<=0) { + result.error500("未找到角色信息"); + }else { + result.setResult(list); + result.setSuccess(true); + } + } catch (Exception e) { + e.printStackTrace(); + } + + return result; + } + + + + /** + * 查询角色授权 + * @return + */ + @RequestMapping(value = "/queryRolePermission", method = RequestMethod.GET) + public Result> queryRolePermission(@RequestParam(name="roleId",required=true) String roleId) { + Result> result = new Result<>(); + try { + List list = sysRolePermissionService.list(new QueryWrapper().lambda().eq(SysRolePermission::getRoleId, roleId)); + result.setResult(list.stream().map(SysRolePermission -> String.valueOf(SysRolePermission.getPermissionId())).collect(Collectors.toList())); + result.setSuccess(true); + } catch (Exception e) { + e.printStackTrace(); + } + return result; + } + + /** + * 保存角色授权 + * @return + */ + @RequestMapping(value = "/saveRolePermission", method = RequestMethod.POST) + public Result saveRolePermission(@RequestBody JSONObject json) { + Result result = new Result<>(); + try { + String roleId = json.getString("roleId"); + String permissionIds = json.getString("permissionIds"); + this.sysRolePermissionService.saveRolePermission(roleId, permissionIds); + result.success("保存成功!"); + } catch (Exception e) { + result.error500("授权失败!"); + e.printStackTrace(); + } + return result; + } + + + private void getTreeList(List treeList,List metaList,SysPermissionTree temp) { + for (SysPermission permission : metaList) { + String tempPid = permission.getParentId(); + SysPermissionTree tree = new SysPermissionTree(permission); + if(temp==null && oConvertUtils.isEmpty(tempPid)) { + treeList.add(tree); + if(tree.getIsLeaf()==0) { + getTreeList(treeList, metaList, tree); + } + }else if(temp!=null && tempPid!=null && tempPid.equals(temp.getId())){ + temp.getChildren().add(tree); + if(tree.getIsLeaf()==0) { + getTreeList(treeList, metaList, tree); + } + } + + } + } + + private void getTreeModelList(List treeList,List metaList,TreeModel temp) { + for (SysPermission permission : metaList) { + String tempPid = permission.getParentId(); + TreeModel tree = new TreeModel(permission); + if(temp==null && oConvertUtils.isEmpty(tempPid)) { + treeList.add(tree); + if(permission.getIsLeaf()==0) { + getTreeModelList(treeList, metaList, tree); + } + }else if(temp!=null && tempPid!=null && tempPid.equals(temp.getKey())){ + temp.getChildren().add(tree); + if(permission.getIsLeaf()==0) { + getTreeModelList(treeList, metaList, tree); + } + } + + } + } + /** + * 获取菜单JSON数组 + * @param jsonArray + * @param metaList + * @param parentJson + */ + private void getPermissionJsonArray(JSONArray jsonArray,List metaList,JSONObject parentJson) { + for (SysPermission permission : metaList) { + if(permission.getMenuType()==null) { + continue; + } + String tempPid = permission.getParentId(); + JSONObject json = getPermissionJsonObject(permission); + if(parentJson==null && oConvertUtils.isEmpty(tempPid)) { + jsonArray.add(json); + if(permission.getIsLeaf()==0) { + getPermissionJsonArray(jsonArray, metaList, json); + } + }else if(parentJson!=null && oConvertUtils.isNotEmpty(tempPid) && tempPid.equals(parentJson.getString("id"))){ + if(permission.getMenuType()==0) { + JSONObject metaJson = parentJson.getJSONObject("meta"); + if(metaJson.containsKey("permissionList")) { + metaJson.getJSONArray("permissionList").add(json); + }else { + JSONArray permissionList = new JSONArray(); + permissionList.add(json); + metaJson.put("permissionList", permissionList); + } + + }else if(permission.getMenuType()==1) { + if(parentJson.containsKey("children")) { + parentJson.getJSONArray("children").add(json); + }else { + JSONArray children = new JSONArray(); + children.add(json); + parentJson.put("children", children); + } + + if(permission.getIsLeaf()==0) { + getPermissionJsonArray(jsonArray, metaList, json); + } + } + } + + + } + } + + private JSONObject getPermissionJsonObject(SysPermission permission) { + JSONObject json = new JSONObject(); + //类型(0:一级菜单 1:子菜单 2:按钮) + if(permission.getMenuType()==2) { + json.put("action", permission.getPerms()); + json.put("describe", permission.getName()); + }else if(permission.getMenuType()==0||permission.getMenuType()==1) { + json.put("id", permission.getId()); + if(permission.getUrl()!=null&&(permission.getUrl().startsWith("http://")||permission.getUrl().startsWith("https://"))) { + json.put("path", MD5Util.MD5Encode(permission.getUrl(), "utf-8")); + }else { + json.put("path", permission.getUrl()); + } + + //重要规则:路由name (通过URL生成路由name,路由name供前端开发,页面跳转使用) + json.put("name", urlToRouteName(permission.getUrl())); + + //是否隐藏路由,默认都是显示的 + if(permission.isHidden()) { + json.put("hidden",true); + } + //聚合路由 + if(permission.isAlwaysShow()) { + json.put("alwaysShow",true); + } + json.put("component", permission.getComponent()); + JSONObject meta = new JSONObject(); + meta.put("title", permission.getName()); + if(oConvertUtils.isEmpty(permission.getParentId())) { + //一级菜单跳转地址 + json.put("redirect",permission.getRedirect()); + meta.put("icon", oConvertUtils.getString(permission.getIcon(), "")); + }else { + meta.put("icon", oConvertUtils.getString(permission.getIcon(), "")); + } + if(permission.getUrl()!=null&&(permission.getUrl().startsWith("http://")||permission.getUrl().startsWith("https://"))) { + meta.put("url", permission.getUrl()); + } + json.put("meta", meta); + } + + return json; + } + + /** + * 通过URL生成路由name(去掉URL前缀斜杠,替换内容中的斜杠‘/’为-) + * 举例: URL = /isystem/role + * RouteName = isystem-role + * @return + */ + private String urlToRouteName(String url) { + if(oConvertUtils.isNotEmpty(url)) { + if(url.startsWith("/")) { + url = url.substring(1); + } + url = url.replace("/", "-"); + return url; + }else { + return null; + } + } + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/controller/SysRoleController.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/controller/SysRoleController.java new file mode 100644 index 00000000..21e17982 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/controller/SysRoleController.java @@ -0,0 +1,233 @@ +package org.jeecg.modules.system.controller; + + +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import javax.servlet.http.HttpServletRequest; + +import org.apache.shiro.authz.annotation.RequiresRoles; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.util.oConvertUtils; +import org.jeecg.modules.system.entity.SysRole; +import org.jeecg.modules.system.service.ISysRoleService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; + +/** + *

    + * 角色表 前端控制器 + *

    + * + * @author scott + * @since 2018-12-19 + */ +@RestController +@RequestMapping("/sys/role") +@Slf4j +public class SysRoleController { + @Autowired + private ISysRoleService sysRoleService; + + /** + * 分页列表查询 + * @param role + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @RequestMapping(value = "/list", method = RequestMethod.GET) + public Result> queryPageList(SysRole role, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + Result> result = new Result>(); + QueryWrapper queryWrapper = new QueryWrapper(role); + Page page = new Page(pageNo,pageSize); + //排序逻辑 处理 + String column = req.getParameter("column"); + String order = req.getParameter("order"); + if(oConvertUtils.isNotEmpty(column) && oConvertUtils.isNotEmpty(order)) { + if("asc".equals(order)) { + queryWrapper.orderByAsc(oConvertUtils.camelToUnderline(column)); + }else { + queryWrapper.orderByDesc(oConvertUtils.camelToUnderline(column)); + } + } + //TODO 过滤逻辑处理 + //TODO begin、end逻辑处理 + //TODO 一个强大的功能,前端传一个字段字符串,后台只返回这些字符串对应的字段 + //创建时间/创建人的赋值 + IPage pageList = sysRoleService.page(page, queryWrapper); + log.info("查询当前页:"+pageList.getCurrent()); + log.info("查询当前页数量:"+pageList.getSize()); + log.info("查询结果数量:"+pageList.getRecords().size()); + log.info("数据总数:"+pageList.getTotal()); + result.setSuccess(true); + result.setResult(pageList); + return result; + } + + /** + * 添加 + * @param role + * @return + */ + @RequestMapping(value = "/add", method = RequestMethod.POST) + public Result add(@RequestBody SysRole role) { + Result result = new Result(); + try { + role.setCreateTime(new Date()); + sysRoleService.save(role); + result.success("添加成功!"); + } catch (Exception e) { + e.printStackTrace(); + log.info(e.getMessage()); + result.error500("操作失败"); + } + return result; + } + + /** + * 编辑 + * @param role + * @return + */ + @RequestMapping(value = "/edit", method = RequestMethod.PUT) + @RequiresRoles({"admin"}) + public Result eidt(@RequestBody SysRole role) { + Result result = new Result(); + SysRole sysrole = sysRoleService.getById(role.getId()); + if(sysrole==null) { + result.error500("未找到对应实体"); + }else { + role.setUpdateTime(new Date()); + boolean ok = sysRoleService.updateById(role); + //TODO 返回false说明什么? + if(ok) { + result.success("修改成功!"); + } + } + + return result; + } + + /** + * 通过id删除 + * @param id + * @return + */ + @RequestMapping(value = "/delete", method = RequestMethod.DELETE) + @RequiresRoles({"admin"}) + public Result delete(@RequestParam(name="id",required=true) String id) { + Result result = new Result(); + SysRole sysrole = sysRoleService.getById(id); + if(sysrole==null) { + result.error500("未找到对应实体"); + }else { + boolean ok = sysRoleService.removeById(id); + if(ok) { + result.success("删除成功!"); + } + } + + return result; + } + + /** + * 批量删除 + * @param ids + * @return + */ + @RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE) + @RequiresRoles({"admin"}) + public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + Result result = new Result(); + if(ids==null || "".equals(ids.trim())) { + result.error500("参数不识别!"); + }else { + this.sysRoleService.removeByIds(Arrays.asList(ids.split(","))); + result.success("删除成功!"); + } + return result; + } + + /** + * 通过id查询 + * @param id + * @return + */ + @RequestMapping(value = "/queryById", method = RequestMethod.GET) + public Result queryById(@RequestParam(name="id",required=true) String id) { + Result result = new Result(); + SysRole sysrole = sysRoleService.getById(id); + if(sysrole==null) { + result.error500("未找到对应实体"); + }else { + result.setResult(sysrole); + result.setSuccess(true); + } + return result; + } + + @RequestMapping(value = "/queryall", method = RequestMethod.GET) + public Result> queryall() { + Result> result = new Result<>(); + List list = sysRoleService.list(); + if(list==null||list.size()<=0) { + result.error500("未找到角色信息"); + }else { + result.setResult(list); + result.setSuccess(true); + } + return result; + } + + /** + * 校验角色编码唯一 + */ + @RequestMapping(value = "/checkRoleCode", method = RequestMethod.GET) + public Result checkUsername(String id,String roleCode) { + Result result = new Result<>(); + result.setResult(true);//如果此参数为false则程序发生异常 + log.info("--验证角色编码是否唯一---id:"+id+"--roleCode:"+roleCode); + try { + SysRole role = null; + if(oConvertUtils.isNotEmpty(id)) { + role = sysRoleService.getById(id); + } + SysRole newRole = sysRoleService.getOne(new QueryWrapper().lambda().eq(SysRole::getRoleCode, roleCode)); + if(newRole!=null) { + //如果根据传入的roleCode查询到信息了,那么就需要做校验了。 + if(role==null) { + //role为空=>新增模式=>只要roleCode存在则返回false + result.setSuccess(false); + result.setMessage("角色编码已存在"); + return result; + }else if(!id.equals(newRole.getId())) { + //否则=>编辑模式=>判断两者ID是否一致- + result.setSuccess(false); + result.setMessage("角色编码已存在"); + return result; + } + } + } catch (Exception e) { + result.setSuccess(false); + result.setResult(false); + result.setMessage(e.getMessage()); + return result; + } + result.setSuccess(true); + return result; + } + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/controller/SysUserController.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/controller/SysUserController.java new file mode 100644 index 00000000..98738c98 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/controller/SysUserController.java @@ -0,0 +1,283 @@ +package org.jeecg.modules.system.controller; + + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; +import java.util.List; + +import javax.servlet.http.HttpServletRequest; + +import org.apache.shiro.authz.annotation.RequiresRoles; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.util.PasswordUtil; +import org.jeecg.common.util.oConvertUtils; +import org.jeecg.modules.system.entity.SysUser; +import org.jeecg.modules.system.entity.SysUserRole; +import org.jeecg.modules.system.service.ISysUserRoleService; +import org.jeecg.modules.system.service.ISysUserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; + +import lombok.extern.slf4j.Slf4j; + +/** + *

    + * 用户表 前端控制器 + *

    + * + * @author scott + * @since 2018-12-20 + */ +@Slf4j +@RestController +@RequestMapping("/sys/user") +public class SysUserController { + + @Autowired + private ISysUserService sysUserService; + + @Autowired + private ISysUserRoleService sysUserRoleService; + + @RequestMapping(value = "/list", method = RequestMethod.GET) + public Result> queryPageList(SysUser user,@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,HttpServletRequest req) { + Result> result = new Result>(); + QueryWrapper queryWrapper = new QueryWrapper(user); + Page page = new Page(pageNo,pageSize); + //排序逻辑 处理 + String column = req.getParameter("column"); + String order = req.getParameter("order"); + if(oConvertUtils.isNotEmpty(column) && oConvertUtils.isNotEmpty(order)) { + if("asc".equals(order)) { + queryWrapper.orderByAsc(oConvertUtils.camelToUnderline(column)); + }else { + queryWrapper.orderByDesc(oConvertUtils.camelToUnderline(column)); + } + } + //TODO 多字段排序 + //TODO 过滤逻辑处理 + //TODO begin、end逻辑处理 + //TODO 一个强大的功能,前端传一个字段字符串,后台只返回这些字符串对应的字段 + //创建时间/创建人的赋值 + IPage pageList = sysUserService.page(page, queryWrapper); + result.setSuccess(true); + result.setResult(pageList); + return result; + } + + @RequestMapping(value = "/add", method = RequestMethod.POST) + @RequiresRoles({"admin"}) + public Result add(@RequestBody JSONObject jsonObject) { + Result result = new Result(); + String selectedRoles = jsonObject.getString("selectedroles"); + try { + SysUser user = JSON.parseObject(jsonObject.toJSONString(), SysUser.class); + user.setCreateTime(new Date());//设置创建时间 + String salt = oConvertUtils.randomGen(8); + user.setSalt(salt); + String passwordEncode = PasswordUtil.encrypt(user.getUsername(), user.getPassword(), salt); + user.setPassword(passwordEncode); + user.setStatus(1); + user.setDelFlag("0"); + sysUserService.addUserWithRole(user, selectedRoles); + result.success("添加成功!"); + } catch (Exception e) { + e.printStackTrace(); + log.info(e.getMessage()); + result.error500("操作失败"); + } + return result; + } + + @RequestMapping(value = "/edit", method = RequestMethod.PUT) + @RequiresRoles({"admin"}) + public Result eidt(@RequestBody JSONObject jsonObject) { + Result result = new Result(); + try { + SysUser sysUser = sysUserService.getById(jsonObject.getString("id")); + if(sysUser==null) { + result.error500("未找到对应实体"); + }else { + SysUser user = JSON.parseObject(jsonObject.toJSONString(), SysUser.class); + user.setUpdateTime(new Date()); + //String passwordEncode = PasswordUtil.encrypt(user.getUsername(), user.getPassword(), sysUser.getSalt()); + user.setPassword(sysUser.getPassword()); + String roles = jsonObject.getString("selectedroles"); + sysUserService.editUserWithRole(user, roles); + result.success("修改成功!"); + } + } catch (Exception e) { + e.printStackTrace(); + log.info(e.getMessage()); + result.error500("操作失败"); + } + return result; + } + + @RequestMapping(value = "/delete", method = RequestMethod.DELETE) + @RequiresRoles({"admin"}) + public Result delete(@RequestParam(name="id",required=true) String id) { + Result result = new Result(); + SysUser sysUser = sysUserService.getById(id); + if(sysUser==null) { + result.error500("未找到对应实体"); + }else { + boolean ok = sysUserService.removeById(id); + if(ok) { + result.success("删除成功!"); + } + } + + return result; + } + + @RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE) + @RequiresRoles({"admin"}) + public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + Result result = new Result(); + if(ids==null || "".equals(ids.trim())) { + result.error500("参数不识别!"); + }else { + this.sysUserService.removeByIds(Arrays.asList(ids.split(","))); + result.success("删除成功!"); + } + return result; + } + + @RequestMapping(value = "/frozenBatch", method = {RequestMethod.POST,RequestMethod.GET}) + public Result frozenBatch(@RequestParam(name="ids",required=true) String ids,@RequestParam(name="status",required=true) String status) { + Result result = new Result(); + try { + String[] arr = ids.split(","); + for (String id : arr) { + if(oConvertUtils.isNotEmpty(id)) { + this.sysUserService.update(new SysUser().setStatus(Integer.parseInt(status)), + new UpdateWrapper().lambda().eq(SysUser::getId,id)); + } + } + } catch (Exception e) { + e.printStackTrace(); + result.error500("操作失败"+e.getMessage()); + } + result.success("操作成功!"); + return result; + } + + + + @RequestMapping(value = "/queryById", method = RequestMethod.GET) + public Result queryById(@RequestParam(name="id",required=true) String id) { + Result result = new Result(); + SysUser sysUser = sysUserService.getById(id); + if(sysUser==null) { + result.error500("未找到对应实体"); + }else { + result.setResult(sysUser); + result.setSuccess(true); + } + return result; + } + + @RequestMapping(value = "/queryUserRole", method = RequestMethod.GET) + public Result> queryUserRole(@RequestParam(name="userid",required=true) String userid) { + Result> result = new Result<>(); + List list = new ArrayList(); + List userRole = sysUserRoleService.list(new QueryWrapper().lambda().eq(SysUserRole::getUserId,userid)); + if(userRole==null || userRole.size()<=0) { + result.error500("未找到用户相关角色信息"); + }else { + for (SysUserRole sysUserRole : userRole) { + list.add(sysUserRole.getRoleId()); + } + result.setSuccess(true); + result.setResult(list); + } + return result; + } + + + /** + * 校验用户账号是否唯一
    + * 可以校验其他 需要检验什么就传什么。。。 + * @param username + * @return + */ + @RequestMapping(value = "/checkOnlyUser", method = RequestMethod.GET) + public Result checkUsername(SysUser sysUser) { + Result result = new Result<>(); + result.setResult(true);//如果此参数为false则程序发生异常 + String id = sysUser.getId(); + log.info("--验证用户信息是否唯一---id:"+id); + try { + SysUser oldUser = null; + if(oConvertUtils.isNotEmpty(id)) { + oldUser = sysUserService.getById(id); + }else { + sysUser.setId(null); + } + //通过传入信息查询新的用户信息 + SysUser newUser = sysUserService.getOne(new QueryWrapper(sysUser)); + if(newUser!=null) { + //如果根据传入信息查询到用户了,那么就需要做校验了。 + if(oldUser==null) { + //oldUser为空=>新增模式=>只要用户信息存在则返回false + result.setSuccess(false); + result.setMessage("用户账号已存在"); + return result; + }else if(!id.equals(newUser.getId())) { + //否则=>编辑模式=>判断两者ID是否一致- + result.setSuccess(false); + result.setMessage("用户账号已存在"); + return result; + } + } + + } catch (Exception e) { + result.setSuccess(false); + result.setResult(false); + result.setMessage(e.getMessage()); + return result; + } + result.setSuccess(true); + return result; + } + + /** + * 修改密码 + */ + @RequestMapping(value = "/changPassword", method = RequestMethod.PUT) + @RequiresRoles({"admin"}) + public Result changPassword(@RequestBody SysUser sysUser) { + Result result = new Result(); + String password = sysUser.getPassword(); + sysUser = this.sysUserService.getOne(new LambdaQueryWrapper().eq(SysUser::getUsername, sysUser.getUsername())); + if(sysUser==null) { + result.error500("未找到对应实体"); + }else { + String salt = oConvertUtils.randomGen(8); + sysUser.setSalt(salt); + String passwordEncode = PasswordUtil.encrypt(sysUser.getUsername(),password, salt); + sysUser.setPassword(passwordEncode); + this.sysUserService.updateById(sysUser); + result.setResult(sysUser); + result.success("密码修改完成!"); + } + return result; + } + + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/entity/SysAnnouncement.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/entity/SysAnnouncement.java new file mode 100644 index 00000000..2869733c --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/entity/SysAnnouncement.java @@ -0,0 +1,70 @@ +package org.jeecg.modules.system.entity; + +import java.io.Serializable; +import java.util.Date; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; + +/** + * @Description: 系统通告表 + * @author: jeecg-boot + * @date: 2019-01-02 + * @version: V1.0 + */ +@Data +@TableName("sys_announcement") +public class SysAnnouncement implements Serializable { + private static final long serialVersionUID = 1L; + + /**id*/ + @TableId(type = IdType.UUID) + private java.lang.String id; + /**标题*/ + private java.lang.String titile; + /**内容*/ + private java.lang.Object msgContent; + /**开始时间*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private java.util.Date startTime; + /**结束时间*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private java.util.Date endTime; + /**发布人*/ + private java.lang.String sender; + /**优先级(L低,M中,H高)*/ + private java.lang.String priority; + /**通告对象类型(USER:指定用户,ALL:全体用户)*/ + private java.lang.String msgType; + /**发布状态(0未发布,1已发布,2已撤销)*/ + private java.lang.String sendStatus; + /**发布时间*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private java.util.Date sendTime; + /**撤销时间*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private java.util.Date cancelTime; + /**删除状态(0,正常,1已删除)*/ + private java.lang.String delFlag; + /**创建人*/ + private java.lang.String createBy; + /**创建时间*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private java.util.Date createTime; + /**更新人*/ + private java.lang.String updateBy; + /**更新时间*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private java.util.Date updateTime; + /**指定用户**/ + private java.lang.String userIds; +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/entity/SysDepart.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/entity/SysDepart.java new file mode 100644 index 00000000..88e88814 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/entity/SysDepart.java @@ -0,0 +1,114 @@ +package org.jeecg.modules.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.jeecg.modules.system.model.SysDepartTreeModel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; +import java.util.Objects; + +/** + *

    + * 部门表 + *

    + * + * @author Steve + * @Since 2019-01-22 + */ +@Data +@TableName("sys_depart") +public class SysDepart implements Serializable { + private static final long serialVersionUID = 1L; + + /**ID*/ + @TableId(type = IdType.UUID) + private String id; + /**父机构ID*/ + private String parentId; + /**机构/部门名称*/ + private String departName; + /**英文名*/ + private String departNameEn; + /**缩写*/ + private String departNameAbbr; + /**排序*/ + private Integer departOrder; + /**描述*/ + private Object description; + /**机构类型*/ + private String orgType; + /**机构编码*/ + private String orgCode; + /**手机号*/ + private String mobile; + /**传真*/ + private String fax; + /**地址*/ + private String address; + /**备注*/ + private String memo; + /**状态(1启用,0不启用)*/ + private String status; + /**删除状态(0,正常,1已删除)*/ + private String delFlag; + /**创建人*/ + private String createBy; + /**创建日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private Date createTime; + /**更新人*/ + private String updateBy; + /**更新日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private Date updateTime; + + /** + * 重写equals方法 + */ + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + if (!super.equals(o)) return false; + SysDepart depart = (SysDepart) o; + return Objects.equals(id, depart.id) && + Objects.equals(parentId, depart.parentId) && + Objects.equals(departName, depart.departName) && + Objects.equals(departNameEn, depart.departNameEn) && + Objects.equals(departNameAbbr, depart.departNameAbbr) && + Objects.equals(departOrder, depart.departOrder) && + Objects.equals(description, depart.description) && + Objects.equals(orgType, depart.orgType) && + Objects.equals(orgCode, depart.orgCode) && + Objects.equals(mobile, depart.mobile) && + Objects.equals(fax, depart.fax) && + Objects.equals(address, depart.address) && + Objects.equals(memo, depart.memo) && + Objects.equals(status, depart.status) && + Objects.equals(delFlag, depart.delFlag) && + Objects.equals(createBy, depart.createBy) && + Objects.equals(createTime, depart.createTime) && + Objects.equals(updateBy, depart.updateBy) && + Objects.equals(updateTime, depart.updateTime); + } + + /** + * 重写hashCode方法 + */ + @Override + public int hashCode() { + + return Objects.hash(super.hashCode(), id, parentId, departName, + departNameEn, departNameAbbr, departOrder, description, + orgType, orgCode, mobile, fax, address, memo, status, + delFlag, createBy, createTime, updateBy, updateTime); + } +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/entity/SysDict.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/entity/SysDict.java new file mode 100644 index 00000000..7adcae16 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/entity/SysDict.java @@ -0,0 +1,75 @@ +package org.jeecg.modules.system.entity; + +import java.io.Serializable; +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + *

    + * 字典表 + *

    + * + * @author zhangweijian + * @since 2018-12-28 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +public class SysDict implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(type = IdType.UUID) + private String id; + + /** + * 字典名称 + */ + private String dictName; + + /** + * 字典编码 + */ + private String dictCode; + + /** + * 描述 + */ + private String description; + + /** + * 删除状态 + */ + private Integer delFlag; + + /** + * 创建人 + */ + private String createBy; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 更新人 + */ + private String updateBy; + + /** + * 更新时间 + */ + private Date updateTime; + + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/entity/SysDictItem.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/entity/SysDictItem.java new file mode 100644 index 00000000..ee2f2e1b --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/entity/SysDictItem.java @@ -0,0 +1,74 @@ +package org.jeecg.modules.system.entity; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + *

    + * + *

    + * + * @author zhangweijian + * @since 2018-12-28 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +public class SysDictItem implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(type = IdType.UUID) + private String id; + + /** + * 字典id + */ + private String dictId; + + /** + * 字典项文本 + */ + private String itemText; + + /** + * 字典项值 + */ + private String itemValue; + + /** + * 描述 + */ + private String description; + + /** + * 排序 + */ + private BigDecimal sortOrder; + + /** + * 状态(1启用 0不启用) + */ + private Integer status; + + private String createBy; + + private Date createTime; + + private String updateBy; + + private Date updateTime; + + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/entity/SysLog.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/entity/SysLog.java new file mode 100644 index 00000000..8ac2a502 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/entity/SysLog.java @@ -0,0 +1,108 @@ +package org.jeecg.modules.system.entity; + +import java.util.Date; +import org.springframework.format.annotation.DateTimeFormat; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + *

    + * 系统日志表 + *

    + * + * @author zhangweijian + * @since 2018-12-26 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +public class SysLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(type = IdType.UUID) + private String id; + + /** + * 创建人 + */ + private String createBy; + + /** + * 创建时间 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + /** + * 更新人 + */ + private String updateBy; + + /** + * 更新时间 + */ + private Date updateTime; + + /** + * 耗时 + */ + private Long costTime; + + /** + * IP + */ + private String ip; + + /** + * 请求参数 + */ + private String requestParam; + + /** + * 请求类型 + */ + private String requestType; + + /** + * 请求路径 + */ + private String requestUrl; + /** + * 请求方法 + */ + private String method; + + /** + * 操作人用户名称 + */ + private String username; + /** + * 操作人用户账户 + */ + private String userid; + /** + * 操作详细日志 + */ + private String logContent; + + /** + * 日志类型(1登录日志,2操作日志) + */ + private Integer logType; + + /** + * 操作类型() + */ + private Integer operateType; + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/entity/SysPermission.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/entity/SysPermission.java new file mode 100644 index 00000000..5688ded9 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/entity/SysPermission.java @@ -0,0 +1,118 @@ +package org.jeecg.modules.system.entity; + +import java.io.Serializable; +import java.util.Date; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + *

    + * 菜单权限表 + *

    + * + * @author scott + * @since 2018-12-21 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +public class SysPermission implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(type = IdType.UUID) + private String id; + + /** + * 父id + */ + private String parentId; + + /** + * 菜单名称 + */ + private String name; + + /** + * 菜单权限编码,例如:“sys:schedule:list,sys:schedule:info”,多个逗号隔开 + */ + private String perms; + + /** + * 菜单图标 + */ + private String icon; + + /** + * 组件 + */ + private String component; + + /** + * 路径 + */ + private String url; + /** + * 一级菜单跳转地址 + */ + private String redirect; + + /** + * 菜单排序 + */ + private Integer sortNo; + + /** + * 类型(0:一级菜单;1:子菜单 ;2:按钮权限) + */ + private Integer menuType; + + /** + * 是否叶子节点: 1:是 0:不是 + */ + private Integer isLeaf; + + /** + * 描述 + */ + private String description; + + /** + * 创建人 + */ + private String createBy; + + /** + * 删除状态 0正常 1已删除 + */ + private Integer delFlag; + + /** + * 是否隐藏路由菜单: 0否,1是(默认值0) + */ + private boolean hidden; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 更新人 + */ + private String updateBy; + + /** + * 更新时间 + */ + private Date updateTime; + + /**alwaysShow*/ + private boolean alwaysShow; +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/entity/SysRole.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/entity/SysRole.java new file mode 100644 index 00000000..5933454e --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/entity/SysRole.java @@ -0,0 +1,78 @@ +package org.jeecg.modules.system.entity; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import org.springframework.format.annotation.DateTimeFormat; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + *

    + * 角色表 + *

    + * + * @author scott + * @since 2018-12-19 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +public class SysRole implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(type = IdType.UUID) + private String id; + + /** + * 角色名称 + */ + private String roleName; + + /** + * 角色编码 + */ + private String roleCode; + + /** + * 描述 + */ + private String description; + + /** + * 创建人 + */ + private String createBy; + + /** + * 创建时间 + */ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private Date createTime; + + /** + * 更新人 + */ + private String updateBy; + + /** + * 更新时间 + */ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private Date updateTime; + + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/entity/SysRolePermission.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/entity/SysRolePermission.java new file mode 100644 index 00000000..61cdb3c4 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/entity/SysRolePermission.java @@ -0,0 +1,51 @@ +package org.jeecg.modules.system.entity; + +import java.io.Serializable; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + *

    + * 角色权限表 + *

    + * + * @author scott + * @since 2018-12-21 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +public class SysRolePermission implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(type = IdType.UUID) + private String id; + + /** + * 角色id + */ + private String roleId; + + /** + * 权限id + */ + private String permissionId; + + public SysRolePermission() { + } + + public SysRolePermission(String roleId, String permissionId) { + this.roleId = roleId; + this.permissionId = permissionId; + } + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/entity/SysUser.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/entity/SysUser.java new file mode 100644 index 00000000..13fa1a27 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/entity/SysUser.java @@ -0,0 +1,116 @@ +package org.jeecg.modules.system.entity; + +import java.time.LocalDateTime; +import java.util.Date; + +import org.springframework.format.annotation.DateTimeFormat; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + *

    + * 用户表 + *

    + * + * @author scott + * @since 2018-12-20 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +public class SysUser implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(type = IdType.UUID) + private String id; + + /** + * 登录账号 + */ + private String username; + + /** + * 真实姓名 + */ + private String realname; + + /** + * 密码 + */ + private String password; + + /** + * md5密码盐 + */ + private String salt; + + /** + * 头像 + */ + private String avatar; + + /** + * 生日 + */ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern="yyyy-MM-dd") + private Date birthday; + + /** + * 性别(1:男 2:女) + */ + private Integer sex; + + /** + * 电子邮件 + */ + private String email; + + /** + * 电话 + */ + private String phone; + + /** + * 状态(1:正常 2:冻结 ) + */ + private Integer status; + + /** + * 删除状态(0,正常,1已删除) + */ + private String delFlag; + + /** + * 创建人 + */ + private String createBy; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 更新人 + */ + private String updateBy; + + /** + * 更新时间 + */ + private Date updateTime; + + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/entity/SysUserRole.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/entity/SysUserRole.java new file mode 100644 index 00000000..4a3a35e2 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/entity/SysUserRole.java @@ -0,0 +1,50 @@ +package org.jeecg.modules.system.entity; + +import java.io.Serializable; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + *

    + * 用户角色表 + *

    + * + * @author scott + * @since 2018-12-21 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +public class SysUserRole implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(type = IdType.UUID) + private String id; + + /** + * 用户id + */ + private String userId; + + /** + * 角色id + */ + private String roleId; + + public SysUserRole() { + } + + public SysUserRole(String userId, String roleId) { + this.userId = userId; + this.roleId = roleId; + } + + + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/SysAnnouncementMapper.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/SysAnnouncementMapper.java new file mode 100644 index 00000000..a3c7bc88 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/SysAnnouncementMapper.java @@ -0,0 +1,17 @@ +package org.jeecg.modules.system.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import org.jeecg.modules.system.entity.SysAnnouncement; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: 系统通告表 + * @author: jeecg-boot + * @date: 2019-01-02 + * @version: V1.0 + */ +public interface SysAnnouncementMapper extends BaseMapper { + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/SysDepartMapper.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/SysDepartMapper.java new file mode 100644 index 00000000..65d66dc0 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/SysDepartMapper.java @@ -0,0 +1,20 @@ +package org.jeecg.modules.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.system.entity.SysDepart; +import org.jeecg.modules.system.model.SysDepartTreeModel; +import org.jeecg.modules.system.model.TreeModel; +import org.springframework.data.repository.query.Param; + +import java.util.List; + +/** + *

    + * 部门 Mapper 接口 + *

    + * + * @author: Steve + * @Since: 2019-01-22 + */ +public interface SysDepartMapper extends BaseMapper { +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/SysDictItemMapper.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/SysDictItemMapper.java new file mode 100644 index 00000000..e92eec02 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/SysDictItemMapper.java @@ -0,0 +1,16 @@ +package org.jeecg.modules.system.mapper; + +import org.jeecg.modules.system.entity.SysDictItem; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

    + * Mapper 接口 + *

    + * + * @author zhangweijian + * @since 2018-12-28 + */ +public interface SysDictItemMapper extends BaseMapper { + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/SysDictMapper.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/SysDictMapper.java new file mode 100644 index 00000000..001e28b4 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/SysDictMapper.java @@ -0,0 +1,24 @@ +package org.jeecg.modules.system.mapper; + +import java.util.List; +import java.util.Map; + +import org.apache.ibatis.annotations.Param; +import org.jeecg.modules.system.entity.SysDict; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

    + * 字典表 Mapper 接口 + *

    + * + * @author zhangweijian + * @since 2018-12-28 + */ +public interface SysDictMapper extends BaseMapper { + + public List> queryDictItemsByCode(@Param("code") String code); + + public String queryDictTextByKey(@Param("code") String code,@Param("key") String key); + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/SysLogMapper.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/SysLogMapper.java new file mode 100644 index 00000000..098db61c --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/SysLogMapper.java @@ -0,0 +1,42 @@ +package org.jeecg.modules.system.mapper; + +import org.jeecg.modules.system.entity.SysLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

    + * 系统日志表 Mapper 接口 + *

    + * + * @author zhangweijian + * @since 2018-12-26 + */ +public interface SysLogMapper extends BaseMapper { + + /** + * @功能:清空所有日志记录 + */ + public void removeAll(); + + /** + * 获取系统总访问次数 + * + * @return Long + */ + Long findTotalVisitCount(); + + /** + * 获取系统今日访问次数 + * + * @return Long + */ + Long findTodayVisitCount(); + + /** + * 获取系统今日访问 IP数 + * + * @return Long + */ + Long findTodayIp(); + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/SysPermissionMapper.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/SysPermissionMapper.java new file mode 100644 index 00000000..37e3c0ca --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/SysPermissionMapper.java @@ -0,0 +1,28 @@ +package org.jeecg.modules.system.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import org.jeecg.modules.system.entity.SysPermission; +import org.jeecg.modules.system.model.TreeModel; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

    + * 菜单权限表 Mapper 接口 + *

    + * + * @author scott + * @since 2018-12-21 + */ +public interface SysPermissionMapper extends BaseMapper { + + public List queryListByParentId(@Param("parentId") String parentId); + + /** + * 根据用户查询用户权限 + */ + public List queryByUser(@Param("username") String username); + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/SysRoleMapper.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/SysRoleMapper.java new file mode 100644 index 00000000..1db56f1f --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/SysRoleMapper.java @@ -0,0 +1,17 @@ +package org.jeecg.modules.system.mapper; + +import org.jeecg.modules.system.entity.SysRole; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

    + * 角色表 Mapper 接口 + *

    + * + * @author scott + * @since 2018-12-19 + */ +public interface SysRoleMapper extends BaseMapper { + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/SysRolePermissionMapper.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/SysRolePermissionMapper.java new file mode 100644 index 00000000..fd517ae5 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/SysRolePermissionMapper.java @@ -0,0 +1,16 @@ +package org.jeecg.modules.system.mapper; + +import org.jeecg.modules.system.entity.SysRolePermission; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

    + * 角色权限表 Mapper 接口 + *

    + * + * @author scott + * @since 2018-12-21 + */ +public interface SysRolePermissionMapper extends BaseMapper { + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java new file mode 100644 index 00000000..c9ec7ea8 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java @@ -0,0 +1,21 @@ +package org.jeecg.modules.system.mapper; + +import org.apache.ibatis.annotations.Param; +import org.jeecg.modules.system.entity.SysUser; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

    + * 用户表 Mapper 接口 + *

    + * + * @author scott + * @since 2018-12-20 + */ +public interface SysUserMapper extends BaseMapper { + /** + * @param username + * @return + */ + public SysUser getUserByName(@Param("username") String username); +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/SysUserRoleMapper.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/SysUserRoleMapper.java new file mode 100644 index 00000000..61f4766f --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/SysUserRoleMapper.java @@ -0,0 +1,21 @@ +package org.jeecg.modules.system.mapper; + +import java.util.List; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.jeecg.modules.system.entity.SysUserRole; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

    + * 用户角色表 Mapper 接口 + *

    + * + * @author scott + * @since 2018-12-21 + */ +public interface SysUserRoleMapper extends BaseMapper { + + @Select("select role_code from sys_role where id in (select role_id from sys_user_role where user_id = (select id from sys_user where username=#{username}))") + List getRoleByUserName(@Param("username") String username); +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/xml/SysAnnouncementMapper.xml b/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/xml/SysAnnouncementMapper.xml new file mode 100644 index 00000000..2dbfe552 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/xml/SysAnnouncementMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/xml/SysDepartMapper.xml b/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/xml/SysDepartMapper.xml new file mode 100644 index 00000000..9dfdfe7f --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/xml/SysDepartMapper.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/xml/SysDictItemMapper.xml b/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/xml/SysDictItemMapper.xml new file mode 100644 index 00000000..a1eee4ce --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/xml/SysDictItemMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/xml/SysDictMapper.xml b/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/xml/SysDictMapper.xml new file mode 100644 index 00000000..5982b456 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/xml/SysDictMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/xml/SysLogMapper.xml b/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/xml/SysLogMapper.xml new file mode 100644 index 00000000..6f3342c2 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/xml/SysLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + DELETE FROM sys_log + + + + + + + + + + + + diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/xml/SysPermissionMapper.xml b/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/xml/SysPermissionMapper.xml new file mode 100644 index 00000000..decad847 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/xml/SysPermissionMapper.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml b/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml new file mode 100644 index 00000000..9641c5ee --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml @@ -0,0 +1,10 @@ + + + + + + + + \ No newline at end of file diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/model/DepartIdModel.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/model/DepartIdModel.java new file mode 100644 index 00000000..d5e275be --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/model/DepartIdModel.java @@ -0,0 +1,78 @@ +package org.jeecg.modules.system.model; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +/** + *

    + * 部门表 封装树结构的部门的名称的实体类 + *

    + * + * @author Steve + * @Since 2019-01-22 + * + */ +public class DepartIdModel implements Serializable { + + private static final long serialVersionUID = 1L; + + // 主键ID + private String key; + + // 主键ID + private String value; + + // 部门名称 + private String title; + + List children = new ArrayList<>(); + + /** + * 将SysDepartTreeModel的部分数据放在该对象当中 + * @param treeModel + * @return + */ + public DepartIdModel convert(SysDepartTreeModel treeModel) { + this.key = treeModel.getId(); + this.value = treeModel.getId(); + this.title = treeModel.getDepartName(); + return this; + } + + public List getChildren() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } + + public static long getSerialVersionUID() { + return serialVersionUID; + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/model/SysDepartTreeModel.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/model/SysDepartTreeModel.java new file mode 100644 index 00000000..71b62ad0 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/model/SysDepartTreeModel.java @@ -0,0 +1,344 @@ +package org.jeecg.modules.system.model; + +import org.jeecg.modules.system.entity.SysDepart; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Objects; + +/** + *

    + * 部门表 存储树结构数据的实体类 + *

    + * + * @author Steve + * @Since 2019-01-22 + */ +public class SysDepartTreeModel implements Serializable{ + + private static final long serialVersionUID = 1L; + + /** 对应SysDepart中的id字段,前端数据树中的key*/ + private String key; + + /** 对应SysDepart中的id字段,前端数据树中的value*/ + private String value; + + /** 对应depart_name字段,前端数据树中的title*/ + private String title; + + + // 以下所有字段均与SysDepart相同 + + private String id; + + private String parentId; + + private String departName; + + private String departNameEn; + + private String departNameAbbr; + + private Integer departOrder; + + private Object description; + + private String orgType; + + private String orgCode; + + private String mobile; + + private String fax; + + private String address; + + private String memo; + + private String status; + + private String delFlag; + + private String createBy; + + private Date createTime; + + private String updateBy; + + private Date updateTime; + + private List children = new ArrayList<>(); + + + /** + * 将SysDepart对象转换成SysDepartTreeModel对象 + * @param sysDepart + */ + public SysDepartTreeModel(SysDepart sysDepart) { + this.key = sysDepart.getId(); + this.value = sysDepart.getId(); + this.title = sysDepart.getDepartName(); + this.id = sysDepart.getId(); + this.parentId = sysDepart.getParentId(); + this.departName = sysDepart.getDepartName(); + this.departNameEn = sysDepart.getDepartNameEn(); + this.departNameAbbr = sysDepart.getDepartNameAbbr(); + this.departOrder = sysDepart.getDepartOrder(); + this.description = sysDepart.getDescription(); + this.orgType = sysDepart.getOrgType(); + this.orgCode = sysDepart.getOrgCode(); + this.mobile = sysDepart.getMobile(); + this.fax = sysDepart.getFax(); + this.address = sysDepart.getAddress(); + this.memo = sysDepart.getMemo(); + this.status = sysDepart.getStatus(); + this.delFlag = sysDepart.getDelFlag(); + this.createBy = sysDepart.getCreateBy(); + this.createTime = sysDepart.getCreateTime(); + this.updateBy = sysDepart.getUpdateBy(); + this.updateTime = sysDepart.getUpdateTime(); + } + + + public String getKey() { + return key; + } + + + public void setKey(String key) { + this.key = key; + } + + + public String getValue() { + return value; + } + + + public void setValue(String value) { + this.value = value; + } + + + public String getTitle() { + return title; + } + + + public void setTitle(String title) { + this.title = title; + } + + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public List getChildren() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } + + public String getParentId() { + return parentId; + } + + public void setParentId(String parentId) { + this.parentId = parentId; + } + + public static long getSerialVersionUID() { + return serialVersionUID; + } + + public String getDepartName() { + return departName; + } + + public void setDepartName(String departName) { + this.departName = departName; + } + + public String getOrgType() { + return orgType; + } + + public void setOrgType(String orgType) { + this.orgType = orgType; + } + + public String getOrgCode() { + return orgCode; + } + + public void setOrgCode(String orgCode) { + this.orgCode = orgCode; + } + + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + } + + public String getFax() { + return fax; + } + + public void setFax(String fax) { + this.fax = fax; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getMemo() { + return memo; + } + + public void setMemo(String memo) { + this.memo = memo; + } + + public String getDepartNameEn() { + return departNameEn; + } + + public void setDepartNameEn(String departNameEn) { + this.departNameEn = departNameEn; + } + + public String getDepartNameAbbr() { + return departNameAbbr; + } + + public void setDepartNameAbbr(String departNameAbbr) { + this.departNameAbbr = departNameAbbr; + } + + public Integer getDepartOrder() { + return departOrder; + } + + public void setDepartOrder(Integer departOrder) { + this.departOrder = departOrder; + } + + public Object getDescription() { + return description; + } + + public void setDescription(Object description) { + this.description = description; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getDelFlag() { + return delFlag; + } + + public void setDelFlag(String delFlag) { + this.delFlag = delFlag; + } + + public String getCreateBy() { + return createBy; + } + + public void setCreateBy(String createBy) { + this.createBy = createBy; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public String getUpdateBy() { + return updateBy; + } + + public void setUpdateBy(String updateBy) { + this.updateBy = updateBy; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public SysDepartTreeModel() { } + + /** + * 重写equals方法 + */ + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + SysDepartTreeModel model = (SysDepartTreeModel) o; + return Objects.equals(id, model.id) && + Objects.equals(parentId, model.parentId) && + Objects.equals(departName, model.departName) && + Objects.equals(departNameEn, model.departNameEn) && + Objects.equals(departNameAbbr, model.departNameAbbr) && + Objects.equals(departOrder, model.departOrder) && + Objects.equals(description, model.description) && + Objects.equals(orgType, model.orgType) && + Objects.equals(orgCode, model.orgCode) && + Objects.equals(mobile, model.mobile) && + Objects.equals(fax, model.fax) && + Objects.equals(address, model.address) && + Objects.equals(memo, model.memo) && + Objects.equals(status, model.status) && + Objects.equals(delFlag, model.delFlag) && + Objects.equals(createBy, model.createBy) && + Objects.equals(createTime, model.createTime) && + Objects.equals(updateBy, model.updateBy) && + Objects.equals(updateTime, model.updateTime) && + Objects.equals(children, model.children); + } + + /** + * 重写hashCode方法 + */ + @Override + public int hashCode() { + + return Objects.hash(id, parentId, departName, departNameEn, departNameAbbr, + departOrder, description, orgType, orgCode, mobile, fax, address, + memo, status, delFlag, createBy, createTime, updateBy, updateTime, + children); + } + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/model/SysDictTree.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/model/SysDictTree.java new file mode 100644 index 00000000..d2b31f36 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/model/SysDictTree.java @@ -0,0 +1,89 @@ +package org.jeecg.modules.system.model; + +import java.io.Serializable; +import java.util.Date; + +import org.jeecg.modules.system.entity.SysDict; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + *

    + * 字典表 + *

    + * + * @author zhangweijian + * @since 2018-12-28 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +public class SysDictTree implements Serializable { + + private static final long serialVersionUID = 1L; + + private String key; + + private String title; + + /** + * id + */ + @TableId(type = IdType.UUID) + private String id; + + /** + * 字典名称 + */ + private String dictName; + + /** + * 字典编码 + */ + private String dictCode; + + /** + * 描述 + */ + private String description; + + /** + * 删除状态 + */ + private Integer delFlag; + + /** + * 创建人 + */ + private String createBy; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 更新人 + */ + private String updateBy; + + /** + * 更新时间 + */ + private Date updateTime; + + public SysDictTree(SysDict node) { + this.id = node.getId(); + this.key = node.getId(); + this.title = node.getDictName(); + this.dictCode = node.getDictCode(); + this.description = node.getDescription(); + this.delFlag = node.getDelFlag(); + } + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/model/SysLoginModel.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/model/SysLoginModel.java new file mode 100644 index 00000000..afd3787d --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/model/SysLoginModel.java @@ -0,0 +1,37 @@ +package org.jeecg.modules.system.model; +/** + * 登录表单 + * + * @author scott + * @since 2019-01-18 + */ +public class SysLoginModel { + private String username; + private String password; + //验证码 + private String captcha; + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getCaptcha() { + return captcha; + } + + public void setCaptcha(String captcha) { + this.captcha = captcha; + } +} \ No newline at end of file diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/model/SysPermissionTree.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/model/SysPermissionTree.java new file mode 100644 index 00000000..0f5fc107 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/model/SysPermissionTree.java @@ -0,0 +1,304 @@ +package org.jeecg.modules.system.model; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import org.jeecg.modules.system.entity.SysPermission; + +public class SysPermissionTree implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + private String id; + + private String key; + + /** + * 父id + */ + private String parentId; + + /** + * 菜单名称 + */ + private String name; + + /** + * 菜单权限编码 + */ + private String perms; + + /** + * 菜单图标 + */ + private String icon; + + /** + * 组件 + */ + private String component; + + /** + * 跳转网页链接 + */ + private String url; + + /** + * 一级菜单跳转地址 + */ + private String redirect; + + /** + * 菜单排序 + */ + private Integer sortNo; + + /** + * 类型(0:一级菜单;1:子菜单 ;2:按钮权限) + */ + private Integer menuType; + + /** + * 是否叶子节点: 1:是 0:不是 + */ + private Integer isLeaf; + + /** + * 描述 + */ + private String description; + + /** + * 删除状态 0正常 1已删除 + */ + private Integer delFlag; + + /** + * 创建人 + */ + private String createBy; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 更新人 + */ + private String updateBy; + + /** + * 更新时间 + */ + private Date updateTime; + + /**alwaysShow*/ + private boolean alwaysShow; + /**是否隐藏路由菜单: 0否,1是(默认值0)*/ + private boolean hidden; + + + public SysPermissionTree() { + } + + public SysPermissionTree(SysPermission permission) { + this.key = permission.getId(); + this.id = permission.getId(); + this.perms = permission.getPerms(); + this.component = permission.getComponent(); + this.createBy = permission.getCreateBy(); + this.createTime = permission.getCreateTime(); + this.delFlag = permission.getDelFlag(); + this.description = permission.getDescription(); + this.icon = permission.getIcon(); + this.isLeaf = permission.getIsLeaf(); + this.menuType = permission.getMenuType(); + this.name = permission.getName(); + this.parentId = permission.getParentId(); + this.sortNo = permission.getSortNo(); + this.updateBy = permission.getUpdateBy(); + this.updateTime = permission.getUpdateTime(); + this.redirect = permission.getRedirect(); + this.url = permission.getUrl(); + this.hidden = permission.isHidden(); + this.alwaysShow= permission.isAlwaysShow(); + if (permission.getIsLeaf() == 0) { + this.children = new ArrayList(); + } + } + + private List children; + + public boolean isAlwaysShow() { + return alwaysShow; + } + + public void setAlwaysShow(boolean alwaysShow) { + this.alwaysShow = alwaysShow; + } + public List getChildren() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } + + public String getRedirect() { + return redirect; + } + + public void setRedirect(String redirect) { + this.redirect = redirect; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getParentId() { + return parentId; + } + + public void setParentId(String parentId) { + this.parentId = parentId; + } + + public boolean isHidden() { + return hidden; + } + + public void setHidden(boolean hidden) { + this.hidden = hidden; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getIcon() { + return icon; + } + + public void setIcon(String icon) { + this.icon = icon; + } + + public String getComponent() { + return component; + } + + public void setComponent(String component) { + this.component = component; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public Integer getSortNo() { + return sortNo; + } + + public void setSortNo(Integer sortNo) { + this.sortNo = sortNo; + } + + public Integer getMenuType() { + return menuType; + } + + public void setMenuType(Integer menuType) { + this.menuType = menuType; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public Integer getDelFlag() { + return delFlag; + } + + public void setDelFlag(Integer delFlag) { + this.delFlag = delFlag; + } + + public String getCreateBy() { + return createBy; + } + + public void setCreateBy(String createBy) { + this.createBy = createBy; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public String getUpdateBy() { + return updateBy; + } + + public void setUpdateBy(String updateBy) { + this.updateBy = updateBy; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getPerms() { + return perms; + } + + public void setPerms(String perms) { + this.perms = perms; + } + + public Integer getIsLeaf() { + return isLeaf; + } + + public void setIsLeaf(Integer isLeaf) { + this.isLeaf = isLeaf; + } + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/model/TreeModel.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/model/TreeModel.java new file mode 100644 index 00000000..b6d2e949 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/model/TreeModel.java @@ -0,0 +1,124 @@ +package org.jeecg.modules.system.model; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +import org.jeecg.modules.system.entity.SysPermission; + +public class TreeModel implements Serializable { + + private static final long serialVersionUID = 4013193970046502756L; + + private String key; + + private String title; + + private boolean isLeaf; + + private String icon; + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public boolean isLeaf() { + return isLeaf; + } + + public void setLeaf(boolean isLeaf) { + this.isLeaf = isLeaf; + } + + public String getIcon() { + return icon; + } + + public void setIcon(String icon) { + this.icon = icon; + } + + private List children; + + public List getChildren() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } + + public TreeModel() { + + } + + public TreeModel(SysPermission permission) { + this.key = permission.getId(); + this.icon = permission.getIcon(); + this.parentId = permission.getParentId(); + this.title = permission.getName(); + this.value = permission.getId(); + if(permission.getIsLeaf()==0) { + this.children = new ArrayList(); + } + } + + private String parentId; + + private String label; + + private String value; + + + public String getParentId() { + return parentId; + } + + public void setParentId(String parentId) { + this.parentId = parentId; + } + + /** + * @return the label + */ + public String getLabel() { + return label; + } + + /** + * @param label the label to set + */ + public void setLabel(String label) { + this.label = label; + } + + /** + * @return the value + */ + public String getValue() { + return value; + } + + /** + * @param value the value to set + */ + public void setValue(String value) { + this.value = value; + } + + + + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/model/TreeSelectModel.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/model/TreeSelectModel.java new file mode 100644 index 00000000..14e219a6 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/model/TreeSelectModel.java @@ -0,0 +1,72 @@ +package org.jeecg.modules.system.model; + +import java.io.Serializable; + +public class TreeSelectModel implements Serializable { + + + private static final long serialVersionUID = 9016390975325574747L; + + private String key; + + private String title; + + private boolean isLeaf; + + private String icon; + + private String parentId; + + private String value; + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public String getParentId() { + return parentId; + } + + public void setParentId(String parentId) { + this.parentId = parentId; + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public boolean isLeaf() { + return isLeaf; + } + + public void setLeaf(boolean isLeaf) { + this.isLeaf = isLeaf; + } + + public String getIcon() { + return icon; + } + + public void setIcon(String icon) { + this.icon = icon; + } + + + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/service/ISysAnnouncementService.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/service/ISysAnnouncementService.java new file mode 100644 index 00000000..55c2b4a5 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/service/ISysAnnouncementService.java @@ -0,0 +1,14 @@ +package org.jeecg.modules.system.service; + +import org.jeecg.modules.system.entity.SysAnnouncement; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * @Description: 系统通告表 + * @author: jeecg-boot + * @date: 2019-01-02 + * @version: V1.0 + */ +public interface ISysAnnouncementService extends IService { + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/service/ISysDepartService.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/service/ISysDepartService.java new file mode 100644 index 00000000..6f65ba6e --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/service/ISysDepartService.java @@ -0,0 +1,52 @@ +package org.jeecg.modules.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.system.entity.SysDepart; +import org.jeecg.modules.system.model.SysDepartTreeModel; +import java.util.List; + +/** + *

    + * 部门表 服务实现类 + *

    + * + * @author:Steve + * @Since: 2019-01-22 + */ +public interface ISysDepartService extends IService{ + + + /** + * 查询所有部门信息,并分节点进行显示 + * @return + */ + List queryTreeList(); + + /** + * 保存部门数据 + * @param sysDepart + */ + void saveDepartData(SysDepart sysDepart,String username); + + /** + * 更新depart数据 + * @param sysDepart + * @return + */ + Boolean updateDepartDataById(SysDepart sysDepart,String username); + + /** + * 删除depart数据 + * @param id + * @return + */ + /* boolean removeDepartDataById(String id); */ + + /** + * 根据关键字搜索相关的部门数据 + * @param keyWord + * @return + */ + List searhBy(String keyWord); + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/service/ISysDictItemService.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/service/ISysDictItemService.java new file mode 100644 index 00000000..f99e8eab --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/service/ISysDictItemService.java @@ -0,0 +1,16 @@ +package org.jeecg.modules.system.service; + +import org.jeecg.modules.system.entity.SysDictItem; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

    + * 服务类 + *

    + * + * @author zhangweijian + * @since 2018-12-28 + */ +public interface ISysDictItemService extends IService { + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/service/ISysDictService.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/service/ISysDictService.java new file mode 100644 index 00000000..2a06196b --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/service/ISysDictService.java @@ -0,0 +1,20 @@ +package org.jeecg.modules.system.service; + +import java.util.List; +import java.util.Map; +import org.jeecg.modules.system.entity.SysDict; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

    + * 字典表 服务类 + *

    + * + * @author zhangweijian + * @since 2018-12-28 + */ +public interface ISysDictService extends IService { + public List> queryDictItemsByCode(String code); + + public String queryDictTextByKey(String code,String key); +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/service/ISysLogService.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/service/ISysLogService.java new file mode 100644 index 00000000..66d29271 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/service/ISysLogService.java @@ -0,0 +1,43 @@ +package org.jeecg.modules.system.service; + +import org.jeecg.modules.system.entity.SysLog; + +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

    + * 系统日志表 服务类 + *

    + * + * @author zhangweijian + * @since 2018-12-26 + */ +public interface ISysLogService extends IService { + + /** + * @功能:清空所有日志记录 + */ + public void removeAll(); + + /** + * 获取系统总访问次数 + * + * @return Long + */ + Long findTotalVisitCount(); + + /** + * 获取系统今日访问次数 + * + * @return Long + */ + Long findTodayVisitCount(); + + /** + * 获取系统今日访问 IP数 + * + * @return Long + */ + Long findTodayIp(); + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/service/ISysPermissionService.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/service/ISysPermissionService.java new file mode 100644 index 00000000..c41f5ede --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/service/ISysPermissionService.java @@ -0,0 +1,34 @@ +package org.jeecg.modules.system.service; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import org.jeecg.common.exception.JeecgBootException; +import org.jeecg.modules.system.entity.SysPermission; +import org.jeecg.modules.system.model.TreeModel; + +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

    + * 菜单权限表 服务类 + *

    + * + * @author scott + * @since 2018-12-21 + */ +public interface ISysPermissionService extends IService { + + public List queryListByParentId(String parentId); + + /**真实删除*/ + public void deletePermission(String id) throws JeecgBootException; + /**逻辑删除*/ + public void deletePermissionLogical(String id) throws JeecgBootException; + + public void addPermission(SysPermission sysPermission) throws JeecgBootException; + + public void editPermission(SysPermission sysPermission) throws JeecgBootException; + + public List queryByUser(String username); +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/service/ISysRolePermissionService.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/service/ISysRolePermissionService.java new file mode 100644 index 00000000..69653862 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/service/ISysRolePermissionService.java @@ -0,0 +1,23 @@ +package org.jeecg.modules.system.service; + +import org.jeecg.modules.system.entity.SysRolePermission; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

    + * 角色权限表 服务类 + *

    + * + * @author scott + * @since 2018-12-21 + */ +public interface ISysRolePermissionService extends IService { + + /** + * 保存授权/先删后增 + * @param roleId + * @param permissionIds + */ + public void saveRolePermission(String roleId,String permissionIds); + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/service/ISysRoleService.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/service/ISysRoleService.java new file mode 100644 index 00000000..fd88297b --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/service/ISysRoleService.java @@ -0,0 +1,22 @@ +package org.jeecg.modules.system.service; + +import org.jeecg.modules.system.entity.SysRole; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

    + * 角色表 服务类 + *

    + * + * @author scott + * @since 2018-12-19 + */ +public interface ISysRoleService extends IService { + + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/service/ISysUserRoleService.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/service/ISysUserRoleService.java new file mode 100644 index 00000000..2d9b0f28 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/service/ISysUserRoleService.java @@ -0,0 +1,16 @@ +package org.jeecg.modules.system.service; + +import org.jeecg.modules.system.entity.SysUserRole; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

    + * 用户角色表 服务类 + *

    + * + * @author scott + * @since 2018-12-21 + */ +public interface ISysUserRoleService extends IService { + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/service/ISysUserService.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/service/ISysUserService.java new file mode 100644 index 00000000..04f4bddf --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/service/ISysUserService.java @@ -0,0 +1,40 @@ +package org.jeecg.modules.system.service; + +import java.util.List; +import org.jeecg.modules.system.entity.SysUser; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

    + * 用户表 服务类 + *

    + * + * @author scott + * @since 2018-12-20 + */ +public interface ISysUserService extends IService { + + public SysUser getUserByName(String username); + + /** + * 添加用户和用户角色关系 + * @param user + * @param roles + */ + public void addUserWithRole(SysUser user,String roles); + + + /** + * 修改用户和用户角色关系 + * @param user + * @param roles + */ + public void editUserWithRole(SysUser user,String roles); + + /** + * 获取用户的授权角色 + * @param username + * @return + */ + public List getRole(String username); +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/service/impl/SysAnnouncementServiceImpl.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/service/impl/SysAnnouncementServiceImpl.java new file mode 100644 index 00000000..fc810eed --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/service/impl/SysAnnouncementServiceImpl.java @@ -0,0 +1,19 @@ +package org.jeecg.modules.system.service.impl; + +import org.jeecg.modules.system.entity.SysAnnouncement; +import org.jeecg.modules.system.mapper.SysAnnouncementMapper; +import org.jeecg.modules.system.service.ISysAnnouncementService; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + * @Description: 系统通告表 + * @author: jeecg-boot + * @date: 2019-01-02 + * @version: V1.0 + */ +@Service +public class SysAnnouncementServiceImpl extends ServiceImpl implements ISysAnnouncementService { + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/service/impl/SysBaseAPI.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/service/impl/SysBaseAPI.java new file mode 100644 index 00000000..e3384667 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/service/impl/SysBaseAPI.java @@ -0,0 +1,48 @@ +package org.jeecg.modules.system.service.impl; + +import java.util.Date; +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import org.apache.shiro.SecurityUtils; +import org.jeecg.common.system.api.ISysBaseAPI; +import org.jeecg.common.util.IPUtils; +import org.jeecg.common.util.SpringContextUtils; +import org.jeecg.modules.system.entity.SysLog; +import org.jeecg.modules.system.entity.SysUser; +import org.jeecg.modules.system.mapper.SysLogMapper; +import org.springframework.stereotype.Service; + +@Service +public class SysBaseAPI implements ISysBaseAPI { + @Resource + private SysLogMapper sysLogMapper; + + @Override + public void addLog(String LogContent, Integer logType, Integer operatetype) { + SysLog sysLog = new SysLog(); + //注解上的描述,操作日志内容 + sysLog.setLogContent(LogContent); + sysLog.setLogType(logType); + sysLog.setOperateType(operatetype); + + //请求的方法名 + //请求的参数 + + //获取request + HttpServletRequest request = SpringContextUtils.getHttpServletRequest(); + //设置IP地址 + sysLog.setIp(IPUtils.getIpAddr(request)); + + //获取登录用户信息 + SysUser sysUser = (SysUser)SecurityUtils.getSubject().getPrincipal(); + if(sysUser!=null){ + sysLog.setUserid(sysUser.getUsername()); + sysLog.setUsername(sysUser.getRealname()); + + } + sysLog.setCreateTime(new Date()); + //保存系统日志 + sysLogMapper.insert(sysLog); + } + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/service/impl/SysDepartServiceImpl.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/service/impl/SysDepartServiceImpl.java new file mode 100644 index 00000000..705c99e8 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/service/impl/SysDepartServiceImpl.java @@ -0,0 +1,196 @@ +package org.jeecg.modules.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import io.netty.util.internal.StringUtil; +import org.jeecg.modules.system.controller.FindsDepartsChildrenUtil; +import org.jeecg.common.util.YouBianCodeUtil; +import org.jeecg.modules.system.entity.SysDepart; +import org.jeecg.modules.system.mapper.SysDepartMapper; +import org.jeecg.modules.system.model.SysDepartTreeModel; +import org.jeecg.modules.system.service.ISysDepartService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import java.util.*; + +/** + *

    + * 部门表 服务实现类 + *

    + * + * @author Steve + * @Since 2019-01-22 + */ +@Service +public class SysDepartServiceImpl extends ServiceImpl implements ISysDepartService { + + @Autowired + private ISysDepartService sysDepartService; + + // 该集合用来存储部门下的所有数据 + private List globalList = new ArrayList<>(); + + + /** + * queryTreeList 对应 queryTreeList 查询所有的部门数据,以树结构形式响应给前端 + */ + @Override + public List queryTreeList() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.eq(SysDepart::getDelFlag, 0); + query.orderByAsc(SysDepart::getDepartOrder); + List list = sysDepartService.list(query); + globalList = list; + // 调用wrapTreeDataToTreeList方法生成树状数据 + List listResult = FindsDepartsChildrenUtil.wrapTreeDataToTreeList(list); + return listResult; + } + + /** + * saveDepartData 对应 add 保存用户在页面添加的新的部门对象数据 + */ + @Override + @Transactional + public void saveDepartData(SysDepart sysDepart, String username) { + if (sysDepart != null && username != null) { + if (sysDepart.getParentId() == null) { + sysDepart.setParentId(""); + } + String s = UUID.randomUUID().toString().replace("-", ""); + sysDepart.setId(s); + // 先判断该对象有无父级ID,有则意味着不是最高级,否则意味着是最高级 + // 获取父级ID + String parentId = sysDepart.getParentId(); + String[] codeArray = generateOrgCode(parentId); + sysDepart.setOrgCode(codeArray[0]); + String orgType = codeArray[1]; + sysDepart.setOrgType(String.valueOf(orgType)); + sysDepart.setCreateTime(new Date()); + sysDepart.setDelFlag("0"); + sysDepartService.save(sysDepart); + } + + } + + /** + * saveDepartData 的调用方法,生成部门编码和部门类型 + * + * @param parentId + * @param strArray + * @param departList + * @return + */ + private String[] generateOrgCode(String parentId) { + //update-begin--Author:Steve Date:20190201 for:组织机构添加数据代码调整 + LambdaQueryWrapper query = new LambdaQueryWrapper(); + LambdaQueryWrapper query1 = new LambdaQueryWrapper(); + String[] strArray = new String[2]; + // 创建一个List集合,存储查询返回的所有SysDepart对象 + List departList = new ArrayList<>(); + // 定义新编码字符串 + String newOrgCode = ""; + // 定义旧编码字符串 + String oldOrgCode = ""; + // 定义部门类型 + String orgType = ""; + // 如果是最高级,则查询出同级的org_code, 调用工具类生成编码并返回 + if (StringUtil.isNullOrEmpty(parentId)) { + // 线判断数据库中的表是否为空,空则直接返回初始编码 + query1.eq(SysDepart::getParentId, ""); + query1.orderByDesc(SysDepart::getOrgCode); + departList = sysDepartService.list(query1); + if(departList == null || departList.size() == 0) { + strArray[0] = YouBianCodeUtil.getNextYouBianCode(null); + strArray[1] = "1"; + return strArray; + }else { + SysDepart depart = departList.get(0); + oldOrgCode = depart.getOrgCode(); + orgType = depart.getOrgType(); + newOrgCode = YouBianCodeUtil.getNextYouBianCode(oldOrgCode); + } + } else { // 反之则查询出所有同级的部门,获取结果后有两种情况,有同级和没有同级 + // 封装查询同级的条件 + query.eq(SysDepart::getParentId, parentId); + // 降序排序 + query.orderByDesc(SysDepart::getOrgCode); + // 查询出同级部门的集合 + List parentList = sysDepartService.list(query); + // 查询出父级部门 + SysDepart depart = sysDepartService.getById(parentId); + // 获取父级部门的Code + String parentCode = depart.getOrgCode(); + // 根据父级部门类型算出当前部门的类型 + orgType = String.valueOf(Integer.valueOf(depart.getOrgType()) + 1); + // 处理同级部门为null的情况 + if (parentList == null || parentList.size() == 0) { + // 直接生成当前的部门编码并返回 + newOrgCode = YouBianCodeUtil.getSubYouBianCode(parentCode, null); + } else { //处理有同级部门的情况 + // 获取同级部门的编码,利用工具类 + String subCode = parentList.get(0).getOrgCode(); + // 返回生成的当前部门编码 + newOrgCode = YouBianCodeUtil.getSubYouBianCode(parentCode, subCode); + } + } + // 返回最终封装了部门编码和部门类型的数组 + strArray[0] = newOrgCode; + strArray[1] = orgType; + return strArray; + //update-end--Author:Steve Date:20190201 for:组织机构添加数据代码调整 + } + + + /** + * removeDepartDataById 对应 delete方法 根据ID删除相关部门数据 + * + */ + /* + * @Override + * + * @Transactional public boolean removeDepartDataById(String id) { + * System.out.println("要删除的ID 为=============================>>>>>"+id); boolean + * flag = sysDepartService.removeById(id); return flag; } + */ + + /** + * updateDepartDataById 对应 edit 根据部门主键来更新对应的部门数据 + */ + @Override + @Transactional + public Boolean updateDepartDataById(SysDepart sysDepart, String username) { + if (sysDepart != null && username != null) { + sysDepart.setUpdateTime(new Date()); + sysDepart.setUpdateBy(username); + sysDepartService.updateById(sysDepart); + return true; + } else { + return false; + } + + } + + + /** + *

    + * 根据关键字搜索相关的部门数据 + *

    + */ + @Override + public List searhBy(String keyWord) { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.like(SysDepart::getDepartName, keyWord); + List departList = this.sysDepartService.list(query); + List newList = new ArrayList<>(); + if(departList.size() > 0 || sysDepartService != null) { + for(SysDepart depart : departList) { + newList.add(new SysDepartTreeModel(depart)); + } + return newList; + } + return null; + } + + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/service/impl/SysDictItemServiceImpl.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/service/impl/SysDictItemServiceImpl.java new file mode 100644 index 00000000..d656fdee --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/service/impl/SysDictItemServiceImpl.java @@ -0,0 +1,20 @@ +package org.jeecg.modules.system.service.impl; + +import org.jeecg.modules.system.entity.SysDictItem; +import org.jeecg.modules.system.mapper.SysDictItemMapper; +import org.jeecg.modules.system.service.ISysDictItemService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

    + * 服务实现类 + *

    + * + * @author zhangweijian + * @since 2018-12-28 + */ +@Service +public class SysDictItemServiceImpl extends ServiceImpl implements ISysDictItemService { + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/service/impl/SysDictServiceImpl.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/service/impl/SysDictServiceImpl.java new file mode 100644 index 00000000..c5b30743 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/service/impl/SysDictServiceImpl.java @@ -0,0 +1,37 @@ +package org.jeecg.modules.system.service.impl; + +import java.util.List; +import java.util.Map; + +import org.jeecg.modules.system.entity.SysDict; +import org.jeecg.modules.system.mapper.SysDictMapper; +import org.jeecg.modules.system.service.ISysDictService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + *

    + * 字典表 服务实现类 + *

    + * + * @author zhangweijian + * @since 2018-12-28 + */ +@Service +public class SysDictServiceImpl extends ServiceImpl implements ISysDictService { + + @Autowired + private SysDictMapper sysDictMapper; + @Override + public List> queryDictItemsByCode(String code) { + return sysDictMapper.queryDictItemsByCode(code); + } + + @Override + public String queryDictTextByKey(String code, String key) { + return sysDictMapper.queryDictTextByKey(code, key); + } + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/service/impl/SysLogServiceImpl.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/service/impl/SysLogServiceImpl.java new file mode 100644 index 00000000..a5348e39 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/service/impl/SysLogServiceImpl.java @@ -0,0 +1,49 @@ +package org.jeecg.modules.system.service.impl; + +import javax.annotation.Resource; + +import org.jeecg.modules.system.entity.SysLog; +import org.jeecg.modules.system.mapper.SysLogMapper; +import org.jeecg.modules.system.service.ISysLogService; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + *

    + * 系统日志表 服务实现类 + *

    + * + * @author zhangweijian + * @since 2018-12-26 + */ +@Service +public class SysLogServiceImpl extends ServiceImpl implements ISysLogService { + + @Resource + private SysLogMapper sysLogMapper; + + /** + * @功能:清空所有日志记录 + */ + @Override + public void removeAll() { + sysLogMapper.removeAll(); + } + + @Override + public Long findTotalVisitCount() { + return sysLogMapper.findTotalVisitCount(); + } + + @Override + public Long findTodayVisitCount() { + return sysLogMapper.findTodayVisitCount(); + } + + @Override + public Long findTodayIp() { + return sysLogMapper.findTodayIp(); + } + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/service/impl/SysPermissionServiceImpl.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/service/impl/SysPermissionServiceImpl.java new file mode 100644 index 00000000..1e5fd2d0 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/service/impl/SysPermissionServiceImpl.java @@ -0,0 +1,125 @@ +package org.jeecg.modules.system.service.impl; + +import java.util.Date; +import java.util.List; + +import javax.annotation.Resource; + +import org.jeecg.common.constant.CommonConstant; +import org.jeecg.common.exception.JeecgBootException; +import org.jeecg.common.util.oConvertUtils; +import org.jeecg.modules.system.entity.SysPermission; +import org.jeecg.modules.system.mapper.SysPermissionMapper; +import org.jeecg.modules.system.model.TreeModel; +import org.jeecg.modules.system.service.ISysPermissionService; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + *

    + * 菜单权限表 服务实现类 + *

    + * + * @author scott + * @since 2018-12-21 + */ +@Service +public class SysPermissionServiceImpl extends ServiceImpl implements ISysPermissionService { + + @Resource + private SysPermissionMapper sysPermissionMapper; + + @Override + public List queryListByParentId(String parentId) { + return sysPermissionMapper.queryListByParentId(parentId); + } + + /** + * 真实删除 + */ + @Override + public void deletePermission(String id) throws JeecgBootException { + SysPermission sysPermission = this.getById(id); + if(sysPermission==null) { + throw new JeecgBootException("未找到菜单信息"); + } + String pid = sysPermission.getParentId(); + int count = this.count(new QueryWrapper().lambda().eq(SysPermission::getParentId, pid)); + if(count==1) { + //若父节点无其他子节点,则该父节点是叶子节点 + this.update(new SysPermission().setIsLeaf(1),new UpdateWrapper().eq("id",pid)); + } + sysPermissionMapper.deleteById(id); + } + + /** + * 逻辑删除 + */ + @Override + public void deletePermissionLogical(String id) throws JeecgBootException { + SysPermission sysPermission = this.getById(id); + if(sysPermission==null) { + throw new JeecgBootException("未找到菜单信息"); + } + String pid = sysPermission.getParentId(); + int count = this.count(new QueryWrapper().lambda().eq(SysPermission::getParentId, pid)); + if(count==1) { + //若父节点无其他子节点,则该父节点是叶子节点 + this.update(new SysPermission().setIsLeaf(1),new UpdateWrapper().eq("id",pid)); + } + sysPermission.setDelFlag(1); + this.updateById(sysPermission); + } + + @Override + public void addPermission(SysPermission sysPermission) throws JeecgBootException { + //---------------------------------------------------------------------- + //判断是否是一级菜单,是的话清空父菜单 + if(CommonConstant.MENU_TYPE_0.equals(sysPermission.getMenuType())) { + sysPermission.setParentId(null); + } + //---------------------------------------------------------------------- + String pid = sysPermission.getParentId(); + if(oConvertUtils.isNotEmpty(pid)) { + //设置父节点不为叶子节点 + this.update(new SysPermission().setIsLeaf(0),new UpdateWrapper().eq("id",pid)); + } + sysPermission.setCreateTime(new Date()); + sysPermission.setDelFlag(0); + sysPermission.setIsLeaf(1); + this.save(sysPermission); + } + + @Override + public void editPermission(SysPermission sysPermission) throws JeecgBootException { + SysPermission p = this.getById(sysPermission.getId()); + //TODO 该节点判断是否还有子节点 + if(p==null) { + throw new JeecgBootException("未找到菜单信息"); + }else { + sysPermission.setUpdateTime(new Date()); + //---------------------------------------------------------------------- + //判断是否是一级菜单,是的话清空父菜单 + if(CommonConstant.MENU_TYPE_0.equals(sysPermission.getMenuType())) { + sysPermission.setParentId(""); + } + //---------------------------------------------------------------------- + this.updateById(sysPermission); + String pid = sysPermission.getParentId(); + if(oConvertUtils.isNotEmpty(pid) && !pid.equals(p.getParentId())) { + //设置父节点不为叶子节点 + this.update(new SysPermission().setIsLeaf(0),new UpdateWrapper().eq("id",pid)); + } + } + + } + + @Override + public List queryByUser(String username) { + return this.sysPermissionMapper.queryByUser(username); + } + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/service/impl/SysRolePermissionServiceImpl.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/service/impl/SysRolePermissionServiceImpl.java new file mode 100644 index 00000000..6785acf5 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/service/impl/SysRolePermissionServiceImpl.java @@ -0,0 +1,42 @@ +package org.jeecg.modules.system.service.impl; + +import java.util.ArrayList; +import java.util.List; + +import org.jeecg.common.util.oConvertUtils; +import org.jeecg.modules.system.entity.SysRolePermission; +import org.jeecg.modules.system.mapper.SysRolePermissionMapper; +import org.jeecg.modules.system.service.ISysRolePermissionService; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

    + * 角色权限表 服务实现类 + *

    + * + * @author scott + * @since 2018-12-21 + */ +@Service +public class SysRolePermissionServiceImpl extends ServiceImpl implements ISysRolePermissionService { + + @Override + public void saveRolePermission(String roleId, String permissionIds) { + LambdaQueryWrapper query = new QueryWrapper().lambda().eq(SysRolePermission::getRoleId, roleId); + this.remove(query); + List list = new ArrayList(); + String arr[] = permissionIds.split(","); + for (String p : arr) { + if(oConvertUtils.isNotEmpty(p)) { + SysRolePermission rolepms = new SysRolePermission(roleId, p); + list.add(rolepms); + } + } + this.saveBatch(list); + } + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/service/impl/SysRoleServiceImpl.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/service/impl/SysRoleServiceImpl.java new file mode 100644 index 00000000..026f9653 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/service/impl/SysRoleServiceImpl.java @@ -0,0 +1,27 @@ +package org.jeecg.modules.system.service.impl; + +import org.jeecg.modules.system.entity.SysRole; +import org.jeecg.modules.system.mapper.SysRoleMapper; +import org.jeecg.modules.system.service.ISysRoleService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + *

    + * 角色表 服务实现类 + *

    + * + * @author scott + * @since 2018-12-19 + */ +@Service +public class SysRoleServiceImpl extends ServiceImpl implements ISysRoleService { + + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/service/impl/SysUserRoleServiceImpl.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/service/impl/SysUserRoleServiceImpl.java new file mode 100644 index 00000000..04b3bda9 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/service/impl/SysUserRoleServiceImpl.java @@ -0,0 +1,20 @@ +package org.jeecg.modules.system.service.impl; + +import org.jeecg.modules.system.entity.SysUserRole; +import org.jeecg.modules.system.mapper.SysUserRoleMapper; +import org.jeecg.modules.system.service.ISysUserRoleService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

    + * 用户角色表 服务实现类 + *

    + * + * @author scott + * @since 2018-12-21 + */ +@Service +public class SysUserRoleServiceImpl extends ServiceImpl implements ISysUserRoleService { + +} diff --git a/jeecg-boot/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java b/jeecg-boot/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java new file mode 100644 index 00000000..75d67245 --- /dev/null +++ b/jeecg-boot/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java @@ -0,0 +1,73 @@ +package org.jeecg.modules.system.service.impl; + +import java.util.List; +import java.util.UUID; +import org.jeecg.common.util.oConvertUtils; +import org.jeecg.modules.system.entity.SysUser; +import org.jeecg.modules.system.entity.SysUserRole; +import org.jeecg.modules.system.mapper.SysUserMapper; +import org.jeecg.modules.system.mapper.SysUserRoleMapper; +import org.jeecg.modules.system.service.ISysUserService; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + *

    + * 用户表 服务实现类 + *

    + * + * @author scott + * @since 2018-12-20 + */ +@Service +public class SysUserServiceImpl extends ServiceImpl implements ISysUserService { + + @Autowired + private SysUserMapper userMapper; + + @Autowired + private SysUserRoleMapper sysUserRoleMapper; + + @Override + public SysUser getUserByName(String username) { + return userMapper.getUserByName(username); + } + + + @Override + public void addUserWithRole(SysUser user, String roles) { + String id =UUID.randomUUID().toString().replace("-", ""); + user.setId(id); + this.save(user); + if(oConvertUtils.isNotEmpty(roles)) { + String[] arr = roles.split(","); + for (String roleId : arr) { + SysUserRole userRole = new SysUserRole(id, roleId); + sysUserRoleMapper.insert(userRole); + } + } + } + + @Override + public void editUserWithRole(SysUser user, String roles) { + this.updateById(user); + //先删后加 + sysUserRoleMapper.delete(new QueryWrapper().lambda().eq(SysUserRole::getUserId, user.getId())); + if(oConvertUtils.isNotEmpty(roles)) { + String[] arr = roles.split(","); + for (String roleId : arr) { + SysUserRole userRole = new SysUserRole(user.getId(), roleId); + sysUserRoleMapper.insert(userRole); + } + } + } + + + @Override + public List getRole(String username) { + return sysUserRoleMapper.getRoleByUserName(username); + } + +} diff --git a/jeecg-boot/src/main/resources/application.yml b/jeecg-boot/src/main/resources/application.yml new file mode 100644 index 00000000..bc5dbb6c --- /dev/null +++ b/jeecg-boot/src/main/resources/application.yml @@ -0,0 +1,95 @@ +server: + port: 8080 + servlet: + context-path: /jeecg-boot +spring: + ## quartz定时任务,采用数据库方式 + quartz: + job-store-type: jdbc + #json 时间戳统一转换 + jackson: + date-format: yyyy-MM-dd HH:mm:ss + time-zone: GMT+8 + aop: + proxy-target-class: true + #配置freemarker + freemarker: + # 设置模板后缀名 + suffix: .ftl + # 设置文档类型 + content-type: text/html + # 设置页面编码格式 + charset: UTF-8 + # 设置页面缓存 + cache: false + # 设置ftl文件路径 + template-loader-path: + - classpath:/templates + # 设置静态文件路径,js,css等 + mvc: + static-path-pattern: /** + resource: + static-locations: classpath:/static/,classpath:/public/ + autoconfigure: + exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure + datasource: + druid: + stat-view-servlet: + loginUsername: admin + loginPassword: 123456 + dynamic: + druid: # 全局druid参数,绝大部分值和默认保持一致。(现已支持的参数如下,不清楚含义不要乱设置) + # 连接池的配置信息 + # 初始化大小,最小,最大 + initial-size: 5 + min-idle: 5 + maxActive: 20 + # 配置获取连接等待超时的时间 + maxWait: 60000 + # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 + timeBetweenEvictionRunsMillis: 60000 + # 配置一个连接在池中最小生存的时间,单位是毫秒 + minEvictableIdleTimeMillis: 300000 + validationQuery: SELECT 1 FROM DUAL + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + # 打开PSCache,并且指定每个连接上PSCache的大小 + poolPreparedStatements: true + maxPoolPreparedStatementPerConnectionSize: 20 + # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 + filters: stat,wall,slf4j + # 通过connectProperties属性来打开mergeSql功能;慢SQL记录 + connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000 + datasource: + master: + url: jdbc:mysql://127.0.0.1:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false + username: root + password: root + driver-class-name: com.mysql.jdbc.Driver + # 多数据源配置 + #multi-datasource1: + #url: jdbc:mysql://localhost:3306/jeecg-boot2?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true + #username: root + #password: root + #driver-class-name: com.mysql.jdbc.Driver + #redis 配置 + redis: + database: 0 + #host: 127.0.0.1 + host: 192.168.1.199 + lettuce: + pool: + max-active: 8 #最大连接数据库连接数,设 0 为没有限制 + max-idle: 8 #最大等待连接中的数量,设 0 为没有限制 + max-wait: -1ms #最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。 + min-idle: 0 #最小等待连接中的数量,设 0 为没有限制 + shutdown-timeout: 100ms + password: '' + port: 6379 +#mybatis plus 设置 +mybatis-plus: + mapper-locations: classpath*:org/jeecg/modules/**/xml/*Mapper.xml + +#文件上传根目录 设置 +uploadpath: D://upFiles diff --git a/jeecg-boot/src/main/resources/banner.txt b/jeecg-boot/src/main/resources/banner.txt new file mode 100644 index 00000000..5ac1b976 --- /dev/null +++ b/jeecg-boot/src/main/resources/banner.txt @@ -0,0 +1,7 @@ + (_) | | | | + _ ___ ___ ___ __ _ ______| |__ ___ ___ | |_ + | |/ _ \/ _ \/ __/ _` |______| '_ \ / _ \ / _ \| __| + | | __/ __/ (_| (_| | | |_) | (_) | (_) | |_ + | |\___|\___|\___\__, | |_.__/ \___/ \___/ \__| + _/ | __/ | + |__/ |___/ \ No newline at end of file diff --git a/jeecg-boot/src/main/resources/db/data-mysql.sql b/jeecg-boot/src/main/resources/db/data-mysql.sql new file mode 100644 index 00000000..a4ce630e --- /dev/null +++ b/jeecg-boot/src/main/resources/db/data-mysql.sql @@ -0,0 +1,8 @@ +DELETE FROM demo; + +INSERT INTO demo (id, name, age, email,sex,birthday,content) VALUES +(1, 'Jone', 18, 'test1@baomidou.com','1','2017-12-28','很好'), +(2, 'Jack', 20, 'test2@baomidou.com','2','2018-02-28','努力型'), +(3, 'Tom', 28, 'test3@baomidou.com','1','2018-11-28','吃苦'), +(4, 'Sandy', 21, 'test4@baomidou.com','1','2018-07-28','聪明'), +(5, 'Billie', 24, 'test5@baomidou.com','2','2018-12-11','出色'); diff --git a/jeecg-boot/src/main/resources/db/schema-mysql.sql b/jeecg-boot/src/main/resources/db/schema-mysql.sql new file mode 100644 index 00000000..2eea9ec9 --- /dev/null +++ b/jeecg-boot/src/main/resources/db/schema-mysql.sql @@ -0,0 +1,11 @@ +DROP TABLE IF EXISTS demo; +CREATE TABLE demo ( + id BIGINT(20) NOT NULL auto_increment COMMENT '主键ID', + name varchar(30) default NULL COMMENT '姓名', + sex varchar(2) default NULL, + age int(11) default NULL COMMENT '年龄', + birthday date default NULL COMMENT '生日', + email varchar(50) default NULL COMMENT '邮箱', + content varchar(1000) default NULL COMMENT '个人简介', + PRIMARY KEY (id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai b/jeecg-boot/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai new file mode 100644 index 00000000..31a63ac8 --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai @@ -0,0 +1,165 @@ +package ${bussiPackage}.${entityPackage}.controller; + +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import javax.servlet.http.HttpServletRequest; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.util.oConvertUtils; +import ${bussiPackage}.${entityPackage}.entity.${entityName}; +import ${bussiPackage}.${entityPackage}.service.I${entityName}Service; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; + + /** + * @Title: Controller + * @Description: ${tableVo.ftlDescription} + * @author: jeecg-boot + * @date: ${.now?string["yyyy-MM-dd"]} + * @version: V1.0 + */ +@RestController +@RequestMapping("/${entityPackage}/${entityName?uncap_first}") +@Slf4j +public class ${entityName}Controller { + @Autowired + private I${entityName}Service ${entityName?uncap_first}Service; + + /** + * 分页列表查询 + * @param ${entityName?uncap_first} + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @GetMapping(value = "/list") + public Result> queryPageList(${entityName} ${entityName?uncap_first}, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + Result> result = new Result>(); + QueryWrapper<${entityName}> queryWrapper = new QueryWrapper<${entityName}>(${entityName?uncap_first}); + Page<${entityName}> page = new Page<${entityName}>(pageNo,pageSize); + //排序逻辑 处理 + String column = req.getParameter("column"); + String order = req.getParameter("order"); + if(oConvertUtils.isNotEmpty(column) && oConvertUtils.isNotEmpty(order)) { + if("asc".equals(order)) { + queryWrapper.orderByAsc(oConvertUtils.camelToUnderline(column)); + }else { + queryWrapper.orderByDesc(oConvertUtils.camelToUnderline(column)); + } + } + IPage<${entityName}> pageList = ${entityName?uncap_first}Service.page(page, queryWrapper); + //log.debug("查询当前页:"+pageList.getCurrent()); + //log.debug("查询当前页数量:"+pageList.getSize()); + //log.debug("查询结果数量:"+pageList.getRecords().size()); + //log.debug("数据总数:"+pageList.getTotal()); + result.setSuccess(true); + result.setResult(pageList); + return result; + } + + /** + * 添加 + * @param ${entityName?uncap_first} + * @return + */ + @PostMapping(value = "/add") + public Result<${entityName}> add(@RequestBody ${entityName} ${entityName?uncap_first}) { + Result<${entityName}> result = new Result<${entityName}>(); + try { + ${entityName?uncap_first}Service.save(${entityName?uncap_first}); + result.success("添加成功!"); + } catch (Exception e) { + e.printStackTrace(); + log.info(e.getMessage()); + result.error500("操作失败"); + } + return result; + } + + /** + * 编辑 + * @param ${entityName?uncap_first} + * @return + */ + @PutMapping(value = "/edit") + public Result<${entityName}> eidt(@RequestBody ${entityName} ${entityName?uncap_first}) { + Result<${entityName}> result = new Result<${entityName}>(); + ${entityName} ${entityName?uncap_first}Entity = ${entityName?uncap_first}Service.getById(${entityName?uncap_first}.getId()); + if(${entityName?uncap_first}Entity==null) { + result.error500("未找到对应实体"); + }else { + boolean ok = ${entityName?uncap_first}Service.updateById(${entityName?uncap_first}); + //TODO 返回false说明什么? + if(ok) { + result.success("修改成功!"); + } + } + + return result; + } + + /** + * 通过id删除 + * @param id + * @return + */ + @DeleteMapping(value = "/delete") + public Result<${entityName}> delete(@RequestParam(name="id",required=true) String id) { + Result<${entityName}> result = new Result<${entityName}>(); + ${entityName} ${entityName?uncap_first} = ${entityName?uncap_first}Service.getById(id); + if(${entityName?uncap_first}==null) { + result.error500("未找到对应实体"); + }else { + boolean ok = ${entityName?uncap_first}Service.removeById(id); + if(ok) { + result.success("删除成功!"); + } + } + + return result; + } + + /** + * 批量删除 + * @param ids + * @return + */ + @DeleteMapping(value = "/deleteBatch") + public Result<${entityName}> deleteBatch(@RequestParam(name="ids",required=true) String ids) { + Result<${entityName}> result = new Result<${entityName}>(); + if(ids==null || "".equals(ids.trim())) { + result.error500("参数不识别!"); + }else { + this.${entityName?uncap_first}Service.removeByIds(Arrays.asList(ids.split(","))); + result.success("删除成功!"); + } + return result; + } + + /** + * 通过id查询 + * @param id + * @return + */ + @GetMapping(value = "/queryById") + public Result<${entityName}> queryById(@RequestParam(name="id",required=true) String id) { + Result<${entityName}> result = new Result<${entityName}>(); + ${entityName} ${entityName?uncap_first} = ${entityName?uncap_first}Service.getById(id); + if(${entityName?uncap_first}==null) { + result.error500("未找到对应实体"); + }else { + result.setResult(${entityName?uncap_first}); + result.setSuccess(true); + } + return result; + } + +} diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai b/jeecg-boot/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai new file mode 100644 index 00000000..a6174922 --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai @@ -0,0 +1,39 @@ +package ${bussiPackage}.${entityPackage}.entity; + +import java.io.Serializable; +import java.util.Date; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; + +/** + * @Description: ${tableVo.ftlDescription} + * @author: jeecg-boot + * @date: ${.now?string["yyyy-MM-dd"]} + * @version: V1.0 + */ +@Data +@TableName("${tableName}") +public class ${entityName} implements Serializable { + private static final long serialVersionUID = 1L; + + <#list originalColumns as po> + /**${po.filedComment}*/ + <#if po.fieldName == tableId> + @TableId(type = IdType.UUID) + + <#if po.fieldType =='java.util.Date'> + <#if po.fieldDbType =='date'> + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern="yyyy-MM-dd") + <#elseif po.fieldDbType =='datetime'> + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + + + private <#if po.fieldType=='java.sql.Blob'>byte[]<#else>${po.fieldType} ${po.fieldName}; + +} diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai b/jeecg-boot/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai new file mode 100644 index 00000000..34deb8b8 --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai @@ -0,0 +1,17 @@ +package ${bussiPackage}.${entityPackage}.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import ${bussiPackage}.${entityPackage}.entity.${entityName}; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: ${tableVo.ftlDescription} + * @author: jeecg-boot + * @date: ${.now?string["yyyy-MM-dd"]} + * @version: V1.0 + */ +public interface ${entityName}Mapper extends BaseMapper<${entityName}> { + +} diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/mapper/xml/${entityName}Mapper.xml b/jeecg-boot/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/mapper/xml/${entityName}Mapper.xml new file mode 100644 index 00000000..16f3d653 --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/mapper/xml/${entityName}Mapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai b/jeecg-boot/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai new file mode 100644 index 00000000..561b2cae --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai @@ -0,0 +1,14 @@ +package ${bussiPackage}.${entityPackage}.service; + +import ${bussiPackage}.${entityPackage}.entity.${entityName}; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * @Description: ${tableVo.ftlDescription} + * @author: jeecg-boot + * @date: ${.now?string["yyyy-MM-dd"]} + * @version: V1.0 + */ +public interface I${entityName}Service extends IService<${entityName}> { + +} diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai b/jeecg-boot/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai new file mode 100644 index 00000000..61443999 --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai @@ -0,0 +1,19 @@ +package ${bussiPackage}.${entityPackage}.service.impl; + +import ${bussiPackage}.${entityPackage}.entity.${entityName}; +import ${bussiPackage}.${entityPackage}.mapper.${entityName}Mapper; +import ${bussiPackage}.${entityPackage}.service.I${entityName}Service; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + * @Description: ${tableVo.ftlDescription} + * @author: jeecg-boot + * @date: ${.now?string["yyyy-MM-dd"]} + * @version: V1.0 + */ +@Service +public class ${entityName}ServiceImpl extends ServiceImpl<${entityName}Mapper, ${entityName}> implements I${entityName}Service { + +} diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei b/jeecg-boot/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei new file mode 100644 index 00000000..ab6c8e12 --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei @@ -0,0 +1,287 @@ + + + + \ No newline at end of file diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei b/jeecg-boot/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei new file mode 100644 index 00000000..20a115ad --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei @@ -0,0 +1,155 @@ + + + + + \ No newline at end of file diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai new file mode 100644 index 00000000..68899454 --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai @@ -0,0 +1,207 @@ +package org.jeecg.modules.demo.test.controller; + +import java.util.Arrays; +import java.util.List; + +import javax.servlet.http.HttpServletRequest; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.util.oConvertUtils; +import org.jeecg.modules.demo.test.entity.JeecgOrderCustomer; +import org.jeecg.modules.demo.test.entity.JeecgOrderMain; +import org.jeecg.modules.demo.test.entity.JeecgOrderTicket; +import org.jeecg.modules.demo.test.service.IJeecgOrderCustomerService; +import org.jeecg.modules.demo.test.service.IJeecgOrderMainService; +import org.jeecg.modules.demo.test.service.IJeecgOrderTicketService; +import org.jeecg.modules.demo.test.vo.JeecgOrderMainPage; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; + + /** + * @Title: Controller + * @Description: 订单 + * @author: jeecg-boot + * @date: 2019-02-15 + * @version: V1.0 + */ +@RestController +@RequestMapping("/test/jeecgOrderMain") +@Slf4j +public class JeecgOrderMainController { + @Autowired + private IJeecgOrderMainService jeecgOrderMainService; + <#if isMainTable == "true"> + @Autowired + private IJeecgOrderCustomerService jeecgOrderCustomerService; + @Autowired + private IJeecgOrderTicketService jeecgOrderTicketService; + + + /** + * 分页列表查询 + * @param jeecgOrderMain + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @GetMapping(value = "/list") + public Result> queryPageList(JeecgOrderMain jeecgOrderMain, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + Result> result = new Result>(); + QueryWrapper queryWrapper = new QueryWrapper(jeecgOrderMain); + Page page = new Page(pageNo,pageSize); + //排序逻辑 处理 + String column = req.getParameter("column"); + String order = req.getParameter("order"); + if(oConvertUtils.isNotEmpty(column) && oConvertUtils.isNotEmpty(order)) { + if("asc".equals(order)) { + queryWrapper.orderByAsc(oConvertUtils.camelToUnderline(column)); + }else { + queryWrapper.orderByDesc(oConvertUtils.camelToUnderline(column)); + } + } + IPage pageList = jeecgOrderMainService.page(page, queryWrapper); + //log.debug("查询当前页:"+pageList.getCurrent()); + //log.debug("查询当前页数量:"+pageList.getSize()); + //log.debug("查询结果数量:"+pageList.getRecords().size()); + //log.debug("数据总数:"+pageList.getTotal()); + result.setSuccess(true); + result.setResult(pageList); + return result; + } + + /** + * 添加 + * @param jeecgOrderMain + * @return + */ + @PostMapping(value = "/add") + public Result add(@RequestBody JeecgOrderMainPage jeecgOrderMainPage) { + Result result = new Result(); + try { + jeecgOrderMainService.saveMain(jeecgOrderMainPage.getJeecgOrderMain(), jeecgOrderMainPage.getJeecgOrderCustomerList(), jeecgOrderMainPage.getJeecgOrderTicketList());; + result.success("添加成功!"); + } catch (Exception e) { + e.printStackTrace(); + log.info(e.getMessage()); + result.error500("操作失败"); + } + return result; + } + + /** + * 编辑 + * @param jeecgOrderMain + * @return + */ + @PutMapping(value = "/edit") + public Result eidt(@RequestBody JeecgOrderMainPage jeecgOrderMainPage) { + Result result = new Result(); + JeecgOrderMain jeecgOrderMain = jeecgOrderMainPage.getJeecgOrderMain(); + JeecgOrderMain jeecgOrderMainEntity = jeecgOrderMainService.getById(jeecgOrderMain.getId()); + if(jeecgOrderMainEntity==null) { + result.error500("未找到对应实体"); + }else { + jeecgOrderMainService.updateMain(jeecgOrderMain, jeecgOrderMainPage.getJeecgOrderCustomerList(), jeecgOrderMainPage.getJeecgOrderTicketList()); + result.success("修改成功!"); + } + + return result; + } + + /** + * 通过id删除 + * @param id + * @return + */ + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name="id",required=true) String id) { + Result result = new Result(); + JeecgOrderMain jeecgOrderMain = jeecgOrderMainService.getById(id); + if(jeecgOrderMain==null) { + result.error500("未找到对应实体"); + }else { + jeecgOrderMainService.delMain(id); + result.success("删除成功!"); + } + + return result; + } + + /** + * 批量删除 + * @param ids + * @return + */ + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + Result result = new Result(); + if(ids==null || "".equals(ids.trim())) { + result.error500("参数不识别!"); + }else { + this.jeecgOrderMainService.removeByIds(Arrays.asList(ids.split(","))); + result.success("删除成功!"); + } + return result; + } + + /** + * 通过id查询 + * @param id + * @return + */ + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name="id",required=true) String id) { + Result result = new Result(); + JeecgOrderMain jeecgOrderMain = jeecgOrderMainService.getById(id); + if(jeecgOrderMain==null) { + result.error500("未找到对应实体"); + }else { + result.setResult(jeecgOrderMain); + result.setSuccess(true); + } + return result; + } + + /** + * 通过id查询 + * @param id + * @return + */ + @GetMapping(value = "/queryOrderCustomerListByMainId") + public Result> queryOrderCustomerListByMainId(@RequestParam(name="id",required=true) String id) { + Result> result = new Result>(); + List jeecgOrderCustomerList = jeecgOrderCustomerService.selectCustomersByMainId(id); + result.setResult(jeecgOrderCustomerList); + result.setSuccess(true); + return result; + } + + /** + * 通过id查询 + * @param id + * @return + */ + @GetMapping(value = "/queryOrderTicketListByMainId") + public Result> queryOrderTicketListByMainId(@RequestParam(name="id",required=true) String id) { + Result> result = new Result>(); + List jeecgOrderTicketList = jeecgOrderTicketService.selectTicketsByMainId(id); + result.setResult(jeecgOrderTicketList); + result.setSuccess(true); + return result; + } + +} diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai new file mode 100644 index 00000000..a6174922 --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai @@ -0,0 +1,39 @@ +package ${bussiPackage}.${entityPackage}.entity; + +import java.io.Serializable; +import java.util.Date; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; + +/** + * @Description: ${tableVo.ftlDescription} + * @author: jeecg-boot + * @date: ${.now?string["yyyy-MM-dd"]} + * @version: V1.0 + */ +@Data +@TableName("${tableName}") +public class ${entityName} implements Serializable { + private static final long serialVersionUID = 1L; + + <#list originalColumns as po> + /**${po.filedComment}*/ + <#if po.fieldName == tableId> + @TableId(type = IdType.UUID) + + <#if po.fieldType =='java.util.Date'> + <#if po.fieldDbType =='date'> + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern="yyyy-MM-dd") + <#elseif po.fieldDbType =='datetime'> + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + + + private <#if po.fieldType=='java.sql.Blob'>byte[]<#else>${po.fieldType} ${po.fieldName}; + +} diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai new file mode 100644 index 00000000..1e3fdb22 --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai @@ -0,0 +1,27 @@ +package ${bussiPackage}.${entityPackage}.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import ${bussiPackage}.${entityPackage}.entity.${entityName}; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: ${tableVo.ftlDescription} + * @author: jeecg-boot + * @date: ${.now?string["yyyy-MM-dd"]} + * @version: V1.0 + */ +public interface ${entityName}Mapper extends BaseMapper<${entityName}> { + /** + * 通过主表外键批量删除客户 + * @param mainId + * @return + */ + @Delete("DELETE FROM JEECG_ORDER_TICKET WHERE ORDER_ID = #{mainId}") + public boolean deleteTicketsByMainId(String mainId); + + + @Select("SELECT * FROM JEECG_ORDER_TICKET WHERE ORDER_ID = #{mainId}") + public List selectTicketsByMainId(String mainId); +} diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/mapper/xml/${entityName}Mapper.xml b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/mapper/xml/${entityName}Mapper.xml new file mode 100644 index 00000000..16f3d653 --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/mapper/xml/${entityName}Mapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai new file mode 100644 index 00000000..c39592fd --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai @@ -0,0 +1,41 @@ +package ${bussiPackage}.${entityPackage}.service; + +import ${bussiPackage}.${entityPackage}.entity.${entityName}; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * @Description: ${tableVo.ftlDescription} + * @author: jeecg-boot + * @date: ${.now?string["yyyy-MM-dd"]} + * @version: V1.0 + */ +public interface I${entityName}Service extends IService<${entityName}> { +<#if isSubTable == "true"> + public List selectCustomersByMainId(String mainId); + +<#if isMainTable == "true"> + /** + * 添加一对多 + * + */ + public void saveMain(JeecgOrderMain jeecgOrderMain,List jeecgOrderCustomerList,List jeecgOrderTicketList) ; + + /** + * 修改一对多 + * + */ + public void updateMain(JeecgOrderMain jeecgOrderMain,List jeecgOrderCustomerList,List jeecgOrderTicketList); + + /** + * 删除一对多 + * @param jformOrderMain + */ + public void delMain (String id); + + /** + * 批量删除一对多 + * @param jformOrderMain + */ + public void delBatchMain (Collection idList); + +} diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai new file mode 100644 index 00000000..31e1b166 --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai @@ -0,0 +1,87 @@ +package ${bussiPackage}.${entityPackage}.service.impl; + +import ${bussiPackage}.${entityPackage}.entity.${entityName}; +import ${bussiPackage}.${entityPackage}.mapper.${entityName}Mapper; +import ${bussiPackage}.${entityPackage}.service.I${entityName}Service; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + * @Description: ${tableVo.ftlDescription} + * @author: jeecg-boot + * @date: ${.now?string["yyyy-MM-dd"]} + * @version: V1.0 + */ +@Service +public class ${entityName}ServiceImpl extends ServiceImpl<${entityName}Mapper, ${entityName}> implements I${entityName}Service { +<#if isSubTable == "true"> + @Autowired + private JeecgOrderTicketMapper jeecgOrderTicketMapper; + + @Override + public List selectTicketsByMainId(String mainId) { + return jeecgOrderTicketMapper.selectTicketsByMainId(mainId); + } + +<#if isMainTable == "true"> + @Autowired + private JeecgOrderMainMapper jeecgOrderMainMapper; + @Autowired + private JeecgOrderCustomerMapper jeecgOrderCustomerMapper; + @Autowired + private JeecgOrderTicketMapper jeecgOrderTicketMapper; + + @Override + @Transactional + public void saveMain(JeecgOrderMain jeecgOrderMain, List jeecgOrderCustomerList, List jeecgOrderTicketList) { + jeecgOrderMainMapper.insert(jeecgOrderMain); + for(JeecgOrderCustomer entity:jeecgOrderCustomerList) { + entity.setOrderId(jeecgOrderMain.getId()); + jeecgOrderCustomerMapper.insert(entity); + } + for(JeecgOrderTicket entity:jeecgOrderTicketList) { + entity.setOrderId(jeecgOrderMain.getId()); + jeecgOrderTicketMapper.insert(entity); + } + } + + @Override + @Transactional + public void updateMain(JeecgOrderMain jeecgOrderMain, List jeecgOrderCustomerList, List jeecgOrderTicketList) { + jeecgOrderMainMapper.updateById(jeecgOrderMain); + + //1.先删除子表数据 + jeecgOrderTicketMapper.deleteTicketsByMainId(jeecgOrderMain.getId()); + jeecgOrderCustomerMapper.deleteCustomersByMainId(jeecgOrderMain.getId()); + + //2.子表数据重新插入 + for(JeecgOrderCustomer entity:jeecgOrderCustomerList) { + entity.setOrderId(jeecgOrderMain.getId()); + jeecgOrderCustomerMapper.insert(entity); + } + for(JeecgOrderTicket entity:jeecgOrderTicketList) { + entity.setOrderId(jeecgOrderMain.getId()); + jeecgOrderTicketMapper.insert(entity); + } + } + + @Override + @Transactional + public void delMain(String id) { + jeecgOrderMainMapper.deleteById(id); + jeecgOrderTicketMapper.deleteTicketsByMainId(id); + jeecgOrderCustomerMapper.deleteCustomersByMainId(id); + } + + @Override + @Transactional + public void delBatchMain(Collection idList) { + for(Serializable id:idList) { + jeecgOrderMainMapper.deleteById(id); + jeecgOrderTicketMapper.deleteTicketsByMainId(id.toString()); + jeecgOrderCustomerMapper.deleteCustomersByMainId(id.toString()); + } + } + +} diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei new file mode 100644 index 00000000..54a977e5 --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei @@ -0,0 +1,287 @@ + + + + \ No newline at end of file diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei new file mode 100644 index 00000000..20a115ad --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei @@ -0,0 +1,155 @@ + + + + + \ No newline at end of file diff --git a/jeecg-boot/src/main/resources/jeecg/code-template2/java/${bussiPackage}/controller/${entityPackage}/${entityName}Controller.javai b/jeecg-boot/src/main/resources/jeecg/code-template2/java/${bussiPackage}/controller/${entityPackage}/${entityName}Controller.javai new file mode 100644 index 00000000..52d215cb --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template2/java/${bussiPackage}/controller/${entityPackage}/${entityName}Controller.javai @@ -0,0 +1,165 @@ +package ${bussiPackage}.controller.${entityPackage}; + +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import javax.servlet.http.HttpServletRequest; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.util.oConvertUtils; +import ${bussiPackage}.entity.${entityPackage}.${entityName}; +import ${bussiPackage}.service.${entityPackage}.I${entityName}Service; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; + + /** + * @Title: Controller + * @Description: ${tableVo.ftlDescription} + * @author: jeecg-boot + * @date: ${.now?string["yyyy-MM-dd"]} + * @version: V1.0 + */ +@RestController +@RequestMapping("/${entityPackage}/${entityName?uncap_first}") +@Slf4j +public class ${entityName}Controller { + @Autowired + private I${entityName}Service ${entityName?uncap_first}Service; + + /** + * 分页列表查询 + * @param ${entityName?uncap_first} + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @GetMapping(value = "/list") + public Result> queryPageList(${entityName} ${entityName?uncap_first}, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + Result> result = new Result>(); + QueryWrapper<${entityName}> queryWrapper = new QueryWrapper<${entityName}>(${entityName?uncap_first}); + Page<${entityName}> page = new Page<${entityName}>(pageNo,pageSize); + //排序逻辑 处理 + String column = req.getParameter("column"); + String order = req.getParameter("order"); + if(oConvertUtils.isNotEmpty(column) && oConvertUtils.isNotEmpty(order)) { + if("asc".equals(order)) { + queryWrapper.orderByAsc(oConvertUtils.camelToUnderline(column)); + }else { + queryWrapper.orderByDesc(oConvertUtils.camelToUnderline(column)); + } + } + IPage<${entityName}> pageList = ${entityName?uncap_first}Service.page(page, queryWrapper); + //log.debug("查询当前页:"+pageList.getCurrent()); + //log.debug("查询当前页数量:"+pageList.getSize()); + //log.debug("查询结果数量:"+pageList.getRecords().size()); + //log.debug("数据总数:"+pageList.getTotal()); + result.setSuccess(true); + result.setResult(pageList); + return result; + } + + /** + * 添加 + * @param ${entityName?uncap_first} + * @return + */ + @PostMapping(value = "/add") + public Result<${entityName}> add(@RequestBody ${entityName} ${entityName?uncap_first}) { + Result<${entityName}> result = new Result<${entityName}>(); + try { + ${entityName?uncap_first}Service.save(${entityName?uncap_first}); + result.success("添加成功!"); + } catch (Exception e) { + e.printStackTrace(); + log.info(e.getMessage()); + result.error500("操作失败"); + } + return result; + } + + /** + * 编辑 + * @param ${entityName?uncap_first} + * @return + */ + @PutMapping(value = "/edit") + public Result<${entityName}> eidt(@RequestBody ${entityName} ${entityName?uncap_first}) { + Result<${entityName}> result = new Result<${entityName}>(); + ${entityName} ${entityName?uncap_first}Entity = ${entityName?uncap_first}Service.getById(${entityName?uncap_first}.getId()); + if(${entityName?uncap_first}Entity==null) { + result.error500("未找到对应实体"); + }else { + boolean ok = ${entityName?uncap_first}Service.updateById(${entityName?uncap_first}); + //TODO 返回false说明什么? + if(ok) { + result.success("修改成功!"); + } + } + + return result; + } + + /** + * 通过id删除 + * @param id + * @return + */ + @DeleteMapping(value = "/delete") + public Result<${entityName}> delete(@RequestParam(name="id",required=true) String id) { + Result<${entityName}> result = new Result<${entityName}>(); + ${entityName} ${entityName?uncap_first} = ${entityName?uncap_first}Service.getById(id); + if(${entityName?uncap_first}==null) { + result.error500("未找到对应实体"); + }else { + boolean ok = ${entityName?uncap_first}Service.removeById(id); + if(ok) { + result.success("删除成功!"); + } + } + + return result; + } + + /** + * 批量删除 + * @param ids + * @return + */ + @DeleteMapping(value = "/deleteBatch") + public Result<${entityName}> deleteBatch(@RequestParam(name="ids",required=true) String ids) { + Result<${entityName}> result = new Result<${entityName}>(); + if(ids==null || "".equals(ids.trim())) { + result.error500("参数不识别!"); + }else { + this.${entityName?uncap_first}Service.removeByIds(Arrays.asList(ids.split(","))); + result.success("删除成功!"); + } + return result; + } + + /** + * 通过id查询 + * @param id + * @return + */ + @GetMapping(value = "/queryById") + public Result<${entityName}> queryById(@RequestParam(name="id",required=true) String id) { + Result<${entityName}> result = new Result<${entityName}>(); + ${entityName} ${entityName?uncap_first} = ${entityName?uncap_first}Service.getById(id); + if(${entityName?uncap_first}==null) { + result.error500("未找到对应实体"); + }else { + result.setResult(${entityName?uncap_first}); + result.setSuccess(true); + } + return result; + } + +} diff --git a/jeecg-boot/src/main/resources/jeecg/code-template2/java/${bussiPackage}/entity/${entityPackage}/${entityName}.javai b/jeecg-boot/src/main/resources/jeecg/code-template2/java/${bussiPackage}/entity/${entityPackage}/${entityName}.javai new file mode 100644 index 00000000..1c1da2c5 --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template2/java/${bussiPackage}/entity/${entityPackage}/${entityName}.javai @@ -0,0 +1,39 @@ +package ${bussiPackage}.entity.${entityPackage}; + +import java.io.Serializable; +import java.util.Date; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; + +/** + * @Description: ${tableVo.ftlDescription} + * @author: jeecg-boot + * @date: ${.now?string["yyyy-MM-dd"]} + * @version: V1.0 + */ +@Data +@TableName("${tableName}") +public class ${entityName} implements Serializable { + private static final long serialVersionUID = 1L; + + <#list originalColumns as po> + /**${po.filedComment}*/ + <#if po.fieldName == tableId> + @TableId(type = IdType.UUID) + + <#if po.fieldType =='java.util.Date'> + <#if po.fieldDbType =='date'> + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern="yyyy-MM-dd") + <#elseif po.fieldDbType =='datetime'> + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + + + private <#if po.fieldType=='java.sql.Blob'>byte[]<#else>${po.fieldType} ${po.fieldName}; + +} diff --git a/jeecg-boot/src/main/resources/jeecg/code-template2/java/${bussiPackage}/mapper/${entityPackage}/${entityName}Mapper.javai b/jeecg-boot/src/main/resources/jeecg/code-template2/java/${bussiPackage}/mapper/${entityPackage}/${entityName}Mapper.javai new file mode 100644 index 00000000..b58c4613 --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template2/java/${bussiPackage}/mapper/${entityPackage}/${entityName}Mapper.javai @@ -0,0 +1,17 @@ +package ${bussiPackage}.mapper.${entityPackage}; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import ${bussiPackage}.entity.${entityPackage}.${entityName}; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: ${tableVo.ftlDescription} + * @author: jeecg-boot + * @date: ${.now?string["yyyy-MM-dd"]} + * @version: V1.0 + */ +public interface ${entityName}Mapper extends BaseMapper<${entityName}> { + +} diff --git a/jeecg-boot/src/main/resources/jeecg/code-template2/java/${bussiPackage}/mapper/${entityPackage}/xml/${entityName}Mapper.xml b/jeecg-boot/src/main/resources/jeecg/code-template2/java/${bussiPackage}/mapper/${entityPackage}/xml/${entityName}Mapper.xml new file mode 100644 index 00000000..fb6f7121 --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template2/java/${bussiPackage}/mapper/${entityPackage}/xml/${entityName}Mapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/jeecg-boot/src/main/resources/jeecg/code-template2/java/${bussiPackage}/service/${entityPackage}/I${entityName}Service.javai b/jeecg-boot/src/main/resources/jeecg/code-template2/java/${bussiPackage}/service/${entityPackage}/I${entityName}Service.javai new file mode 100644 index 00000000..0ff45a60 --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template2/java/${bussiPackage}/service/${entityPackage}/I${entityName}Service.javai @@ -0,0 +1,14 @@ +package ${bussiPackage}.service.${entityPackage}; + +import ${bussiPackage}.entity.${entityPackage}.${entityName}; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * @Description: ${tableVo.ftlDescription} + * @author: jeecg-boot + * @date: ${.now?string["yyyy-MM-dd"]} + * @version: V1.0 + */ +public interface I${entityName}Service extends IService<${entityName}> { + +} diff --git a/jeecg-boot/src/main/resources/jeecg/code-template2/java/${bussiPackage}/service/${entityPackage}/impl/${entityName}ServiceImpl.javai b/jeecg-boot/src/main/resources/jeecg/code-template2/java/${bussiPackage}/service/${entityPackage}/impl/${entityName}ServiceImpl.javai new file mode 100644 index 00000000..fc9d0000 --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template2/java/${bussiPackage}/service/${entityPackage}/impl/${entityName}ServiceImpl.javai @@ -0,0 +1,19 @@ +package ${bussiPackage}.service.${entityPackage}.impl; + +import ${bussiPackage}.entity.${entityPackage}.${entityName}; +import ${bussiPackage}.mapper.${entityPackage}.${entityName}Mapper; +import ${bussiPackage}.service.${entityPackage}.I${entityName}Service; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + * @Description: ${tableVo.ftlDescription} + * @author: jeecg-boot + * @date: ${.now?string["yyyy-MM-dd"]} + * @version: V1.0 + */ +@Service +public class ${entityName}ServiceImpl extends ServiceImpl<${entityName}Mapper, ${entityName}> implements I${entityName}Service { + +} diff --git a/jeecg-boot/src/main/resources/jeecg/code-template2/java/${bussiPackage}/vue/${entityPackage}/${entityName}List.vuei b/jeecg-boot/src/main/resources/jeecg/code-template2/java/${bussiPackage}/vue/${entityPackage}/${entityName}List.vuei new file mode 100644 index 00000000..ab6c8e12 --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template2/java/${bussiPackage}/vue/${entityPackage}/${entityName}List.vuei @@ -0,0 +1,287 @@ + + + + \ No newline at end of file diff --git a/jeecg-boot/src/main/resources/jeecg/code-template2/java/${bussiPackage}/vue/${entityPackage}/modules/${entityName}Modal.vuei b/jeecg-boot/src/main/resources/jeecg/code-template2/java/${bussiPackage}/vue/${entityPackage}/modules/${entityName}Modal.vuei new file mode 100644 index 00000000..dc566642 --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template2/java/${bussiPackage}/vue/${entityPackage}/modules/${entityName}Modal.vuei @@ -0,0 +1,155 @@ + + + + + \ No newline at end of file diff --git a/jeecg-boot/src/main/resources/jeecg/jeecg_config.properties b/jeecg-boot/src/main/resources/jeecg/jeecg_config.properties new file mode 100644 index 00000000..c8a8df47 --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/jeecg_config.properties @@ -0,0 +1,30 @@ +#code_generate_project_path +project_path=E:\\eclipse2018-workspace\\jeecg-boot +#bussi_package[User defined] +bussi_package=org.jeecg.modules.demo + + +#default code path +#source_root_package=src +#webroot_package=WebRoot + +#maven code path +source_root_package=src.main.java +webroot_package=src.main.webapp + +#ftl resource url +templatepath=/jeecg/code-template/one +system_encoding=utf-8 + +#db Table id [User defined] +db_table_id=id + +#db convert flag[true/false] +db_filed_convert=true + +#page Search Field num [User defined] +page_search_filed_num=1 +#page_filter_fields +page_filter_fields=create_time,create_by,update_time,update_by + + diff --git a/jeecg-boot/src/main/resources/jeecg/jeecg_database.properties b/jeecg-boot/src/main/resources/jeecg/jeecg_database.properties new file mode 100644 index 00000000..67ad5ab7 --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/jeecg_database.properties @@ -0,0 +1,27 @@ +#mysql +diver_name=com.mysql.jdbc.Driver +url=jdbc:mysql://localhost:3306/jeecg-boot?useUnicode=true&characterEncoding=UTF-8 +username=root +password=root +database_name=jeecg-boot + +#oracle +#diver_name=oracle.jdbc.driver.OracleDriver +#url=jdbc:oracle:thin:@192.168.1.200:1521:ORCL +#username=scott +#password=tiger +#database_name=ORCL + +#postgre +#diver_name=org.postgresql.Driver +#url=jdbc:postgresql://localhost:5432/jeecg +#username=postgres +#password=postgres +#database_name=jeecg + +#SQLServer2005\u4ee5\u4e0a +#diver_name=org.hibernate.dialect.SQLServerDialect +#url=jdbc:sqlserver://192.168.1.200:1433;DatabaseName=jeecg +#username=sa +#password=SA +#database_name=jeecg \ No newline at end of file diff --git a/jeecg-boot/src/main/resources/logback-spring.xml b/jeecg-boot/src/main/resources/logback-spring.xml new file mode 100644 index 00000000..f058602a --- /dev/null +++ b/jeecg-boot/src/main/resources/logback-spring.xml @@ -0,0 +1,105 @@ + + + + + + + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n + + + + + + + + ${LOG_HOME}/jeecgboot.%d{yyyy-MM-dd}.log + + 30 + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n + + + + 10MB + + + + + + + + + + + %p%d%msg%M%F{32}%L + + + ${LOG_HOME}/error-log.html + + + + + + + + ${LOG_HOME}/jeecgboot.%d{yyyy-MM-dd}.html + + 30 + + + + %p%d%msg%M%F{32}%L + + + + + 10MB + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/jeecg-boot/src/main/resources/processes/MyProcess.bpmn b/jeecg-boot/src/main/resources/processes/MyProcess.bpmn new file mode 100644 index 00000000..fbbb14df --- /dev/null +++ b/jeecg-boot/src/main/resources/processes/MyProcess.bpmn @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/jeecg-boot/src/main/resources/static/demo1.html b/jeecg-boot/src/main/resources/static/demo1.html new file mode 100644 index 00000000..f9848691 --- /dev/null +++ b/jeecg-boot/src/main/resources/static/demo1.html @@ -0,0 +1 @@ +demo1 \ No newline at end of file diff --git a/jeecg-boot/src/main/resources/static/view/userlist.html b/jeecg-boot/src/main/resources/static/view/userlist.html new file mode 100644 index 00000000..049c8225 --- /dev/null +++ b/jeecg-boot/src/main/resources/static/view/userlist.html @@ -0,0 +1,122 @@ + + + + + iview example + + + + + + +
    + +
    + + + \ No newline at end of file diff --git a/jeecg-boot/src/main/resources/templates/demo3.ftl b/jeecg-boot/src/main/resources/templates/demo3.ftl new file mode 100644 index 00000000..d75badce --- /dev/null +++ b/jeecg-boot/src/main/resources/templates/demo3.ftl @@ -0,0 +1,17 @@ + + + +Spring Boot FreeMarker + + + Freemarker HTML

    + + Sessionid: ${sessionid!}

    + + + <#list userList as item> + ${item!}
    + +
    + + \ No newline at end of file diff --git a/jeecg-boot/src/test/java/org/jeecg/ActivitiTest.java b/jeecg-boot/src/test/java/org/jeecg/ActivitiTest.java new file mode 100644 index 00000000..c521bb48 --- /dev/null +++ b/jeecg-boot/src/test/java/org/jeecg/ActivitiTest.java @@ -0,0 +1,28 @@ +package org.jeecg; + +import java.util.HashMap; +import java.util.Map; + +import org.activiti.engine.RuntimeService; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringBootTest(classes = JeecgApplication.class) +public class ActivitiTest { + + @Autowired + RuntimeService runtimeService; + + @Test + public void TestStartProcess() { + Map variables = new HashMap<>(); + variables.put("applyUserId", "admin"); + variables.put("email", "john.doe@activiti.com"); + variables.put("phoneNumber", "123456789"); + runtimeService.startProcessInstanceByKey("myProcess", variables); + } +} diff --git a/jeecg-boot/src/test/java/org/jeecg/SampleTest.java b/jeecg-boot/src/test/java/org/jeecg/SampleTest.java new file mode 100644 index 00000000..e56027d4 --- /dev/null +++ b/jeecg-boot/src/test/java/org/jeecg/SampleTest.java @@ -0,0 +1,48 @@ +package org.jeecg; + +import java.util.List; + +import javax.annotation.Resource; + +import org.jeecg.modules.demo.test.entity.JeecgDemo; +import org.jeecg.modules.demo.test.mapper.JeecgDemoMapper; +import org.jeecg.modules.demo.test.service.IJeecgDemoService; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class SampleTest { + + @Resource + private JeecgDemoMapper jeecgDemoMapper; + @Resource + private IJeecgDemoService jeecgDemoService; + + @Test + public void testSelect() { + System.out.println(("----- selectAll method test ------")); + List userList = jeecgDemoMapper.selectList(null); + Assert.assertEquals(5, userList.size()); + userList.forEach(System.out::println); + } + + @Test + public void testXmlSql() { + System.out.println(("----- selectAll method test ------")); + List userList = jeecgDemoMapper.getDemoByName("Sandy12"); + userList.forEach(System.out::println); + } + + /** + * 测试事务 + */ + @Test + public void testTran() { + jeecgDemoService.testTran(); + } + +} -- GitLab